diff --git a/1c-enterprise/daily/index.xml b/1c-enterprise/daily/index.xml
index b5b247ec652..387b200c728 100644
--- a/1c-enterprise/daily/index.xml
+++ b/1c-enterprise/daily/index.xml
@@ -1,7 +1,7 @@
GitHub 1C Enterprise Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:43Z
+ 2024-12-01T01:29:29Z
Daily Trending of 1C Enterprise in GitHub
\ No newline at end of file
diff --git a/1c-enterprise/monthly/index.xml b/1c-enterprise/monthly/index.xml
new file mode 100644
index 00000000000..1df27305d96
--- /dev/null
+++ b/1c-enterprise/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub 1C Enterprise Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:14Z
+ Monthly Trending of 1C Enterprise in GitHub
+
+
+ Pr-Mex/vanessa-automation
+ 2024-12-01T01:51:14Z
+ tag:github.com,2024-12-01:/Pr-Mex/vanessa-automation
+
+ <p>BDD в 1С</p><hr>
+
+
\ No newline at end of file
diff --git a/1c-enterprise/weekly/index.xml b/1c-enterprise/weekly/index.xml
new file mode 100644
index 00000000000..6a0151332cd
--- /dev/null
+++ b/1c-enterprise/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub 1C Enterprise Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:19Z
+ Weekly Trending of 1C Enterprise in GitHub
+
+
\ No newline at end of file
diff --git a/2-dimensional-array/daily/index.xml b/2-dimensional-array/daily/index.xml
index 7be4380aa27..ecba5eca98f 100644
--- a/2-dimensional-array/daily/index.xml
+++ b/2-dimensional-array/daily/index.xml
@@ -1,7 +1,7 @@
GitHub 2-Dimensional Array Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:42Z
+ 2024-12-01T01:29:28Z
Daily Trending of 2-Dimensional Array in GitHub
\ No newline at end of file
diff --git a/2-dimensional-array/monthly/index.xml b/2-dimensional-array/monthly/index.xml
new file mode 100644
index 00000000000..9652e043906
--- /dev/null
+++ b/2-dimensional-array/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub 2-Dimensional Array Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:14Z
+ Monthly Trending of 2-Dimensional Array in GitHub
+
+
\ No newline at end of file
diff --git a/2-dimensional-array/weekly/index.xml b/2-dimensional-array/weekly/index.xml
new file mode 100644
index 00000000000..3909da60946
--- /dev/null
+++ b/2-dimensional-array/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub 2-Dimensional Array Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:19Z
+ Weekly Trending of 2-Dimensional Array in GitHub
+
+
\ No newline at end of file
diff --git a/4d/daily/index.xml b/4d/daily/index.xml
index 7d5f93f4b9a..99f84127104 100644
--- a/4d/daily/index.xml
+++ b/4d/daily/index.xml
@@ -1,7 +1,7 @@
GitHub 4D Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:51Z
+ 2024-12-01T01:29:41Z
Daily Trending of 4D in GitHub
\ No newline at end of file
diff --git a/markdown/daily/index.xml b/4d/monthly/index.xml
similarity index 58%
rename from markdown/daily/index.xml
rename to 4d/monthly/index.xml
index 7bd1eda9dff..2eb39556e71 100644
--- a/markdown/daily/index.xml
+++ b/4d/monthly/index.xml
@@ -1,7 +1,7 @@
- GitHub Markdown Daily Trending
+ GitHub 4D Monthly Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:06Z
- Daily Trending of Markdown in GitHub
+ 2024-12-01T01:51:22Z
+ Monthly Trending of 4D in GitHub
\ No newline at end of file
diff --git a/4d/weekly/index.xml b/4d/weekly/index.xml
new file mode 100644
index 00000000000..daea6bf73a9
--- /dev/null
+++ b/4d/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub 4D Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:26Z
+ Weekly Trending of 4D in GitHub
+
+
\ No newline at end of file
diff --git a/abap-cds/daily/index.xml b/abap-cds/daily/index.xml
index 118730fad33..6f3020c5c57 100644
--- a/abap-cds/daily/index.xml
+++ b/abap-cds/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ABAP CDS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:50Z
+ 2024-12-01T01:29:41Z
Daily Trending of ABAP CDS in GitHub
\ No newline at end of file
diff --git a/abap-cds/monthly/index.xml b/abap-cds/monthly/index.xml
new file mode 100644
index 00000000000..50196741308
--- /dev/null
+++ b/abap-cds/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ABAP CDS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:21Z
+ Monthly Trending of ABAP CDS in GitHub
+
+
\ No newline at end of file
diff --git a/abap-cds/weekly/index.xml b/abap-cds/weekly/index.xml
new file mode 100644
index 00000000000..e602ffa8520
--- /dev/null
+++ b/abap-cds/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ABAP CDS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:26Z
+ Weekly Trending of ABAP CDS in GitHub
+
+
\ No newline at end of file
diff --git a/abap/daily/index.xml b/abap/daily/index.xml
index 484bdcd4a34..21a36cadbbd 100644
--- a/abap/daily/index.xml
+++ b/abap/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ABAP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:51Z
+ 2024-12-01T01:29:42Z
Daily Trending of ABAP in GitHub
\ No newline at end of file
diff --git a/abap/monthly/index.xml b/abap/monthly/index.xml
new file mode 100644
index 00000000000..5d7079bb891
--- /dev/null
+++ b/abap/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub ABAP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:21Z
+ Monthly Trending of ABAP in GitHub
+
+
+ SAP-samples/abap-platform-rap-workshops
+ 2024-12-01T01:51:21Z
+ tag:github.com,2024-12-01:/SAP-samples/abap-platform-rap-workshops
+
+ <p>This repository contains materials for workshops about the ABAP RESTful Application Programming Model (RAP).</p><hr>
+
+
\ No newline at end of file
diff --git a/abap/weekly/index.xml b/abap/weekly/index.xml
new file mode 100644
index 00000000000..402dd920101
--- /dev/null
+++ b/abap/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ABAP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:27Z
+ Weekly Trending of ABAP in GitHub
+
+
\ No newline at end of file
diff --git a/abnf/daily/index.xml b/abnf/daily/index.xml
index 0019d42b7ba..aebc7c78a12 100644
--- a/abnf/daily/index.xml
+++ b/abnf/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ABNF Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:51Z
+ 2024-12-01T01:29:41Z
Daily Trending of ABNF in GitHub
\ No newline at end of file
diff --git a/abnf/monthly/index.xml b/abnf/monthly/index.xml
new file mode 100644
index 00000000000..1f0aeacc416
--- /dev/null
+++ b/abnf/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ABNF Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:21Z
+ Monthly Trending of ABNF in GitHub
+
+
\ No newline at end of file
diff --git a/abnf/weekly/index.xml b/abnf/weekly/index.xml
new file mode 100644
index 00000000000..c7e894f3df2
--- /dev/null
+++ b/abnf/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ABNF Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:27Z
+ Weekly Trending of ABNF in GitHub
+
+
\ No newline at end of file
diff --git a/actionscript/daily/index.xml b/actionscript/daily/index.xml
index 273ec1de465..d963856e734 100644
--- a/actionscript/daily/index.xml
+++ b/actionscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ActionScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:52Z
+ 2024-12-01T01:29:43Z
Daily Trending of ActionScript in GitHub
\ No newline at end of file
diff --git a/actionscript/monthly/index.xml b/actionscript/monthly/index.xml
new file mode 100644
index 00000000000..ff2f0eaa596
--- /dev/null
+++ b/actionscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ActionScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:23Z
+ Monthly Trending of ActionScript in GitHub
+
+
\ No newline at end of file
diff --git a/actionscript/weekly/index.xml b/actionscript/weekly/index.xml
new file mode 100644
index 00000000000..adf6cc4f68e
--- /dev/null
+++ b/actionscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ActionScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:28Z
+ Weekly Trending of ActionScript in GitHub
+
+
\ No newline at end of file
diff --git a/ada/daily/index.xml b/ada/daily/index.xml
index ea8a553e297..55a3a1b298a 100644
--- a/ada/daily/index.xml
+++ b/ada/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ada Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:53Z
+ 2024-12-01T01:29:42Z
Daily Trending of Ada in GitHub
\ No newline at end of file
diff --git a/ada/monthly/index.xml b/ada/monthly/index.xml
new file mode 100644
index 00000000000..6d527a63488
--- /dev/null
+++ b/ada/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ada Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:23Z
+ Monthly Trending of Ada in GitHub
+
+
\ No newline at end of file
diff --git a/ada/weekly/index.xml b/ada/weekly/index.xml
new file mode 100644
index 00000000000..d728ff6ff8f
--- /dev/null
+++ b/ada/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ada Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:28Z
+ Weekly Trending of Ada in GitHub
+
+
\ No newline at end of file
diff --git a/adobe-font-metrics/daily/index.xml b/adobe-font-metrics/daily/index.xml
index 6ef2a406745..5141d4b3439 100644
--- a/adobe-font-metrics/daily/index.xml
+++ b/adobe-font-metrics/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Adobe Font Metrics Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:52Z
+ 2024-12-01T01:29:43Z
Daily Trending of Adobe Font Metrics in GitHub
\ No newline at end of file
diff --git a/adobe-font-metrics/monthly/index.xml b/adobe-font-metrics/monthly/index.xml
new file mode 100644
index 00000000000..08b8cf26b04
--- /dev/null
+++ b/adobe-font-metrics/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Adobe Font Metrics Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:22Z
+ Monthly Trending of Adobe Font Metrics in GitHub
+
+
\ No newline at end of file
diff --git a/adobe-font-metrics/weekly/index.xml b/adobe-font-metrics/weekly/index.xml
new file mode 100644
index 00000000000..8b046eca3c6
--- /dev/null
+++ b/adobe-font-metrics/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Adobe Font Metrics Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:28Z
+ Weekly Trending of Adobe Font Metrics in GitHub
+
+
\ No newline at end of file
diff --git a/agda/daily/index.xml b/agda/daily/index.xml
index 72b96e8fbdc..274172d0463 100644
--- a/agda/daily/index.xml
+++ b/agda/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Agda Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:54Z
+ 2024-12-01T01:29:44Z
Daily Trending of Agda in GitHub
\ No newline at end of file
diff --git a/agda/monthly/index.xml b/agda/monthly/index.xml
new file mode 100644
index 00000000000..f202d7efcb4
--- /dev/null
+++ b/agda/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Agda Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:25Z
+ Monthly Trending of Agda in GitHub
+
+
\ No newline at end of file
diff --git a/agda/weekly/index.xml b/agda/weekly/index.xml
new file mode 100644
index 00000000000..a2c8fce547a
--- /dev/null
+++ b/agda/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Agda Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:31Z
+ Weekly Trending of Agda in GitHub
+
+
\ No newline at end of file
diff --git a/ags-script/daily/index.xml b/ags-script/daily/index.xml
index 7fb65d69f2b..175a892cff5 100644
--- a/ags-script/daily/index.xml
+++ b/ags-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AGS Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:55Z
+ 2024-12-01T01:29:45Z
Daily Trending of AGS Script in GitHub
\ No newline at end of file
diff --git a/ags-script/monthly/index.xml b/ags-script/monthly/index.xml
new file mode 100644
index 00000000000..c59fab2637c
--- /dev/null
+++ b/ags-script/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AGS Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:25Z
+ Monthly Trending of AGS Script in GitHub
+
+
\ No newline at end of file
diff --git a/ags-script/weekly/index.xml b/ags-script/weekly/index.xml
new file mode 100644
index 00000000000..1606e56f2a7
--- /dev/null
+++ b/ags-script/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AGS Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:31Z
+ Weekly Trending of AGS Script in GitHub
+
+
\ No newline at end of file
diff --git a/aidl/daily/index.xml b/aidl/daily/index.xml
index d61cced310e..382c722fc8a 100644
--- a/aidl/daily/index.xml
+++ b/aidl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AIDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:54Z
+ 2024-12-01T01:29:44Z
Daily Trending of AIDL in GitHub
\ No newline at end of file
diff --git a/aidl/monthly/index.xml b/aidl/monthly/index.xml
new file mode 100644
index 00000000000..7d06693ef2a
--- /dev/null
+++ b/aidl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AIDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:24Z
+ Monthly Trending of AIDL in GitHub
+
+
\ No newline at end of file
diff --git a/aidl/weekly/index.xml b/aidl/weekly/index.xml
new file mode 100644
index 00000000000..937689d6b5d
--- /dev/null
+++ b/aidl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AIDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:31Z
+ Weekly Trending of AIDL in GitHub
+
+
\ No newline at end of file
diff --git a/al/daily/index.xml b/al/daily/index.xml
index 006208de4f5..9e16ab3ceb3 100644
--- a/al/daily/index.xml
+++ b/al/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:55Z
+ 2024-12-01T01:29:45Z
Daily Trending of AL in GitHub
\ No newline at end of file
diff --git a/al/monthly/index.xml b/al/monthly/index.xml
new file mode 100644
index 00000000000..4569586ef3d
--- /dev/null
+++ b/al/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:25Z
+ Monthly Trending of AL in GitHub
+
+
\ No newline at end of file
diff --git a/al/weekly/index.xml b/al/weekly/index.xml
new file mode 100644
index 00000000000..5c8b9f08c37
--- /dev/null
+++ b/al/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:32Z
+ Weekly Trending of AL in GitHub
+
+
\ No newline at end of file
diff --git a/all/daily/index.xml b/all/daily/index.xml
index cdcb3bb5e3e..3bf48917cf3 100644
--- a/all/daily/index.xml
+++ b/all/daily/index.xml
@@ -1,28 +1,28 @@
GitHub All Languages Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:45Z
+ 2024-12-01T01:29:31Z
Daily Trending of All Languages in GitHub
- hengyoush/kyanos
- 2024-11-30T01:28:45Z
- tag:github.com,2024-11-30:/hengyoush/kyanos
-
- <p>Visualize the time packets spend in the kernel, watch & analyze in command line.</p><hr><h1>kyanos</h1>
<p><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#"><img src="https://img.shields.io/github/last-commit/hengyoush/kyanos" alt="GitHub last commit"></a> <a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#"><img src="https://img.shields.io/github/v/release/hengyoush/kyanos" alt="GitHub release"></a> <a href="https://github.com/hengyoush/kyanos/actions/workflows/test.yml"><img src="https://github.com/hengyoush/kyanos/actions/workflows/test.yml/badge.svg?sanitize=true" alt="Test"></a> <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/kyanos-demo.gif" alt=""> <a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/README_CN.md">简体中文</a> | English</p>
<ul>
<li><a href="https://kyanos.pages.dev/">English Document</a></li>
</ul>
<h2>Table of Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-what-is-kyanos">What is kyanos</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-examples">Examples</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-requirements">Requirements</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-how-to-get-kyanos">How to get kyanos</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-documentation">Documentation</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-usage">Usage</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-feedback-and-contributions">Feedback and Contributions</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#%EF%B8%8F-contacts">Contacts</a></li>
</ul>
<h2>What is kyanos</h2>
<p>Kyanos is an <strong>eBPF-based</strong> network issue analysis tool that enables you to capture network requests, such as HTTP, Redis, and MySQL requests.<br> It also helps you analyze abnormal network issues and quickly troubleshooting without the complex steps of packet capturing, downloading, and analysis.</p>
<ol>
<li><strong>Powerful Traffic Filtering</strong>: Not only can filter based on traditional IP/port information, can also filter by process/container, L7 protocol information, request/response byte size, latency, and more.</li>
</ol>
<pre><code class="language-bash"># Filter by pid
./kyanos watch --pids 1234
# Filter by container id
./kyanos watch --container-id abc
# Filter by Redis key
./kyanos watch redis --keys my-key1,my-key2
# Filter by response byte size
./kyanos watch --resp-size 10000
</code></pre>
<ol start="2">
<li> <p><strong>Advanced Analysis Capabilities</strong> : Unlike tcpdump, which only provides fine-grained packet capture, Kyanos supports aggregating captured packet metrics across various dimensions, quickly providing the critical data most useful for troubleshooting.<br> Imagine if the bandwidth of your HTTP service is suddenly maxed out—how would you quickly analyze <code>which IPs</code> and <code>which requests</code> are causing it?<br> With Kyanos, you just need one command: <code>kyanos stat http --bigresp</code> to find the largest response byte sizes sent to remote IPs and view specific data on request and response metrics.<br> <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/whatkyanos.gif" alt="kyanos find big response"></p> </li>
<li> <p><strong>In-Depth Kernel-Level Latency Details</strong>: In real-world, slow queries to remote services like Redis can be challenging to diagnose precisely. Kyanos provides kernel trace points from the arrival of requests/responses at the network card to the kernel socket buffer, displaying these details in a visual format. This allows you to identify exactly which stage is causing delays.</p> </li>
</ol>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/timedetail.jpg" alt="kyanos time detail"></p>
<ol start="4">
<li> <p><strong>Lightweight and Dependency-Free</strong>: Almost zero dependencies—just a single binary file and one command, with all results displayed in the command line.</p> </li>
<li> <p><strong>Automatic SSL Traffic Decryption</strong> : All captured requests and responses are presented in plaintext.</p> </li>
</ol>
<h2>Examples</h2>
<p><strong>Capture HTTP Traffic with Latency Details</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash">./kyanos watch http
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-watch-http.gif" alt="kyanos quick start watch http"></p>
<p><strong>Capture Redis Traffic with Latency Details</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash">./kyanos watch redis
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-redis.gif" alt="kyanos quick start watch redis"></p>
<p><strong>Identify the Slowest Requests in the Last 5 Seconds</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash"> ./kyanos stat --slow --time 5
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-stat-slow.gif" alt="kyanos stat slow"></p>
<h2>❗ Requirements</h2>
<p>Kyanos currently supports kernel versions 3.10(from 3.10.0-957) and 4.14 or above (with plans to support versions between 4.7 and 4.14 in the future).</p>
<blockquote>
<p>You can check your kernel version using <code>uname -r</code>.</p>
</blockquote>
<h2>🎯 How to get kyanos</h2>
<p>You can download a statically linked binary compatible with x86_64 and arm64 architectures from the <a href="https://github.com/hengyoush/kyanos/releases">release page</a>:</p>
<pre><code class="language-bash">tar xvf kyanos_vx.x.x_linux_x86.tar.gz
</code></pre>
<p>Then, run:</p>
<pre><code class="language-bash">kyanos watch
</code></pre>
<p>If the following table appears: <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/quickstart-success.png" alt="kyanos quick start success"> 🎉 Congratulations! Kyanos has started successfully.</p>
<h2>📝 Documentation</h2>
<p><a href="https://kyanos.pages.dev/">English Document</a></p>
<h2>⚙ Usage</h2>
<p>The simplest usage captures all protocols currently supported by Kyanos:</p>
<pre><code class="language-bash">./kyanos watch
</code></pre>
<p>Each request-response record is stored as a row in a table, with each column capturing basic information about that request. You can use the arrow keys or <code>j/k</code> to move up and down through the records: <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/watch-result.jpg" alt="kyanos watch result"></p>
<p>Press <code>Enter</code> to access the details view:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/watch-result-detail.jpg" alt="kyanos watch result detail"></p>
<p>In the details view, the first section shows <strong>Latency Details</strong>. Each block represents a "node" that the data packet passes through, such as the process, network card, and socket buffer.<br> Each block includes a time value indicating the time elapsed from the previous node to this node, showing the process flow from the process sending the request to the network card, to the response being copied to the socket buffer, and finally read by the process, with each step’s duration displayed.</p>
<p>The second section provides <strong>Detailed Request and Response Content</strong>, split into Request and Response parts, and truncates content over 1024 bytes.</p>
<p>For targeted traffic capture, such as HTTP traffic:</p>
<pre><code class="language-bash">./kyanos watch http
</code></pre>
<p>You can narrow it further to capture traffic for a specific HTTP path:</p>
<pre><code class="language-bash">./kyanos watch http --path /abc
</code></pre>
<p>Learn more: <a href="https://kyanos.pages.dev/">Kyanos Docs</a></p>
<h2>🤝 Feedback and Contributions</h2>
<blockquote>
<p>[!IMPORTANT] If you encounter any issues or bugs while using the tool, please feel free to ask questions in the issue tracker.</p>
</blockquote>
<h2>🗨️ Contacts</h2>
<p>For more detailed inquiries, you can use the following contact methods:</p>
<ul>
<li><strong>My Email:</strong> <a href="mailto:hengyoush1@163.com">hengyoush1@163.com</a></li>
<li><strong>My Blog:</strong> <a href="http://blog.deadlock.cloud/">http://blog.deadlock.cloud</a></li>
</ul>
<p><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#top">Back to top</a></p>
+ keephq/keep
+ 2024-12-01T01:29:31Z
+ tag:github.com,2024-12-01:/keephq/keep
+
+ <p>The open-source alert management and AIOps platform</p><hr><div align="center">
<img src="https://raw.githubusercontent.com/keephq/keep/main/assets/keep.png?raw=true" width="86">
</div>
<h1 align="center">The open-source alert management and AIOps platform</h1>
<br>
<div align="center">
Single pane of glass, alert deduplication, enrichment, filtering and correlation, bi-directional integrations, workflows, dashboards.
<br>
</div>
<div align="center">
<a href="http://makeapullrequest.com"> <img alt="PRs Welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=shields"></a>
<a href="https://slack.keephq.dev"> <img src="https://img.shields.io/badge/Join-important.svg?color=4A154B&label=Slack&logo=slack&labelColor=334155&logoColor=f5f5f5" alt="Join Slack"></a>
<a href="https://github.com/keephq/keep/commits/main"> <img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/keephq/keep"></a>
<a href="https://codecov.io/gh/keephq/keep"> <img src="https://codecov.io/gh/keephq/keep/branch/main/graph/badge.svg?token=2VT6XYMRGS"> </a>
</div>
<p align="center"> <a href="https://docs.keephq.dev">Docs</a> · <a href="https://platform.keephq.dev">Try it out</a> · <a href="https://github.com/keephq/keep/issues/new?assignees=&labels=bug&template=bug_report.md&title=">Report Bug</a> · <a href="https://www.keephq.dev/meet-keep">Book a Demo</a> · <a href="https://www.keephq.dev">Website</a> </p>
<div style="width: 100%; max-width: 800px; margin: 0 auto;">
<img src="https://raw.githubusercontent.com/keephq/keep/main/assets/sneaknew.png?raw=true" style="width: 100%; height: auto; object-fit: contain;" alt="Sneak preview screenshot">
</div>
<h1 align="center"></h1>
<ul>
<li>🔍 <strong>Single pane of glass</strong> - Best-in-class customizable UI for all your alerts and incidents</li>
<li>🛠️ <strong>Swiss Army Knife for alerts</strong> - Deduplication, correlation, filtering and enrichment</li>
<li>🔄 <strong>Deep integrations</strong> - Bi-directional syncs with monitoring tools, customizable workflows</li>
<li>⚡ <strong><a href="https://raw.githubusercontent.com/keephq/keep/main/#workflows">Automation</a></strong> - GitHub Actions for your monitoring tools</li>
<li>🤖 <strong>AIOps 2.0</strong> - AI-powered correlation and summarization</li>
</ul>
<br>
<blockquote>
<p>See full <a href="https://docs.keephq.dev">platform documentation</a>.</p>
</blockquote>
<br>
<h2>Supported Integrations</h2>
<blockquote>
<p>View the full list in our <a href="https://docs.keephq.dev/providers/documentation">documentation</a></p>
</blockquote>
<blockquote>
<p>Missing a provider? <a href="https://github.com/keephq/keep/issues/new?assignees=&labels=provider&projects=&template=new_provider_request.md&title=">Submit a new provider request</a> and we'll add it quickly!</p>
</blockquote>
<h3>Observability Tools</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/appdynamics-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/appdynamics-icon.png" alt="AppDynamics"><br> AppDynamics </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/axiom-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/axiom-icon.png" alt="Axiom"><br> Axiom </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/azuremonitoring-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/azuremonitoring-icon.png" alt="Azure Monitoring"><br> Azure Monitoring </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/centreon-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/centreon-icon.png" alt="Centreon"><br> Centreon </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/checkmk-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/checkmk-icon.png" alt="Checkmk"><br> Checkmk </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/cilium-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/cilium-icon.png" alt="Cilium"><br> Cilium </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/cloudwatch-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/cloudwatch-icon.png" alt="CloudWatch"><br> CloudWatch </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/coralogix-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/coralogix-icon.png" alt="Coralogix"><br> Coralogix </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/datadog-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/datadog-icon.png" alt="Datadog"><br> Datadog </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/dynatrace-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/dynatrace-icon.png" alt="Dynatrace"><br> Dynatrace </a> </td>
<td align="center"> <a href="https://docs.keephq.dev/providers/documentation/elastic-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/elastic-icon.png" alt="Elastic"><br> Elastic </a> </td>
<td align="center"> <a href="https://docs.keephq.dev/providers/documentation/gcpmonitoring-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/gcpmonitoring-icon.png" alt="GCP Monitoring"><br> GCP Monitoring </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/grafana-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/grafana-icon.png" alt="Grafana"><br> Grafana </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/graylog-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/graylog-icon.png" alt="Graylog"><br> Graylog </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/kibana-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/kibana-icon.png" alt="Kibana"><br> Kibana </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/netdata-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/netdata-icon.png" alt="Netdata"><br> Netdata </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/new-relic-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/newrelic-icon.png" alt="New Relic"><br> New Relic </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/openobserve-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/openobserve-icon.png" alt="OpenObserve"><br> OpenObserve </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/parseable-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/parseable-icon.png" alt="Parseable"><br> Parseable </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/pingdom-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/pingdom-icon.png" alt="Pingdom"><br> Pingdom </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/prometheus-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/prometheus-icon.png" alt="Prometheus"><br> Prometheus </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/rollbar-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/rollbar-icon.png" alt="Rollbar"><br> Rollbar </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/sentry-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/sentry-icon.png" alt="Sentry"><br> Sentry </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/signalfx-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/signalfx-icon.png" alt="SignalFX"><br> SignalFX </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/site24x7-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/site24x7-icon.png" alt="Site24x7"><br> Site24x7 </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/splunk-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/splunk-icon.png" alt="Splunk"><br> Splunk </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/statuscake-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/statuscake-icon.png" alt="StatusCake"><br> StatusCake </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/sumologic-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/sumologic-icon.png" alt="SumoLogic"><br> SumoLogic </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/uptimekuma-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/uptimekuma-icon.png" alt="UptimeKuma"><br> UptimeKuma </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/victoriametrics-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/victoriametrics-icon.png" alt="VictoriaMetrics"><br> VictoriaMetrics </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/zabbix-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/zabbix-icon.png" alt="Zabbix"><br> Zabbix </a> </td>
</tr>
</tbody>
</table>
<h3>Databases & Data Warehouses</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/bigquery-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/bigquery-icon.png" alt="BigQuery"><br> BigQuery </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/clickhouse-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/clickhouse-icon.png" alt="ClickHouse"><br> ClickHouse </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/mongodb-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/mongodb-icon.png" alt="MongoDB"><br> MongoDB </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/mysql-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/mysql-icon.png" alt="MySQL"><br> MySQL </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/postgres-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/postgres-icon.png" alt="PostgreSQL"><br> PostgreSQL </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/snowflake-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/snowflake-icon.png" alt="Snowflake"><br> Snowflake </a> </td>
</tr>
</tbody>
</table>
<h3>Communication Platforms</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/discord" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/discord-icon.png" alt="Discord"><br> Discord </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/google_chat-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/google_chat-icon.png" alt="Google Chat"><br> Google Chat </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/mailchimp-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/mailchimp-icon.png" alt="Mailchimp"><br> Mailchimp </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/mailgun-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/mailgun-icon.png" alt="Mailgun"><br> Mailgun </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/mattermost-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/mattermost-icon.png" alt="Mattermost"><br> Mattermost </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/ntfy-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/ntfy-icon.png" alt="Ntfy.sh"><br> Ntfy.sh </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/pushover-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/pushover-icon.png" alt="Pushover"><br> Pushover </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/resend-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/resend-icon.png" alt="Resend"><br> Resend </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/sendgrid-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/sendgrid-icon.png" alt="SendGrid"><br> SendGrid </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/slack-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/slack-icon.png" alt="Slack"><br> Slack </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/smtp-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/smtp-icon.png" alt="SMTP"><br> SMTP </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/teams-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/teams-icon.png" alt="Teams"><br> Teams </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/telegram-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/telegram-icon.png" alt="Telegram"><br> Telegram </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/twilio-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/twilio-icon.png" alt="Twilio"><br> Twilio </a> </td>
</tr>
</tbody>
</table>
<h3>Incident Management</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/grafana_incident-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/grafana_incident-icon.png" alt="Grafana Incident"><br> Grafana Incident </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/grafana_oncall-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/grafana_oncall-icon.png" alt="Grafana OnCall"><br> Grafana OnCall </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/ilert-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/ilert-icon.png" alt="Ilert"><br> Ilert </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/incidentio-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/incidentio-icon.png" alt="Incident.io"><br> Incident.io </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/incidentmanager-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/incidentmanager-icon.png" alt="AWS Incident Manager"><br> AWS Incident Manager </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/opsgenie-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/opsgenie-icon.png" alt="OpsGenie"><br> OpsGenie </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/pagerduty-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/pagerduty-icon.png" alt="PagerDuty"><br> PagerDuty </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/pagertree-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/pagertree-icon.png" alt="Pagertree"><br> Pagertree </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/signl4-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/signl4-icon.png" alt="SINGL4"><br> SINGL4 </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/squadcast-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/squadcast-icon.png" alt="Squadcast"><br> Squadcast </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/zenduty-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/zenduty-icon.png" alt="Zenduty"><br> Zenduty </a> </td>
</tr>
</tbody>
</table>
<h3>Ticketing Tools</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/github-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/github-icon.png" alt="GitHub"><br> GitHub </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/gitlab-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/gitlab-icon.png" alt="GitLab"><br> GitLab </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/jira-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/jira-icon.png" alt="Jira"><br> Jira </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/linear_provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/linear-icon.png" alt="Linear"><br> Linear </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/linearb-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/linearb-icon.png" alt="LinearB"><br> LinearB </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/microsoft-planner-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/microsoft-planner-icon.svg?sanitize=true" alt="Microsoft Planner"><br> Microsoft Planner </a> </td>
</tr>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/redmine-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/redmine-icon.png" alt="Redmine"><br> Redmine </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/service-now-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/servicenow-icon.png" alt="ServiceNow"><br> ServiceNow </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/trello-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/trello-icon.png" alt="Trello"><br> Trello </a> </td>
</tr>
</tbody>
</table>
<h3>Container Orchecstration Platforms</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/aks-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/aks-icon.png" alt="Azure AKS"><br> Azure AKS </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/gke-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/gke-icon.png" alt="GKE"><br> GKE </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/kubernetes-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/kubernetes-icon.png" alt="Kubernetes"><br> Kubernetes </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/openshift-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/openshift-icon.png" alt="OpenShift"><br> OpenShift </a> </td>
</tr>
</tbody>
</table>
<h3>Data Enrichment</h3>
<table>
<tbody>
<tr>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/bash-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/bash-icon.png" alt="Bash"><br> Bash </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/openai-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/openai-icon.png" alt="OpenAI"><br> OpenAI </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/python-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/python-icon.png" alt="Python"><br> Python </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/quickchart-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/quickchart-icon.png" alt="QuickChart"><br> QuickChart </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/ssh-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/ssh-icon.png" alt="SSH"><br> SSH </a> </td>
<td align="center" width="150"> <a href="https://docs.keephq.dev/providers/documentation/webhook-provider" target="_blank"> <img width="40" src="https://raw.githubusercontent.com/keephq/keep/main/keep-ui/public/icons/webhook-icon.png" alt="Webhook"><br> Webhook </a> </td>
</tr>
</tbody>
</table>
<h2>Workflows</h2>
<p>Keep is GitHub Actions for your monitoring tools.</p>
<p>A Keep Workflow is a declarative YAML file that automates your alert and incident management. Each workflow consists of:</p>
<ul>
<li><strong>Triggers</strong> - What starts the workflow (alerts, incidents, schedule or manual)</li>
<li><strong>Steps</strong> - Read or fetch data (enrichment, context)</li>
<li><strong>Actions</strong> - Execute operations (update tickets, send notifications, restart servers)</li>
</ul>
<p>Here's a simple workflow that creates a Jira ticket for every <code>critical</code> alert from <code>sentry</code> for <code>payments</code> and <code>api</code> services.</p>
<p>For more workflows, see <a href="https://github.com/keephq/keep/tree/main/examples/workflows">here</a>.</p>
<pre><code class="language-yaml">workflow:
id: sentry-alerts
description: create ticket alerts for critical alerts from sentry
triggers:
- type: alert
# customize the filter to run only on critical alert from sentry
filters:
- key: source
value: sentry
- key: severity
value: critical
# regex to match specific services
- key: service
value: r"(payments|ftp)"
actions:
- name: send-slack-message-team-payments
# if the alert is on the payments service, slack the payments team
if: "'{{ alert.service }}' == 'payments'"
provider:
type: slack
# control which Slack configuration you want to use
config: " {{ providers.team-payments-slack }} "
# customize the alert message with context from {{ alert }} or any other {{ step }}
with:
message: |
"A new alert from Sentry: Alert: {{ alert.name }} - {{ alert.description }}
{{ alert}}"
- name: create-jira-ticket-oncall-board
# control the workflow flow with "if" and "foreach" statements
if: "'{{ alert.service }}' == 'ftp' and not '{{ alert.ticket_id }}'"
provider:
type: jira
config: " {{ providers.jira }} "
with:
board_name: "Oncall Board"
custom_fields:
customfield_10201: "Critical"
issuetype: "Task"
# customize the summary
summary: "{{ alert.name }} - {{ alert.description }} (created by Keep)"
description: |
"This ticket was created by Keep.
Please check the alert details below:
{code:json} {{ alert }} {code}"
# enrich the alerts with more context. from now on, the alert will be assigned with the ticket id, type and url
enrich_alert:
- key: ticket_type
value: jira
- key: ticket_id
value: results.issue.key
- key: ticket_url
value: results.ticket_url
</code></pre>
<h2>Enterprise Ready</h2>
<ul>
<li><strong>Developer First</strong> - Modern REST APIs, native SDKs, and comprehensive documentation for seamless integration</li>
<li><strong><a href="https://docs.keephq.dev/deployment/authentication/overview">Enterprise Security</a></strong> - Full authentication support (SSO, SAML, OIDC, LDAP) with granular access control (RBAC, ABAC) and team management</li>
<li><strong>Flexible Deployment</strong> - Deploy on-premises or in air-gapped environments with cloud-agnostic architecture</li>
<li><strong><a href="https://docs.keephq.dev/deployment/stress-testing">Production Scale</a></strong> - High availability, performance-tested infrastructure supporting horizontal scaling for enterprise workloads</li>
</ul>
<h2>Getting Started</h2>
<blockquote>
<p>Need help? Can't find your environment listed? Reach out on Slack and we'll help you quickly.</p>
</blockquote>
<p>Keep can run in various environments and configurations. The easiest way to start is with Keep's Docker Compose.</p>
<ul>
<li>Running Keep <a href="https://docs.keephq.dev/development/getting-started">locally</a>.</li>
<li>Running Keep on <a href="https://docs.keephq.dev/deployment/kubernetes/installation">Kubernetes</a>.</li>
<li>Running Keep with <a href="https://docs.keephq.dev/deployment/docker">Docker</a>.</li>
<li>Running Keep on <a href="https://docs.keephq.dev/deployment/ecs">AWS ECS</a>.</li>
<li>Running Keep on <a href="https://docs.keephq.dev/deployment/kubernetes/openshift">OpenShift</a>.</li>
</ul>
<h2>🫵 Keepers</h2>
<h3>Top Contributors</h3>
<p>A special thanks to our top contributors who help us make Keep great. You are more than awesome!</p>
<ul>
<li><a href="https://github.com/pehlicd">Furkan</a></li>
<li><a href="https://github.com/asharonbaltazar">Asharon</a></li>
</ul>
<p>Want to become a top contributor? Join our Slack and DM Tal, Shahar, or Furkan.</p>
<h3>Contributors</h3>
<p>Thank you for contributing and continuously making <b>Keep</b> better, <b>you're awesome</b> 🫶</p>
<a href="https://github.com/keephq/keep/graphs/contributors"> <img src="https://contrib.rocks/image?repo=keephq/keep"> </a>
- yamadashy/repomix
- 2024-11-30T01:28:45Z
- tag:github.com,2024-11-30:/yamadashy/repomix
-
- <p>📦 Repomix (formerly Repopack) is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, and Gemini.</p><hr><h1>📦 Repomix (formerly Repopack)</h1>
<p><a href="https://github.com/yamadashy/repomix/actions?query=workflow%3A%22ci%22"><img src="https://github.com/yamadashy/repomix/actions/workflows/ci.yml/badge.svg?sanitize=true" alt="Actions Status"></a> <a href="https://www.npmjs.com/package/repomix"><img src="https://img.shields.io/npm/v/repomix.svg?maxAge=1000" alt="npm"></a> <a href="https://www.npmjs.com/package/repomix"><img src="https://img.shields.io/npm/d18m/repomix" alt="npm"></a> <a href="https://github.com/yamadashy/repomix/raw/main/LICENSE"><img src="https://img.shields.io/npm/l/repomix.svg?maxAge=1000" alt="npm"></a> <a href="https://www.npmjs.com/package/repomix"><img src="https://img.shields.io/node/v/repomix.svg?maxAge=1000" alt="node"></a> <a href="https://codecov.io/github/yamadashy/repomix"><img src="https://codecov.io/github/yamadashy/repomix/graph/badge.svg?sanitize=true" alt="codecov"></a></p>
<p>Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file.<br> It is perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, and Gemini.</p>
<h2>📢 Important Notice: Project Renamed to Repomix</h2>
<blockquote>
<p>[!NOTE] Due to legal considerations, this project has been renamed from "Repopack" to "Repomix". Only the name is changing; Repomix all functionality and maintainer (<a href="https://github.com/yamadashy">@yamadashy</a>) remain the same. We are committed to ensuring a smooth transition for all users.</p>
</blockquote>
<h3>Migration Guide</h3>
<p>To continue using the tool, simply install the new package:</p>
<pre><code class="language-bash"># Install new package
npm install -g repomix
# Or use directly with npx
npx repomix
</code></pre>
<p>Optionally, you can also uninstall the old package:</p>
<pre><code class="language-bash">npm uninstall -g repopack
</code></pre>
<h4>Configuration Files</h4>
<p>Your existing configuration files (<code>repopack.config.json</code> and <code>.repopackignore</code>) will continue to work during the transition period.<br> <code>repomix</code> will automatically detect these files and offer to migrate them to the new format (<code>repomix.config.json</code> and <code>.repomixignore</code>).</p>
<h4>Timeline</h4>
<ul>
<li>Current: Transition period begins</li>
<li>December 1st, 2024: Ownership of the <a href="https://npmjs.com/repopack">repopack npm package</a> will be transferred to another party. The repomix package will continue to be maintained as usual</li>
</ul>
<p>We appreciate your understanding and cooperation during this transition.</p>
<h2>🌟 Features</h2>
<ul>
<li><strong>AI-Optimized</strong>: Formats your codebase in a way that's easy for AI to understand and process.</li>
<li><strong>Token Counting</strong>: Provides token counts for each file and the entire repository, useful for LLM context limits.</li>
<li><strong>Simple to Use</strong>: You need just one command to pack your entire repository.</li>
<li><strong>Customizable</strong>: Easily configure what to include or exclude.</li>
<li><strong>Git-Aware</strong>: Automatically respects your .gitignore files.</li>
<li><strong>Security-Focused</strong>: Incorporates <a href="https://github.com/secretlint/secretlint">Secretlint</a> for robust security checks to detect and prevent inclusion of sensitive information.</li>
</ul>
<h2>🚀 Quick Start</h2>
<p>You can try Repomix instantly in your project directory without installation:</p>
<pre><code class="language-bash">npx repomix
</code></pre>
<p>Or install globally for repeated use:</p>
<pre><code class="language-bash"># Install using npm
npm install -g repomix
# Alternatively using yarn
yarn global add repomix
# Alternatively using Homebrew (macOS)
brew install repomix
# Then run in any project directory
repomix
</code></pre>
<p>That's it! Repomix will generate a <code>repomix-output.txt</code> file in your current directory, containing your entire repository in an AI-friendly format.</p>
<h2>📊 Usage</h2>
<p>To pack your entire repository:</p>
<pre><code class="language-bash">repomix
</code></pre>
<p>To pack a specific directory:</p>
<pre><code class="language-bash">repomix path/to/directory
</code></pre>
<p>To pack specific files or directories using <a href="https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax">glob patterns</a>:</p>
<pre><code class="language-bash">repomix --include "src/**/*.ts,**/*.md"
</code></pre>
<p>To exclude specific files or directories:</p>
<pre><code class="language-bash">repomix --ignore "**/*.log,tmp/"
</code></pre>
<p>To pack a remote repository:</p>
<pre><code class="language-bash">repomix --remote https://github.com/yamadashy/repomix
# You can also use GitHub shorthand:
repomix --remote yamadashy/repomix
</code></pre>
<p>To initialize a new configuration file (<code>repomix.config.json</code>):</p>
<pre><code class="language-bash">repomix --init
</code></pre>
<p>Once you have generated the packed file, you can use it with Generative AI tools like Claude, ChatGPT, and Gemini.</p>
<h3>Prompt Examples</h3>
<p>Once you have generated the packed file with Repomix, you can use it with AI tools like Claude, ChatGPT, and Gemini. Here are some example prompts to get you started:</p>
<h4>Code Review and Refactoring</h4>
<p>For a comprehensive code review and refactoring suggestions:</p>
<pre><code>This file contains my entire codebase. Please review the overall structure and suggest any improvements or refactoring opportunities, focusing on maintainability and scalability.
</code></pre>
<h4>Documentation Generation</h4>
<p>To generate project documentation:</p>
<pre><code>Based on the codebase in this file, please generate a detailed README.md that includes an overview of the project, its main features, setup instructions, and usage examples.
</code></pre>
<h4>Test Case Generation</h4>
<p>For generating test cases:</p>
<pre><code>Analyze the code in this file and suggest a comprehensive set of unit tests for the main functions and classes. Include edge cases and potential error scenarios.
</code></pre>
<h4>Code Quality Assessment</h4>
<p>Evaluate code quality and adherence to best practices:</p>
<pre><code>Review the codebase for adherence to coding best practices and industry standards. Identify areas where the code could be improved in terms of readability, maintainability, and efficiency. Suggest specific changes to align the code with best practices.
</code></pre>
<h4>Library Overview</h4>
<p>Get a high-level understanding of the library</p>
<pre><code>This file contains the entire codebase of library. Please provide a comprehensive overview of the library, including its main purpose, key features, and overall architecture.
</code></pre>
<p>Feel free to modify these prompts based on your specific needs and the capabilities of the AI tool you're using.</p>
<h3>Community Discussion</h3>
<p>Check out our <a href="https://github.com/yamadashy/repomix/discussions/154">community discussion</a> where users share:</p>
<ul>
<li>Which AI tools they're using with Repomix</li>
<li>Effective prompts they've discovered</li>
<li>How Repomix has helped them</li>
<li>Tips and tricks for getting the most out of AI code analysis</li>
</ul>
<p>Feel free to join the discussion and share your own experiences! Your insights could help others make better use of Repomix.</p>
<h3>Output File Format</h3>
<p>Repomix generates a single file with clear separators between different parts of your codebase.<br> To enhance AI comprehension, the output file begins with an AI-oriented explanation, making it easier for AI models to understand the context and structure of the packed repository.</p>
<h4>Plain Text Format (default)</h4>
<pre><code class="language-text">This file is a merged representation of the entire codebase, combining all repository files into a single document.
================================================================
File Summary
================================================================
(Metadata and usage AI instructions)
================================================================
Repository Structure
================================================================
src/
cli/
cliOutput.ts
index.ts
config/
configLoader.ts
(...remaining directories)
================================================================
Repository Files
================================================================
================
File: src/index.js
================
// File contents here
================
File: src/utils.js
================
// File contents here
(...remaining files)
================================================================
Instruction
================================================================
(Custom instructions from `output.instructionFilePath`)
</code></pre>
<h4>XML Format</h4>
<p>To generate output in XML format, use the <code>--style xml</code> option:</p>
<pre><code class="language-bash">repomix --style xml
</code></pre>
<p>The XML format structures the content in a hierarchical manner:</p>
<pre><code class="language-xml">This file is a merged representation of the entire codebase, combining all repository files into a single document.
<file_summary>
(Metadata and usage AI instructions)
</file_summary>
<repository_structure>
src/
cli/
cliOutput.ts
index.ts
(...remaining directories)
</repository_structure>
<repository_files>
<file path="src/index.js">
// File contents here
</file>
(...remaining files)
</repository_files>
<instruction>
(Custom instructions from `output.instructionFilePath`)
</instruction>
</code></pre>
<p>For those interested in the potential of XML tags in AI contexts:<br> <a href="https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags">https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags</a></p>
<blockquote>
<p>When your prompts involve multiple components like context, instructions, and examples, XML tags can be a game-changer. They help Claude parse your prompts more accurately, leading to higher-quality outputs.</p>
</blockquote>
<p>This means that the XML output from Repomix is not just a different format, but potentially a more effective way to feed your codebase into AI systems for analysis, code review, or other tasks.</p>
<h4>Markdown Format</h4>
<p>To generate output in Markdown format, use the <code>--style markdown</code> option:</p>
<pre><code class="language-bash">repomix --style markdown
</code></pre>
<p>The Markdown format structures the content in a hierarchical manner:</p>
<pre><code class="language-markdown">This file is a merged representation of the entire codebase, combining all repository files into a single document.
# File Summary
(Metadata and usage AI instructions)
# Repository Structure
```
src/
cli/
cliOutput.ts
index.ts
```
(...remaining directories)
# Repository Files
## File: src/index.js
```
// File contents here
```
(...remaining files)
# Instruction
(Custom instructions from `output.instructionFilePath`)
</code></pre>
<p>This format provides a clean, readable structure that is both human-friendly and easily parseable by AI systems.</p>
<h3>Command Line Options</h3>
<ul>
<li><code>-v, --version</code>: Show tool version</li>
<li><code>-o, --output <file></code>: Specify the output file name</li>
<li><code>--include <patterns></code>: List of include patterns (comma-separated)</li>
<li><code>-i, --ignore <patterns></code>: Additional ignore patterns (comma-separated)</li>
<li><code>-c, --config <path></code>: Path to a custom config file</li>
<li><code>--style <style></code>: Specify the output style (<code>plain</code>, <code>xml</code>, <code>markdown</code>)</li>
<li><code>--top-files-len <number></code>: Number of top files to display in the summary</li>
<li><code>--output-show-line-numbers</code>: Show line numbers in the output</li>
<li><code>--copy</code>: Additionally copy generated output to system clipboard</li>
<li><code>--remote <url></code>: Process a remote Git repository</li>
<li><code>--verbose</code>: Enable verbose logging</li>
</ul>
<p>Examples:</p>
<pre><code class="language-bash">repomix -o custom-output.txt
repomix -i "*.log,tmp" -v
repomix -c ./custom-config.json
repomix --style xml
repomix --remote https://github.com/user/repo.git
npx repomix src
</code></pre>
<h3>Updating Repomix</h3>
<p>To update a globally installed Repomix:</p>
<pre><code class="language-bash"># Using npm
npm update -g repomix
# Using yarn
yarn global upgrade repomix
</code></pre>
<p>Using <code>npx repomix</code> is generally more convenient as it always uses the latest version.</p>
<h3>Remote Repository Processing</h3>
<p>Repomix supports processing remote Git repositories without the need for manual cloning. This feature allows you to quickly analyze any public Git repository with a single command.</p>
<p>To process a remote repository, use the <code>--remote</code> option followed by the repository URL:</p>
<pre><code class="language-bash">repomix --remote https://github.com/user/repo.git
</code></pre>
<p>You can also use GitHub's shorthand format:</p>
<pre><code class="language-bash">repomix --remote user/repo
</code></pre>
<h2>⚙️ Configuration</h2>
<p>Create a <code>repomix.config.json</code> file in your project root for custom configurations.</p>
<pre><code class="language-bash">repomix --init
</code></pre>
<p>Here's an explanation of the configuration options:</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>output.filePath</code></td>
<td>The name of the output file</td>
<td><code>"repomix-output.txt"</code></td>
</tr>
<tr>
<td><code>output.style</code></td>
<td>The style of the output (<code>plain</code>, <code>xml</code>, <code>markdown</code>)</td>
<td><code>"plain"</code></td>
</tr>
<tr>
<td><code>output.headerText</code></td>
<td>Custom text to include in the file header</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>output.instructionFilePath</code></td>
<td>Path to a file containing detailed custom instructions</td>
<td><code>null</code></td>
</tr>
<tr>
<td><code>output.removeComments</code></td>
<td>Whether to remove comments from supported file types</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>output.removeEmptyLines</code></td>
<td>Whether to remove empty lines from the output</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>output.showLineNumbers</code></td>
<td>Whether to add line numbers to each line in the output</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>output.copyToClipboard</code></td>
<td>Whether to copy the output to system clipboard in addition to saving the file</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>output.topFilesLength</code></td>
<td>Number of top files to display in the summary. If set to 0, no summary will be displayed</td>
<td><code>5</code></td>
</tr>
<tr>
<td><code>output.includeEmptyDirectories</code></td>
<td>Whether to include empty directories in the repository structure</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>include</code></td>
<td>Patterns of files to include (using <a href="https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax">glob patterns</a>)</td>
<td><code>[]</code></td>
</tr>
<tr>
<td><code>ignore.useGitignore</code></td>
<td>Whether to use patterns from the project's <code>.gitignore</code> file</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>ignore.useDefaultPatterns</code></td>
<td>Whether to use default ignore patterns</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>ignore.customPatterns</code></td>
<td>Additional patterns to ignore (using <a href="https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax">glob patterns</a>)</td>
<td><code>[]</code></td>
</tr>
<tr>
<td><code>security.enableSecurityCheck</code></td>
<td>Whether to perform security checks on files</td>
<td><code>true</code></td>
</tr>
</tbody>
</table>
<p>Example configuration:</p>
<pre><code class="language-json">{
"output": {
"filePath": "repomix-output.xml",
"style": "xml",
"headerText": "Custom header information for the packed file.",
"removeComments": false,
"removeEmptyLines": false,
"showLineNumbers": false,
"copyToClipboard": true,
"topFilesLength": 5,
"includeEmptyDirectories": false
},
"include": ["**/*"],
"ignore": {
"useGitignore": true,
"useDefaultPatterns": true,
"customPatterns": ["additional-folder", "**/*.log"]
},
"security": {
"enableSecurityCheck": true
}
}
</code></pre>
<h3>Global Configuration</h3>
<p>To create a global configuration file:</p>
<pre><code class="language-bash">repomix --init --global
</code></pre>
<p>The global configuration file will be created in:</p>
<ul>
<li>Windows: <code>%LOCALAPPDATA%\Repomix\repomix.config.json</code></li>
<li>macOS/Linux: <code>$XDG_CONFIG_HOME/repomix/repomix.config.json</code> or <code>~/.config/repomix/repomix.config.json</code></li>
</ul>
<p>Note: Local configuration (if present) takes precedence over global configuration.</p>
<h3>Include and Ignore</h3>
<h4>Include Patterns</h4>
<p>Repomix now supports specifying files to include using <a href="https://github.com/mrmlnc/fast-glob?tab=readme-ov-file#pattern-syntax">glob patterns</a>. This allows for more flexible and powerful file selection:</p>
<ul>
<li>Use <code>**/*.js</code> to include all JavaScript files in any directory</li>
<li>Use <code>src/**/*</code> to include all files within the <code>src</code> directory and its subdirectories</li>
<li>Combine multiple patterns like <code>["src/**/*.js", "**/*.md"]</code> to include JavaScript files in <code>src</code> and all Markdown files</li>
</ul>
<h4>Ignore Patterns</h4>
<p>Repomix offers multiple methods to set ignore patterns for excluding specific files or directories during the packing process:</p>
<ul>
<li><strong>.gitignore</strong>: By default, patterns listed in your project's <code>.gitignore</code> file are used. This behavior can be controlled with the <code>ignore.useGitignore</code> setting.</li>
<li><strong>Default patterns</strong>: Repomix includes a default list of commonly excluded files and directories (e.g., node_modules, .git, binary files). This feature can be controlled with the <code>ignore.useDefaultPatterns</code> setting. Please see <a href="https://raw.githubusercontent.com/yamadashy/repomix/main/src/config/defaultIgnore.ts">defaultIgnore.ts</a> for more details.</li>
<li><strong>.repomixignore</strong>: You can create a <code>.repomixignore</code> file in your project root to define Repomix-specific ignore patterns. This file follows the same format as <code>.gitignore</code>.</li>
<li><strong>Custom patterns</strong>: Additional ignore patterns can be specified using the <code>ignore.customPatterns</code> option in the configuration file. You can overwrite this setting with the <code>-i, --ignore</code> command line option.</li>
</ul>
<p>Priority Order (from highest to lowest):</p>
<ol>
<li>Custom patterns <code>ignore.customPatterns</code></li>
<li><code>.repomixignore</code></li>
<li><code>.gitignore</code> (if <code>ignore.useGitignore</code> is true)</li>
<li>Default patterns (if <code>ignore.useDefaultPatterns</code> is true)</li>
</ol>
<p>This approach allows for flexible file exclusion configuration based on your project's needs. It helps optimize the size of the generated pack file by ensuring the exclusion of security-sensitive files and large binary files, while preventing the leakage of confidential information.</p>
<p>Note: Binary files are not included in the packed output by default, but their paths are listed in the "Repository Structure" section of the output file. This provides a complete overview of the repository structure while keeping the packed file efficient and text-based.</p>
<h3>Custom Instruction</h3>
<p>The <code>output.instructionFilePath</code> option allows you to specify a separate file containing detailed instructions or context about your project. This allows AI systems to understand the specific context and requirements of your project, potentially leading to more relevant and tailored analysis or suggestions.</p>
<p>Here's an example of how you might use this feature:</p>
<ol>
<li>Create a file named <code>repomix-instruction.md</code> in your project root:</li>
</ol>
<pre><code class="language-markdown"># Coding Guidelines
- Follow the Airbnb JavaScript Style Guide
- Suggest splitting files into smaller, focused units when appropriate
- Add comments for non-obvious logic. Keep all text in English
- All new features should have corresponding unit tests
# Generate Comprehensive Output
- Include all content without abbreviation, unless specified otherwise
- Optimize for handling large codebases while maintaining output quality
</code></pre>
<ol start="2">
<li>In your <code>repomix.config.json</code>, add the <code>instructionFilePath</code> option:</li>
</ol>
<pre><code class="language-json5">{
"output": {
"instructionFilePath": "repomix-instruction.md",
// other options...
}
}
</code></pre>
<p>When Repomix generates the output, it will include the contents of <code>repomix-instruction.md</code> in a dedicated section.</p>
<p>Note: The instruction content is appended at the end of the output file. This placement can be particularly effective for AI systems. For those interested in understanding why this might be beneficial, Anthropic provides some insights in their documentation:<br> <a href="https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips">https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips</a></p>
<blockquote>
<p>Put long-form data at the top: Place your long documents and inputs (~20K+ tokens) near the top of your prompt, above your query, instructions, and examples. This can significantly improve Claude's performance across all models. Queries at the end can improve response quality by up to 30% in tests, especially with complex, multi-document inputs.</p>
</blockquote>
<h3>Comment Removal</h3>
<p>When <code>output.removeComments</code> is set to <code>true</code>, Repomix will attempt to remove comments from supported file types. This feature can help reduce the size of the output file and focus on the essential code content.</p>
<p>Supported languages include:<br> HTML, CSS, JavaScript, TypeScript, Vue, Svelte, Python, PHP, Ruby, C, C#, Java, Go, Rust, Swift, Kotlin, Dart, Shell, and YAML.</p>
<p>Note: The comment removal process is conservative to avoid accidentally removing code. In complex cases, some comments might be retained.</p>
<h2>🔍 Security Check</h2>
<p>Repomix includes a security check feature that uses <a href="https://github.com/secretlint/secretlint">Secretlint</a> to detect potentially sensitive information in your files. This feature helps you identify possible security risks before sharing your packed repository.</p>
<p>The security check results will be displayed in the CLI output after the packing process is complete. If any suspicious files are detected, you'll see a list of these files along with a warning message.</p>
<p>Example output:</p>
<pre><code>🔍 Security Check:
──────────────────
2 suspicious file(s) detected:
1. src/utils/test.txt
2. tests/utils/secretLintUtils.test.ts
Please review these files for potentially sensitive information.
</code></pre>
<p>By default, Repomix's security check feature is enabled. You can disable it by setting <code>security.enableSecurityCheck</code> to <code>false</code> in your configuration file:</p>
<pre><code class="language-json">{
"security": {
"enableSecurityCheck": false
}
}
</code></pre>
<h2>🤝 Contribution</h2>
<p>We welcome contributions from the community! To get started, please refer to our <a href="https://raw.githubusercontent.com/yamadashy/repomix/main/CONTRIBUTING.md">Contributing Guide</a>.</p>
<h3>Contributors</h3>
<a href="https://github.com/yamadashy/repomix/graphs/contributors"> <img alt="contributors" src="https://contrib.rocks/image?repo=yamadashy/repomix"> </a>
<h2>📜 License</h2>
<p>This project is licensed under the <a href="https://raw.githubusercontent.com/yamadashy/repomix/main/LICENSE">MIT License</a>.</p>
<p align="center"> <a href="https://raw.githubusercontent.com/yamadashy/repomix/main/#-repomix" target="_blank"> Back To Top </a> </p>
+ nestjs/nest
+ 2024-12-01T01:29:31Z
+ tag:github.com,2024-12-01:/nestjs/nest
+
+ <p>A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications with TypeScript/JavaScript 🚀</p><hr><p align="center"> <a href="https://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg?sanitize=true" width="120" alt="Nest Logo"></a> </p>
<p align="center">A progressive <a href="https://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
<p align="center"> <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg?sanitize=true" alt="NPM Version"></a> <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg?sanitize=true" alt="Package License"></a> <a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/dm/@nestjs/common.svg?sanitize=true" alt="NPM Downloads"></a> <a href="https://circleci.com/gh/nestjs/nest" target="_blank"><img src="https://img.shields.io/circleci/build/github/nestjs/nest/master" alt="CircleCI"></a> <a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg?sanitize=true" alt="Discord"></a> <a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg?sanitize=true" alt="Backers on Open Collective"></a> <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg?sanitize=true" alt="Sponsors on Open Collective"></a> <a href="https://paypal.me/kamilmysliwiec" target="_blank"><img src="https://img.shields.io/badge/Donate-PayPal-ff3f59.svg?sanitize=true"></a> <a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://img.shields.io/badge/Support%20us-Open%20Collective-41B883.svg?sanitize=true" alt="Support us"></a> <a href="https://twitter.com/nestframework" target="_blank"><img src="https://img.shields.io/twitter/follow/nestframework.svg?style=social&label=Follow"></a> </p>
<!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
[![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->
<h2>Description</h2>
<p>Nest is a framework for building efficient, scalable <a href="https://nodejs.org" target="_blank">Node.js</a> server-side applications. It uses modern JavaScript, is built with <a href="https://www.typescriptlang.org" target="_blank">TypeScript</a> (preserves compatibility with pure JavaScript) and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming).</p>
<p>Under the hood, Nest makes use of <a href="https://expressjs.com/" target="_blank">Express</a>, but also provides compatibility with a wide range of other libraries, like <a href="https://github.com/fastify/fastify" target="_blank">Fastify</a>, allowing for easy use of the myriad of third-party plugins which are available.</p>
<h2>Philosophy</h2>
<p>In recent years, thanks to Node.js, JavaScript has become the “lingua franca” of the web for both front and backend applications, giving rise to awesome projects like <a href="https://angular.io/" target="_blank">Angular</a>, <a href="https://github.com/facebook/react" target="_blank">React</a>, and <a href="https://github.com/vuejs/vue" target="_blank">Vue</a>, which improve developer productivity and enable the construction of fast, testable, and extensible frontend applications. However, on the server-side, while there are a lot of superb libraries, helpers, and tools for Node, none of them effectively solve the main problem - the architecture.</p>
<p>Nest aims to provide an application architecture out of the box which allows for effortless creation of highly testable, scalable, and loosely coupled and easily maintainable applications. The architecture is heavily inspired by Angular.</p>
<h2>Getting started</h2>
<ul>
<li>To check out the <a href="https://docs.nestjs.com">guide</a>, visit <a href="https://docs.nestjs.com">docs.nestjs.com</a>. <span>📚</span></li>
<li>要查看中文 <a href="https://raw.githubusercontent.com/nestjs/nest/master/readme_zh.md">指南</a>, 请访问 <a href="https://docs.nestjs.cn">docs.nestjs.cn</a>. <span>📚</span></li>
<li><a href="https://raw.githubusercontent.com/nestjs/nest/master/readme_kr.md">가이드</a> 문서는 <a href="https://docs.nestjs.com">docs.nestjs.com</a>에서 확인하실 수 있습니다. <span>📚</span></li>
<li><a href="https://raw.githubusercontent.com/nestjs/nest/master/readme_jp.md">ガイド</a>は <a href="https://docs.nestjs.com">docs.nestjs.com</a>でご確認ください。 <span>📚</span></li>
</ul>
<h2>Questions</h2>
<p>For questions and support please use the official <a href="https://discord.gg/G7Qnnhy">Discord channel</a>. The issue list of this repo is <strong>exclusively</strong> for bug reports and feature requests.</p>
<h2>Issues</h2>
<p>Please make sure to read the <a href="https://github.com/nestjs/nest/raw/master/CONTRIBUTING.md#-submitting-an-issue">Issue Reporting Checklist</a> before opening an issue. Issues not conforming to the guidelines may be closed immediately.</p>
<h2>Consulting</h2>
<p>With official support, you can get expert help straight from Nest core team. We provide dedicated technical support, migration strategies, advice on best practices (and design decisions), PR reviews, and team augmentation. Read more about <a href="https://enterprise.nestjs.com">support here</a>.</p>
<h2>Support</h2>
<p>Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support from the amazing backers. If you'd like to join them, please <a href="https://docs.nestjs.com/support">read more here</a>.</p>
<h4>Principal Sponsors</h4>
<table style="text-align:center;">
<tbody>
<tr>
<td><a href="https://trilon.io" target="_blank"><img src="https://nestjs.com/img/trilon.svg?sanitize=true" width="200" valign="middle"></a></td>
<td><a href="https://microsoft.com/" target="_blank"><img src="https://nestjs.com/img/logos/microsoft-logo.png" width="180" valign="middle"></a></td>
<td><a href="https://mojam.co" target="_blank"><img src="https://nestjs.com/img/logos/mojam-logo.png" width="80" valign="middle"></a></td>
<td><a href="https://marblism.com?utm_source=nest" target="_blank"><img src="https://nestjs.com/img/logos/marblism-logo.png" width="180" valign="middle"></a></td>
<td><a href="https://valor-software.com/" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/valor-software.png" width="170" valign="middle"></a></td>
<td><a href="https://amplication.com/" target="_blank"><img src="https://nestjs.com/img/logos/amplication-logo.svg?sanitize=true" width="190" valign="middle"></a></td>
</tr>
</tbody>
</table>
<h4>Gold Sponsors</h4>
<table style="text-align:center;">
<tbody>
<tr>
<td><a href="https://www.redhat.com" target="_blank"><img src="https://nestjs.com/img/logos/red-hat-logo.svg?sanitize=true" width="200" valign="middle"></a></td>
<td><a href="https://github.com/Sanofi-IADC" target="_blank"><img src="https://docs.nestjs.com/assets/sponsors/sanofi.png" width="180" valign="middle"></a></td>
<td><a href="https://nx.dev" target="_blank"><img src="https://nestjs.com/img/logos/nx-logo.png" height="45" valign="middle"></a></td>
<td><a href="https://intrinsic.ventures/" target="_blank"><img src="https://nestjs.com/img/logos/intrinisic-logo.png" width="210" valign="middle"></a></td>
<td><a href="https://jetbrains.com/" target="_blank"><img src="https://nestjs.com/img/logos/jetbrains-logo.svg?sanitize=true" width="90" valign="middle"></a></td>
</tr>
<tr>
<td><a href="https://snyk.co/nestjs" target="_blank"><img src="https://nestjs.com/img/logos/snyk-logo-black.png" width="185" valign="middle"></a></td>
<td><a href="https://fuseautotech.com/" target="_blank"><img src="https://nestjs.com/img/logos/fuse-logo.svg?sanitize=true" width="105" valign="middle"></a></td>
<td><a href="https://ridicorp.com/career/" target="_blank"><img src="https://nestjs.com/img/logos/ridi-logo.svg?sanitize=true" width="105" valign="middle"></a></td>
<td><a href="https://www.movavi.com/imovie-for-windows.html" target="_blank"><img src="https://nestjs.com/img/logos/movavi-logo.svg?sanitize=true" width="105" valign="middle"></a></td>
<td><a href="https://skunk.team" target="_blank"><img src="https://nestjs.com/img/logos/skunk-logo.png" height="60" valign="middle"></a></td>
</tr>
</tbody>
</table>
<h4>Silver Sponsors</h4>
<table style="text-align:center;">
<tbody>
<tr>
<td><a href="https://www.mercedes-benz.com/" target="_blank"><img src="https://nestjs.com/img/logos/mercedes-logo.png" width="100" valign="middle"></a></td>
<td><a href="https://www.dinii.jp/" target="_blank"><img src="https://nestjs.com/img/logos/dinii-logo.png" width="65" valign="middle"></a></td>
<td><a href="https://bloodycase.com/?promocode=NEST" target="_blank"><img src="https://nestjs.com/img/logos/bloodycase-logo.png" width="65" valign="middle"></a></td>
<td><a href="https://handsontable.com/docs/react-data-grid/?utm_source=NestJS_GH&utm_medium=sponsorship&utm_campaign=library_sponsorship_2024" target="_blank"><img src="https://nestjs.com/img/logos/handsontable-dark-logo.svg#2" width="150" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.itflashcards.com/" target="_blank"><img src="https://nestjs.com/img/logos/it_flashcards-logo.png" width="170" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://arcjet.com/?ref=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/arcjet-logo.svg?sanitize=true" width="170" valign="middle"></a></td>
</tr>
</tbody>
</table>
<h4>Sponsors</h4>
<table>
<tbody>
<tr>
<td align="center" valign="middle"><a href="https://www.swingdev.io" target="_blank"><img src="https://nestjs.com/img/logos/swingdev-logo.svg#1" width="110" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.novologic.com/" target="_blank"><img src="https://nestjs.com/img/logos/novologic.png" width="110" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://mantro.net/" target="_blank"><img src="https://nestjs.com/img/logos/mantro-logo.svg?sanitize=true" width="95" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://triplebyte.com/" target="_blank"><img src="https://nestjs.com/img/logos/triplebyte.png" width="107" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://nearpod.com/" target="_blank"><img src="https://nestjs.com/img/logos/nearpod-logo.svg?sanitize=true" width="100" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://genuinebee.com/" target="_blank"><img src="https://nestjs.com/img/logos/genuinebee.svg?sanitize=true" width="97" valign="middle"></a></td>
</tr>
<tr>
<td align="center" valign="middle"><a href="https://vpn-review.com/vpn-for-torrenting" target="_blank"><img src="https://nestjs.com/img/logos/vpn-review-logo.png" width="85" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://lambda-it.ch/" target="_blank"><img src="https://nestjs.com/img/logos/lambda-it-logo.svg?sanitize=true" width="115" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://rocketech.it/cases/?utm_source=google&utm_medium=badge&utm_campaign=nestjs" target="_blank"><img src="https://nestjs.com/img/logos/rocketech-logo.svg?sanitize=true" width="110" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.anonymistic.com/" target="_blank"><img src="https://nestjs.com/img/logos/anonymistic-logo.png" width="125" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.naologic.com/" target="_blank"><img src="https://nestjs.com/img/logos/naologic-logo.svg?sanitize=true" width="125" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://triplecore.io" target="_blank"><img src="https://nestjs.com/img/logos/triplecore-logo.svg?sanitize=true" width="50" valign="middle"></a></td>
</tr>
<tr>
<td align="center" valign="middle"><a href="https://thecasinowizard.com/bonuses/no-deposit-bonuses/" target="_blank"><img src="https://nestjs.com/img/logos/casinowizard-logo.png" width="120" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://polygon-software.ch/" target="_blank"><img src="https://nestjs.com/img/logos/polygon-logo.svg?sanitize=true" width="120" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://boringowl.io/" target="_blank"><img src="https://nestjs.com/img/logos/boringowl-logo.svg?sanitize=true" width="120" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://nordbot.app/" target="_blank"><img src="https://nestjs.com/img/logos/nordbot-logo.png" width="120" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://doppio.sh/" target="_blank"><img src="https://nestjs.com/img/logos/dopiosh-logo.png" width="50" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.hingehealth.com/" target="_blank"><img src="https://nestjs.com/img/logos/hinge-health-logo.svg?sanitize=true" width="100" valign="middle"></a></td>
</tr>
<tr>
<td align="center" valign="middle"><a href="https://julienferand.dev/" target="_blank"><img src="https://nestjs.com/img/logos/julienferand-logo.jpeg" width="55" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.tripoffice.com/" target="_blank"><img src="https://nestjs.com/img/logos/tripoffice-logo.png" width="140" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://solcellsforetag.se/" target="_blank"><img src="https://nestjs.com/img/logos/solcellsforetag-logo.svg?sanitize=true" width="140" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.route4me.com/" target="_blank"><img src="https://nestjs.com/img/logos/route4me-logo.svg?sanitize=true" width="100" valign="middle"></a></td>
<td align="center" valign="middle"><a href="https://www.slotsup.com/" target="_blank"><img src="https://nestjs.com/img/logos/slotsup-logo.png" width="60" valign="middle"></a></td>
</tr>
</tbody>
</table>
<h2>Backers</h2>
<p><a href="https://opencollective.com/nest" target="_blank"><img src="https://opencollective.com/nest/backers.svg?width=1000"></a></p>
<h2>Stay in touch</h2>
<ul>
<li>Author - <a href="https://x.com/kammysliwiec">Kamil Myśliwiec</a></li>
<li>Website - <a href="https://nestjs.com/">https://nestjs.com</a></li>
<li>X - <a href="https://x.com/nestframework">@nestframework</a></li>
</ul>
<h2>License</h2>
<p>Nest is <a href="https://raw.githubusercontent.com/nestjs/nest/master/LICENSE">MIT licensed</a>.</p>
- SimonCropp/Delta
- 2024-11-30T01:28:45Z
- tag:github.com,2024-11-30:/SimonCropp/Delta
-
- <p>An approach to implementing a 304 Not Modified leveraging SqlServer change tracking</p><hr><h1><img src="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/icon.png" height="30px"> Delta</h1>
<p><a href="https://ci.appveyor.com/project/SimonCropp/Delta"><img src="https://ci.appveyor.com/api/projects/status/20t96gnsmysklh09/branch/main?svg=true" alt="Build status"></a> <a href="https://www.nuget.org/packages/Delta/"><img src="https://img.shields.io/nuget/v/Delta.svg?label=Delta" alt="NuGet Status"></a> <a href="https://www.nuget.org/packages/Delta.EF/"><img src="https://img.shields.io/nuget/v/Delta.EF.svg?label=Delta.EF" alt="NuGet Status"></a></p>
<p>Delta is an approach to implementing a <a href="https://www.keycdn.com/support/304-not-modified">304 Not Modified</a> leveraging SqlServer change tracking</p>
<p>The approach uses a last updated timestamp from the database to generate an <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag">ETag</a>. All dynamic requests then have that ETag checked/applied.</p>
<p>This approach works well when the frequency of updates is relatively low. In this scenario, the majority of requests will leverage the result in a 304 Not Modified being returned and the browser loading the content its cache.</p>
<p>Effectively consumers will always receive the most current data, while the load on the server remains low.</p>
<p><strong>See <a href="https://raw.githubusercontent.com/SimonCropp/milestones?state=closed">Milestones</a> for release notes.</strong></p>
<h2>Assumptions</h2>
<ul>
<li>Frequency of updates to data is relatively low compared to reads</li>
<li>Using either <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server">SQL Server Change Tracking</a> and/or <a href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql">SQL Server Row Versioning</a></li>
</ul>
<h2>304 Not Modified Flow</h2>
<pre><code class="language-mermaid">graph TD
Request
CalculateEtag[Calculate current ETag<br/>based on timestamp<br/>from web assembly and SQL]
IfNoneMatch{Has<br/>If-None-Match<br/>header?}
EtagMatch{Current<br/>Etag matches<br/>If-None-Match?}
AddETag[Add current ETag<br/>to Response headers]
304[Respond with<br/>304 Not-Modified]
Request --> CalculateEtag
CalculateEtag --> IfNoneMatch
IfNoneMatch -->|Yes| EtagMatch
IfNoneMatch -->|No| AddETag
EtagMatch -->|No| AddETag
EtagMatch -->|Yes| 304
</code></pre>
<h2>ETag calculation logic</h2>
<p>The ETag is calculated from a combination several parts</p>
<h4>AssemblyWriteTime</h4>
<p>The last write time of the web entry point assembly</p>
<!-- snippet: AssemblyWriteTime -->
<p><a id="snippet-AssemblyWriteTime"></a></p>
<pre><code class="language-cs">var webAssemblyLocation = Assembly.GetEntryAssembly()!.Location;
AssemblyWriteTime = File.GetLastWriteTime(webAssemblyLocation).Ticks.ToString();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Shared.cs#L38-L43" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-AssemblyWriteTime" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>SQL timestamp</h4>
<p>A combination of <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-functions/change-tracking-current-version-transact-sql">change_tracking_current_version</a> (if tracking is enabled) and <a href="https://learn.microsoft.com/en-us/sql/t-sql/functions/dbts-transact-sql">@@DBTS (row version timestamp)</a></p>
<!-- snippet: SqlTimestamp -->
<p><a id="snippet-SqlTimestamp"></a></p>
<pre><code class="language-cs">declare @changeTracking bigint = change_tracking_current_version();
declare @timeStamp bigint = convert(bigint, @@dbts);
if (@changeTracking is null)
select cast(@timeStamp as varchar)
else
select cast(@timeStamp as varchar) + '-' + cast(@changeTracking as varchar)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L189-L197" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SqlTimestamp" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>Suffix</h4>
<p>An optional string suffix that is dynamically calculated at runtime based on the current <code>HttpContext</code>.</p>
<!-- snippet: Suffix -->
<p><a id="snippet-Suffix"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta(suffix: httpContext => "MySuffix");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L9-L14" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-Suffix" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Combining the above</h3>
<!-- snippet: BuildEtag -->
<p><a id="snippet-BuildEtag"></a></p>
<pre><code class="language-cs">internal static string BuildEtag(string timeStamp, string? suffix)
{
if (suffix == null)
{
return $"\"{AssemblyWriteTime}-{timeStamp}\"";
}
return $"\"{AssemblyWriteTime}-{timeStamp}-{suffix}\"";
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Shared.cs#L130-L142" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-BuildEtag" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>NuGet</h2>
<p>Delta is shipped as two nugets:</p>
<ul>
<li><a href="https://nuget.org/packages/Delta/">Delta</a>: Delivers functionality using SqlConnection and SqlTransaction.</li>
<li><a href="https://nuget.org/packages/Delta.EF/">Delta.EF</a>: Delivers functionality using <a href="https://learn.microsoft.com/en-us/ef/core/providers/sql-server/?tabs=dotnet-core-cli">SQL Server EF Database Provider</a>.</li>
</ul>
<p>Only one of the above should be used.</p>
<h2>Usage</h2>
<h3>DB Schema</h3>
<p>Ensure <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server">SQL Server Change Tracking</a> and/or <a href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql">SQL Server Row Versioning</a> is enabled for all relevant tables.</p>
<p>Example SQL schema:</p>
<!-- snippet: Usage.Schema.verified.sql -->
<p><a id="snippet-Usage.Schema.verified.sql"></a></p>
<pre><code class="language-sql">-- Tables
CREATE TABLE [dbo].[Companies](
[Id] [uniqueidentifier] NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[Content] [nvarchar](max) NULL,
CONSTRAINT [PK_Companies] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[Employees](
[Id] [uniqueidentifier] NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[CompanyId] [uniqueidentifier] NOT NULL,
[Content] [nvarchar](max) NULL,
[Age] [int] NOT NULL,
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_Employees_CompanyId] ON [dbo].[Employees]
(
[CompanyId] ASC
) ON [PRIMARY]
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.Schema.verified.sql#L1-L28" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-Usage.Schema.verified.sql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to WebApplicationBuilder</h3>
<!-- snippet: UseDelta -->
<p><a id="snippet-UseDelta"></a></p>
<pre><code class="language-cs">var builder = WebApplication.CreateBuilder();
builder.Services.AddScoped(_ => new SqlConnection(connectionString));
var app = builder.Build();
app.UseDelta();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplication/Program.cs#L10-L17" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDelta" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to a Route Group</h3>
<p>To add to a specific <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/route-handlers#route-groups">Route Group</a>:</p>
<!-- snippet: UseDeltaMapGroup -->
<p><a id="snippet-UseDeltaMapGroup"></a></p>
<pre><code class="language-cs">app.MapGroup("/group")
.UseDelta()
.MapGet("/", () => "Hello Group!");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplication/Program.cs#L58-L64" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaMapGroup" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>ShouldExecute</h3>
<p>Optionally control what requests Delta is executed on.</p>
<!-- snippet: ShouldExecute -->
<p><a id="snippet-ShouldExecute"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta(
shouldExecute: httpContext =>
{
var path = httpContext.Request.Path.ToString();
return path.Contains("match");
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L19-L29" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-ShouldExecute" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Custom Connection discovery</h3>
<p>By default, Delta uses <code>HttpContext.RequestServices</code> to discover the SqlConnection and SqlTransaction:</p>
<!-- snippet: DiscoverConnection -->
<p><a id="snippet-DiscoverConnection"></a></p>
<pre><code class="language-cs">static Connection DiscoverConnection(HttpContext httpContext)
{
var provider = httpContext.RequestServices;
var connection = provider.GetRequiredService<SqlConnection>();
var transaction = provider.GetService<SqlTransaction>();
return new(connection, transaction);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Middleware.cs#L41-L51" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DiscoverConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>To use custom connection discovery:</p>
<!-- snippet: CustomDiscoveryConnection -->
<p><a id="snippet-CustomDiscoveryConnection"></a></p>
<pre><code class="language-cs">var application = webApplicationBuilder.Build();
application.UseDelta(
getConnection: httpContext => httpContext.RequestServices.GetRequiredService<SqlConnection>());
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L200-L206" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-CustomDiscoveryConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>To use custom connection and transaction discovery:</p>
<!-- snippet: CustomDiscoveryConnectionAndTransaction -->
<p><a id="snippet-CustomDiscoveryConnectionAndTransaction"></a></p>
<pre><code class="language-cs">var webApplication = webApplicationBuilder.Build();
webApplication.UseDelta(
getConnection: httpContext =>
{
var provider = httpContext.RequestServices;
var sqlConnection = provider.GetRequiredService<SqlConnection>();
var sqlTransaction = provider.GetService<SqlTransaction>();
return new(sqlConnection, sqlTransaction);
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L211-L223" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-CustomDiscoveryConnectionAndTransaction" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>EF Usage</h2>
<h3>DbContext using RowVersion</h3>
<p>Enable row versioning in Entity Framework</p>
<!-- snippet: SampleDbContext.cs -->
<p><a id="snippet-SampleDbContext.cs"></a></p>
<pre><code class="language-cs">public class SampleDbContext(DbContextOptions options) :
DbContext(options)
{
public DbSet<Employee> Employees { get; set; } = null!;
public DbSet<Company> Companies { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder builder)
{
var company = builder.Entity<Company>();
company.HasKey(_ => _.Id);
company
.HasMany(_ => _.Employees)
.WithOne(_ => _.Company)
.IsRequired();
company
.Property(_ => _.RowVersion)
.IsRowVersion()
.HasConversion<byte[]>();
var employee = builder.Entity<Employee>();
employee.HasKey(_ => _.Id);
employee
.Property(_ => _.RowVersion)
.IsRowVersion()
.HasConversion<byte[]>();
}
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/DataContext/SampleDbContext.cs#L1-L27" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SampleDbContext.cs" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to WebApplicationBuilder</h3>
<!-- snippet: UseDeltaEF -->
<p><a id="snippet-UseDeltaEF"></a></p>
<pre><code class="language-cs">var builder = WebApplication.CreateBuilder();
builder.Services.AddSqlServer<SampleDbContext>(database.ConnectionString);
var app = builder.Build();
app.UseDelta<SampleDbContext>();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/Program.cs#L7-L14" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to a Route Group</h3>
<p>To add to a specific <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/route-handlers#route-groups">Route Group</a>:</p>
<!-- snippet: UseDeltaMapGroupEF -->
<p><a id="snippet-UseDeltaMapGroupEF"></a></p>
<pre><code class="language-cs">app.MapGroup("/group")
.UseDelta<SampleDbContext>()
.MapGet("/", () => "Hello Group!");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/Program.cs#L38-L44" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaMapGroupEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>ShouldExecute</h3>
<p>Optionally control what requests Delta is executed on.</p>
<!-- snippet: ShouldExecuteEF -->
<p><a id="snippet-ShouldExecuteEF"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta<SampleDbContext>(
shouldExecute: httpContext =>
{
var path = httpContext.Request.Path.ToString();
return path.Contains("match");
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta.EFTests/Usage.cs#L16-L26" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-ShouldExecuteEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>UseResponseDiagnostics</h2>
<p>Response diagnostics is an opt-in feature that includes extra log information in the response headers.</p>
<p>Enable by setting UseResponseDiagnostics to true at startup:</p>
<!-- snippet: UseResponseDiagnostics -->
<p><a id="snippet-UseResponseDiagnostics"></a></p>
<pre><code class="language-cs">DeltaExtensions.UseResponseDiagnostics = true;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/ModuleInitializer.cs#L6-L10" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseResponseDiagnostics" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Response diagnostics headers are prefixed with <code>Delta-</code>.</p>
<p>Example Response header when the Request has not <code>If-None-Match</code> header.</p>
<img src="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta-No304.png">
<h2>Helpers</h2>
<p>Utility methods for working with databases using the Delta conventions.</p>
<h3>GetLastTimeStamp</h3>
<h4>For a <code>SqlConnection</code>:</h4>
<!-- snippet: GetLastTimeStampSqlConnection -->
<p><a id="snippet-GetLastTimeStampSqlConnection"></a></p>
<pre><code class="language-cs">var timeStamp = await sqlConnection.GetLastTimeStamp();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L60-L64" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetLastTimeStampSqlConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For a <code>DbContext</code>:</h4>
<!-- snippet: GetLastTimeStampEF -->
<p><a id="snippet-GetLastTimeStampEF"></a></p>
<pre><code class="language-cs">var timeStamp = await dbContext.GetLastTimeStamp();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta.EFTests/Usage.cs#L55-L59" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetLastTimeStampEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>GetDatabasesWithTracking</h3>
<p>Get a list of all databases with change tracking enabled.</p>
<!-- snippet: GetDatabasesWithTracking -->
<p><a id="snippet-GetDatabasesWithTracking"></a></p>
<pre><code class="language-cs">var trackedDatabases = await sqlConnection.GetTrackedDatabases();
foreach (var db in trackedDatabases)
{
Trace.WriteLine(db);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L98-L106" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetDatabasesWithTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: GetTrackedDatabasesSql -->
<p><a id="snippet-GetTrackedDatabasesSql"></a></p>
<pre><code class="language-cs">select d.name
from sys.databases as d inner join
sys.change_tracking_databases as t on
t.database_id = d.database_id
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L140-L145" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedDatabasesSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>GetTrackedTables</h3>
<p>Get a list of all tracked tables in database.</p>
<!-- snippet: GetTrackedTables -->
<p><a id="snippet-GetTrackedTables"></a></p>
<pre><code class="language-cs">var trackedTables = await sqlConnection.GetTrackedTables();
foreach (var db in trackedTables)
{
Trace.WriteLine(db);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L124-L132" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedTables" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: GetTrackedTablesSql -->
<p><a id="snippet-GetTrackedTablesSql"></a></p>
<pre><code class="language-cs">select t.Name
from sys.tables as t left join
sys.change_tracking_tables as c on t.[object_id] = c.[object_id]
where c.[object_id] is not null
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L76-L81" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedTablesSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>IsTrackingEnabled</h3>
<p>Determine if change tracking is enabled for a database.</p>
<!-- snippet: IsTrackingEnabled -->
<p><a id="snippet-IsTrackingEnabled"></a></p>
<pre><code class="language-cs">var isTrackingEnabled = await sqlConnection.IsTrackingEnabled();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L189-L193" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-IsTrackingEnabled" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: IsTrackingEnabledSql -->
<p><a id="snippet-IsTrackingEnabledSql"></a></p>
<pre><code class="language-cs">select count(d.name)
from sys.databases as d inner join
sys.change_tracking_databases as t on
t.database_id = d.database_id
where d.name = '{database}'
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L97-L103" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-IsTrackingEnabledSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>EnableTracking</h3>
<p>Enable change tracking for a database.</p>
<!-- snippet: EnableTracking -->
<p><a id="snippet-EnableTracking"></a></p>
<pre><code class="language-cs">await sqlConnection.EnableTracking();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L183-L187" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: EnableTrackingSql -->
<p><a id="snippet-EnableTrackingSql"></a></p>
<pre><code class="language-cs">alter database {database}
set change_tracking = on
(
change_retention = {retentionDays} days,
auto_cleanup = on
)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L61-L68" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>DisableTracking</h3>
<p>Disable change tracking for a database and all tables within that database.</p>
<!-- snippet: DisableTracking -->
<p><a id="snippet-DisableTracking"></a></p>
<pre><code class="language-cs">await sqlConnection.DisableTracking();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L168-L172" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<h4>For disabling tracking on a database:</h4>
<!-- snippet: DisableTrackingSqlDB -->
<p><a id="snippet-DisableTrackingSqlDB"></a></p>
<pre><code class="language-cs">alter database [{database}] set change_tracking = off;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L126-L128" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingSqlDB" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For disabling tracking on tables:</h4>
<!-- snippet: DisableTrackingSqlTable -->
<p><a id="snippet-DisableTrackingSqlTable"></a></p>
<pre><code class="language-cs">alter table [{table}] disable change_tracking;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L118-L120" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingSqlTable" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>SetTrackedTables</h3>
<p>Enables change tracking for all tables listed, and disables change tracking for all tables not listed.</p>
<!-- snippet: SetTrackedTables -->
<p><a id="snippet-SetTrackedTables"></a></p>
<pre><code class="language-cs">await sqlConnection.SetTrackedTables(["Companies"]);
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L118-L122" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SetTrackedTables" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<h4>For enabling tracking on a database:</h4>
<!-- snippet: EnableTrackingSql -->
<p><a id="snippet-EnableTrackingSql"></a></p>
<pre><code class="language-cs">alter database {database}
set change_tracking = on
(
change_retention = {retentionDays} days,
auto_cleanup = on
)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L61-L68" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For enabling tracking on tables:</h4>
<!-- snippet: EnableTrackingTableSql -->
<p><a id="snippet-EnableTrackingTableSql"></a></p>
<pre><code class="language-cs">alter table [{table}] enable change_tracking
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L24-L26" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingTableSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For disabling tracking on tables:</h4>
<!-- snippet: DisableTrackingTableSql -->
<p><a id="snippet-DisableTrackingTableSql"></a></p>
<pre><code class="language-cs">alter table [{table}] disable change_tracking;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L33-L35" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingTableSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>Programmatic client usage</h2>
<p>Delta is primarily designed to support web browsers as a client. All web browsers have the necessary 304 and caching functionally required.</p>
<p>In the scenario where web apis (that support using 304) are being consumed using .net as a client, consider using one of the below extensions to cache responses.</p>
<ul>
<li><a href="https://github.com/SimonCropp/Replicant">Replicant</a></li>
<li><a href="https://github.com/tavis-software/Tavis.HttpCache">Tavis.HttpCache</a></li>
<li><a href="https://github.com/aliostad/CacheCow">CacheCow</a></li>
<li><a href="https://github.com/jamesmontemagno/monkey-cache">Monkey Cache</a></li>
</ul>
<h2>Icon</h2>
<p><a href="https://thenounproject.com/term/estuary/1847616/">Estuary</a> designed by <a href="https://thenounproject.com/Asphaleia/">Daan</a> from <a href="https://thenounproject.com">The Noun Project</a>.</p>
+ MrOtherGuy/firefox-csshacks
+ 2024-12-01T01:29:31Z
+ tag:github.com,2024-12-01:/MrOtherGuy/firefox-csshacks
+
+ <p>Collection of userstyles affecting the browser</p><hr><h1>Collection of random CSS hacks for Firefox</h1>
<p>This repository contains various styles to modify appearance of Mozilla Firefox. These stylesheets are mostly self-contained and can be mixed with each other somewhat freely, but there are no promises about compatibility with third-party styles.</p>
<p>In the case that a particular style relies on another style, the fact will be noted at the start of the file that requires so.</p>
<p>Stylesheets in this repository are tested only on Windows 10 and to a lesser amount on Linux. Most of them should also work on OSX and Windows7, but there may be wrong behavior especially when native widgets such as window titlebar or window control buttons are being styled.</p>
<h1>Setup</h1>
<p>As an overview, you will make Firefox load two special stylesheets - <code>userChrome.css</code> and <code>userContent.css</code>. Doing so requires setting a specific preference (see below) and then creating those files inside your Firefox user profile.</p>
<p>The setup is quite straightforward with the exception of how to find the profile folder so pay attention to that.</p>
<h2>Set the pref to load stylesheets</h2>
<p>Go to <code>about:config</code> and set the pref <code>toolkit.legacyUserProfileCustomizations.stylesheets</code> to <code>true</code></p>
<p>After you set this pref, Firefox will try to load <code>userChrome.css</code> and <code>userContent.css</code> - but those files don't exist yet so now let's create them.</p>
<h2>Setting up files</h2>
<h3>Find the profile folder</h3>
<p>First, find your profile folder. While Firefox is running, go to <code>about:support</code> and find a <code>Profile folder</code> row near the top - there should also be a button labeled "Open folder" next to it. Clicking that button should open the folder in your file manager.</p>
<p>NOTE: On some Firefox versions clicking that button may open the <strong>profiles</strong> folder which houses <em>all</em> your profiles. In that case, navigate into the specific folder you wish to modify. <code>about:support</code> should still show the correct folder name so refer to that if you need to figure out the what folder you need to open.</p>
<p>The real profile folder should have files like <code>prefs.js</code> and <code>places.sqlite</code> If you see those two files in the folder, then great! You found the profile folder! Now lets actually create those stylesheet files.</p>
<h3>Creating the stylesheet files</h3>
<p>Note: only userChrome.css is mentioned in this section for brevity, but everything regarding that will also apply to userContent.css</p>
<p>Firefox loads <code>userChrome.css</code> from <code><profileFolder>/chrome/userChrome.css</code>. That chrome-folder or the stylesheet files do not exist by default.</p>
<h3>Set up files manually</h3>
<details>
<summary>Manually copying individual styles directly into userChrome.css is a simple way to do things for better and for worse.</summary>
<ol start="0">
<li>Create a new folder into the profile folder and name it <code>chrome</code></li>
<li>Create <code>userChrome.css</code> inside that newly created chrome-folder</li>
<li>Copy-paste contents of individual .css files from this repository into your userChrome.css file (and save it of course!)</li>
<li>If Firefox is running, restart Firefox so that the changes take effect</li>
</ol>
<p><strong>Pay attention to the filename</strong> of <code>userChrome.css</code> - the file extension must be <code>.css</code> and if your file manager is hiding file extensions then you might accidentally create a file named <code>userChrome.css.txt</code> and Firefox will not load that.</p>
<p>In the end you should have a folder structure like this:</p>
<pre><code><profile_folder>
|_ chrome
| |_ userChrome.css
| |_ userContent.css
|_ extensions
|_ prefs.js
...
all other profile folders and files
...
</code></pre>
</details>
<h3>Set up files using git</h3>
<details>
<summary>Preferred way to do things, since it makes updates easier and makes organizing multiple styles easier.</summary>
<p>Assumes that you have a git client installed, and that you do not already have a chrome folder in your profile.</p>
<ol start="0">
<li>Open a command prompt / console / terminal and <code>cd</code> into the profile folder</li>
<li>Clone this repository into the profile folder
<ul>
<li>(<strong>NOTE</strong>: if you already have "chrome" folder, then rename it before cloning. After clone is complete, just copy the <em>contents</em> of the old folder into the new chrome folder)</li>
<li><code>git clone https://github.com/MrOtherGuy/firefox-csshacks.git chrome</code> on command-line</li>
<li>This should create a new folder "chrome" into your profile folder with the contents of this repository</li>
</ul> </li>
<li>(Optional) Make a copy of <code>userChrome_example.css</code> and rename the copy to <code>userChrome.css</code></li>
<li><code>@import</code> individual style files into your userChrome.css
<ul>
<li>Notice that any <code>@import</code>s must be placed before anything else in whatever file you are using them</li>
<li>Check userChrome_example.css for how it uses <code>@import</code></li>
</ul> </li>
<li>If Firefox is running, restart Firefox so that the changes take effect</li>
</ol>
<p>Afterwards, you can just use <code>git pull</code> in the "chrome" folder and it will replace your copies with up-to-date versions. <code>git pull</code> won't replace your userChrome.css file so you can safely put your own custom rules into userChrome.css directly and those won't be overwritten when you update.</p>
</details>
<h1>Style categories</h1>
<p>The files themselves are only separated to <em>chrome</em> and <em>content</em> sub-folders. Files have a one or more <em>tag</em> applied to them as listed in <code>tags.csv</code> file.</p>
<p>You can browse the tag-categorized files by <a href="https://mrotherguy.github.io/firefox-csshacks/">using this UI</a></p>
<h1>Usage</h1>
<p>Stylesheets are divided in to chrome and content folders. Firefox loads <code>userChrome.css</code> into the browser UI and it loads <code>userContent.css</code> into the content documents like web pages and built-in or extension pages.</p>
<p>Use stylesheets under "chrome" in <code>userChrome.css</code></p>
<p>Use stylesheets under "content" in <code>userContent.css</code></p>
<p>The above is not a technical requirement but the particular styles <em>generally</em> won't do anything when loaded in wrong context.</p>
<p>You can import the stylesheets with @-rule import like this:</p>
<pre><code class="language-css">@import url("path/filename.css");
</code></pre>
<p>A good habit would be to load each separate style without modifications using @import statements, and then apply your own modifications in userChrome.css after all imports. This makes it easier for you to update the files from the repository since your modifications will be preserved.</p>
<p>Example <code>userChrome.css</code>:</p>
<pre><code class="language-css">@import url(chrome/tab_close_button_always_on_hover.css);
@import url(chrome/tab_loading_progress_throbber.css);
@import url(chrome/button_effect_scale_onclick.css);
:root{
--toolbar-bgcolor: rgb(36,44,59) !important;
--uc-menu-bkgnd: var(--toolbar-bgcolor);
--arrowpanel-background: var(--toolbar-bgcolor) !important;
--autocomplete-popup-background: var(--toolbar-bgcolor) !important;
--uc-menu-disabled: rgb(90,90,90) !important;
--lwt-toolbar-field-focus: rgb(36,44,59) !important;
}
</code></pre>
<h2>Important!</h2>
<p>Note that all <code>@import</code> rules need to be placed before any other rules in the file, including @namespace rules. Additionally, the order of imported files is just as important as the order of rules within one file.</p>
<p>I would strongly advice using @import to include styles instead of copying contents directly to userChrome.css even with just a few file "components". The technical reason for this is that some files rely on @namespace rules and those only apply on file level such that a @namespace applies to every selector in that file (and in that file only). On top of that, @imports make managing multiple files much easier.</p>
<h2>Further miscallaneous notes</h2>
<p>Import any *_patch.css files <em>after</em> their base stylesheet. Import the shared window_control_support.css <em>before</em> other stylesheets.</p>
<p>Additionally, you are advised to import theme_ files before any other modules.</p>
<h1>Theme</h1>
<p>** NOTE ** Theme files are mostly out-of-date as of 2020-05-22</p>
<p>Stylesheets prefixed with <code>theme_</code> require <code>theme_color_variables.css</code> to be imported.</p>
<p>Example userChrome.css resulting in rather complete dark blueish-grey UI:</p>
<pre><code class="language-css">@import url(theme_color_variables.css);
@import url(theme_sidebar.css);
@import url(theme_toolbars.css);
@import url(theme_popups_and_menus.css);
/* Your other rules here */
</code></pre>
<p>You can use individual modules from theme such as to only include popups_and_menus. But it would still be required that you import the theme_color_variables.css or you'll have to manually edit all the colors.</p>
\ No newline at end of file
diff --git a/all/monthly/index.xml b/all/monthly/index.xml
new file mode 100644
index 00000000000..e317d0aa4bd
--- /dev/null
+++ b/all/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub All Languages Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:16Z
+ Monthly Trending of All Languages in GitHub
+
+
+ payloadcms/payload
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/payloadcms/payload
+
+ <p>Payload is the open-source, fullstack Next.js framework, giving you instant backend superpowers. Get a full TypeScript backend and admin panel instantly. Use Payload as a headless CMS or for building powerful applications.</p><hr><p><a href="https://payloadcms.com"><img width="100%" src="https://l4wlsi8vxy8hre4v.public.blob.vercel-storage.com/github-banner-new-logo.jpg" alt="Payload headless CMS Admin panel built with React"></a> <br> <br></p>
<p align="left"> <a href="https://github.com/payloadcms/payload/actions"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/payloadcms/payload/main.yml?style=flat-square"></a> <a href="https://discord.gg/payload"><img alt="Discord" src="https://img.shields.io/discord/967097582721572934?label=Discord&color=7289da&style=flat-square"></a> <a href="https://www.npmjs.com/package/payload"><img alt="npm" src="https://img.shields.io/npm/dw/payload?style=flat-square"></a> <a href="https://github.com/payloadcms/payload/graphs/contributors"><img alt="npm" src="https://img.shields.io/github/contributors-anon/payloadcms/payload?color=yellow&style=flat-square"></a> <a href="https://www.npmjs.com/package/payload"><img alt="npm" src="https://img.shields.io/npm/v/payload?style=flat-square"></a> <a href="https://twitter.com/payloadcms"><img src="https://img.shields.io/badge/follow-payloadcms-1DA1F2?logo=twitter&style=flat-square" alt="Payload Twitter"></a> </p>
<hr>
<h4> <a target="_blank" href="https://payloadcms.com/docs/getting-started/what-is-payload" rel="dofollow"><strong>Explore the Docs</strong></a> · <a target="_blank" href="https://payloadcms.com/community-help" rel="dofollow"><strong>Community Help</strong></a> · <a target="_blank" href="https://github.com/payloadcms/payload/discussions/1539" rel="dofollow"><strong>Roadmap</strong></a> · <a target="_blank" href="https://www.g2.com/products/payload-cms/reviews#reviews" rel="dofollow"><strong>View G2 Reviews</strong></a> </h4>
<hr>
<blockquote>
<p>[!IMPORTANT] 🎉 <strong>We've released 3.0!</strong> Star this repo or keep an eye on it to follow along.</p>
</blockquote>
<p>Payload is the first-ever Next.js native CMS that can install directly in your existing <code>/app</code> folder. It's the start of a new era for headless CMS.</p>
<h3>Benefits over a regular CMS</h3>
<ul>
<li>Deploy anywhere, including serverless on Vercel for free</li>
<li>Combine your front+backend in the same <code>/app</code> folder if you want</li>
<li>Don't sign up for yet another SaaS - Payload is open source</li>
<li>Query your database in React Server Components</li>
<li>Both admin and backend are 100% extensible</li>
<li>No vendor lock-in</li>
<li>Never touch ancient WP code again</li>
<li>Build faster, never hit a roadblock</li>
</ul>
<h2>Quickstart</h2>
<p>Before beginning to work with Payload, make sure you have all of the <a href="https://payloadcms.com/docs/getting-started/installation">required software</a>.</p>
<pre><code class="language-text">pnpx create-payload-app@latest
</code></pre>
<p><strong>If you're new to Payload, you should start with the website template</strong> (<code>pnpx create-payload-app@latest -t website</code>). It shows how to do <em>everything</em> - including custom Rich Text blocks, on-demand revalidation, live preview, and more. It comes with a frontend built with Tailwind all in one <code>/app</code> folder.</p>
<h2>One-click templates</h2>
<p>Jumpstart your next project by starting with a pre-made template. These are production-ready, end-to-end solutions designed to get you to market as fast as possible.</p>
<h3><a href="https://github.com/payloadcms/payload/tree/main/templates/website">🌐 Website</a></h3>
<p>Build any kind of website, blog, or portfolio from small to enterprise. Comes with a fully functional front-end built with RSCs and Tailwind.</p>
<p>We're constantly adding more templates to our <a href="https://github.com/payloadcms/payload/tree/main/templates">Templates Directory</a>. If you maintain your own template, consider adding the <code>payload-template</code> topic to your GitHub repository for others to find.</p>
<ul>
<li><a href="https://github.com/payloadcms/payload/tree/main/templates">Official Templates</a></li>
<li><a href="https://github.com/topics/payload-template">Community Templates</a></li>
</ul>
<h2>✨ Features</h2>
<ul>
<li>Completely free and open-source</li>
<li>Next.js native, built to run inside <em>your</em> <code>/app</code> folder</li>
<li>Use server components to extend Payload UI</li>
<li>Query your database directly in server components, no need for REST / GraphQL</li>
<li>Fully TypeScript with automatic types for your data</li>
<li><a href="https://payloadcms.com/docs/authentication/overview">Auth out of the box</a></li>
<li><a href="https://payloadcms.com/docs/versions/overview">Versions and drafts</a></li>
<li><a href="https://payloadcms.com/docs/configuration/localization">Localization</a></li>
<li><a href="https://payloadcms.com/docs/fields/blocks">Block-based layout builder</a></li>
<li><a href="https://payloadcms.com/docs/admin/overview">Customizable React admin</a></li>
<li><a href="https://payloadcms.com/docs/fields/rich-text">Lexical rich text editor</a></li>
<li><a href="https://payloadcms.com/docs/fields/overview#conditional-logic">Conditional field logic</a></li>
<li>Extremely granular <a href="https://payloadcms.com/docs/access-control/overview">Access Control</a></li>
<li><a href="https://payloadcms.com/docs/hooks/overview">Document and field-level hooks</a> for every action Payload provides</li>
<li>Intensely fast API</li>
<li>Highly secure thanks to HTTP-only cookies, CSRF protection, and more</li>
</ul>
<p><a target="_blank" href="https://github.com/payloadcms/payload/discussions"><strong>Request Feature</strong></a></p>
<h2>🗒️ Documentation</h2>
<p>Check out the <a href="https://payloadcms.com/docs/getting-started/what-is-payload">Payload website</a> to find in-depth documentation for everything that Payload offers.</p>
<p>Migrating from v2 to v3? Check out the <a href="https://github.com/payloadcms/payload/raw/main/docs/migration-guide/overview.mdx">3.0 Migration Guide</a> on how to do it.</p>
<h2>🙋 Contributing</h2>
<p>If you want to add contributions to this repository, please follow the instructions in <a href="https://raw.githubusercontent.com/payloadcms/payload/main/CONTRIBUTING.md">contributing.md</a>.</p>
<h2>📚 Examples</h2>
<p>The <a href="https://raw.githubusercontent.com/payloadcms/payload/main/examples">Examples Directory</a> is a great resource for learning how to setup Payload in a variety of different ways, but you can also find great examples in our blog and throughout our social media.</p>
<p>If you'd like to run the examples, you can either copy them to a folder outside this repo or run them directly by (1) navigating to the example's subfolder (<code>cd examples/your-example-folder</code>) and (2) using the <code>--ignore-workspace</code> flag to bypass workspace restrictions (e.g., <code>pnpm --ignore-workspace install</code> or <code>pnpm --ignore-workspace dev</code>).</p>
<p>You can see more examples at:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/payloadcms/payload/main/examples">Examples Directory</a></li>
<li><a href="https://payloadcms.com/blog">Payload Blog</a></li>
<li><a href="https://www.youtube.com/@payloadcms">Payload YouTube</a></li>
</ul>
<h2>🔌 Plugins</h2>
<p>Payload is highly extensible and allows you to install or distribute plugins that add or remove functionality. There are both officially-supported and community-supported plugins available. If you maintain your own plugin, consider adding the <code>payload-plugin</code> topic to your GitHub repository for others to find.</p>
<ul>
<li><a href="https://github.com/orgs/payloadcms/repositories?q=topic%3Apayload-plugin">Official Plugins</a></li>
<li><a href="https://github.com/topics/payload-plugin">Community Plugins</a></li>
</ul>
<h2>🚨 Need help?</h2>
<p>There are lots of good conversations and resources in our Github Discussions board and our Discord Server. If you're struggling with something, chances are, someone's already solved what you're up against. <span>👇</span></p>
<ul>
<li><a href="https://github.com/payloadcms/payload/discussions">GitHub Discussions</a></li>
<li><a href="https://github.com/payloadcms/payload/issues">GitHub Issues</a></li>
<li><a href="https://t.co/30APlsQUPB">Discord</a></li>
<li><a href="https://payloadcms.com/community-help">Community Help</a></li>
</ul>
<h2>⭐ Like what we're doing? Give us a star</h2>
<p><img src="https://cms.payloadcms.com/media/payload-github-star.gif" alt="payload-github-star"></p>
<h2>👏 Thanks to all our contributors</h2>
<img align="left" src="https://contributors-img.web.app/image?repo=payloadcms/payload">
+
+
+ bluesky-social/social-app
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/bluesky-social/social-app
+
+ <p>The Bluesky Social application for Web, iOS, and Android</p><hr><h1>Bluesky Social App</h1>
<p>Welcome friends! This is the codebase for the Bluesky Social app.</p>
<p>Get the app itself:</p>
<ul>
<li><strong>Web: <a href="https://bsky.app">bsky.app</a></strong></li>
<li><strong>iOS: <a href="https://apps.apple.com/us/app/bluesky-social/id6444370199">App Store</a></strong></li>
<li><strong>Android: <a href="https://play.google.com/store/apps/details?id=xyz.blueskyweb.app">Play Store</a></strong></li>
</ul>
<h2>Development Resources</h2>
<p>This is a <a href="https://reactnative.dev/">React Native</a> application, written in the TypeScript programming language. It builds on the <code>atproto</code> TypeScript packages (like <a href="https://www.npmjs.com/package/@atproto/api"><code>@atproto/api</code></a>), code for which is also open source, but in <a href="https://github.com/bluesky-social/atproto">a different git repository</a>.</p>
<p>There is a small amount of Go language source code (in <code>./bskyweb/</code>), for a web service that returns the React Native Web application.</p>
<p>The <a href="https://raw.githubusercontent.com/bluesky-social/social-app/main/docs/build.md">Build Instructions</a> are a good place to get started with the app itself.</p>
<p>The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't <em>need</em> to understand AT Protocol to work with this application, but it can help. Learn more at:</p>
<ul>
<li><a href="https://atproto.com/guides/overview">Overview and Guides</a></li>
<li><a href="https://github.com/bluesky-social/atproto/discussions">Github Discussions</a> 👈 Great place to ask questions</li>
<li><a href="https://atproto.com/specs/atp">Protocol Specifications</a></li>
<li><a href="https://bsky.social/about/blog/3-6-2022-a-self-authenticating-social-protocol">Blogpost on self-authenticating data structures</a></li>
</ul>
<p>The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is <code>app.bsky.*</code>.</p>
<h2>Contributions</h2>
<blockquote>
<p>While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.</p>
</blockquote>
<p><strong>Rules:</strong></p>
<ul>
<li>We may not respond to your issue or PR.</li>
<li>We may close an issue or PR without much feedback.</li>
<li>We may lock discussions or contributions if our attention is getting DDOSed.</li>
<li>We're not going to provide support for build issues.</li>
</ul>
<p><strong>Guidelines:</strong></p>
<ul>
<li>Check for existing issues before filing a new one please.</li>
<li>Open an issue and give some time for discussion before submitting a PR.</li>
<li>Stay away from PRs like...
<ul>
<li>Changing "Post" to "Skeet."</li>
<li>Refactoring the codebase, e.g., to replace MobX with Redux or something.</li>
<li>Adding entirely new features without prior discussion.</li>
</ul> </li>
</ul>
<p>Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!</p>
<h2>Forking guidelines</h2>
<p>You have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork.</p>
<p>Please be sure to:</p>
<ul>
<li>Change all branding in the repository and UI to clearly differentiate from Bluesky.</li>
<li>Change any support links (feedback, email, terms of service, etc) to your own systems.</li>
<li>Replace any analytics or error-collection systems with your own so we don't get super confused.</li>
</ul>
<h2>Security disclosures</h2>
<p>If you discover any security issues, please send an email to <a href="mailto:security@bsky.app">security@bsky.app</a>. The email is automatically CCed to the entire team and we'll respond promptly.</p>
<h2>Are you a developer interested in building on atproto?</h2>
<p>Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party integration can be as seamless as first-party through custom feeds, federated services, clients, and more.</p>
<h2>License (MIT)</h2>
<p>See <a href="https://raw.githubusercontent.com/bluesky-social/social-app/main/LICENSE">./LICENSE</a> for the full license.</p>
<h2>P.S.</h2>
<p>We ❤️ you and all of the ways you support us. Thank you for making Bluesky a great place!</p>
+
+
+ AmruthPillai/Reactive-Resume
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/AmruthPillai/Reactive-Resume
+
+ <p>A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!</p><hr><p><img src="https://i.imgur.com/FFc4nyZ.jpg" alt="Reactive Resume"></p>
<p><img src="https://img.shields.io/github/package-json/version/AmruthPillai/Reactive-Resume?label=version" alt="App Version"> <a href="https://hub.docker.com/repository/docker/amruthpillai/reactive-resume"><img src="https://img.shields.io/docker/pulls/amruthpillai/reactive-resume" alt="Docker Pulls"></a> <a href="https://github.com/sponsors/AmruthPillai"><img src="https://img.shields.io/github/sponsors/AmruthPillai" alt="GitHub Sponsors"></a> <a href="https://crowdin.com/project/reactive-resume"><img src="https://badges.crowdin.net/reactive-resume/localized.svg?sanitize=true" alt="Crowdin"></a> <a href="https://discord.gg/hzwkZbyvUW"><img src="https://img.shields.io/discord/1173518977851473940?label=discord&link=https%3A%2F%2Fdiscord.gg%2FhzwkZbyvUW" alt="Discord"></a></p>
<h1>Reactive Resume</h1>
<p>A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.</p>
<h3><a href="https://rxresu.me/">Go to App</a> | <a href="https://docs.rxresu.me/">Docs</a></h3>
<h2>Description</h2>
<p>Reactive Resume is a free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume. With zero user tracking or advertising, your privacy is a top priority. The platform is extremely user-friendly and can be self-hosted in less than 30 seconds if you wish to own your data completely.</p>
<p>It's available in multiple languages and comes packed with features such as real-time editing, dozens of templates, drag-and-drop customisation, and integration with OpenAI for enhancing your writing.</p>
<p>You can share a personalised link of your resume to potential employers, track its views or downloads, and customise your page layout by dragging-and-dropping sections. The platform also supports various font options and provides dozens of templates to choose from. And yes, there's even a dark mode for a more comfortable viewing experience.</p>
<p>Start creating your standout resume with Reactive Resume today!</p>
<h2>Templates</h2>
<table>
<thead>
<tr>
<th>Azurill</th>
<th>Bronzor</th>
<th>Chikorita</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://i.imgur.com/jKgo04C.jpeg" width="200px"></td>
<td><img src="https://i.imgur.com/DFNQZP2.jpg" width="200px"></td>
<td><img src="https://i.imgur.com/Dwv8Y7f.jpg" width="200px"></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Ditto</th>
<th>Kakuna</th>
<th>Nosepass</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://i.imgur.com/6c5lASL.jpg" width="200px"></td>
<td><img src="https://i.imgur.com/268ML3t.jpg" width="200px"></td>
<td><img src="https://i.imgur.com/npRLsPS.jpg" width="200px"></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Onyx</th>
<th>Pikachu</th>
<th>Rhyhorn</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://i.imgur.com/cxplXOW.jpg" width="200px"></td>
<td><img src="https://i.imgur.com/Y9f7qsh.jpg" width="200px"></td>
<td><img src="https://i.imgur.com/h4kQxy2.jpg" width="200px"></td>
</tr>
</tbody>
</table>
<h2>Features</h2>
<ul>
<li><strong>Free, forever</strong> and open-source</li>
<li>No telemetry, user tracking or advertising</li>
<li>You can self-host the application in less than 30 seconds</li>
<li><strong>Available in multiple languages</strong> (<a href="https://translate.rxresu.me/">help add/improve your language here</a>)</li>
<li>Use your email address (or a throw-away address, no problem) to create an account</li>
<li>You can also sign in with your GitHub or Google account, and even set up two-factor authentication for extra security</li>
<li>Create as many resumes as you like under a single account, optimising each resume for every job application based on its description for a higher ATS score</li>
<li><strong>Bring your own OpenAI API key</strong> and unlock features such as improving your writing, fixing spelling and grammar or changing the tone of your text in one-click</li>
<li>Translate your resume into any language using ChatGPT and import it back for easier editing</li>
<li>Create single page resumes or a resume that spans multiple pages easily</li>
<li>Customize the colours and layouts to add a personal touch to your resume.</li>
<li>Customise your page layout as you like just by dragging-and-dropping sections</li>
<li>Create custom sections that are specific to your industry if the existing ones don't fit</li>
<li>Jot down personal notes specific to your resume that's only visible to you</li>
<li>Lock a resume to prevent making any further edits (useful for master templates)</li>
<li><strong>Dozens of templates</strong> to choose from, ranging from professional to modern</li>
<li>Design your resume using the standardised EuroPass design template</li>
<li>Supports printing resumes in A4 or Letter page formats</li>
<li>Design your resume with any font that's available on <a href="https://fonts.google.com/">Google Fonts</a></li>
<li><strong>Share a personalised link of your resume</strong> to companies or recruiters for them to get the latest updates</li>
<li>You can track the number of views or downloads your public resume has received</li>
<li>Built with state-of-the-art (at the moment) and dependable technologies that's battle tested and peer reviewed by the open-source community on GitHub</li>
<li><strong>MIT License</strong>, so do what you like with the code as long as you credit the original author</li>
<li>And yes, there’s a dark mode too 🌓</li>
</ul>
<h2>Built With</h2>
<ul>
<li>React (Vite), for the frontend</li>
<li>NestJS, for the backend</li>
<li>Postgres (primary database)</li>
<li>Prisma ORM, which frees you to switch to any other relational database with a few minor changes in the code</li>
<li>Minio (for object storage: to store avatars, resume PDFs and previews)</li>
<li>Browserless (for headless chrome, to print PDFs and generate previews)</li>
<li>SMTP Server (to send password recovery emails)</li>
<li>GitHub/Google OAuth (for quickly authenticating users)</li>
<li>LinguiJS and Crowdin (for translation management and localization)</li>
</ul>
<h2>Star History</h2>
<a href="https://star-history.com/#AmruthPillai/Reactive-Resume&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=AmruthPillai/Reactive-Resume&type=Date&theme=dark">
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=AmruthPillai/Reactive-Resume&type=Date">
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=AmruthPillai/Reactive-Resume&type=Date">
</picture> </a>
<h2>License</h2>
<p>Reactive Resume is packaged and distributed using the <a href="https://raw.githubusercontent.com/AmruthPillai/Reactive-Resume/main/LICENSE.md">MIT License</a> which allows for commercial use, distribution, modification and private use provided that all copies of the software contain the same license and copyright.</p>
<p><em>By the community, for the community.</em><br> A passion project by <a href="https://www.amruthpillai.com/">Amruth Pillai</a></p>
<p> <a href="https://www.digitalocean.com/?utm_medium=opensource&utm_source=Reactive-Resume"> <img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg?sanitize=true" width="200px"> </a> </p>
+
+
\ No newline at end of file
diff --git a/all/weekly/index.xml b/all/weekly/index.xml
new file mode 100644
index 00000000000..4285fb15b06
--- /dev/null
+++ b/all/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub All Languages Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:21Z
+ Weekly Trending of All Languages in GitHub
+
+
+ abi/screenshot-to-code
+ 2024-12-01T01:40:21Z
+ tag:github.com,2024-12-01:/abi/screenshot-to-code
+
+ <p>Drop in a screenshot and convert it to clean code (HTML/Tailwind/React/Vue)</p><hr><h1>screenshot-to-code</h1>
<p>A simple tool to convert screenshots, mockups and Figma designs into clean, functional code using AI. <strong>Now supporting Claude Sonnet 3.5 and GPT-4o!</strong></p>
<p><a href="https://github.com/abi/screenshot-to-code/assets/23818/6cebadae-2fe3-4986-ac6a-8fb9db030045">https://github.com/abi/screenshot-to-code/assets/23818/6cebadae-2fe3-4986-ac6a-8fb9db030045</a></p>
<p>Supported stacks:</p>
<ul>
<li>HTML + Tailwind</li>
<li>HTML + CSS</li>
<li>React + Tailwind</li>
<li>Vue + Tailwind</li>
<li>Bootstrap</li>
<li>Ionic + Tailwind</li>
<li>SVG</li>
</ul>
<p>Supported AI models:</p>
<ul>
<li>Claude Sonnet 3.5 - Best model!</li>
<li>GPT-4o - also recommended!</li>
<li>DALL-E 3 or Flux Schnell (using Replicate) for image generation</li>
</ul>
<p>See the <a href="https://raw.githubusercontent.com/abi/screenshot-to-code/main/#-examples">Examples</a> section below for more demos.</p>
<p>We also just added experimental support for taking a video/screen recording of a website in action and turning that into a functional prototype.</p>
<p><img src="https://github.com/abi/screenshot-to-code/assets/23818/8758ffa4-9483-4b9b-bb66-abd6d1594c33" alt="google in app quick 3"></p>
<p><a href="https://github.com/abi/screenshot-to-code/wiki/Screen-Recording-to-Code">Learn more about video here</a>.</p>
<p><a href="https://twitter.com/_abi_">Follow me on Twitter for updates</a>.</p>
<h2>🌍 Hosted Version</h2>
<p><a href="https://screenshottocode.com">Try it live on the hosted version (paid)</a>. If you're a large or medium enterprise (50+ employees), <a href="https://cal.com/abi-raja-wy2pfh/30min">book a meeting to explore custom enterprise plans</a>.</p>
<h2>🛠 Getting Started</h2>
<p>The app has a React/Vite frontend and a FastAPI backend.</p>
<p>Keys needed:</p>
<ul>
<li><a href="https://github.com/abi/screenshot-to-code/raw/main/Troubleshooting.md">OpenAI API key with access to GPT-4</a> or Anthropic key (optional)</li>
<li>Both are recommended so you can compare results from both Claude and GPT4o</li>
</ul>
<p>If you'd like to run the app with Ollama open source models (not recommended due to poor quality results), <a href="https://github.com/abi/screenshot-to-code/issues/354#issuecomment-2435479853">follow this comment</a>.</p>
<p>Run the backend (I use Poetry for package management - <code>pip install poetry</code> if you don't have it):</p>
<pre><code class="language-bash">cd backend
echo "OPENAI_API_KEY=sk-your-key" > .env
echo "ANTHROPIC_API_KEY=your-key" > .env
poetry install
poetry shell
poetry run uvicorn main:app --reload --port 7001
</code></pre>
<p>You can also set up the keys using the settings dialog on the front-end (click the gear icon after loading the frontend).</p>
<p>Run the frontend:</p>
<pre><code class="language-bash">cd frontend
yarn
yarn dev
</code></pre>
<p>Open <a href="http://localhost:5173">http://localhost:5173</a> to use the app.</p>
<p>If you prefer to run the backend on a different port, update VITE_WS_BACKEND_URL in <code>frontend/.env.local</code></p>
<p>For debugging purposes, if you don't want to waste GPT4-Vision credits, you can run the backend in mock mode (which streams a pre-recorded response):</p>
<pre><code class="language-bash">MOCK=true poetry run uvicorn main:app --reload --port 7001
</code></pre>
<h2>Docker</h2>
<p>If you have Docker installed on your system, in the root directory, run:</p>
<pre><code class="language-bash">echo "OPENAI_API_KEY=sk-your-key" > .env
docker-compose up -d --build
</code></pre>
<p>The app will be up and running at <a href="http://localhost:5173">http://localhost:5173</a>. Note that you can't develop the application with this setup as the file changes won't trigger a rebuild.</p>
<h2>🙋♂️ FAQs</h2>
<ul>
<li><strong>I'm running into an error when setting up the backend. How can I fix it?</strong> <a href="https://github.com/abi/screenshot-to-code/issues/3#issuecomment-1814777959">Try this</a>. If that still doesn't work, open an issue.</li>
<li><strong>How do I get an OpenAI API key?</strong> See <a href="https://github.com/abi/screenshot-to-code/raw/main/Troubleshooting.md">https://github.com/abi/screenshot-to-code/blob/main/Troubleshooting.md</a></li>
<li><strong>How can I configure an OpenAI proxy?</strong> - If you're not able to access the OpenAI API directly (due to e.g. country restrictions), you can try a VPN or you can configure the OpenAI base URL to use a proxy: Set OPENAI_BASE_URL in the <code>backend/.env</code> or directly in the UI in the settings dialog. Make sure the URL has "v1" in the path so it should look like this: <code>https://xxx.xxxxx.xxx/v1</code></li>
<li><strong>How can I update the backend host that my front-end connects to?</strong> - Configure VITE_HTTP_BACKEND_URL and VITE_WS_BACKEND_URL in front/.env.local For example, set VITE_HTTP_BACKEND_URL=<a href="http://124.10.20.1:7001">http://124.10.20.1:7001</a></li>
<li><strong>Seeing UTF-8 errors when running the backend?</strong> - On windows, open the .env file with notepad++, then go to Encoding and select UTF-8.</li>
<li><strong>How can I provide feedback?</strong> For feedback, feature requests and bug reports, open an issue or ping me on <a href="https://twitter.com/_abi_">Twitter</a>.</li>
</ul>
<h2>📚 Examples</h2>
<p><strong>NYTimes</strong></p>
<table>
<thead>
<tr>
<th>Original</th>
<th>Replica</th>
</tr>
</thead>
<tbody>
<tr>
<td><img width="1238" alt="Screenshot 2023-11-20 at 12 54 03 PM" src="https://github.com/abi/screenshot-to-code/assets/23818/3b644dfa-9ca6-4148-84a7-3405b6671922"></td>
<td><img width="1414" alt="Screenshot 2023-11-20 at 12 59 56 PM" src="https://github.com/abi/screenshot-to-code/assets/23818/26201c9f-1a28-4f35-a3b1-1f04e2b8ce2a"></td>
</tr>
</tbody>
</table>
<p><strong>Instagram page (with not Taylor Swift pics)</strong></p>
<p><a href="https://github.com/abi/screenshot-to-code/assets/23818/503eb86a-356e-4dfc-926a-dabdb1ac7ba1">https://github.com/abi/screenshot-to-code/assets/23818/503eb86a-356e-4dfc-926a-dabdb1ac7ba1</a></p>
<p><strong>Hacker News</strong> but it gets the colors wrong at first so we nudge it</p>
<p><a href="https://github.com/abi/screenshot-to-code/assets/23818/3fec0f77-44e8-4fb3-a769-ac7410315e5d">https://github.com/abi/screenshot-to-code/assets/23818/3fec0f77-44e8-4fb3-a769-ac7410315e5d</a></p>
+
+
+ ed-donner/llm_engineering
+ 2024-12-01T01:40:21Z
+ tag:github.com,2024-12-01:/ed-donner/llm_engineering
+
+ <p>Repo to accompany my mastering LLM engineering course</p><hr><h1>LLM Engineering - Master AI and LLMs</h1>
<h2>Your 8 week journey to proficiency starts today</h2>
<p><img src="https://raw.githubusercontent.com/ed-donner/llm_engineering/main/voyage.jpg" alt="Voyage"></p>
<p>I'm so happy you're joining me on this path. We'll be building immensely satisfying projects in the coming weeks. Some will be easy, some will be challenging, many will ASTOUND you! The projects build on each other so you develop deeper and deeper expertise each week. One thing's for sure: you're going to have a lot of fun along the way.</p>
<h3>A note before you begin</h3>
<p>I'm here to help you be most successful with your learning! If you hit any snafus, or if you have any ideas on how I can improve the course, please do reach out in the platform or by emailing me direct (<a href="mailto:ed@edwarddonner.com">ed@edwarddonner.com</a>). It's always great to connect with people on LinkedIn to build up the community - you'll find me here:<br> <a href="https://www.linkedin.com/in/eddonner/">https://www.linkedin.com/in/eddonner/</a></p>
<p>Resources to accompany the course, including the slides and useful links, are here:<br> <a href="https://edwarddonner.com/2024/11/13/llm-engineering-resources/">https://edwarddonner.com/2024/11/13/llm-engineering-resources/</a></p>
<h2>Instant Gratification instructions for Week 1, Day 1</h2>
<p>We will start the course by installing Ollama so you can see results immediately!</p>
<ol>
<li>Download and install Ollama from <a href="https://ollama.com">https://ollama.com</a></li>
<li>On a PC, start a Command prompt / Powershell (Press Win + R, type <code>cmd</code>, and press Enter). On a Mac, start a Terminal (Applications > Utilities > Terminal).</li>
<li>Run <code>ollama run llama3.2</code> or for smaller machines try <code>ollama run llama3.2:1b</code></li>
<li>If this doesn't work, you may need to run <code>ollama serve</code> in another Powershell (Windows) or Terminal (Mac), and try step 3 again</li>
<li>And if that doesn't work on your box, I've set up this on the cloud. This is on Google Colab, which will need you to have a Google account to sign in, but is free: <a href="https://colab.research.google.com/drive/1-_f5XZPsChvfU1sJ0QqCePtIuc55LSdu?usp=sharing">https://colab.research.google.com/drive/1-_f5XZPsChvfU1sJ0QqCePtIuc55LSdu?usp=sharing</a></li>
</ol>
<p>Any problems, please contact me!</p>
<h2>Then, Setup instructions</h2>
<p>After we do the Ollama quick project, and after I introduce myself and the course, we get to work with the full environment setup.</p>
<p>Hopefully I've done a decent job of making these guides bulletproof - but please contact me right away if you hit roadblocks:</p>
<ul>
<li>PC people please follow the instructions in <a href="https://raw.githubusercontent.com/ed-donner/llm_engineering/main/SETUP-PC.md">SETUP-PC.md</a></li>
<li>Mac people please follow the instructions in <a href="https://raw.githubusercontent.com/ed-donner/llm_engineering/main/SETUP-mac.md">SETUP-mac.md</a></li>
<li>Linux people, the Mac instructions should be close enough!</li>
</ul>
<h3>An important point on API costs (which are optional! No need to spend if you don't wish)</h3>
<p>During the course, I'll suggest you try out the leading models at the forefront of progress, known as the Frontier models. I'll also suggest you run open-source models using Google Colab. These services have some charges, but I'll keep cost minimal - like, a few cents at a time. And I'll provide alternatives if you'd prefer not to use them.</p>
<p>Please do monitor your API usage to ensure you're comfortable with spend; I've included links below. There's no need to spend anything more than a couple of dollars for the entire course. Some AI providers such as OpenAI require a minimum credit like $5 or local equivalent; we should only spend a fraction of it, and you'll have plenty of opportunity to put it to good use in your own projects. During Week 7 you have an option to spend a bit more if you're enjoying the process - I spend about $10 myself and the results make me very happy indeed! But it's not necessary in the least; the important part is that you focus on learning.</p>
<p>I'll also show you an alternative if you'd rather not spend anything on APIs.</p>
<h3>How this Repo is organized</h3>
<p>There are folders for each of the "weeks", representing modules of the class, culminating in a powerful autonomous Agentic AI solution in Week 8 that draws on many of the prior weeks.<br> Follow the setup instructions above, then open the Week 1 folder and prepare for joy.</p>
<h3>The most important part</h3>
<p>The mantra of the course is: the best way to learn is by <strong>DOING</strong>. I don't type all the code during the course; I execute it for you to see the results. You should work along with me or after each lecture, running each cell, inspecting the objects to get a detailed understanding of what's happening. Then tweak the code and make it your own. There are juicy challenges for you throughout the course. I'd love it if you wanted to push your code so I can follow along with your progress, and I can make your solutions available to others so we share in your progress. While the projects are enjoyable, they are first and foremost designed to be <em>educational</em>, teaching you business skills that can be put into practice in your work.</p>
<h2>Starting in Week 3, we'll also be using Google Colab for running with GPUs</h2>
<p>You should be able to use the free tier or minimal spend to complete all the projects in the class. I personally signed up for Colab Pro+ and I'm loving it - but it's not required.</p>
<p>Learn about Google Colab and set up a Google account (if you don't already have one) <a href="https://colab.research.google.com/">here</a></p>
<p>The colab links are in the Week folders and also here:</p>
<ul>
<li>For week 3 day 1, this Google Colab shows what <a href="https://colab.research.google.com/drive/1DjcrYDZldAXKJ08x1uYIVCtItoLPk1Wr?usp=sharing">colab can do</a></li>
<li>For week 3 day 2, here is a colab for the HuggingFace <a href="https://colab.research.google.com/drive/1aMaEw8A56xs0bRM4lu8z7ou18jqyybGm?usp=sharing">pipelines API</a></li>
<li>For week 3 day 3, here's the colab on <a href="https://colab.research.google.com/drive/1WD6Y2N7ctQi1X9wa6rpkg8UfyA4iSVuz?usp=sharing">Tokenizers</a></li>
<li>For week 3 day 4, we go to a colab with HuggingFace <a href="https://colab.research.google.com/drive/1hhR9Z-yiqjUe7pJjVQw4c74z_V3VchLy?usp=sharing">models</a></li>
<li>For week 3 day 5, we return to colab to make our <a href="https://colab.research.google.com/drive/1KSMxOCprsl1QRpt_Rq0UqCAyMtPqDQYx?usp=sharing">Meeting Minutes product</a></li>
<li>For week 7, we will use these Colab books: <a href="https://colab.research.google.com/drive/15rqdMTJwK76icPBxNoqhI7Ww8UM-Y7ni?usp=sharing">Day 1</a> | <a href="https://colab.research.google.com/drive/1T72pbfZw32fq-clQEp-p8YQ4_qFKv4TP?usp=sharing">Day 2</a> | <a href="https://colab.research.google.com/drive/1csEdaECRtjV_1p9zMkaKKjCpYnltlN3M?usp=sharing">Days 3 and 4</a> | <a href="https://colab.research.google.com/drive/1igA0HF0gvQqbdBD4GkcK3GpHtuDLijYn?usp=sharing">Day 5</a></li>
</ul>
<h3>Monitoring API charges</h3>
<p>You can keep your API spend very low throughout this course; you can monitor spend at the dashboards: <a href="https://platform.openai.com/usage">here</a> for OpenAI, <a href="https://console.anthropic.com/settings/cost">here</a> for Anthropic and <a href="https://console.cloud.google.com/apis/api/generativelanguage.googleapis.com/cost">here</a> for Google Gemini.</p>
<p>The charges for the exercsies in this course should always be quite low, but if you'd prefer to keep them minimal, then be sure to always choose the cheapest versions of models:</p>
<ol>
<li>For OpenAI: Always use model <code>gpt-4o-mini</code> in the code instead of <code>gpt-4o</code></li>
<li>For Anthropic: Always use model <code>claude-3-haiku-20240307</code> in the code instead of the other Claude models</li>
<li>During week 7, look out for my instructions for using the cheaper dataset</li>
</ol>
<p>Please do message me or email me at <a href="mailto:ed@edwarddonner.com">ed@edwarddonner.com</a> if this doesn't work or if I can help with anything. I can't wait to hear how you get on.</p>
<table style="margin: 0; text-align: left;">
<tbody>
<tr>
<td style="width: 150px; height: 150px; vertical-align: middle;"> <img src="https://raw.githubusercontent.com/ed-donner/llm_engineering/main/resources.jpg" width="150" height="150" style="display: block;"> </td>
<td> <h2 style="color:#f71;">Other resources</h2> <span style="color:#f71;">I've put together this webpage with useful resources for the course. This includes links to all the slides.<br> <a href="https://edwarddonner.com/2024/11/13/llm-engineering-resources/">https://edwarddonner.com/2024/11/13/llm-engineering-resources/</a><br> Please keep this bookmarked, and I'll continue to add more useful links there over time. </span> </td>
</tr>
</tbody>
</table>
+
+
+ shader-slang/slang
+ 2024-12-01T01:40:21Z
+ tag:github.com,2024-12-01:/shader-slang/slang
+
+ <p>Making it easier to work with shaders</p><hr><h1>Slang</h1>
<p><img src="https://github.com/shader-slang/slang/actions/workflows/ci.yml/badge.svg?branch=master" alt="CI Status"> <img src="https://github.com/shader-slang/slang/actions/workflows/vk-gl-cts-nightly.yml/badge.svg?sanitize=true" alt="CTS Status"></p>
<p>Slang is a shading language that makes it easier to build and maintain large shader codebases in a modular and extensible fashion, while also maintaining the highest possible performance on modern GPUs and graphics APIs. Slang is based on years of collaboration between researchers at NVIDIA, Carnegie Mellon University, Stanford, MIT, UCSD and the University of Washington.</p>
<h2>Why Slang?</h2>
<p>The Slang shading language is designed to enable real-time graphics developers to work with large-scale, high-performance shader code.</p>
<h3>Write Shaders Once, Run Anywhere</h3>
<p>The Slang compiler can generate code for a wide variety of targets: D3D12, Vulkan, Metal, D3D11, OpenGL, CUDA, and even generate code to run on a CPU. For textual targets, such as Metal Shading Language (MSL) and CUDA, Slang produces readable code that preserves original identifier names, as well as the type and call structure, making it easier to debug.</p>
<h3>Access the Latest GPU Features</h3>
<p>Slang code is highly portable, but can still leverage unique platform capabilities, including the latest features in Direct3D and Vulkan. For example, developers can make full use of <a href="https://shader-slang.com/slang/user-guide/convenience-features.html#pointers-limited">pointers</a> when generating SPIR-V. Slang's <a href="https://shader-slang.com/slang/user-guide/capabilities.html">capability system</a> helps applications manage feature set differences across target platforms by ensuring code only uses available features during the type-checking step, before generating final code. Additionally, Slang provides <a href="https://shader-slang.com/slang/user-guide/a1-04-interop.html">flexible interop</a> features to enable directly embedding target code or SPIR-V into generated shaders.</p>
<h3>Leverage Neural Graphics with Automatic Differentiation</h3>
<p>Slang can <a href="https://shader-slang.com/slang/user-guide/autodiff.html">automatically generate both forward and backward derivative propagation code</a> for complex functions that involve arbitrary control flow and dynamic dispatch. This allows existing rendering codebases to easily become differentiable, or for Slang to serve as the kernel language in a PyTorch-driven machine learning framework via <a href="https://shader-slang.com/slang/user-guide/a1-02-slangpy.html"><code>slangtorch</code></a>.</p>
<h3>Scalable Software Development with Modules</h3>
<p>Slang provides a <a href="https://shader-slang.com/slang/user-guide/modules.html">module system</a> that enables logical organization of code for separate compilation. Slang modules can be independently compiled offline to a custom IR (with optional obfuscation) and then linked at runtime to generate code in formats such as DXIL or SPIR-V.</p>
<h3>Code Specialization that Works with Modules</h3>
<p>Slang supports <a href="https://shader-slang.com/slang/user-guide/interfaces-generics.html">generics and interfaces</a> (a.k.a. type traits/protocols), allowing for clear expression of shader specialization without the need for preprocessor techniques or string-pasting. Unlike C++ templates, Slang's generics are pre-checked and don't produce cascading error messages that are difficult to diagnose. The same generic shader can be specialized for a variety of different types to produce specialized code ahead of time, or on the fly, entirely under application control.</p>
<h3>Easy On-ramp for HLSL and GLSL Codebases</h3>
<p>Slang's syntax is similar to HLSL, and most existing HLSL code can be compiled with the Slang compiler out-of-the-box, or with just minor modifications. This allows existing shader codebases to immediately benefit from Slang without requiring a complete rewrite or port.</p>
<p>Slang provides a compatibility module that enables the use of most GLSL intrinsic functions and GLSL's parameter binding syntax.</p>
<h3>Comprehensive Tooling Support</h3>
<p>Slang comes with full support of IntelliSense editing features in Visual Studio Code and Visual Studio through the Language Server Protocol. Full debugging capabilities are also available through RenderDoc and SPIR-V based tools.</p>
<h2>Getting Started</h2>
<p>The fastest way to get started using Slang in your own development is to use a pre-built binary package, available through GitHub <a href="https://github.com/shader-slang/slang/releases">releases</a>. Slang binaries are also included in the <a href="https://vulkan.lunarg.com/sdk/home">Vulkan SDK</a> since version 1.3.296.0.</p>
<p>There are packages built for 32- and 64-bit Windows, as well as 64-bit Ubuntu. Each binary release includes the command-line <code>slangc</code> compiler, a shared library for the compiler, and the <code>slang.h</code> header.</p>
<p>See the user-guide for info on using the <code>slangc</code> command-line tool: <a href="https://shader-slang.com/slang/user-guide/compiling.html#command-line-compilation-with-slangc">Slang Command Line Usage</a>.</p>
<p>If you want to try out the Slang language without installing anything, a fast and simple way is to use the <a href="https://shader-slang.com/slang-playground">Slang Playground</a>. The playground allows you to compile Slang code to a variety of targets, and even run some simple shaders directly within the browser. The playground loads Slang compiler to your browser and runs all compilation locally. No data will be sent to any servers.</p>
<p>If you would like to build Slang from source, please consult the <a href="https://raw.githubusercontent.com/shader-slang/slang/master/docs/building.md">build instructions</a>.</p>
<h2>Documentation</h2>
<p>The Slang project provides a variety of different <a href="https://raw.githubusercontent.com/shader-slang/slang/master/docs/">documentation</a>, but most users would be well served starting with the <a href="https://shader-slang.github.io/slang/user-guide/">User's Guide</a>.</p>
<p>For developers writing Slang code, the <a href="https://shader-slang.com/stdlib-reference/">Slang Core Module Reference</a> provides detailed documentation on Slang's built-in types and functions.</p>
<p>We also provide a few <a href="https://raw.githubusercontent.com/shader-slang/slang/master/examples/">examples</a> of how to integrate Slang into a rendering application.</p>
<p>These examples use a graphics layer that we include with Slang called "GFX" which is an abstraction library of various graphics APIs (D3D11, D2D12, OpenGL, Vulkan, CUDA, and the CPU) to support cross-platform applications using GPU graphics and compute capabilities. If you'd like to learn more about GFX, see the <a href="https://shader-slang.com/slang/gfx-user-guide/index.html">GFX User Guide</a>.</p>
<p>Additionally, we recommend checking out <a href="https://github.com/nvpro-samples/vk_mini_samples/">Vulkan Mini Examples</a> for more examples of using Slang's language features available on Vulkan, such as pointers and the ray tracing intrinsics.</p>
<h2>Contributing</h2>
<p>If you'd like to contribute to the project, we are excited to have your input. The following guidelines should be observed by contributors:</p>
<ul>
<li>Please follow the contributor <a href="https://raw.githubusercontent.com/shader-slang/slang/master/CODE_OF_CONDUCT.md">Code of Conduct</a>.</li>
<li>Bugs reports and feature requests should go through the GitHub issue tracker</li>
<li>Changes should ideally come in as small pull requests on top of <code>master</code>, coming from your own personal fork of the project</li>
<li>Large features that will involve multiple contributors or a long development time should be discussed in issues, and broken down into smaller pieces that can be implemented and checked in in stages</li>
</ul>
<p><a href="https://raw.githubusercontent.com/shader-slang/slang/master/CONTRIBUTING.md">Contribution guide</a> describes the workflow for contributors at more detail.</p>
<h2>Limitations and Support</h2>
<h3>Platform support</h3>
<p>The Slang compiler and libraries can be built on the following platforms:</p>
<table>
<thead>
<tr>
<th align="center">Windows</th>
<th align="center">Linux</th>
<th align="center">MacOS</th>
<th align="center">WebAssembly</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">supported</td>
<td align="center">supported</td>
<td align="center">supported</td>
<td align="center">experimental</td>
</tr>
</tbody>
</table>
<p>Both <code>x86_64</code> and <code>aarch64</code> architectures are supported on Windows, Linux and MacOS platforms.</p>
<h3>Target support</h3>
<p>Slang can compile shader code to the following targets:</p>
<table>
<thead>
<tr>
<th align="center">Target</th>
<th align="center">Status</th>
<th align="center">Output Formats</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">Direct3D 11</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#direct3d-11">supported</a></td>
<td align="center">HLSL</td>
</tr>
<tr>
<td align="center">Direct3D 12</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#direct3d-12">supported</a></td>
<td align="center">HLSL</td>
</tr>
<tr>
<td align="center">Vulkan</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#vulkan">supported</a></td>
<td align="center">SPIRV, GLSL</td>
</tr>
<tr>
<td align="center">Metal</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#metal">experimental*</a></td>
<td align="center">Metal Shading Language</td>
</tr>
<tr>
<td align="center">WebGPU</td>
<td align="center">experimental**</td>
<td align="center">WGSL</td>
</tr>
<tr>
<td align="center">CUDA</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cuda-and-optix">supported</a></td>
<td align="center">C++ (compute only)</td>
</tr>
<tr>
<td align="center">Optix</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cuda-and-optix">experimental</a></td>
<td align="center">C++ (WIP)</td>
</tr>
<tr>
<td align="center">CPU</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cpu-compute">experimental</a></td>
<td align="center">C++ (kernel), C++ (host), standalone executable, dynamic library</td>
</tr>
</tbody>
</table>
<blockquote>
<p>*Slang currently supports generating vertex, fragment, compute, task and mesh shaders for Metal.</p>
</blockquote>
<blockquote>
<p>**WGSL support is still work in-progress.</p>
</blockquote>
<p>For greater detail, see the <a href="https://shader-slang.com/slang/user-guide/targets.html">Supported Compilation Targets</a> section of the <a href="https://shader-slang.github.io/slang/user-guide/">User Guide</a></p>
<p>The Slang project has been used for production applications and large shader codebases, but it is still under active development. Support is currently focused on the platforms (Windows, Linux) and target APIs (Direct3D 12, Vulkan) where Slang is used most heavily. Users who are looking for support on other platforms or APIs should coordinate with the development team via the issue tracker to make sure that their use cases can be supported.</p>
<h2>License</h2>
<p>The Slang code itself is under the Apache 2.0 with LLVM Exception license (see <a href="https://raw.githubusercontent.com/shader-slang/slang/master/LICENSE">LICENSE</a>).</p>
<p>Builds of the core Slang tools depend on the following projects, either automatically or optionally, which may have their own licenses:</p>
<ul>
<li><a href="https://github.com/KhronosGroup/glslang"><code>glslang</code></a> (BSD)</li>
<li><a href="https://github.com/lz4/lz4"><code>lz4</code></a> (BSD)</li>
<li><a href="https://github.com/richgel999/miniz"><code>miniz</code></a> (MIT)</li>
<li><a href="https://github.com/KhronosGroup/SPIRV-Headers"><code>spirv-headers</code></a> (Modified MIT)</li>
<li><a href="https://github.com/KhronosGroup/SPIRV-Tools"><code>spirv-tools</code></a> (Apache 2.0)</li>
<li><a href="https://github.com/martinus/unordered_dense"><code>ankerl::unordered_dense::{map, set}</code></a> (MIT)</li>
</ul>
<p>Slang releases may include <a href="https://github.com/shader-slang/slang-llvm">slang-llvm</a> which includes <a href="https://github.com/llvm/llvm-project">LLVM</a> under the license:</p>
<ul>
<li><a href="https://llvm.org/docs/DeveloperPolicy.html#new-llvm-project-license-framework"><code>llvm</code></a> (Apache 2.0 License with LLVM exceptions)</li>
</ul>
<p>Some of the tests and example programs that build with Slang use the following projects, which may have their own licenses:</p>
<ul>
<li><a href="https://github.com/g-truc/glm"><code>glm</code></a> (MIT)</li>
<li><code>stb_image</code> and <code>stb_image_write</code> from the <a href="https://github.com/nothings/stb"><code>stb</code></a> collection of single-file libraries (Public Domain)</li>
<li><a href="https://github.com/tinyobjloader/tinyobjloader"><code>tinyobjloader</code></a> (MIT)</li>
</ul>
+
+
\ No newline at end of file
diff --git a/alloy/daily/index.xml b/alloy/daily/index.xml
index 724b2bd0eaa..377d14759d0 100644
--- a/alloy/daily/index.xml
+++ b/alloy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Alloy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:56Z
+ 2024-12-01T01:29:47Z
Daily Trending of Alloy in GitHub
\ No newline at end of file
diff --git a/alloy/monthly/index.xml b/alloy/monthly/index.xml
new file mode 100644
index 00000000000..53cf732e1ee
--- /dev/null
+++ b/alloy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Alloy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:26Z
+ Monthly Trending of Alloy in GitHub
+
+
\ No newline at end of file
diff --git a/alloy/weekly/index.xml b/alloy/weekly/index.xml
new file mode 100644
index 00000000000..399fbaa1872
--- /dev/null
+++ b/alloy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Alloy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:33Z
+ Weekly Trending of Alloy in GitHub
+
+
\ No newline at end of file
diff --git a/alpine-abuild/daily/index.xml b/alpine-abuild/daily/index.xml
index 1eda899eb2f..815b61afb49 100644
--- a/alpine-abuild/daily/index.xml
+++ b/alpine-abuild/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Alpine Abuild Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:57Z
+ 2024-12-01T01:29:47Z
Daily Trending of Alpine Abuild in GitHub
\ No newline at end of file
diff --git a/alpine-abuild/monthly/index.xml b/alpine-abuild/monthly/index.xml
new file mode 100644
index 00000000000..ae478167fdb
--- /dev/null
+++ b/alpine-abuild/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Alpine Abuild Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:26Z
+ Monthly Trending of Alpine Abuild in GitHub
+
+
\ No newline at end of file
diff --git a/alpine-abuild/weekly/index.xml b/alpine-abuild/weekly/index.xml
new file mode 100644
index 00000000000..f6b488003aa
--- /dev/null
+++ b/alpine-abuild/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Alpine Abuild Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:33Z
+ Weekly Trending of Alpine Abuild in GitHub
+
+
\ No newline at end of file
diff --git a/altium-designer/daily/index.xml b/altium-designer/daily/index.xml
index cc5501fb308..fadc7db6ce8 100644
--- a/altium-designer/daily/index.xml
+++ b/altium-designer/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Altium Designer Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:56Z
+ 2024-12-01T01:29:46Z
Daily Trending of Altium Designer in GitHub
\ No newline at end of file
diff --git a/altium-designer/monthly/index.xml b/altium-designer/monthly/index.xml
new file mode 100644
index 00000000000..8b321da4b2d
--- /dev/null
+++ b/altium-designer/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Altium Designer Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:26Z
+ Monthly Trending of Altium Designer in GitHub
+
+
\ No newline at end of file
diff --git a/altium-designer/weekly/index.xml b/altium-designer/weekly/index.xml
new file mode 100644
index 00000000000..f5905efba59
--- /dev/null
+++ b/altium-designer/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Altium Designer Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:32Z
+ Weekly Trending of Altium Designer in GitHub
+
+
\ No newline at end of file
diff --git a/ampl/daily/index.xml b/ampl/daily/index.xml
index 17050364ae7..528d41bfc07 100644
--- a/ampl/daily/index.xml
+++ b/ampl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AMPL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:56Z
+ 2024-12-01T01:29:46Z
Daily Trending of AMPL in GitHub
\ No newline at end of file
diff --git a/ampl/monthly/index.xml b/ampl/monthly/index.xml
new file mode 100644
index 00000000000..28c42646098
--- /dev/null
+++ b/ampl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AMPL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:27Z
+ Monthly Trending of AMPL in GitHub
+
+
\ No newline at end of file
diff --git a/ampl/weekly/index.xml b/ampl/weekly/index.xml
new file mode 100644
index 00000000000..0bae90f065f
--- /dev/null
+++ b/ampl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AMPL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:33Z
+ Weekly Trending of AMPL in GitHub
+
+
\ No newline at end of file
diff --git a/angelscript/daily/index.xml b/angelscript/daily/index.xml
index 928345042e1..31304b61115 100644
--- a/angelscript/daily/index.xml
+++ b/angelscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AngelScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:57Z
+ 2024-12-01T01:29:47Z
Daily Trending of AngelScript in GitHub
\ No newline at end of file
diff --git a/angelscript/monthly/index.xml b/angelscript/monthly/index.xml
new file mode 100644
index 00000000000..d21a84b1b53
--- /dev/null
+++ b/angelscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AngelScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:28Z
+ Monthly Trending of AngelScript in GitHub
+
+
\ No newline at end of file
diff --git a/angelscript/weekly/index.xml b/angelscript/weekly/index.xml
new file mode 100644
index 00000000000..904c296e3ec
--- /dev/null
+++ b/angelscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AngelScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:35Z
+ Weekly Trending of AngelScript in GitHub
+
+
\ No newline at end of file
diff --git a/ant-build-system/daily/index.xml b/ant-build-system/daily/index.xml
index 5d8e5bdb8e8..6fd0cb1578c 100644
--- a/ant-build-system/daily/index.xml
+++ b/ant-build-system/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ant Build System Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:58Z
+ 2024-12-01T01:29:48Z
Daily Trending of Ant Build System in GitHub
\ No newline at end of file
diff --git a/ant-build-system/monthly/index.xml b/ant-build-system/monthly/index.xml
new file mode 100644
index 00000000000..5efb0555006
--- /dev/null
+++ b/ant-build-system/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ant Build System Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:27Z
+ Monthly Trending of Ant Build System in GitHub
+
+
\ No newline at end of file
diff --git a/ant-build-system/weekly/index.xml b/ant-build-system/weekly/index.xml
new file mode 100644
index 00000000000..03db01f380d
--- /dev/null
+++ b/ant-build-system/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ant Build System Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:34Z
+ Weekly Trending of Ant Build System in GitHub
+
+
\ No newline at end of file
diff --git a/antlr/daily/index.xml b/antlr/daily/index.xml
index 73dffd09494..1e3fd600860 100644
--- a/antlr/daily/index.xml
+++ b/antlr/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ANTLR Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:58Z
+ 2024-12-01T01:29:49Z
Daily Trending of ANTLR in GitHub
\ No newline at end of file
diff --git a/antlr/monthly/index.xml b/antlr/monthly/index.xml
new file mode 100644
index 00000000000..05ecdcbb864
--- /dev/null
+++ b/antlr/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ANTLR Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:28Z
+ Monthly Trending of ANTLR in GitHub
+
+
\ No newline at end of file
diff --git a/antlr/weekly/index.xml b/antlr/weekly/index.xml
new file mode 100644
index 00000000000..055df883fcd
--- /dev/null
+++ b/antlr/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ANTLR Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:35Z
+ Weekly Trending of ANTLR in GitHub
+
+
\ No newline at end of file
diff --git a/apacheconf/daily/index.xml b/apacheconf/daily/index.xml
index 5f32f0dad41..e62fb482623 100644
--- a/apacheconf/daily/index.xml
+++ b/apacheconf/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ApacheConf Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:00Z
+ 2024-12-01T01:29:49Z
Daily Trending of ApacheConf in GitHub
\ No newline at end of file
diff --git a/apacheconf/monthly/index.xml b/apacheconf/monthly/index.xml
new file mode 100644
index 00000000000..7dc1026b405
--- /dev/null
+++ b/apacheconf/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ApacheConf Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:30Z
+ Monthly Trending of ApacheConf in GitHub
+
+
\ No newline at end of file
diff --git a/apacheconf/weekly/index.xml b/apacheconf/weekly/index.xml
new file mode 100644
index 00000000000..916f3589d23
--- /dev/null
+++ b/apacheconf/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ApacheConf Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:37Z
+ Weekly Trending of ApacheConf in GitHub
+
+
\ No newline at end of file
diff --git a/apex/daily/index.xml b/apex/daily/index.xml
index 3fe4b90f386..7522f6cf707 100644
--- a/apex/daily/index.xml
+++ b/apex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Apex Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:00Z
+ 2024-12-01T01:29:50Z
Daily Trending of Apex in GitHub
\ No newline at end of file
diff --git a/apex/monthly/index.xml b/apex/monthly/index.xml
new file mode 100644
index 00000000000..596fdbe9cff
--- /dev/null
+++ b/apex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Apex Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:29Z
+ Monthly Trending of Apex in GitHub
+
+
\ No newline at end of file
diff --git a/apex/weekly/index.xml b/apex/weekly/index.xml
new file mode 100644
index 00000000000..2bd904e4f60
--- /dev/null
+++ b/apex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Apex Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:36Z
+ Weekly Trending of Apex in GitHub
+
+
\ No newline at end of file
diff --git a/api-blueprint/daily/index.xml b/api-blueprint/daily/index.xml
index 6aeb073d7b8..d1ac06d1fcc 100644
--- a/api-blueprint/daily/index.xml
+++ b/api-blueprint/daily/index.xml
@@ -1,7 +1,7 @@
GitHub API Blueprint Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:59Z
+ 2024-12-01T01:29:50Z
Daily Trending of API Blueprint in GitHub
\ No newline at end of file
diff --git a/api-blueprint/monthly/index.xml b/api-blueprint/monthly/index.xml
new file mode 100644
index 00000000000..2e2625a7623
--- /dev/null
+++ b/api-blueprint/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub API Blueprint Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:30Z
+ Monthly Trending of API Blueprint in GitHub
+
+
\ No newline at end of file
diff --git a/api-blueprint/weekly/index.xml b/api-blueprint/weekly/index.xml
new file mode 100644
index 00000000000..960e41862d4
--- /dev/null
+++ b/api-blueprint/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub API Blueprint Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:36Z
+ Weekly Trending of API Blueprint in GitHub
+
+
\ No newline at end of file
diff --git a/apl/daily/index.xml b/apl/daily/index.xml
index 59339b4041d..0525b59187b 100644
--- a/apl/daily/index.xml
+++ b/apl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub APL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:00Z
+ 2024-12-01T01:29:50Z
Daily Trending of APL in GitHub
\ No newline at end of file
diff --git a/apl/monthly/index.xml b/apl/monthly/index.xml
new file mode 100644
index 00000000000..ec65b9e0ee5
--- /dev/null
+++ b/apl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub APL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:29Z
+ Monthly Trending of APL in GitHub
+
+
\ No newline at end of file
diff --git a/apl/weekly/index.xml b/apl/weekly/index.xml
new file mode 100644
index 00000000000..26e812115e6
--- /dev/null
+++ b/apl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub APL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:37Z
+ Weekly Trending of APL in GitHub
+
+
\ No newline at end of file
diff --git a/apollo-guidance-computer/daily/index.xml b/apollo-guidance-computer/daily/index.xml
index bd21ee13f95..56026936a5e 100644
--- a/apollo-guidance-computer/daily/index.xml
+++ b/apollo-guidance-computer/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Apollo Guidance Computer Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:01Z
+ 2024-12-01T01:29:52Z
Daily Trending of Apollo Guidance Computer in GitHub
\ No newline at end of file
diff --git a/apollo-guidance-computer/monthly/index.xml b/apollo-guidance-computer/monthly/index.xml
new file mode 100644
index 00000000000..f127fc163fe
--- /dev/null
+++ b/apollo-guidance-computer/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Apollo Guidance Computer Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:31Z
+ Monthly Trending of Apollo Guidance Computer in GitHub
+
+
\ No newline at end of file
diff --git a/apollo-guidance-computer/weekly/index.xml b/apollo-guidance-computer/weekly/index.xml
new file mode 100644
index 00000000000..090f8f6906e
--- /dev/null
+++ b/apollo-guidance-computer/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Apollo Guidance Computer Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:38Z
+ Weekly Trending of Apollo Guidance Computer in GitHub
+
+
\ No newline at end of file
diff --git a/applescript/daily/index.xml b/applescript/daily/index.xml
index 20e8c3e1ee0..d6976b75cd6 100644
--- a/applescript/daily/index.xml
+++ b/applescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AppleScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:01Z
+ 2024-12-01T01:29:51Z
Daily Trending of AppleScript in GitHub
\ No newline at end of file
diff --git a/applescript/monthly/index.xml b/applescript/monthly/index.xml
new file mode 100644
index 00000000000..43ccadb355d
--- /dev/null
+++ b/applescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AppleScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:31Z
+ Monthly Trending of AppleScript in GitHub
+
+
\ No newline at end of file
diff --git a/applescript/weekly/index.xml b/applescript/weekly/index.xml
new file mode 100644
index 00000000000..fdea3398960
--- /dev/null
+++ b/applescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AppleScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:39Z
+ Weekly Trending of AppleScript in GitHub
+
+
\ No newline at end of file
diff --git a/arc/daily/index.xml b/arc/daily/index.xml
index 8bb67d16e4b..6b304834f6a 100644
--- a/arc/daily/index.xml
+++ b/arc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Arc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:02Z
+ 2024-12-01T01:29:51Z
Daily Trending of Arc in GitHub
\ No newline at end of file
diff --git a/arc/monthly/index.xml b/arc/monthly/index.xml
new file mode 100644
index 00000000000..0e33070d407
--- /dev/null
+++ b/arc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Arc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:32Z
+ Monthly Trending of Arc in GitHub
+
+
\ No newline at end of file
diff --git a/arc/weekly/index.xml b/arc/weekly/index.xml
new file mode 100644
index 00000000000..08f4fb25aca
--- /dev/null
+++ b/arc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Arc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:38Z
+ Weekly Trending of Arc in GitHub
+
+
\ No newline at end of file
diff --git a/asciidoc/daily/index.xml b/asciidoc/daily/index.xml
index d742745930e..4a47ec95db0 100644
--- a/asciidoc/daily/index.xml
+++ b/asciidoc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AsciiDoc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:02Z
+ 2024-12-01T01:29:52Z
Daily Trending of AsciiDoc in GitHub
\ No newline at end of file
diff --git a/asciidoc/monthly/index.xml b/asciidoc/monthly/index.xml
new file mode 100644
index 00000000000..248eec91383
--- /dev/null
+++ b/asciidoc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AsciiDoc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:32Z
+ Monthly Trending of AsciiDoc in GitHub
+
+
\ No newline at end of file
diff --git a/asciidoc/weekly/index.xml b/asciidoc/weekly/index.xml
new file mode 100644
index 00000000000..ff1a8fd2284
--- /dev/null
+++ b/asciidoc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AsciiDoc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:38Z
+ Weekly Trending of AsciiDoc in GitHub
+
+
\ No newline at end of file
diff --git a/asl/daily/index.xml b/asl/daily/index.xml
index 63570ac6711..e77f5ca4ae4 100644
--- a/asl/daily/index.xml
+++ b/asl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ASL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:03Z
+ 2024-12-01T01:29:53Z
Daily Trending of ASL in GitHub
\ No newline at end of file
diff --git a/asl/monthly/index.xml b/asl/monthly/index.xml
new file mode 100644
index 00000000000..05a99de103c
--- /dev/null
+++ b/asl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:34Z
+ Monthly Trending of ASL in GitHub
+
+
\ No newline at end of file
diff --git a/asl/weekly/index.xml b/asl/weekly/index.xml
new file mode 100644
index 00000000000..e141bca90a6
--- /dev/null
+++ b/asl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:40Z
+ Weekly Trending of ASL in GitHub
+
+
\ No newline at end of file
diff --git a/asn.1/daily/index.xml b/asn.1/daily/index.xml
index fca40a956e5..c252384edbb 100644
--- a/asn.1/daily/index.xml
+++ b/asn.1/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ASN.1 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:03Z
+ 2024-12-01T01:29:53Z
Daily Trending of ASN.1 in GitHub
\ No newline at end of file
diff --git a/asn.1/monthly/index.xml b/asn.1/monthly/index.xml
new file mode 100644
index 00000000000..2aed11fd734
--- /dev/null
+++ b/asn.1/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASN.1 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:33Z
+ Monthly Trending of ASN.1 in GitHub
+
+
\ No newline at end of file
diff --git a/asn.1/weekly/index.xml b/asn.1/weekly/index.xml
new file mode 100644
index 00000000000..5cda37832d1
--- /dev/null
+++ b/asn.1/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASN.1 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:40Z
+ Weekly Trending of ASN.1 in GitHub
+
+
\ No newline at end of file
diff --git a/asp.net/daily/index.xml b/asp.net/daily/index.xml
index 5840232aa44..9508262b6e5 100644
--- a/asp.net/daily/index.xml
+++ b/asp.net/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ASP.NET Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:03Z
+ 2024-12-01T01:29:54Z
Daily Trending of ASP.NET in GitHub
\ No newline at end of file
diff --git a/asp.net/monthly/index.xml b/asp.net/monthly/index.xml
new file mode 100644
index 00000000000..3b29acf03d7
--- /dev/null
+++ b/asp.net/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASP.NET Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:32Z
+ Monthly Trending of ASP.NET in GitHub
+
+
\ No newline at end of file
diff --git a/asp.net/weekly/index.xml b/asp.net/weekly/index.xml
new file mode 100644
index 00000000000..0d54bf10023
--- /dev/null
+++ b/asp.net/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ASP.NET Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:39Z
+ Weekly Trending of ASP.NET in GitHub
+
+
\ No newline at end of file
diff --git a/aspectj/daily/index.xml b/aspectj/daily/index.xml
index e02ef0ea73b..dde883414ec 100644
--- a/aspectj/daily/index.xml
+++ b/aspectj/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AspectJ Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:04Z
+ 2024-12-01T01:29:55Z
Daily Trending of AspectJ in GitHub
\ No newline at end of file
diff --git a/aspectj/monthly/index.xml b/aspectj/monthly/index.xml
new file mode 100644
index 00000000000..adb9657ea04
--- /dev/null
+++ b/aspectj/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AspectJ Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:34Z
+ Monthly Trending of AspectJ in GitHub
+
+
\ No newline at end of file
diff --git a/aspectj/weekly/index.xml b/aspectj/weekly/index.xml
new file mode 100644
index 00000000000..dca1e4a11be
--- /dev/null
+++ b/aspectj/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AspectJ Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:41Z
+ Weekly Trending of AspectJ in GitHub
+
+
\ No newline at end of file
diff --git a/assembly/daily/index.xml b/assembly/daily/index.xml
index ab9f2f000cb..30b9c4c365c 100644
--- a/assembly/daily/index.xml
+++ b/assembly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Assembly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:06Z
+ 2024-12-01T01:29:56Z
Daily Trending of Assembly in GitHub
\ No newline at end of file
diff --git a/assembly/monthly/index.xml b/assembly/monthly/index.xml
new file mode 100644
index 00000000000..0f888abd436
--- /dev/null
+++ b/assembly/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Assembly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:35Z
+ Monthly Trending of Assembly in GitHub
+
+
+ apple/swift-crypto
+ 2024-12-01T01:51:35Z
+ tag:github.com,2024-12-01:/apple/swift-crypto
+
+ <p>Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.</p><hr>
+
+
+ apache/arrow-go
+ 2024-12-01T01:51:35Z
+ tag:github.com,2024-12-01:/apache/arrow-go
+
+ <p>Official Go implementation of Apache Arrow</p><hr>
+
+
\ No newline at end of file
diff --git a/assembly/weekly/index.xml b/assembly/weekly/index.xml
new file mode 100644
index 00000000000..af9c319aa6c
--- /dev/null
+++ b/assembly/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Assembly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:44Z
+ Weekly Trending of Assembly in GitHub
+
+
+ apple/swift-crypto
+ 2024-12-01T01:40:44Z
+ tag:github.com,2024-12-01:/apple/swift-crypto
+
+ <p>Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.</p><hr>
+
+
\ No newline at end of file
diff --git a/astro/daily/index.xml b/astro/daily/index.xml
index 619fe0655f9..1bc9cb8ecf1 100644
--- a/astro/daily/index.xml
+++ b/astro/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Astro Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:05Z
+ 2024-12-01T01:29:56Z
Daily Trending of Astro in GitHub
+
+ cameronapak/freedom-stack
+ 2024-12-01T01:29:56Z
+ tag:github.com,2024-12-01:/cameronapak/freedom-stack
+
+ <p>A full-stack Astro starter kit that feels freeing and is free. Ready for use, and even better when using Cursor's IDE.</p><hr>
+
\ No newline at end of file
diff --git a/astro/monthly/index.xml b/astro/monthly/index.xml
new file mode 100644
index 00000000000..e2b238dae33
--- /dev/null
+++ b/astro/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Astro Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:36Z
+ Monthly Trending of Astro in GitHub
+
+
\ No newline at end of file
diff --git a/astro/weekly/index.xml b/astro/weekly/index.xml
new file mode 100644
index 00000000000..47fda06316e
--- /dev/null
+++ b/astro/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Astro Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:42Z
+ Weekly Trending of Astro in GitHub
+
+
+ delucis/astro-embed
+ 2024-12-01T01:40:42Z
+ tag:github.com,2024-12-01:/delucis/astro-embed
+
+ <p>Low-JavaScript embed components for Astro websites</p><hr>
+
+
\ No newline at end of file
diff --git a/asymptote/daily/index.xml b/asymptote/daily/index.xml
index f0e7d15d1bc..b13db1a7c6e 100644
--- a/asymptote/daily/index.xml
+++ b/asymptote/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Asymptote Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:05Z
+ 2024-12-01T01:29:54Z
Daily Trending of Asymptote in GitHub
\ No newline at end of file
diff --git a/asymptote/monthly/index.xml b/asymptote/monthly/index.xml
new file mode 100644
index 00000000000..13f1c272134
--- /dev/null
+++ b/asymptote/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Asymptote Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:35Z
+ Monthly Trending of Asymptote in GitHub
+
+
\ No newline at end of file
diff --git a/asymptote/weekly/index.xml b/asymptote/weekly/index.xml
new file mode 100644
index 00000000000..5d90292a5aa
--- /dev/null
+++ b/asymptote/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Asymptote Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:41Z
+ Weekly Trending of Asymptote in GitHub
+
+
\ No newline at end of file
diff --git a/ats/daily/index.xml b/ats/daily/index.xml
index 3e7d8ebc2f1..34b3928d0d6 100644
--- a/ats/daily/index.xml
+++ b/ats/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ATS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:07Z
+ 2024-12-01T01:29:57Z
Daily Trending of ATS in GitHub
\ No newline at end of file
diff --git a/ats/monthly/index.xml b/ats/monthly/index.xml
new file mode 100644
index 00000000000..21e1bc6998f
--- /dev/null
+++ b/ats/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ATS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:37Z
+ Monthly Trending of ATS in GitHub
+
+
\ No newline at end of file
diff --git a/ats/weekly/index.xml b/ats/weekly/index.xml
new file mode 100644
index 00000000000..667f7d9e3a8
--- /dev/null
+++ b/ats/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ATS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:45Z
+ Weekly Trending of ATS in GitHub
+
+
\ No newline at end of file
diff --git a/augeas/daily/index.xml b/augeas/daily/index.xml
index 042c880b9ec..01d23681b55 100644
--- a/augeas/daily/index.xml
+++ b/augeas/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Augeas Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:07Z
+ 2024-12-01T01:29:57Z
Daily Trending of Augeas in GitHub
\ No newline at end of file
diff --git a/augeas/monthly/index.xml b/augeas/monthly/index.xml
new file mode 100644
index 00000000000..4f11b1cfc08
--- /dev/null
+++ b/augeas/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Augeas Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:37Z
+ Monthly Trending of Augeas in GitHub
+
+
\ No newline at end of file
diff --git a/augeas/weekly/index.xml b/augeas/weekly/index.xml
new file mode 100644
index 00000000000..e2731562aec
--- /dev/null
+++ b/augeas/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Augeas Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:45Z
+ Weekly Trending of Augeas in GitHub
+
+
\ No newline at end of file
diff --git a/autohotkey/daily/index.xml b/autohotkey/daily/index.xml
index db6d5de08b2..67a5e48c82a 100644
--- a/autohotkey/daily/index.xml
+++ b/autohotkey/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AutoHotkey Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:08Z
+ 2024-12-01T01:29:58Z
Daily Trending of AutoHotkey in GitHub
\ No newline at end of file
diff --git a/autohotkey/monthly/index.xml b/autohotkey/monthly/index.xml
new file mode 100644
index 00000000000..3afddf3d2f0
--- /dev/null
+++ b/autohotkey/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AutoHotkey Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:37Z
+ Monthly Trending of AutoHotkey in GitHub
+
+
\ No newline at end of file
diff --git a/autohotkey/weekly/index.xml b/autohotkey/weekly/index.xml
new file mode 100644
index 00000000000..cb1c21b7cbf
--- /dev/null
+++ b/autohotkey/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AutoHotkey Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:46Z
+ Weekly Trending of AutoHotkey in GitHub
+
+
\ No newline at end of file
diff --git a/autoit/daily/index.xml b/autoit/daily/index.xml
index 36902a639b1..7684c542c1a 100644
--- a/autoit/daily/index.xml
+++ b/autoit/daily/index.xml
@@ -1,7 +1,7 @@
GitHub AutoIt Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:07Z
+ 2024-12-01T01:29:58Z
Daily Trending of AutoIt in GitHub
\ No newline at end of file
diff --git a/autoit/monthly/index.xml b/autoit/monthly/index.xml
new file mode 100644
index 00000000000..f0f1190b01e
--- /dev/null
+++ b/autoit/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AutoIt Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:38Z
+ Monthly Trending of AutoIt in GitHub
+
+
\ No newline at end of file
diff --git a/autoit/weekly/index.xml b/autoit/weekly/index.xml
new file mode 100644
index 00000000000..8d4ed7939f3
--- /dev/null
+++ b/autoit/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub AutoIt Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:46Z
+ Weekly Trending of AutoIt in GitHub
+
+
\ No newline at end of file
diff --git a/avro-idl/daily/index.xml b/avro-idl/daily/index.xml
index a9fa55b7886..8ccaba3d78d 100644
--- a/avro-idl/daily/index.xml
+++ b/avro-idl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Avro IDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:08Z
+ 2024-12-01T01:29:59Z
Daily Trending of Avro IDL in GitHub
\ No newline at end of file
diff --git a/avro-idl/monthly/index.xml b/avro-idl/monthly/index.xml
new file mode 100644
index 00000000000..9520f08f6fa
--- /dev/null
+++ b/avro-idl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Avro IDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:38Z
+ Monthly Trending of Avro IDL in GitHub
+
+
\ No newline at end of file
diff --git a/avro-idl/weekly/index.xml b/avro-idl/weekly/index.xml
new file mode 100644
index 00000000000..9cc36b4b3f9
--- /dev/null
+++ b/avro-idl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Avro IDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:47Z
+ Weekly Trending of Avro IDL in GitHub
+
+
\ No newline at end of file
diff --git a/awk/daily/index.xml b/awk/daily/index.xml
index b2a57ee64b6..20cbe35b6f1 100644
--- a/awk/daily/index.xml
+++ b/awk/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Awk Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:10Z
+ 2024-12-01T01:30:00Z
Daily Trending of Awk in GitHub
\ No newline at end of file
diff --git a/awk/monthly/index.xml b/awk/monthly/index.xml
new file mode 100644
index 00000000000..e6cee95eff9
--- /dev/null
+++ b/awk/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Awk Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:39Z
+ Monthly Trending of Awk in GitHub
+
+
\ No newline at end of file
diff --git a/awk/weekly/index.xml b/awk/weekly/index.xml
new file mode 100644
index 00000000000..5235e216bd3
--- /dev/null
+++ b/awk/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Awk Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:48Z
+ Weekly Trending of Awk in GitHub
+
+
\ No newline at end of file
diff --git a/ballerina/daily/index.xml b/ballerina/daily/index.xml
index a15ee8b9bd0..969c2d83554 100644
--- a/ballerina/daily/index.xml
+++ b/ballerina/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ballerina Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:09Z
+ 2024-12-01T01:29:59Z
Daily Trending of Ballerina in GitHub
\ No newline at end of file
diff --git a/ballerina/monthly/index.xml b/ballerina/monthly/index.xml
new file mode 100644
index 00000000000..fe6f26095dc
--- /dev/null
+++ b/ballerina/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ballerina Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:40Z
+ Monthly Trending of Ballerina in GitHub
+
+
\ No newline at end of file
diff --git a/ballerina/weekly/index.xml b/ballerina/weekly/index.xml
new file mode 100644
index 00000000000..e4b2c960608
--- /dev/null
+++ b/ballerina/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ballerina Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:48Z
+ Weekly Trending of Ballerina in GitHub
+
+
\ No newline at end of file
diff --git a/basic/daily/index.xml b/basic/daily/index.xml
index 75863fb4094..6422511dc79 100644
--- a/basic/daily/index.xml
+++ b/basic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub BASIC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:11Z
+ 2024-12-01T01:30:01Z
Daily Trending of BASIC in GitHub
\ No newline at end of file
diff --git a/basic/monthly/index.xml b/basic/monthly/index.xml
new file mode 100644
index 00000000000..1ae54f9ca1a
--- /dev/null
+++ b/basic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BASIC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:40Z
+ Monthly Trending of BASIC in GitHub
+
+
\ No newline at end of file
diff --git a/basic/weekly/index.xml b/basic/weekly/index.xml
new file mode 100644
index 00000000000..7a817da25c2
--- /dev/null
+++ b/basic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BASIC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:50Z
+ Weekly Trending of BASIC in GitHub
+
+
\ No newline at end of file
diff --git a/batchfile/daily/index.xml b/batchfile/daily/index.xml
index cc0d73cb605..4d8266365e7 100644
--- a/batchfile/daily/index.xml
+++ b/batchfile/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Batchfile Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:12Z
+ 2024-12-01T01:30:02Z
Daily Trending of Batchfile in GitHub
\ No newline at end of file
diff --git a/batchfile/monthly/index.xml b/batchfile/monthly/index.xml
new file mode 100644
index 00000000000..81c2edd8db0
--- /dev/null
+++ b/batchfile/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Batchfile Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:41Z
+ Monthly Trending of Batchfile in GitHub
+
+
\ No newline at end of file
diff --git a/batchfile/weekly/index.xml b/batchfile/weekly/index.xml
new file mode 100644
index 00000000000..d1248eadf87
--- /dev/null
+++ b/batchfile/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Batchfile Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:52Z
+ Weekly Trending of Batchfile in GitHub
+
+
\ No newline at end of file
diff --git a/beef/daily/index.xml b/beef/daily/index.xml
index c348c322c1b..8016cbe21ad 100644
--- a/beef/daily/index.xml
+++ b/beef/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Beef Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:10Z
+ 2024-12-01T01:30:01Z
Daily Trending of Beef in GitHub
\ No newline at end of file
diff --git a/beef/monthly/index.xml b/beef/monthly/index.xml
new file mode 100644
index 00000000000..c4d2fbacc64
--- /dev/null
+++ b/beef/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Beef Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:40Z
+ Monthly Trending of Beef in GitHub
+
+
\ No newline at end of file
diff --git a/beef/weekly/index.xml b/beef/weekly/index.xml
new file mode 100644
index 00000000000..43cd66cb8f3
--- /dev/null
+++ b/beef/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Beef Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:49Z
+ Weekly Trending of Beef in GitHub
+
+
\ No newline at end of file
diff --git a/befunge/daily/index.xml b/befunge/daily/index.xml
index ca3384b2a79..4ed2088604e 100644
--- a/befunge/daily/index.xml
+++ b/befunge/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Befunge Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:10Z
+ 2024-12-01T01:30:01Z
Daily Trending of Befunge in GitHub
\ No newline at end of file
diff --git a/befunge/monthly/index.xml b/befunge/monthly/index.xml
new file mode 100644
index 00000000000..1a6647ab248
--- /dev/null
+++ b/befunge/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Befunge Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:41Z
+ Monthly Trending of Befunge in GitHub
+
+
\ No newline at end of file
diff --git a/befunge/weekly/index.xml b/befunge/weekly/index.xml
new file mode 100644
index 00000000000..bb2bde13a19
--- /dev/null
+++ b/befunge/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Befunge Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:49Z
+ Weekly Trending of Befunge in GitHub
+
+
\ No newline at end of file
diff --git a/berry/daily/index.xml b/berry/daily/index.xml
index 538b2602795..59ab8b9c22e 100644
--- a/berry/daily/index.xml
+++ b/berry/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Berry Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:13Z
+ 2024-12-01T01:30:03Z
Daily Trending of Berry in GitHub
\ No newline at end of file
diff --git a/berry/monthly/index.xml b/berry/monthly/index.xml
new file mode 100644
index 00000000000..bde35df32d3
--- /dev/null
+++ b/berry/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Berry Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:42Z
+ Monthly Trending of Berry in GitHub
+
+
\ No newline at end of file
diff --git a/berry/weekly/index.xml b/berry/weekly/index.xml
new file mode 100644
index 00000000000..95f0bd56767
--- /dev/null
+++ b/berry/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Berry Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:52Z
+ Weekly Trending of Berry in GitHub
+
+
\ No newline at end of file
diff --git a/bibtex/daily/index.xml b/bibtex/daily/index.xml
index 8ff78bb13e9..0bd56053068 100644
--- a/bibtex/daily/index.xml
+++ b/bibtex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub BibTeX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:12Z
+ 2024-12-01T01:30:03Z
Daily Trending of BibTeX in GitHub
\ No newline at end of file
diff --git a/bibtex/monthly/index.xml b/bibtex/monthly/index.xml
new file mode 100644
index 00000000000..b18c3791354
--- /dev/null
+++ b/bibtex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BibTeX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:42Z
+ Monthly Trending of BibTeX in GitHub
+
+
\ No newline at end of file
diff --git a/bibtex/weekly/index.xml b/bibtex/weekly/index.xml
new file mode 100644
index 00000000000..eeeb14260bc
--- /dev/null
+++ b/bibtex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BibTeX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:53Z
+ Weekly Trending of BibTeX in GitHub
+
+
\ No newline at end of file
diff --git a/bicep/daily/index.xml b/bicep/daily/index.xml
index 5d8fc485f10..3139908bd7e 100644
--- a/bicep/daily/index.xml
+++ b/bicep/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Bicep Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:14Z
+ 2024-12-01T01:30:04Z
Daily Trending of Bicep in GitHub
\ No newline at end of file
diff --git a/bicep/monthly/index.xml b/bicep/monthly/index.xml
new file mode 100644
index 00000000000..8abb8fa78ee
--- /dev/null
+++ b/bicep/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Bicep Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:43Z
+ Monthly Trending of Bicep in GitHub
+
+
+ Azure-Samples/contoso-chat
+ 2024-12-01T01:51:43Z
+ tag:github.com,2024-12-01:/Azure-Samples/contoso-chat
+
+ <p>This sample has the full End2End process of creating RAG application with Prompty and Azure AI Foundry. It includes GPT 3.5 Turbo LLM application code, evaluations, deployment automation with AZD CLI, GitHub actions for evaluation and deployment and intent mapping for multiple LLM task mapping.</p><hr>
+
+
+ Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app
+ 2024-12-01T01:51:43Z
+ tag:github.com,2024-12-01:/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app
+
+ <p>A sample Express.js app using a MongoDB database to show how to host Node.js app in Azure App service using Azure Cosmos DB</p><hr>
+
+
\ No newline at end of file
diff --git a/bicep/weekly/index.xml b/bicep/weekly/index.xml
new file mode 100644
index 00000000000..3fbdf494d18
--- /dev/null
+++ b/bicep/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Bicep Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:53Z
+ Weekly Trending of Bicep in GitHub
+
+
+ Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app
+ 2024-12-01T01:40:53Z
+ tag:github.com,2024-12-01:/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app
+
+ <p>A sample Express.js app using a MongoDB database to show how to host Node.js app in Azure App service using Azure Cosmos DB</p><hr>
+
+
\ No newline at end of file
diff --git a/bison/daily/index.xml b/bison/daily/index.xml
index ca80bcb7276..e94644cc4c7 100644
--- a/bison/daily/index.xml
+++ b/bison/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Bison Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:15Z
+ 2024-12-01T01:30:05Z
Daily Trending of Bison in GitHub
\ No newline at end of file
diff --git a/bison/monthly/index.xml b/bison/monthly/index.xml
new file mode 100644
index 00000000000..2a015012bc2
--- /dev/null
+++ b/bison/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Bison Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:44Z
+ Monthly Trending of Bison in GitHub
+
+
\ No newline at end of file
diff --git a/bison/weekly/index.xml b/bison/weekly/index.xml
new file mode 100644
index 00000000000..9d17f561a9d
--- /dev/null
+++ b/bison/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Bison Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:54Z
+ Weekly Trending of Bison in GitHub
+
+
\ No newline at end of file
diff --git a/bitbake/daily/index.xml b/bitbake/daily/index.xml
index 43176390c2f..bc9911f55b1 100644
--- a/bitbake/daily/index.xml
+++ b/bitbake/daily/index.xml
@@ -1,7 +1,7 @@
GitHub BitBake Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:16Z
+ 2024-12-01T01:30:07Z
Daily Trending of BitBake in GitHub
\ No newline at end of file
diff --git a/bitbake/monthly/index.xml b/bitbake/monthly/index.xml
new file mode 100644
index 00000000000..02e1e5d4660
--- /dev/null
+++ b/bitbake/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub BitBake Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:48Z
+ Monthly Trending of BitBake in GitHub
+
+
+ meta-flutter/meta-flutter
+ 2024-12-01T01:51:48Z
+ tag:github.com,2024-12-01:/meta-flutter/meta-flutter
+
+ <p>Google Flutter for Yocto</p><hr>
+
+
\ No newline at end of file
diff --git a/bitbake/weekly/index.xml b/bitbake/weekly/index.xml
new file mode 100644
index 00000000000..4a21a868209
--- /dev/null
+++ b/bitbake/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BitBake Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:56Z
+ Weekly Trending of BitBake in GitHub
+
+
\ No newline at end of file
diff --git a/blade/daily/index.xml b/blade/daily/index.xml
index eb53ffeef79..e20d8749ec9 100644
--- a/blade/daily/index.xml
+++ b/blade/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Blade Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:16Z
+ 2024-12-01T01:30:06Z
Daily Trending of Blade in GitHub
\ No newline at end of file
diff --git a/blade/monthly/index.xml b/blade/monthly/index.xml
new file mode 100644
index 00000000000..29b281cde96
--- /dev/null
+++ b/blade/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Blade Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:45Z
+ Monthly Trending of Blade in GitHub
+
+
\ No newline at end of file
diff --git a/blade/weekly/index.xml b/blade/weekly/index.xml
new file mode 100644
index 00000000000..2aadd5d14e0
--- /dev/null
+++ b/blade/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Blade Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:55Z
+ Weekly Trending of Blade in GitHub
+
+
\ No newline at end of file
diff --git a/blitzbasic/daily/index.xml b/blitzbasic/daily/index.xml
index 24a2aec798b..d3d21631b65 100644
--- a/blitzbasic/daily/index.xml
+++ b/blitzbasic/daily/index.xml
@@ -1,14 +1,7 @@
GitHub BlitzBasic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:15Z
+ 2024-12-01T01:30:05Z
Daily Trending of BlitzBasic in GitHub
-
- Jabka666/scpcb-ue-my
- 2024-11-30T01:29:15Z
- tag:github.com,2024-11-30:/Jabka666/scpcb-ue-my
-
- <p>SCP - Containment Breach Ultimate Edition</p><hr>
-
\ No newline at end of file
diff --git a/blitzbasic/monthly/index.xml b/blitzbasic/monthly/index.xml
new file mode 100644
index 00000000000..ee5f7f666d2
--- /dev/null
+++ b/blitzbasic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BlitzBasic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:44Z
+ Monthly Trending of BlitzBasic in GitHub
+
+
\ No newline at end of file
diff --git a/blitzbasic/weekly/index.xml b/blitzbasic/weekly/index.xml
new file mode 100644
index 00000000000..e0527a9027a
--- /dev/null
+++ b/blitzbasic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BlitzBasic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:55Z
+ Weekly Trending of BlitzBasic in GitHub
+
+
\ No newline at end of file
diff --git a/blitzmax/daily/index.xml b/blitzmax/daily/index.xml
index 1ac532c795c..e8f9d07f685 100644
--- a/blitzmax/daily/index.xml
+++ b/blitzmax/daily/index.xml
@@ -1,7 +1,7 @@
GitHub BlitzMax Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:17Z
+ 2024-12-01T01:30:08Z
Daily Trending of BlitzMax in GitHub
\ No newline at end of file
diff --git a/blitzmax/monthly/index.xml b/blitzmax/monthly/index.xml
new file mode 100644
index 00000000000..d6dc2bdb5a7
--- /dev/null
+++ b/blitzmax/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BlitzMax Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:49Z
+ Monthly Trending of BlitzMax in GitHub
+
+
\ No newline at end of file
diff --git a/blitzmax/weekly/index.xml b/blitzmax/weekly/index.xml
new file mode 100644
index 00000000000..56bcdd9b834
--- /dev/null
+++ b/blitzmax/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub BlitzMax Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:57Z
+ Weekly Trending of BlitzMax in GitHub
+
+
\ No newline at end of file
diff --git a/bluespec/daily/index.xml b/bluespec/daily/index.xml
index 7896284a49a..765ad5333f4 100644
--- a/bluespec/daily/index.xml
+++ b/bluespec/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Bluespec Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:18Z
+ 2024-12-01T01:30:08Z
Daily Trending of Bluespec in GitHub
\ No newline at end of file
diff --git a/bluespec/monthly/index.xml b/bluespec/monthly/index.xml
new file mode 100644
index 00000000000..e51c8069b0d
--- /dev/null
+++ b/bluespec/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Bluespec Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:49Z
+ Monthly Trending of Bluespec in GitHub
+
+
\ No newline at end of file
diff --git a/bluespec/weekly/index.xml b/bluespec/weekly/index.xml
new file mode 100644
index 00000000000..1fcb0190286
--- /dev/null
+++ b/bluespec/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Bluespec Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:56Z
+ Weekly Trending of Bluespec in GitHub
+
+
\ No newline at end of file
diff --git a/boo/daily/index.xml b/boo/daily/index.xml
index 005eb30fd2a..4f985ae3113 100644
--- a/boo/daily/index.xml
+++ b/boo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Boo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:17Z
+ 2024-12-01T01:30:09Z
Daily Trending of Boo in GitHub
\ No newline at end of file
diff --git a/boo/monthly/index.xml b/boo/monthly/index.xml
new file mode 100644
index 00000000000..0fb0b727af1
--- /dev/null
+++ b/boo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Boo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:49Z
+ Monthly Trending of Boo in GitHub
+
+
\ No newline at end of file
diff --git a/boo/weekly/index.xml b/boo/weekly/index.xml
new file mode 100644
index 00000000000..6b96f95cd6a
--- /dev/null
+++ b/boo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Boo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:57Z
+ Weekly Trending of Boo in GitHub
+
+
\ No newline at end of file
diff --git a/boogie/daily/index.xml b/boogie/daily/index.xml
index 34473eef0bd..613e8a91b1e 100644
--- a/boogie/daily/index.xml
+++ b/boogie/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Boogie Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:19Z
+ 2024-12-01T01:30:10Z
Daily Trending of Boogie in GitHub
\ No newline at end of file
diff --git a/boogie/monthly/index.xml b/boogie/monthly/index.xml
new file mode 100644
index 00000000000..237a5b76dbc
--- /dev/null
+++ b/boogie/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Boogie Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:50Z
+ Monthly Trending of Boogie in GitHub
+
+
\ No newline at end of file
diff --git a/boogie/weekly/index.xml b/boogie/weekly/index.xml
new file mode 100644
index 00000000000..191c48a7467
--- /dev/null
+++ b/boogie/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Boogie Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:58Z
+ Weekly Trending of Boogie in GitHub
+
+
\ No newline at end of file
diff --git a/brainfuck/daily/index.xml b/brainfuck/daily/index.xml
index 58f56a10c3d..8d87db67eb7 100644
--- a/brainfuck/daily/index.xml
+++ b/brainfuck/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Brainfuck Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:19Z
+ 2024-12-01T01:30:09Z
Daily Trending of Brainfuck in GitHub
\ No newline at end of file
diff --git a/brainfuck/monthly/index.xml b/brainfuck/monthly/index.xml
new file mode 100644
index 00000000000..059ea96b458
--- /dev/null
+++ b/brainfuck/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Brainfuck Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:50Z
+ Monthly Trending of Brainfuck in GitHub
+
+
\ No newline at end of file
diff --git a/brainfuck/weekly/index.xml b/brainfuck/weekly/index.xml
new file mode 100644
index 00000000000..4dd8ca1729a
--- /dev/null
+++ b/brainfuck/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Brainfuck Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:59Z
+ Weekly Trending of Brainfuck in GitHub
+
+
\ No newline at end of file
diff --git a/brightscript/daily/index.xml b/brightscript/daily/index.xml
index 9cf661ee8b7..5cd20c6484e 100644
--- a/brightscript/daily/index.xml
+++ b/brightscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Brightscript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:21Z
+ 2024-12-01T01:30:11Z
Daily Trending of Brightscript in GitHub
\ No newline at end of file
diff --git a/brightscript/monthly/index.xml b/brightscript/monthly/index.xml
new file mode 100644
index 00000000000..e9f7110b577
--- /dev/null
+++ b/brightscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Brightscript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:52Z
+ Monthly Trending of Brightscript in GitHub
+
+
\ No newline at end of file
diff --git a/brightscript/weekly/index.xml b/brightscript/weekly/index.xml
new file mode 100644
index 00000000000..3cbe88d3d45
--- /dev/null
+++ b/brightscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Brightscript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:00Z
+ Weekly Trending of Brightscript in GitHub
+
+
\ No newline at end of file
diff --git a/browserslist/daily/index.xml b/browserslist/daily/index.xml
index 4bbcac3815d..7620d79874f 100644
--- a/browserslist/daily/index.xml
+++ b/browserslist/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Browserslist Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:21Z
+ 2024-12-01T01:30:13Z
Daily Trending of Browserslist in GitHub
\ No newline at end of file
diff --git a/browserslist/monthly/index.xml b/browserslist/monthly/index.xml
new file mode 100644
index 00000000000..3a24a79100b
--- /dev/null
+++ b/browserslist/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Browserslist Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:52Z
+ Monthly Trending of Browserslist in GitHub
+
+
\ No newline at end of file
diff --git a/browserslist/weekly/index.xml b/browserslist/weekly/index.xml
new file mode 100644
index 00000000000..2ccd44c14ee
--- /dev/null
+++ b/browserslist/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Browserslist Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:00Z
+ Weekly Trending of Browserslist in GitHub
+
+
\ No newline at end of file
diff --git a/c%23/daily/index.xml b/c%23/daily/index.xml
index e3053def889..e7d7c16d7e4 100644
--- a/c%23/daily/index.xml
+++ b/c%23/daily/index.xml
@@ -1,14 +1,7 @@
GitHub C# Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:38Z
+ 2024-12-01T01:30:29Z
Daily Trending of C# in GitHub
-
- SimonCropp/Delta
- 2024-11-30T01:29:38Z
- tag:github.com,2024-11-30:/SimonCropp/Delta
-
- <p>An approach to implementing a 304 Not Modified leveraging SqlServer change tracking</p><hr><h1><img src="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/icon.png" height="30px"> Delta</h1>
<p><a href="https://ci.appveyor.com/project/SimonCropp/Delta"><img src="https://ci.appveyor.com/api/projects/status/20t96gnsmysklh09/branch/main?svg=true" alt="Build status"></a> <a href="https://www.nuget.org/packages/Delta/"><img src="https://img.shields.io/nuget/v/Delta.svg?label=Delta" alt="NuGet Status"></a> <a href="https://www.nuget.org/packages/Delta.EF/"><img src="https://img.shields.io/nuget/v/Delta.EF.svg?label=Delta.EF" alt="NuGet Status"></a></p>
<p>Delta is an approach to implementing a <a href="https://www.keycdn.com/support/304-not-modified">304 Not Modified</a> leveraging SqlServer change tracking</p>
<p>The approach uses a last updated timestamp from the database to generate an <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag">ETag</a>. All dynamic requests then have that ETag checked/applied.</p>
<p>This approach works well when the frequency of updates is relatively low. In this scenario, the majority of requests will leverage the result in a 304 Not Modified being returned and the browser loading the content its cache.</p>
<p>Effectively consumers will always receive the most current data, while the load on the server remains low.</p>
<p><strong>See <a href="https://raw.githubusercontent.com/SimonCropp/milestones?state=closed">Milestones</a> for release notes.</strong></p>
<h2>Assumptions</h2>
<ul>
<li>Frequency of updates to data is relatively low compared to reads</li>
<li>Using either <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server">SQL Server Change Tracking</a> and/or <a href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql">SQL Server Row Versioning</a></li>
</ul>
<h2>304 Not Modified Flow</h2>
<pre><code class="language-mermaid">graph TD
Request
CalculateEtag[Calculate current ETag<br/>based on timestamp<br/>from web assembly and SQL]
IfNoneMatch{Has<br/>If-None-Match<br/>header?}
EtagMatch{Current<br/>Etag matches<br/>If-None-Match?}
AddETag[Add current ETag<br/>to Response headers]
304[Respond with<br/>304 Not-Modified]
Request --> CalculateEtag
CalculateEtag --> IfNoneMatch
IfNoneMatch -->|Yes| EtagMatch
IfNoneMatch -->|No| AddETag
EtagMatch -->|No| AddETag
EtagMatch -->|Yes| 304
</code></pre>
<h2>ETag calculation logic</h2>
<p>The ETag is calculated from a combination several parts</p>
<h4>AssemblyWriteTime</h4>
<p>The last write time of the web entry point assembly</p>
<!-- snippet: AssemblyWriteTime -->
<p><a id="snippet-AssemblyWriteTime"></a></p>
<pre><code class="language-cs">var webAssemblyLocation = Assembly.GetEntryAssembly()!.Location;
AssemblyWriteTime = File.GetLastWriteTime(webAssemblyLocation).Ticks.ToString();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Shared.cs#L38-L43" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-AssemblyWriteTime" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>SQL timestamp</h4>
<p>A combination of <a href="https://learn.microsoft.com/en-us/sql/relational-databases/system-functions/change-tracking-current-version-transact-sql">change_tracking_current_version</a> (if tracking is enabled) and <a href="https://learn.microsoft.com/en-us/sql/t-sql/functions/dbts-transact-sql">@@DBTS (row version timestamp)</a></p>
<!-- snippet: SqlTimestamp -->
<p><a id="snippet-SqlTimestamp"></a></p>
<pre><code class="language-cs">declare @changeTracking bigint = change_tracking_current_version();
declare @timeStamp bigint = convert(bigint, @@dbts);
if (@changeTracking is null)
select cast(@timeStamp as varchar)
else
select cast(@timeStamp as varchar) + '-' + cast(@changeTracking as varchar)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L189-L197" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SqlTimestamp" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>Suffix</h4>
<p>An optional string suffix that is dynamically calculated at runtime based on the current <code>HttpContext</code>.</p>
<!-- snippet: Suffix -->
<p><a id="snippet-Suffix"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta(suffix: httpContext => "MySuffix");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L9-L14" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-Suffix" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Combining the above</h3>
<!-- snippet: BuildEtag -->
<p><a id="snippet-BuildEtag"></a></p>
<pre><code class="language-cs">internal static string BuildEtag(string timeStamp, string? suffix)
{
if (suffix == null)
{
return $"\"{AssemblyWriteTime}-{timeStamp}\"";
}
return $"\"{AssemblyWriteTime}-{timeStamp}-{suffix}\"";
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Shared.cs#L130-L142" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-BuildEtag" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>NuGet</h2>
<p>Delta is shipped as two nugets:</p>
<ul>
<li><a href="https://nuget.org/packages/Delta/">Delta</a>: Delivers functionality using SqlConnection and SqlTransaction.</li>
<li><a href="https://nuget.org/packages/Delta.EF/">Delta.EF</a>: Delivers functionality using <a href="https://learn.microsoft.com/en-us/ef/core/providers/sql-server/?tabs=dotnet-core-cli">SQL Server EF Database Provider</a>.</li>
</ul>
<p>Only one of the above should be used.</p>
<h2>Usage</h2>
<h3>DB Schema</h3>
<p>Ensure <a href="https://learn.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server">SQL Server Change Tracking</a> and/or <a href="https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql">SQL Server Row Versioning</a> is enabled for all relevant tables.</p>
<p>Example SQL schema:</p>
<!-- snippet: Usage.Schema.verified.sql -->
<p><a id="snippet-Usage.Schema.verified.sql"></a></p>
<pre><code class="language-sql">-- Tables
CREATE TABLE [dbo].[Companies](
[Id] [uniqueidentifier] NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[Content] [nvarchar](max) NULL,
CONSTRAINT [PK_Companies] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[Employees](
[Id] [uniqueidentifier] NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[CompanyId] [uniqueidentifier] NOT NULL,
[Content] [nvarchar](max) NULL,
[Age] [int] NOT NULL,
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[Id] ASC
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_Employees_CompanyId] ON [dbo].[Employees]
(
[CompanyId] ASC
) ON [PRIMARY]
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.Schema.verified.sql#L1-L28" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-Usage.Schema.verified.sql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to WebApplicationBuilder</h3>
<!-- snippet: UseDelta -->
<p><a id="snippet-UseDelta"></a></p>
<pre><code class="language-cs">var builder = WebApplication.CreateBuilder();
builder.Services.AddScoped(_ => new SqlConnection(connectionString));
var app = builder.Build();
app.UseDelta();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplication/Program.cs#L10-L17" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDelta" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to a Route Group</h3>
<p>To add to a specific <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/route-handlers#route-groups">Route Group</a>:</p>
<!-- snippet: UseDeltaMapGroup -->
<p><a id="snippet-UseDeltaMapGroup"></a></p>
<pre><code class="language-cs">app.MapGroup("/group")
.UseDelta()
.MapGet("/", () => "Hello Group!");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplication/Program.cs#L58-L64" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaMapGroup" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>ShouldExecute</h3>
<p>Optionally control what requests Delta is executed on.</p>
<!-- snippet: ShouldExecute -->
<p><a id="snippet-ShouldExecute"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta(
shouldExecute: httpContext =>
{
var path = httpContext.Request.Path.ToString();
return path.Contains("match");
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L19-L29" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-ShouldExecute" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Custom Connection discovery</h3>
<p>By default, Delta uses <code>HttpContext.RequestServices</code> to discover the SqlConnection and SqlTransaction:</p>
<!-- snippet: DiscoverConnection -->
<p><a id="snippet-DiscoverConnection"></a></p>
<pre><code class="language-cs">static Connection DiscoverConnection(HttpContext httpContext)
{
var provider = httpContext.RequestServices;
var connection = provider.GetRequiredService<SqlConnection>();
var transaction = provider.GetService<SqlTransaction>();
return new(connection, transaction);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Middleware.cs#L41-L51" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DiscoverConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>To use custom connection discovery:</p>
<!-- snippet: CustomDiscoveryConnection -->
<p><a id="snippet-CustomDiscoveryConnection"></a></p>
<pre><code class="language-cs">var application = webApplicationBuilder.Build();
application.UseDelta(
getConnection: httpContext => httpContext.RequestServices.GetRequiredService<SqlConnection>());
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L200-L206" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-CustomDiscoveryConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>To use custom connection and transaction discovery:</p>
<!-- snippet: CustomDiscoveryConnectionAndTransaction -->
<p><a id="snippet-CustomDiscoveryConnectionAndTransaction"></a></p>
<pre><code class="language-cs">var webApplication = webApplicationBuilder.Build();
webApplication.UseDelta(
getConnection: httpContext =>
{
var provider = httpContext.RequestServices;
var sqlConnection = provider.GetRequiredService<SqlConnection>();
var sqlTransaction = provider.GetService<SqlTransaction>();
return new(sqlConnection, sqlTransaction);
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L211-L223" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-CustomDiscoveryConnectionAndTransaction" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>EF Usage</h2>
<h3>DbContext using RowVersion</h3>
<p>Enable row versioning in Entity Framework</p>
<!-- snippet: SampleDbContext.cs -->
<p><a id="snippet-SampleDbContext.cs"></a></p>
<pre><code class="language-cs">public class SampleDbContext(DbContextOptions options) :
DbContext(options)
{
public DbSet<Employee> Employees { get; set; } = null!;
public DbSet<Company> Companies { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder builder)
{
var company = builder.Entity<Company>();
company.HasKey(_ => _.Id);
company
.HasMany(_ => _.Employees)
.WithOne(_ => _.Company)
.IsRequired();
company
.Property(_ => _.RowVersion)
.IsRowVersion()
.HasConversion<byte[]>();
var employee = builder.Entity<Employee>();
employee.HasKey(_ => _.Id);
employee
.Property(_ => _.RowVersion)
.IsRowVersion()
.HasConversion<byte[]>();
}
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/DataContext/SampleDbContext.cs#L1-L27" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SampleDbContext.cs" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to WebApplicationBuilder</h3>
<!-- snippet: UseDeltaEF -->
<p><a id="snippet-UseDeltaEF"></a></p>
<pre><code class="language-cs">var builder = WebApplication.CreateBuilder();
builder.Services.AddSqlServer<SampleDbContext>(database.ConnectionString);
var app = builder.Build();
app.UseDelta<SampleDbContext>();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/Program.cs#L7-L14" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>Add to a Route Group</h3>
<p>To add to a specific <a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/route-handlers#route-groups">Route Group</a>:</p>
<!-- snippet: UseDeltaMapGroupEF -->
<p><a id="snippet-UseDeltaMapGroupEF"></a></p>
<pre><code class="language-cs">app.MapGroup("/group")
.UseDelta<SampleDbContext>()
.MapGet("/", () => "Hello Group!");
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/WebApplicationEF/Program.cs#L38-L44" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseDeltaMapGroupEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>ShouldExecute</h3>
<p>Optionally control what requests Delta is executed on.</p>
<!-- snippet: ShouldExecuteEF -->
<p><a id="snippet-ShouldExecuteEF"></a></p>
<pre><code class="language-cs">var app = builder.Build();
app.UseDelta<SampleDbContext>(
shouldExecute: httpContext =>
{
var path = httpContext.Request.Path.ToString();
return path.Contains("match");
});
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta.EFTests/Usage.cs#L16-L26" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-ShouldExecuteEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>UseResponseDiagnostics</h2>
<p>Response diagnostics is an opt-in feature that includes extra log information in the response headers.</p>
<p>Enable by setting UseResponseDiagnostics to true at startup:</p>
<!-- snippet: UseResponseDiagnostics -->
<p><a id="snippet-UseResponseDiagnostics"></a></p>
<pre><code class="language-cs">DeltaExtensions.UseResponseDiagnostics = true;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/ModuleInitializer.cs#L6-L10" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-UseResponseDiagnostics" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Response diagnostics headers are prefixed with <code>Delta-</code>.</p>
<p>Example Response header when the Request has not <code>If-None-Match</code> header.</p>
<img src="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta-No304.png">
<h2>Helpers</h2>
<p>Utility methods for working with databases using the Delta conventions.</p>
<h3>GetLastTimeStamp</h3>
<h4>For a <code>SqlConnection</code>:</h4>
<!-- snippet: GetLastTimeStampSqlConnection -->
<p><a id="snippet-GetLastTimeStampSqlConnection"></a></p>
<pre><code class="language-cs">var timeStamp = await sqlConnection.GetLastTimeStamp();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L60-L64" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetLastTimeStampSqlConnection" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For a <code>DbContext</code>:</h4>
<!-- snippet: GetLastTimeStampEF -->
<p><a id="snippet-GetLastTimeStampEF"></a></p>
<pre><code class="language-cs">var timeStamp = await dbContext.GetLastTimeStamp();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta.EFTests/Usage.cs#L55-L59" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetLastTimeStampEF" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>GetDatabasesWithTracking</h3>
<p>Get a list of all databases with change tracking enabled.</p>
<!-- snippet: GetDatabasesWithTracking -->
<p><a id="snippet-GetDatabasesWithTracking"></a></p>
<pre><code class="language-cs">var trackedDatabases = await sqlConnection.GetTrackedDatabases();
foreach (var db in trackedDatabases)
{
Trace.WriteLine(db);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L98-L106" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetDatabasesWithTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: GetTrackedDatabasesSql -->
<p><a id="snippet-GetTrackedDatabasesSql"></a></p>
<pre><code class="language-cs">select d.name
from sys.databases as d inner join
sys.change_tracking_databases as t on
t.database_id = d.database_id
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L140-L145" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedDatabasesSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>GetTrackedTables</h3>
<p>Get a list of all tracked tables in database.</p>
<!-- snippet: GetTrackedTables -->
<p><a id="snippet-GetTrackedTables"></a></p>
<pre><code class="language-cs">var trackedTables = await sqlConnection.GetTrackedTables();
foreach (var db in trackedTables)
{
Trace.WriteLine(db);
}
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L124-L132" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedTables" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: GetTrackedTablesSql -->
<p><a id="snippet-GetTrackedTablesSql"></a></p>
<pre><code class="language-cs">select t.Name
from sys.tables as t left join
sys.change_tracking_tables as c on t.[object_id] = c.[object_id]
where c.[object_id] is not null
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L76-L81" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-GetTrackedTablesSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>IsTrackingEnabled</h3>
<p>Determine if change tracking is enabled for a database.</p>
<!-- snippet: IsTrackingEnabled -->
<p><a id="snippet-IsTrackingEnabled"></a></p>
<pre><code class="language-cs">var isTrackingEnabled = await sqlConnection.IsTrackingEnabled();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L189-L193" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-IsTrackingEnabled" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: IsTrackingEnabledSql -->
<p><a id="snippet-IsTrackingEnabledSql"></a></p>
<pre><code class="language-cs">select count(d.name)
from sys.databases as d inner join
sys.change_tracking_databases as t on
t.database_id = d.database_id
where d.name = '{database}'
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L97-L103" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-IsTrackingEnabledSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>EnableTracking</h3>
<p>Enable change tracking for a database.</p>
<!-- snippet: EnableTracking -->
<p><a id="snippet-EnableTracking"></a></p>
<pre><code class="language-cs">await sqlConnection.EnableTracking();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L183-L187" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<!-- snippet: EnableTrackingSql -->
<p><a id="snippet-EnableTrackingSql"></a></p>
<pre><code class="language-cs">alter database {database}
set change_tracking = on
(
change_retention = {retentionDays} days,
auto_cleanup = on
)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L61-L68" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>DisableTracking</h3>
<p>Disable change tracking for a database and all tables within that database.</p>
<!-- snippet: DisableTracking -->
<p><a id="snippet-DisableTracking"></a></p>
<pre><code class="language-cs">await sqlConnection.DisableTracking();
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L168-L172" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTracking" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<h4>For disabling tracking on a database:</h4>
<!-- snippet: DisableTrackingSqlDB -->
<p><a id="snippet-DisableTrackingSqlDB"></a></p>
<pre><code class="language-cs">alter database [{database}] set change_tracking = off;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L126-L128" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingSqlDB" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For disabling tracking on tables:</h4>
<!-- snippet: DisableTrackingSqlTable -->
<p><a id="snippet-DisableTrackingSqlTable"></a></p>
<pre><code class="language-cs">alter table [{table}] disable change_tracking;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L118-L120" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingSqlTable" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h3>SetTrackedTables</h3>
<p>Enables change tracking for all tables listed, and disables change tracking for all tables not listed.</p>
<!-- snippet: SetTrackedTables -->
<p><a id="snippet-SetTrackedTables"></a></p>
<pre><code class="language-cs">await sqlConnection.SetTrackedTables(["Companies"]);
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/DeltaTests/Usage.cs#L118-L122" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-SetTrackedTables" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<p>Uses the following SQL:</p>
<h4>For enabling tracking on a database:</h4>
<!-- snippet: EnableTrackingSql -->
<p><a id="snippet-EnableTrackingSql"></a></p>
<pre><code class="language-cs">alter database {database}
set change_tracking = on
(
change_retention = {retentionDays} days,
auto_cleanup = on
)
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L61-L68" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For enabling tracking on tables:</h4>
<!-- snippet: EnableTrackingTableSql -->
<p><a id="snippet-EnableTrackingTableSql"></a></p>
<pre><code class="language-cs">alter table [{table}] enable change_tracking
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L24-L26" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-EnableTrackingTableSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h4>For disabling tracking on tables:</h4>
<!-- snippet: DisableTrackingTableSql -->
<p><a id="snippet-DisableTrackingTableSql"></a></p>
<pre><code class="language-cs">alter table [{table}] disable change_tracking;
</code></pre>
<p><sup><a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/src/Delta/DeltaExtensions_Sql.cs#L33-L35" title="Snippet source file">snippet source</a> | <a href="https://raw.githubusercontent.com/SimonCropp/Delta/main/#snippet-DisableTrackingTableSql" title="Start of snippet">anchor</a></sup></p>
<!-- endSnippet -->
<h2>Programmatic client usage</h2>
<p>Delta is primarily designed to support web browsers as a client. All web browsers have the necessary 304 and caching functionally required.</p>
<p>In the scenario where web apis (that support using 304) are being consumed using .net as a client, consider using one of the below extensions to cache responses.</p>
<ul>
<li><a href="https://github.com/SimonCropp/Replicant">Replicant</a></li>
<li><a href="https://github.com/tavis-software/Tavis.HttpCache">Tavis.HttpCache</a></li>
<li><a href="https://github.com/aliostad/CacheCow">CacheCow</a></li>
<li><a href="https://github.com/jamesmontemagno/monkey-cache">Monkey Cache</a></li>
</ul>
<h2>Icon</h2>
<p><a href="https://thenounproject.com/term/estuary/1847616/">Estuary</a> designed by <a href="https://thenounproject.com/Asphaleia/">Daan</a> from <a href="https://thenounproject.com">The Noun Project</a>.</p>
-
\ No newline at end of file
diff --git a/c%23/monthly/index.xml b/c%23/monthly/index.xml
new file mode 100644
index 00000000000..b4a40fba895
--- /dev/null
+++ b/c%23/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub C# Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:06Z
+ Monthly Trending of C# in GitHub
+
+
+ yaobiao131/downkyicore
+ 2024-12-01T01:52:06Z
+ tag:github.com,2024-12-01:/yaobiao131/downkyicore
+
+ <p>哔哩下载姬(跨平台版)downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。</p><hr><h1>哔哩下载姬(跨平台版)</h1>
<div align="center">
<p><a href="https://github.com/yaobiao131/downkyicore/stargazers"><img src="https://img.shields.io/github/stars/yaobiao131/downkyicore" alt="GitHub Repo stars"></a> <a href="https://github.com/yaobiao131/downkyicore/network"><img src="https://img.shields.io/github/forks/yaobiao131/downkyicore" alt="GitHub forks"></a> <a href="https://github.com/yaobiao131/downkyicore/issues"><img src="https://img.shields.io/github/issues/yaobiao131/downkyicore" alt="GitHub issues"></a> <a href="https://github.com/yaobiao131/downkyicore/raw/main/LICENSE"><img src="https://img.shields.io/github/license/yaobiao131/downkyicore" alt="LICENSE"></a></p>
</div>
<h2>下载</h2>
<p><a href="https://github.com/yaobiao131/downkyicore/releases/latest"><img src="https://img.shields.io/github/v/release/yaobiao131/downkyicore" alt="GitHub release (latest by date)"></a> <a href="https://github.com/yaobiao131/downkyicore/releases/latest"><img src="https://img.shields.io/github/release-date/yaobiao131/downkyicore" alt="GitHub Release Date"></a> <a href="https://github.com/yaobiao131/downkyicore/releases/latest"><img src="https://img.shields.io/github/downloads/yaobiao131/downkyicore/total" alt="GitHub all releases"></a></p>
<p><a href="https://raw.githubusercontent.com/yaobiao131/downkyicore/main/CHANGELOG.md">更新日志</a></p>
<h2>介绍</h2>
<ul>
<li>基于<a href="https://github.com/leiurayer/downkyi">哔哩下载姬Windows版</a>和<a href="https://github.com/AvaloniaUI/Avalonia">AvaloniaUI</a>制作的跨平台版本(支持Windows、linux、macOS)。</li>
<li>开发这个版本目的是由于本人日常使用macOS,当我想下载up视频是偶然间发现了<a href="https://github.com/leiurayer/downkyi">哔哩下载姬Windows版</a>,发现很好用,就是不能支持macOS使用,就基于AvaloniaUI重新开发了一个跨平台版本。</li>
</ul>
<h2>使用说明</h2>
<ul>
<li>软件自带.NET6、ffmpeg、aria2运行环境、无需自行安装</li>
<li>默认下载路径:
<ul>
<li>Windows: 软件运行目录下的Media文件夹</li>
<li>macOS: ~/Library/Application Support/DownKyi/Media</li>
<li>linux: ~/.config/DownKyi/Media</li>
</ul> </li>
</ul>
<h2>免责申明</h2>
<ol>
<li>本软件只提供视频解析,不提供任何资源上传、存储到服务器的功能。</li>
<li>本软件仅解析来自B站的内容,不会对解析到的音视频进行二次编码,部分视频会进行有限的格式转换、拼接等操作。</li>
<li>本软件解析得到的所有内容均来自B站UP主上传、分享,其版权均归原作者所有。内容提供者、上传者(UP主)应对其提供、上传的内容承担全部责任。</li>
<li><strong>本软件提供的所有内容,仅可用作学习交流使用,未经原作者授权,禁止用于其他用途。请在下载24小时内删除。为尊重作者版权,请前往资源的原始发布网站观看,支持原创,谢谢。</strong></li>
<li>因使用本软件产生的版权问题,软件作者概不负责。</li>
</ol>
+
+
+ dotnet/runtime
+ 2024-12-01T01:52:06Z
+ tag:github.com,2024-12-01:/dotnet/runtime
+
+ <p>.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.</p><hr><h1>.NET Runtime</h1>
<p><a href="https://dev.azure.com/dnceng-public/public/_build/latest?definitionId=129&branchName=main"><img src="https://dev.azure.com/dnceng-public/public/_apis/build/status/dotnet/runtime/runtime?branchName=main" alt="Build Status"></a> <a href="https://github.com/dotnet/runtime/labels/help%20wanted"><img src="https://img.shields.io/github/issues/dotnet/runtime/help%20wanted?style=flat-square&color=%232EA043&label=help%20wanted" alt="Help Wanted"></a> <a href="https://github.com/dotnet/runtime/labels/good%20first%20issue"><img src="https://img.shields.io/github/issues/dotnet/runtime/good%20first%20issue?style=flat-square&color=%232EA043&label=good%20first%20issue" alt="Good First Issue"></a> <a href="https://gitter.im/dotnet/runtime"><img src="https://badges.gitter.im/Join%20Chat.svg?sanitize=true" alt="Gitter"></a> <a href="https://aka.ms/dotnet-discord"><img src="https://img.shields.io/discord/732297728826277939?style=flat-square&label=Discord&logo=discord&logoColor=white&color=7289DA" alt="Discord"></a></p>
<ul>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#what-is-net">What is .NET?</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#how-can-i-contribute">How can I contribute?</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#reporting-security-issues-and-security-bugs">Reporting security issues and security bugs</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#filing-issues">Filing issues</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#useful-links">Useful Links</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#net-foundation">.NET Foundation</a></li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/#license">License</a></li>
</ul>
<p>This repo contains the code to build the .NET runtime, libraries and shared host (<code>dotnet</code>) installers for all supported platforms, as well as the sources to .NET runtime and libraries.</p>
<h2>What is .NET?</h2>
<p>Official Starting Page: <a href="https://dotnet.microsoft.com">https://dotnet.microsoft.com</a></p>
<ul>
<li><a href="https://learn.microsoft.com/dotnet/core/get-started">How to use .NET</a> (with VS, VS Code, command-line CLI)
<ul>
<li><a href="https://dotnet.microsoft.com/download">Install official releases</a></li>
<li><a href="https://learn.microsoft.com/dotnet/core">Documentation</a> (Get Started, Tutorials, Porting from .NET Framework, API reference, ...)
<ul>
<li><a href="https://learn.microsoft.com/dotnet/core/deploying">Deploying apps</a></li>
</ul> </li>
</ul> </li>
<li><a href="https://github.com/dotnet/core/raw/main/support.md">Support</a> (Releases, OS Versions, ...)</li>
<li><a href="https://github.com/dotnet/core/raw/main/roadmap.md">Roadmap</a></li>
</ul>
<h2>How can I contribute?</h2>
<p>We welcome contributions! Many people all over the world have helped make this project better.</p>
<ul>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/CONTRIBUTING.md">Contributing</a> explains what kinds of contributions we welcome</li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/docs/workflow/README.md">Workflow Instructions</a> explains how to build and test</li>
<li><a href="https://raw.githubusercontent.com/dotnet/runtime/main/docs/project/dogfooding.md">Dogfooding .NET</a> explains how to get nightly builds of the runtime and its libraries to test them in your own projects.</li>
</ul>
<h2>Reporting security issues and security bugs</h2>
<p>Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) <a href="mailto:secure@microsoft.com">secure@microsoft.com</a>. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the <a href="https://www.microsoft.com/msrc/faqs-report-an-issue">Security TechCenter</a>. You can also find these instructions in this repo's <a href="https://raw.githubusercontent.com/dotnet/runtime/main/SECURITY.md">Security doc</a>.</p>
<p>Also see info about related <a href="https://www.microsoft.com/msrc/bounty-dot-net-core">Microsoft .NET Bounty Program</a>.</p>
<h2>Filing issues</h2>
<p>This repo should contain issues that are tied to the runtime, the class libraries and frameworks, the installation of the <code>dotnet</code> binary (sometimes known as the <code>muxer</code>) and the installation of the .NET runtime and libraries.</p>
<p>For other issues, please file them to their appropriate sibling repos. We have links to many of them on <a href="https://github.com/dotnet/runtime/issues/new/choose">our new issue page</a>.</p>
<h2>Useful Links</h2>
<ul>
<li><a href="https://source.dot.net">.NET source index</a> / <a href="https://referencesource.microsoft.com">.NET Framework source index</a></li>
<li><a href="https://learn.microsoft.com/dotnet/api">API Reference docs</a></li>
<li><a href="https://apisof.net">.NET API Catalog</a> (incl. APIs from daily builds and API usage info)</li>
<li><a href="https://github.com/dotnet/dotnet-api-docs/wiki">API docs writing guidelines</a> - useful when writing /// comments</li>
<li><a href="https://aka.ms/dotnet-discord">.NET Discord Server</a> - a place to discuss the development of .NET and its ecosystem</li>
</ul>
<h2>.NET Foundation</h2>
<p>.NET Runtime is a <a href="https://www.dotnetfoundation.org/projects">.NET Foundation</a> project.</p>
<p>There are many .NET related projects on GitHub.</p>
<ul>
<li><a href="https://github.com/Microsoft/dotnet">.NET home repo</a> - links to 100s of .NET projects, from Microsoft and the community.</li>
<li><a href="https://learn.microsoft.com/aspnet/core">ASP.NET Core home</a> - the best place to start learning about ASP.NET Core.</li>
</ul>
<p>This project has adopted the code of conduct defined by the <a href="https://contributor-covenant.org">Contributor Covenant</a> to clarify expected behavior in our community. For more information, see the <a href="https://www.dotnetfoundation.org/code-of-conduct">.NET Foundation Code of Conduct</a>.</p>
<p>General .NET OSS discussions: <a href="https://github.com/dotnet-foundation/Home/discussions">.NET Foundation Discussions</a></p>
<h2>License</h2>
<p>.NET (including the runtime repo) is licensed under the <a href="https://raw.githubusercontent.com/dotnet/runtime/main/LICENSE.TXT">MIT</a> license.</p>
+
+
+ dotnet/eShop
+ 2024-12-01T01:52:06Z
+ tag:github.com,2024-12-01:/dotnet/eShop
+
+ <p>A reference .NET application implementing an eCommerce site</p><hr><h1>eShop Reference Application - "AdventureWorks"</h1>
<p>A reference .NET application implementing an e-commerce website using a services-based architecture using <a href="https://learn.microsoft.com/dotnet/aspire/">.NET Aspire</a>.</p>
<p><img src="https://raw.githubusercontent.com/dotnet/eShop/main/img/eshop_architecture.png" alt="eShop Reference Application architecture diagram"></p>
<p><img src="https://raw.githubusercontent.com/dotnet/eShop/main/img/eshop_homepage.png" alt="eShop homepage screenshot"></p>
<h2>Getting Started</h2>
<p>This version of eShop is based on .NET 9.</p>
<p>Previous eShop versions:</p>
<ul>
<li><a href="https://github.com/dotnet/eShop/tree/release/8.0">.NET 8</a></li>
</ul>
<h3>Prerequisites</h3>
<ul>
<li>Clone the eShop repository: <a href="https://github.com/dotnet/eshop">https://github.com/dotnet/eshop</a></li>
<li><a href="https://docs.docker.com/engine/install/">Install & start Docker Desktop</a></li>
</ul>
<h4>Windows with Visual Studio</h4>
<ul>
<li>Install <a href="https://visualstudio.microsoft.com/vs/">Visual Studio 2022 version 17.10 or newer</a>.
<ul>
<li>Select the following workloads:
<ul>
<li><code>ASP.NET and web development</code> workload.</li>
<li><code>.NET Aspire SDK</code> component in <code>Individual components</code>.</li>
<li>Optional: <code>.NET Multi-platform App UI development</code> to run client apps</li>
</ul> </li>
</ul> </li>
</ul>
<p>Or</p>
<ul>
<li>Run the following commands in a Powershell & Terminal running as <code>Administrator</code> to automatically configure your environment with the required tools to build and run this application. (Note: A restart is required and included in the script below.)</li>
</ul>
<pre><code class="language-powershell">install-Module -Name Microsoft.WinGet.Configuration -AllowPrerelease -AcceptLicense -Force
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
get-WinGetConfiguration -file .\.configurations\vside.dsc.yaml | Invoke-WinGetConfiguration -AcceptConfigurationAgreements
</code></pre>
<p>Or</p>
<ul>
<li>From Dev Home go to <code>Machine Configuration -> Clone repositories</code>. Enter the URL for this repository. In the confirmation screen look for the section <code>Configuration File Detected</code> and click <code>Run File</code>.</li>
</ul>
<h4>Mac, Linux, & Windows without Visual Studio</h4>
<ul>
<li>Install the latest <a href="https://dot.net/download?cid=eshop">.NET 9 SDK</a></li>
</ul>
<p>Or</p>
<ul>
<li>Run the following commands in a Powershell & Terminal running as <code>Administrator</code> to automatically configuration your environment with the required tools to build and run this application. (Note: A restart is required after running the script below.)</li>
</ul>
<h5>Install Visual Studio Code and related extensions</h5>
<pre><code class="language-powershell">install-Module -Name Microsoft.WinGet.Configuration -AllowPrerelease -AcceptLicense -Force
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
get-WinGetConfiguration -file .\.configurations\vscode.dsc.yaml | Invoke-WinGetConfiguration -AcceptConfigurationAgreements
</code></pre>
<blockquote>
<p>Note: These commands may require <code>sudo</code></p>
</blockquote>
<ul>
<li>Optional: Install <a href="https://code.visualstudio.com/docs/csharp/get-started">Visual Studio Code with C# Dev Kit</a></li>
<li>Optional: Install <a href="https://learn.microsoft.com/dotnet/maui/get-started/installation?tabs=visual-studio-code">.NET MAUI Workload</a></li>
</ul>
<blockquote>
<p>Note: When running on Mac with Apple Silicon (M series processor), Rosetta 2 for grpc-tools.</p>
</blockquote>
<h3>Running the solution</h3>
<blockquote>
<p>[!WARNING] Remember to ensure that Docker is started</p>
</blockquote>
<ul>
<li>(Windows only) Run the application from Visual Studio:</li>
</ul>
<ul>
<li>Open the <code>eShop.Web.slnf</code> file in Visual Studio</li>
<li>Ensure that <code>eShop.AppHost.csproj</code> is your startup project</li>
<li>Hit Ctrl-F5 to launch Aspire</li>
</ul>
<ul>
<li>Or run the application from your terminal:</li>
</ul>
<pre><code class="language-powershell">dotnet run --project src/eShop.AppHost/eShop.AppHost.csproj
</code></pre>
<p>then look for lines like this in the console output in order to find the URL to open the Aspire dashboard:</p>
<pre><code class="language-sh">Login to the dashboard at: http://localhost:19888/login?t=uniquelogincodeforyou
</code></pre>
<blockquote>
<p>You may need to install ASP.NET Core HTTPS development certificates first, and then close all browser tabs. Learn more at <a href="https://aka.ms/aspnet/https-trust-dev-cert">https://aka.ms/aspnet/https-trust-dev-cert</a></p>
</blockquote>
<h3>Azure Open AI</h3>
<p>When using Azure OpenAI, inside <em>eShop.AppHost/appsettings.json</em>, add the following section:</p>
<pre><code class="language-json"> "ConnectionStrings": {
"OpenAi": "Endpoint=xxx;Key=xxx;"
}
</code></pre>
<p>Replace the values with your own. Then, in the eShop.AppHost <em>Program.cs</em>, set this value to <strong>true</strong></p>
<pre><code class="language-csharp">bool useOpenAI = false;
</code></pre>
<p>Here's additional guidance on the <a href="https://learn.microsoft.com/dotnet/aspire/azureai/azureai-openai-component?tabs=dotnet-cli">.NET Aspire OpenAI component</a>.</p>
<h3>Use Azure Developer CLI</h3>
<p>You can use the <a href="https://aka.ms/azd">Azure Developer CLI</a> to run this project on Azure with only a few commands. Follow the next instructions:</p>
<ul>
<li>Install the latest or update to the latest <a href="https://aka.ms/azure-dev/install">Azure Developer CLI (azd)</a>.</li>
<li>Log in <code>azd</code> (if you haven't done it before) to your Azure account:</li>
</ul>
<pre><code class="language-sh">azd auth login
</code></pre>
<ul>
<li>Initialize <code>azd</code> from the root of the repo.</li>
</ul>
<pre><code class="language-sh">azd init
</code></pre>
<ul>
<li> <p>During init:</p>
<ul>
<li>Select <code>Use code in the current directory</code>. Azd will automatically detect the .NET Aspire project.</li>
<li>Confirm <code>.NET (Aspire)</code> and continue.</li>
<li>Select which services to expose to the Internet (exposing <code>webapp</code> is enough to test the sample).</li>
<li>Finalize the initialization by giving a name to your environment.</li>
</ul> </li>
<li> <p>Create Azure resources and deploy the sample by running:</p> </li>
</ul>
<pre><code class="language-sh">azd up
</code></pre>
<p>Notes:</p>
<ul>
<li>The operation takes a few minutes the first time it is ever run for an environment.</li>
<li>At the end of the process, <code>azd</code> will display the <code>url</code> for the webapp. Follow that link to test the sample.</li>
<li>You can run <code>azd up</code> after saving changes to the sample to re-deploy and update the sample.</li>
<li>Report any issues to <a href="https://github.com/Azure/azure-dev/issues">azure-dev</a> repo.</li>
<li><a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/troubleshoot?tabs=Browser">FAQ and troubleshoot</a> for azd.</li>
</ul>
<h2>Contributing</h2>
<p>For more information on contributing to this repo, read <a href="https://raw.githubusercontent.com/dotnet/eShop/main/CONTRIBUTING.md">the contribution documentation</a> and <a href="https://raw.githubusercontent.com/dotnet/eShop/main/CODE-OF-CONDUCT.md">the Code of Conduct</a>.</p>
<h3>Sample data</h3>
<p>The sample catalog data is defined in <a href="https://github.com/dotnet/eShop/raw/main/src/Catalog.API/Setup/catalog.json">catalog.json</a>. Those product names, descriptions, and brand names are fictional and were generated using <a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt">GPT-35-Turbo</a>, and the corresponding <a href="https://github.com/dotnet/eShop/tree/main/src/Catalog.API/Pics">product images</a> were generated using <a href="https://openai.com/dall-e-3">DALL·E 3</a>.</p>
<h2>eShop on Azure</h2>
<p>For a version of this app configured for deployment on Azure, please view <a href="https://github.com/Azure-Samples/eShopOnAzure">the eShop on Azure</a> repo.</p>
+
+
\ No newline at end of file
diff --git a/c%23/weekly/index.xml b/c%23/weekly/index.xml
new file mode 100644
index 00000000000..a3ce30cbe07
--- /dev/null
+++ b/c%23/weekly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub C# Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:13Z
+ Weekly Trending of C# in GitHub
+
+
+ dotnet/ai-samples
+ 2024-12-01T01:41:13Z
+ tag:github.com,2024-12-01:/dotnet/ai-samples
+
+ <p></p><hr><hr>
<p>page_type: sample languages:</p>
<ul>
<li>azdeveloper</li>
<li>bicep</li>
<li>csharp</li>
<li>powershell products:</li>
<li>azure</li>
<li>ai-services</li>
<li>azure-openai urlFragment: ai-samples name: AI Samples for .NET description: .NET samples demonstrating how to use AI in your .NET applications.</li>
</ul>
<hr>
<!-- YAML front-matter schema: https://review.learn.microsoft.com/en-us/help/contribute/samples/process/onboarding?branch=main#supported-metadata-fields-for-readmemd -->
<h1>AI Samples for .NET</h1>
<p>Welcome to the official home for .NET samples demonstrating how to use AI in your .NET applications. If you're new to AI, start at the top and work your way down. Otherwise, jump in wherever suits your interests.</p>
<h3>Microsoft.Extensions.AI (preview)</h3>
<p>Microsoft.Extensions.AI is a set of core .NET libraries developed in collaboration with the .NET ecosystem, including Semantic Kernel. These libraries provide a unified layer of C# abstractions for interacting with AI services, such as small and large language models (SLMs and LLMs) and embeddings.</p>
<p>Core benefits:</p>
<ul>
<li><em>Unified API:</em> Offers a consistent and standard set of APIs and conventions for integrating AI services into .NET applications.</li>
<li><em>Flexibility:</em> Allows .NET library authors to use AI services without forcing a specific AI provider, making it parameterizable with any provider.</li>
<li><em>Ease of Use:</em> Enables .NET application developers to experiment with different packages using the same underlying abstractions and to utilize a single API throughout their application.</li>
<li><em>Componentization:</em> Facilitates the addition of new capabilities and simplifies the componentization and testing of applications.</li>
</ul>
<p>For more details, see the <a href="https://aka.ms/meai-preview-blog">Introducing Microsoft.Extensions.AI Preview blog post</a>.</p>
<table>
<thead>
<tr>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>Abstraction implementations</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/microsoft-extensions-ai/abstraction-implementations/README.md">GitHub Link</a></td>
</tr>
<tr>
<td>Azure OpenAI</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/microsoft-extensions-ai/azure-openai/README.md">GitHub Link</a></td>
</tr>
<tr>
<td>OpenAI</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/microsoft-extensions-ai/openai/README.md">GitHub Link</a></td>
</tr>
<tr>
<td>Azure AI Inference</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/microsoft-extensions-ai/azure-ai-inference/.md">GitHub Link</a></td>
</tr>
<tr>
<td>Ollama</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/microsoft-extensions-ai/ollama/README.md">GitHub Link</a></td>
</tr>
</tbody>
</table>
<h3>Build 2024 - Infusing your .NET Apps with AI: Practical Tools and Techniques</h3>
<p>Discover how to bring AI into your .NET application! This session covers the tools, libraries, and best practices for incorporating LLMs or other AI capabilities to create an "intelligent app". We'll explore practical examples, including how to leverage Azure AI services and the .NET AI ecosystem, to enhance your apps with AI.</p>
<p><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg"><img src="https://raw.githubusercontent.com/dotnet/ai-samples/main/images/Build2024Preview.png" alt="Infusing your .NET Apps with AI: Practical Tools and Techniques Youtube Preview"></a></p>
<p><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg">Youtube: Infusing your .NET Apps with AI: Practical Tools and Techniques</a></p>
<h4>Tutorial: Infusing your .NET Apps with AI: Practical Tools and Techniques</h4>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>YouTube Link and Time</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Hello Semantic Kernel</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=180s">3m 0s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/01%20-%20Hello%20Semantic%20Kernel">Hello Semantic Kernel</a></td>
</tr>
<tr>
<td>2</td>
<td>Add Chat History</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=340s">5m 40s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/02%20-%20Add%20Chat%20History">Add Chat History</a></td>
</tr>
<tr>
<td>3</td>
<td>Add Plugin - Function Call</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=430s">7m 10s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/03%20-%20Add%20Plugin%20%28Function%20Call%29">Add Plugin - Function Call</a></td>
</tr>
<tr>
<td>4</td>
<td>Add Logging</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=565s">9m 24s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/04%20-%20Add%20Logging">Add Logging</a></td>
</tr>
<tr>
<td>5</td>
<td>Add Plugin - Bing Search</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=675s">11m 15s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/05%20-%20Add%20Plugin%20%28Bing%20Search%29">Add Plugin - Bing Search</a></td>
</tr>
<tr>
<td>6</td>
<td>Modify Kernel Behavior with Dependency Injection</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=757s">12m 37s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/06%20-%20Modifying%20Kernel%20Behavior%20with%20Dependency%20Injection">Modifying Kernel Behavior with Dependency Injection</a></td>
</tr>
<tr>
<td>7</td>
<td>Using Semantic Kernel in a Web App</td>
<td><a href="https://www.youtube.com/watch?v=jrNfKeGSuCg&t=957s">15m 57s</a></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/build-2024/07%20-%20Using%20Semantic%20Kernel%20in%20WebApp">Using Semantic Kernel in a Web App</a></td>
</tr>
</tbody>
</table>
<h3>Quickstarts using OpenAI</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Text Summary</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/openai/01-HikeBenefitsSummary/README.md">Hike Benefits Summary Project</a></td>
</tr>
<tr>
<td>2</td>
<td>Hiker AI</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/openai/02-HikerAI/README.md">Hiker AI Project</a></td>
</tr>
<tr>
<td>3</td>
<td>Chat Context/Data</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/openai/03-ChattingAboutMyHikes/README.md">Chatting About my Previous Hikes Project</a></td>
</tr>
<tr>
<td>4</td>
<td>Hiker AI Pro (Tool extension)</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/openai/04-HikerAIPro/README.md">Hiker AI Pro</a></td>
</tr>
<tr>
<td>5</td>
<td>Generating images</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/openai/05-HikeImages/README.md">Hike Images Project</a></td>
</tr>
<tr>
<td>REF</td>
<td>Using Milvus</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>Using Qdrant</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>Quickstarts using the Azure OpenAI SDK</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Text Summary</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/azure-openai/01-HikeBenefitsSummary/README.md">Hike Benefits Summary Project</a></td>
</tr>
<tr>
<td>2</td>
<td>Hiker AI</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/azure-openai/02-HikerAI/README.md">Hiker AI Project</a></td>
</tr>
<tr>
<td>3</td>
<td>Chat Context/Data</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/azure-openai/03-ChattingAboutMyHikes/README.md">Chatting About my Previous Hikes Project</a></td>
</tr>
<tr>
<td>4</td>
<td>Hiker AI Pro (Tool extension)</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/azure-openai/04-HikerAIPro/README.md">Hiker AI Pro</a></td>
</tr>
<tr>
<td>5</td>
<td>Generating images</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/quickstarts/azure-openai/05-HikeImages/README.md">Hike Images Project</a></td>
</tr>
</tbody>
</table>
<h3>Chat samples</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Customer Support</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/chat/CustomerSupport/README.md">Customer Support Project</a></td>
</tr>
</tbody>
</table>
<h3>LLM Core Concepts</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>Tokenizer</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>Embeddings</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>RAG</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>Prompts / Prompt Engineering</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>End to End Examples</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>E2E</td>
<td>Azure Search .</td>
<td><a href="https://github.com/Azure-Samples/azure-search-openai-demo-csharp">Azure Search Repository</a></td>
</tr>
<tr>
<td>E2E</td>
<td>E-Shop Sample</td>
<td><a href="https://github.com/dotnet/eshop">E-Shop Repository</a></td>
</tr>
</tbody>
</table>
<h3>Local Models</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>Phi</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/src/local-models/Phi">Phi</a></td>
</tr>
<tr>
<td>REF</td>
<td>Llama 2</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>Local Embedding Models</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>Clip</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>Tokenizers</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>TikToken</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>Vector Databases</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>Azure AI Search</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>PostgreSQL + pgvector</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>Milvus</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
<tr>
<td>REF</td>
<td>Qdrant</td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h3>Reference Examples</h3>
<table>
<thead>
<tr>
<th>#</th>
<th>Topic</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>REF</td>
<td>Vector<T></td>
<td><a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/">Coming Soon</a></td>
</tr>
</tbody>
</table>
<h2>.NET Foundation</h2>
<p>There are many .NET related projects on GitHub.</p>
<ul>
<li><a href="https://github.com/Microsoft/dotnet">.NET home repo</a> - links to 100s of .NET projects, from Microsoft and the community.</li>
<li><a href="https://docs.microsoft.com/aspnet/core/">ASP.NET Core home</a> - the best place to start learning about ASP.NET Core.</li>
</ul>
<p>This project has adopted the code of conduct defined by the <a href="http://contributor-covenant.org/">Contributor Covenant</a> to clarify expected behavior in our community. For more information, see the <a href="http://www.dotnetfoundation.org/code-of-conduct">.NET Foundation Code of Conduct</a>.</p>
<h2>License</h2>
<p>.NET (including the csharp-notebooks repo) is licensed under the <a href="https://raw.githubusercontent.com/dotnet/ai-samples/main/LICENSE">MIT</a> license.</p>
+
+
+ HotCakeX/Harden-Windows-Security
+ 2024-12-01T01:41:13Z
+ tag:github.com,2024-12-01:/HotCakeX/Harden-Windows-Security
+
+ <p>Harden Windows Safely, Securely using Official Supported Microsoft methods and proper explanation | Always up-to-date and works with the latest build of Windows | Provides tools and Guides for Personal, Enterprise, Government and Military security levels | Read The Rationale https://github.com/HotCakeX/Harden-Windows-Security/blob/main/Rationale.md</p><hr><div align="center">
<p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/dripwelcome1.gif" alt="Big Yummy Donut"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/donuts.gif" alt="Big Yummy Donut"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/dripwelcome2.gif" alt="Big Yummy Donut"></p>
<br>
<h1>Harden Windows Security | A New Threat to Malware</h1>
<p><a name="readme-top"></a></p>
<h2>Harden Windows Safely, Securely, Only With Official Microsoft Methods</h2>
</div>
<div align="center">
<a href="https://www.powershellgallery.com/packages/Harden-Windows-Security-Module"><img src="https://img.shields.io/powershellgallery/v/Harden-Windows-Security-Module?include_prereleases&logo=Github&logoColor=rgb(76%2C%2082%2C%20112)&label=Harden%20Windows%20Security%20Module&labelColor=rgb(233%2C255%2C125)&color=rgb(246%2C%2082%2C%20160)" alt="PowerShell Gallery Version (including pre-releases)"></a>
<a href="https://www.powershellgallery.com/packages/WDACConfig"><img src="https://img.shields.io/powershellgallery/v/WDACConfig?include_prereleases&logo=Github&logoColor=rgb(76%2C%2082%2C%20112)&label=WDACConfig%20Module&labelColor=rgb(233%2C255%2C125)&color=rgb(246%2C%2082%2C%20160)" alt="PowerShell Gallery Version (including pre-releases)"></a>
</div>
<h6 align="center"> <p><a href="https://x.com/intent/post?text=Harden+Windows+Security+%7C+Suitable+for+all+security+levels+and+requirements&hashtags=Windows%2CCyberSecurity&url=https%3A%2F%2Fgithub.com%2FHotCakeX%2FHarden-Windows-Security"><img src="https://raw.githubusercontent.com/HotCakeX/.github/7f64c27fdd600175e29ebad839e81a6ec8deb85c/Pictures/SVG/Share%20it%20on%20X.svg?sanitize=true" alt="X Share button"></a> <a href="https://dotnet.microsoft.com/en-us/download"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/SVG/Badges/.NET9.svg?sanitize=true" alt=".NET Badge"></a> <a href="https://github.com/PowerShell/PowerShell"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/SVG/Badges/PowerShell.svg?sanitize=true" alt="PowerShell Badge"></a> <a href="https://visualstudio.microsoft.com/"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/SVG/Badges/VisualStudio.svg?sanitize=true" alt="Visual Studio Badge"></a></p> </h6>
<p align="center"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#hardening-Categories">Hardening Categories</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#how-to-use">How To Use</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#features">Features</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#related">Related</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#Trust">Trust</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#support">Support</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#security-recommendations"><b>Security Recommendations</b></a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#resources">Resources</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#license">License</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki"><b>Wiki</b></a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Answers-to-the-Basic-Frequently-Asked-Questions"><b>Basic FAQs</b></a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/cool-colours.gif" width="12" alt="rotating colorful thing"> <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#roadmap"><b>Roadmap</b></a> </p>
<img src="https://raw.githubusercontent.com/HotCakeX/.github/febfcc2b3be66ef0d5ecd74694157622a7fde865/Pictures/SVG/SVG%20line%20wave%20yellow%20pink%20inverted.svg?sanitize=true" width="300000" alt="horizontal super thin rainbow RGB line">
<blockquote>
<p>[!IMPORTANT]<br> Click/Tap on Each of the Items Below to Access Them on This GitHub Repository</p>
<h3><img width="50" src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/tada-cyan.gif" alt="Indicator for App Control for Business Resources"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Introduction"> App Control for Business Resources </a></h3>
<h3><img width="50" src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/tada-purple.gif" alt="Indicator for The WDACConfig Module for App Control for Business"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/WDACConfig"> The WDACConfig Module for App Control for Business </a></h3>
<h3><img width="50" src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/colorful-heart.gif" alt="Indicator for the Rationale Behind This GitHub Repository"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Rationale.md"> Read the Rationale Behind This GitHub Repository </a></h3>
</blockquote>
<img src="https://raw.githubusercontent.com/HotCakeX/.github/febfcc2b3be66ef0d5ecd74694157622a7fde865/Pictures/SVG/SVG%20line%20wave%20yellow%20pink.svg?sanitize=true" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<blockquote>
<p>[!NOTE]<br> Windows by default is secure and safe, this repository does not imply nor claim otherwise. Just like anything, you have to use it wisely and don't compromise yourself with reckless behavior and bad user configuration; Nothing is foolproof. This repository only uses the tools and features that have already been implemented by Microsoft in Windows OS to fine-tune it towards the highest security and locked-down state, using well-documented, supported, recommended and official methods. Continue reading for comprehensive info.</p>
</blockquote>
<br>
<h2>How To Use<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#how-to-use"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/HowToUse.png" alt="HowToUseIcon"></a></h2>
<h3><img width="35" src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/SVGs/github-pink.svg?sanitize=true" alt="GitHub logo pink SVG"> Start The Harden Windows Security Using GUI <a href="https://youtu.be/a8YbihowTVg?si=hGUS2KAW_z80Hnx8">(Graphical User Interface)</a></h3>
<pre><code class="language-powershell">(irm 'https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/Harden-Windows-Security.ps1')+'P'|iex
</code></pre>
<br>
<h3><img width="35" src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/SVGs/powershell-pink.svg?sanitize=true" alt="PowerShell icon Pink"> Install the Harden Windows Security Module from <a href="https://www.powershellgallery.com/packages/Harden-Windows-Security-Module/">PowerShell Gallery</a></h3>
<p><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Harden%E2%80%90Windows%E2%80%90Security%E2%80%90Module"><strong>Check the documentation and How to use</strong></a></p>
<details>
<summary> <p>Click/Tap here for commands</p> <pre><code class="language-powershell">Install-Module -Name 'Harden-Windows-Security-Module' -Force
</code></pre> </summary>
<pre><code class="language-powershell">Protect-WindowsSecurity -GUI
</code></pre>
<pre><code class="language-powershell">Confirm-SystemCompliance
</code></pre>
<pre><code class="language-powershell">Unprotect-WindowsSecurity
</code></pre>
</details>
<br>
<div align="center">
<img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/HardenWindowsSecurityAppDemo%20v4.gif" width="750" alt="Harden Windows Security App Demo">
</div>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Requirements <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#requirements"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Requirements.png" alt="RequirementsIcon"></a></h2>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/verticalshine.gif" width="27" alt="Requirements item"> PowerShell (latest version), Install it from <a href="https://apps.microsoft.com/store/detail/powershell/9MZ1SNWT0N5D">🛍️ Microsoft Store</a> or using Winget: <code>Winget install Microsoft.PowerShell</code></p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/verticalshine.gif" width="27" alt="Requirements item"> Any device that meets the <a href="https://www.microsoft.com/en-in/windows/windows-11-specifications?r=1">Windows 11 hardware</a> and <a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs">Virtualization Based Security</a> requirements.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/verticalshine.gif" width="27" alt="Requirements item"> Virtualization technology and Secure Boot enabled in your UEFI settings. <a href="https://support.microsoft.com/en-us/windows/windows-11-and-secure-boot-a8ff1202-c0d9-42f5-940f-843abef64fad">Official guide</a> - How to enable Secure Boot on: <a href="https://support.hp.com/document/ish_4300937-4295746-16?openCLC=true">HP</a> - <a href="https://support.lenovo.com/solutions/ht509044">Lenovo</a> - <a href="https://www.dell.com/support/kbdoc/000190116/How-to-Enable-Secure-Boot-on-Your-Dell-Device">Dell</a>.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/verticalshine.gif" width="27" alt="Requirements item"> No 3rd party AV installed.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/verticalshine.gif" width="27" alt="Requirements item"> <a href="https://www.microsoft.com/en-us/software-download/windows11/">Latest available version</a> of Windows installed.</p>
<blockquote>
<p>[!TIP]<br> Restart your device after applying the hardening measures.</p>
</blockquote>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="Harden-Windows-Security is a PowerShell module">
<br>
<h2>Features <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#features"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Features.png" alt="FeaturesIcon"></a></h2>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> Everything always stays up-to-date with the newest proactive security measures that are industry standards and scalable.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> Everything is in clear text, nothing hidden, no 3rd party executable or pre-compiled binary is involved.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> No Windows functionality is removed/disabled against Microsoft's recommendations.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> All of the links and sources are from official Microsoft websites, straight from the source. No bias, No FUD, No misinformation and definitely No old obsolete methods. That's why there are no links to 3rd party news websites, forums, made up blogs/articles, and such.</p>
<details>
<summary>With the following exceptions</summary>
<table>
<thead>
<tr>
<th align="center">Link Count</th>
<th align="center">Link</th>
<th align="center">Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">1</td>
<td align="center">Intel website</td>
<td align="center">i7 13700k product page</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">state.gov</td>
<td align="center">List of State Sponsors of Terrorism</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">orpa.princeton.edu</td>
<td align="center">OFAC Sanctioned Countries</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">Wikipedia</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">UK Cyber Security Centre</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">Security.Stackexchange Q&A</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">browserleaks.com/tls</td>
<td align="center">TLS - Browser test</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">clienttest.ssllabs.com</td>
<td align="center">TLS - Browser test</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">scanigma.com/knowledge-base</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">cloudflare.com/ssl/reference/</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">github.com/ssllabs/research/</td>
<td align="center">TLS - providing additional information</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">Wayback Machine</td>
<td align="center">Providing additional information about Edge Browser</td>
</tr>
</tbody>
</table>
</details>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> The module primarily uses Group policies, <strong>the Microsoft recommended way of configuring Windows</strong>. It also uses PowerShell cmdlets where Group Policies aren't available, and finally uses <a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/Registry.csv">a few registry keys</a> to configure security measures that can neither be configured using Group Policies nor PowerShell cmdlets. This is why the module doesn't break anything or cause unwanted behavior.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> This Readme page lists <strong>all</strong> of the security measures applied by the module.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> When a hardening measure is no longer necessary because it's applied by default by Microsoft on new builds of Windows, it will also be removed from the module in order to prevent any problems and because it won't be necessary anymore.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> The module can be run infinite number of times, it's made in a way that it won't make any duplicate changes.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> Applying these hardening measures makes your PC compliant with Microsoft Security Baselines and Secured-core PC specifications (provided that you use modern hardware that supports the latest Windows security features) - <a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-highly-secure-11#what-makes-a-secured-core-pc">See what makes a Secured-core PC</a> - <a href="https://github.com/HotCakeX/Harden-Windows-Security?tab=readme-ov-file#device-guard">Check Device Guard category for more info</a></p>
<blockquote>
<p><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-highly-secure-11">Secured-core</a> – recommended for the most sensitive systems and industries like financial, healthcare, and government agencies. Builds on the previous layers and leverages advanced processor capabilities to provide protection from firmware attacks.</p>
</blockquote>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> Since I originally created this repository for myself and people I care about, I always maintain it to the highest possible standard.</p>
<p><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/Shiny.gif" width="27" alt="Features Item"> If you have multiple accounts on your device, you only need to apply the hardening measures 1 time with Admin privileges, that will make system-wide changes. Then you can <em><strong>optionally</strong></em> run the module, without Admin privileges, for each standard user to apply the <a href="https://github.com/HotCakeX/Harden-Windows-Security#non-admin-commands">Non-Admin category</a>.</p>
<br>
<blockquote>
<p>[!WARNING]<br> For your own security, exercise caution when considering any other 3rd-party tools, programs, or scripts claiming to harden or modify Windows OS in any way. Verify their legitimacy thoroughly before use and after each release. Avoid blind trust in 3rd party Internet sources. Additionally, if they don't adhere to the rules mentioned above, they can cause system damage, unknown issues, and bugs.</p>
<ul>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#Trust">Read the Trust section</a> to see how you can 100% Trust this repository.</li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Group-Policy#how-are-group-policies-for-the-module-created-and-maintained">How are Group Policies for this module created and maintained?</a></li>
</ul>
</blockquote>
<br>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="Harden-Windows-Security is a PowerShell module">
<h2>Hardening Categories<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#hardening-categories"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/HardeningCategories.png" alt="HardeningCategoriesIcon"></a></h2>
<p><a name="menu-back-to-top"></a> From Top to bottom in order:</p>
<ul>
<li> <p>Commands that require Administrator Privileges (click/tap on each of these to see in-depth info)</p>
<ul>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-security-baselines">Microsoft Security Baselines</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-365-apps-security-baselines">Microsoft 365 Apps Security Baselines</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-defender">Microsoft Defender</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#attack-surface-reduction-rules">Attack surface reduction rules</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#bitlocker-settings">Bitlocker Settings</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#device-guard">Device Guard</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#tls-security">TLS Security</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#lock-screen">Lock Screen</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#user-account-control">UAC (User Account Control)</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-firewall">Windows Firewall</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#optional-windows-features">Optional Windows Features</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-networking">Windows Networking</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#miscellaneous-configurations">Miscellaneous Configurations</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-update-configurations">Windows Update configurations</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#edge-browser-configurations">Edge Browser configurations</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#certificate-checking-commands">Certificate Checking Commands</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#country-ip-blocking">Country IP Blocking</a></li>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#downloads-defense-measures-">Downloads Defense Measures <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/PNG%20and%20JPG/New.png" alt="New Label" width="25"></a></li>
</ul> </li>
<li> <p>Commands that don't require Administrator Privileges</p>
<ul>
<li><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#non-admin-commands">Non-Admin Commands</a></li>
</ul> </li>
</ul>
<br>
<br>
<div align="center">
<table>
<thead>
<tr>
<th align="center">Indicator</th>
<th align="center">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"></td>
<td align="center">Security measure is applied using PowerShell cmdlets or Registry</td>
</tr>
<tr>
<td align="center"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"></td>
<td align="center">Security measure is applied using Group Policies</td>
</tr>
<tr>
<td align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="25" alt="Rotating green checkmark denoting CSP"></td>
<td align="center"><a href="https://learn.microsoft.com/en-us/windows/configuration/provisioning-packages/how-it-pros-can-use-configuration-service-providers">CSP</a> for the security measure</td>
</tr>
<tr>
<td align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"></td>
<td align="center">Sub-category - prompts for additional confirmation</td>
</tr>
</tbody>
</table>
</div>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Microsoft Security Baselines<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-security-baselines"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Microsoft-Security-Baseline.png" alt="MicrosoftSecurityBaseline"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Microsoft%20Security%20Baselines/Microsoft%20Security%20Baselines.svg?sanitize=true" alt="Microsoft Security Baselines - Harden Windows Security" width="550"></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> A security baseline is a group of Microsoft-recommended configuration settings that explains their security implications. These settings are based on feedback from Microsoft security engineering teams, product groups, partners, and customers.</p>
<p><a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/device-management/windows-security-configuration-framework/windows-security-baselines#what-are-security-baselines">Continue reading in the official documentation</a></p>
<p><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Overrides-for-Microsoft-Security-Baseline">Optional Overrides for Microsoft Security Baselines</a></p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <strong>Highly recommended</strong> to apply these overrides, the module will ask you whether you want to apply them or not. Use Optional Overrides when applying the hardening measures on Azure VMs.</p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Microsoft 365 Apps Security Baselines<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-365-apps-security-baselines"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Microsoft-365-Apps-Security-Baselines.png" alt="Microsoft365AppsSecurityBaselines"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Readme%20Categories/Microsoft%20365%20Apps%20Security%20Baselines/Microsoft%20365%20Apps%20Security%20Baselines.png" alt="Microsoft 365 Apps Security Baselines - Harden Windows Security GitHub repository" width="550"></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> The security baseline for Microsoft 365 Apps for enterprise is published twice a year, usually in June and December.</p>
<p><a href="https://learn.microsoft.com/en-us/deployoffice/security/security-baseline">More info in Microsoft Learn</a></p>
<p><a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/device-management/windows-security-configuration-framework/get-support-for-security-baselines#version-matrix">Microsoft Security Baselines Version Matrix</a></p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Microsoft Defender<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#microsoft-defender"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/WindowsDefender.png" alt="WindowsDefenderIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Microsoft%20Defender/Microsoft%20Defender.svg?sanitize=true" alt="Microsoft Defender Cloud Protection features and abilities" width="450"></p>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Extends the <a href="https://support.microsoft.com/en-us/topic/what-is-a-cloud-security-scan-75112696-7660-4450-9194-d717f72a8ad8">Cloud Security Scan</a> time to the maximum amount of 60 seconds, by default it is 10 seconds. You need to be aware that this means actions like downloading and opening an unknown file <strong>will</strong> make Microsoft Defender send samples of it to the Cloud for more advanced analysis and it can take a maximum of 60 seconds from the time you try to open that unknown file to the time when it will be opened (if deemed safe). <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#cloudextendedtimeout">CSP</a></p>
<ul>
<li>Here is an example of the notification you will see in Windows 11 if that happens.</li>
</ul> <p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Windows%20Security%20Cloud%20Analysis.png" alt="Windows Security Cloud Scan Notification" width="200"></p> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Cloud Block/Protection Level to the <strong>maximum level of Zero Tolerance and <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-block-at-first-sight-microsoft-defender-antivirus?view=o365-worldwide#turn-on-block-at-first-sight-with-group-policy">Block At First Sight</a></strong>. No unknown file can run on your system without first being recognized by the Microsoft's Security Graph and other <strong>globally omniscient systems</strong>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#cloudblocklevel">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Microsoft Defender to send all samples automatically. Increasing protection by participating in the SpyNet / MAPS network. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#submitsamplesconsent">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the SpyNet membership to Advanced, improving Cloud Protection. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#allowcloudprotection">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables file hash computation; <a href="https://learn.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=windowsserver2022-ps#-enablefilehashcomputation">designed</a> to allow admins to force the anti-malware solution to "compute file hashes for every executable file that is scanned if it wasn't previously computed" to "improve blocking for custom indicators in Microsoft Defender Advanced Threat Protection (Microsoft Defender ATP). <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#mpengine_enablefilehashcomputation">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Clears Quarantined items after 1 day instead of the default behavior of keeping them indefinitely. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#quarantine_purgeitemsafterdelay">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Allows Microsoft Defender to download security updates even on a metered connection. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp?WT.mc_id=Portal-fx#configurationmeteredconnectionupdates">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Microsoft Defender to scan mapped network drives during full scan. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#allowfullscanonmappednetworkdrives">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Microsoft Defender to scan emails. The engine will parse the mailbox and mail files. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#allowemailscanning">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Microsoft Defender to scan Removable Drives. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#allowfullscanremovabledrivescanning">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Microsoft Defender to scan <a href="https://learn.microsoft.com/en-us/windows/win32/fileio/reparse-points">Reparse Points</a>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#scan_disablereparsepointscanning">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Forces <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-advanced-scan-types-microsoft-defender-antivirus?view=o365-worldwide#settings-and-locations">Microsoft Defender</a> to scan network files. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#allowscanningnetworkfiles">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the Signature Update Interval to every 3 hours instead of automatically. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#signatureupdateinterval">CSP</a></p>
<ul>
<li> <p><a href="https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes">Change logs for security intelligence updates</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-network-connections-microsoft-defender-antivirus?view=o365-worldwide">Configure and validate Microsoft Defender Antivirus network connections</a></p> </li>
<li> <p><a href="https://www.microsoft.com/en-us/wdsi/defenderupdates">Security intelligence updates for Microsoft Defender Antivirus and other Microsoft antimalware</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/intelligence/safety-scanner-download?view=o365-worldwide">Microsoft Safety Scanner</a></p> </li>
<li> <p>Paste the following PowerShell code to retrieve the latest available online versions of the Platform, Signatures, and Engine for Microsoft Defender</p> </li>
<li> <pre><code class="language-powershell">$X = irm "https://www.microsoft.com/security/encyclopedia/adlpackages.aspx?action=info"
@{Engine = $X.versions.engine; Signatures = $X.versions.signatures.'#text'; Platform = $X.versions.platform} | ft -AutoSize
</code></pre> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Forces Microsoft Defender to check for new virus and spyware definitions before it runs a scan. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#checkforsignaturesbeforerunningscan">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Makes Microsoft Defender run <a href="https://learn.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=windowsserver2022-ps#-disablecatchupquickscan">catch-up scans</a> for scheduled quick scans. A computer can miss a scheduled scan, usually because the computer is off at the scheduled time, but now after the computer misses two scheduled quick scans, Microsoft Defender runs a catch-up scan the next time someone logs onto the computer. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#disablecatchupquickscan">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/network-protection?view=o365-worldwide">Network Protection of Microsoft Defender</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#enablenetworkprotection">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables <a href="https://learn.microsoft.com/en-us/powershell/module/defender/set-mppreference#-disablerestorepoint">scanning of restore points</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#scan_disablerestorepoint">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Makes sure <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/network-protection?view=o365-worldwide#optimizing-network-protection-performance">Async Inspection for Network protection</a> of Microsoft Defender is turned on - Network protection now has a performance optimization that allows Block mode to start asynchronously inspecting long connections after they're validated and allowed by SmartScreen, which might provide a potential reduction in the cost that inspection has on bandwidth and can also help with app compatibility problems. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp?WT.mc_id=Portal-fx#configurationallowswitchtoasyncinspection">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Enables <a href="https://support.microsoft.com/en-us/topic/what-is-smart-app-control-285ea03d-fa88-4d56-882e-6698afdb7003">Smart App Control</a> (<em>if it's in Evaluation mode</em>): adds significant protection from new and emerging threats by blocking apps that are malicious or untrusted. Smart App Control also helps to block potentially unwanted apps, which are apps that may cause your device to run slowly, display unexpected ads, offer extra software you didn't want, or do other things you don't expect.</p>
<ul>
<li> <p>Smart App Control is User-Mode (and enforces Kernel-Mode) <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/appcontrol-design-guide">App Control for Business</a>, <strong>more info</strong> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Introduction"><strong>in the Wiki</strong></a>. You can see its status in <a href="https://support.microsoft.com/en-us/windows/view-your-system-info-a965a8f2-0773-1d65-472a-1e747c9ebe00">System Information</a> and enable it manually from Microsoft Defender app's GUI. It is very important for Windows and Windows Defender intelligence updates to be always up-to-date in order for Smart App Control to work properly as it relies on live intelligence and definition data from the cloud and other sources to make a Smart decision about programs and files it encounters.</p> </li>
<li> <p>Smart App Control uses <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/use-appcontrol-with-intelligent-security-graph#how-does-wdac-work-with-the-isg">ISG (Intelligent Security Graph)</a>. The ISG isn't a "list" of apps. Rather, it uses the same vast security intelligence and machine learning analytics that power Microsoft Defender SmartScreen and Microsoft Defender Antivirus to help classify applications as having "known good", "known bad", or "unknown" reputation. This cloud-based AI is based on trillions of signals collected from Windows endpoints and other data sources and processed every 24 hours. As a result, the decision from the cloud can change.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/appcontrol#wdac-and-smart-app-control">Smart App Control</a> can block a program entirely from running or only <a href="https://support.microsoft.com/en-us/topic/smart-app-control-has-blocked-part-of-this-app-0729fff1-48bf-4b25-aa97-632fe55ccca2">some parts of it</a> in which case your app or program will continue working just fine most of the time. It's improved a lot since it was introduced, and it continues doing so. Consider turning it on after clean installing a new OS and fully updating it.</p> </li>
<li> <p>Smart App Control enforces the <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/microsoft-recommended-driver-block-rules">Microsoft Recommended Driver Block rules</a> and the <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol">Microsoft Recommended Block Rules</a></p> </li>
<li> <p>Once you turn Smart App Control off, it can't be turned on without resetting or reinstalling Windows.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Enables <a href="https://learn.microsoft.com/en-us/windows/privacy/windows-diagnostic-data">"Send optional diagnostic data"</a> because <a href="https://learn.microsoft.com/en-us/windows/privacy/configure-windows-diagnostic-data-in-your-organization">it</a> is <a href="https://support.microsoft.com/en-us/topic/what-is-smart-app-control-285ea03d-fa88-4d56-882e-6698afdb7003">required for Smart App Control</a> <strong>to operate when it's in evaluation mode or turned on, and for communication with <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/use-appcontrol-with-intelligent-security-graph">Intelligent Security Graph (ISG)</a>.</strong> This setting will be automatically applied if Smart App Control is already turned on or you choose to turn it on. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-system#allowtelemetry">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/enable-controlled-folders">Controlled Folder Access</a>. It <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/controlled-folders">helps protect your valuable data</a> from malicious apps and threats, such as ransomware. Controlled folder access protects your data by checking apps against a list of known, trusted apps. Due to the recent wave of global ransomware attacks, it is important to use this feature to protect your valuables files, specially OneDrive folders. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#enablecontrolledfolderaccess">CSP</a></p>
<ul>
<li> <p>If it blocks a program from accessing one of your folders it protects, and you absolutely trust that program, then you can add it to exclusion list using Microsoft Defender GUI or PowerShell. you can also query the list of allowed apps using PowerShell (commands below). with these commands, you can backup your personalized list of allowed apps, that are relevant to your system, and restore them in case you clean install your Windows.</p> </li>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> The root of the OneDrive folders of all the user accounts will be added to the protected folders list of Controlled Folder Access, to provide Ransomware protection for the entire OneDrive folder. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#controlledfolderaccessprotectedfolders">CSP</a></p> </li>
<li> <pre><code class="language-powershell"># Add multiple programs to the exclusion list of Controlled Folder Access
Add-MpPreference -ControlledFolderAccessAllowedApplications 'C:\Program Files\App\app.exe','C:\Program Files\App2\app2.exe'
</code></pre> </li>
<li> <pre><code class="language-powershell"># Get the list of all allowed apps
(Get-MpPreference).ControlledFolderAccessAllowedApplications
</code></pre> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/enable-exploit-protection?view=o365-worldwide">Mandatory ASLR,</a> <em>It might cause compatibility issues</em> only for some <strong>poorly-made 3rd party programs</strong>, specially portable ones. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-exploitguard">CSP</a></p>
<ul>
<li> <p>Automatically detects and excludes the Git executables of GitHub Desktop and Git (Standalone version) from mandatory ASLR if they are installed on the system. <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Git-GitHub-Desktop-and-Mandatory-ASLR">More info here</a></p> </li>
<li> <p>You can add Mandatory ASLR override for a trusted program using the PowerShell command below or in the Program Settings section of Exploit Protection in Microsoft Defender app.</p>
<ul>
<li><code>Set-ProcessMitigation -Name "C:\TrustedApp.exe" -Disable ForceRelocateImages</code></li>
</ul> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Applies <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/enable-exploit-protection">Exploit Protections/Process Mitigations</a> from <a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/ProcessMitigations.csv"><strong>this list</strong></a> to the following programs: <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-exploitguard">CSP</a></p>
<ul>
<li> <p>All channels of <a href="https://www.microsoft.com/en-us/edge">Microsoft Edge</a> browser</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist">Quick Assist</a> app</p> </li>
<li> <p>Some System processes</p> </li>
<li> <p>Microsoft 365 apps</p> </li>
<li> <p>More apps and processes will be added to the list over time once they are properly validated to be fully compatible.</p> </li>
<li> <p>Exploit Protection configurations are also accessible in XML format <a href="https://github.com/HotCakeX/Harden-Windows-Security/tree/main/Intune%20Files/Hardening%20Policies/Exploit%20Protections">within this repository</a>. When implementing exploit protections using an XML file, the existing exploit mitigations will seamlessly integrate rather than being overwritten. Should there be pre-existing exploit protections applied to an executable on the system, and the XML file specifies different mitigations for the same executable, these protections will be merged and applied collectively.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/bcdedit--set">Turns on Data Execution Prevention</a> (DEP) for all applications, including 32-bit programs. By default, the output of <code>BCDEdit /enum "{current}"</code> (in PowerShell) for the NX bit is <code>OptIn</code> but this module sets it to <code>AlwaysOn</code></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Check for the latest virus and spyware security intelligence on startup. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#signatureupdate_updateonstartup">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Specifies the maximum depth to scan archive files to the maximum possible value of <code>4,294,967,295</code> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#scan_archivemaxdepth">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-advanced-scan-types-microsoft-defender-antivirus?view=o365-worldwide">Defines the maximum size of downloaded files and attachments to be scanned</a> and set it to the maximum possible value of <code>10,000,000 KB</code> or <code>10 GB</code>. <a href="https://github.com/MicrosoftDocs/microsoft-365-docs/pull/5600">the default is</a> <code>20480 KB</code> or <code>~20MB</code> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#realtimeprotection_ioavmaxsize">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables the <a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/virus-and-threat-protection/microsoft-defender-smartscreen/enhanced-phishing-protection">Enhanced Phishing Protection</a> service. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-webthreatdefense#serviceenabled">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables notifying user of malicious and phishing scenarios in Microsoft Defender Enhanced Phishing Protection. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-webthreatdefense#notifymalicious">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables the feature in Enhanced Phishing Protection in Microsoft Defender SmartScreen that warns users if they reuse their work or school password. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-webthreatdefense#notifypasswordreuse">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables warning users if they type their work or school passwords in unsafe apps. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-webthreatdefense#notifyunsafeapp">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables automatic data collection (formerly known as Capture Threat Window) of Enhanced Phishing Protection in Microsoft Defender SmartScreen for security analysis from a suspicious website or app. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-webthreatdefense#automaticdatacollection">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Fast-and-Automatic-Microsoft-Recommended-Driver-Block-Rules-updates">Creates scheduled task for fast weekly Microsoft recommended driver block list update.</a>. You won't see this prompt if the task already exists and is enabled or running.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Set Microsoft <a href="https://learn.microsoft.com/en-us/powershell/module/defender/set-mppreference#-engineupdateschannel">Defender engine</a> and <a href="https://learn.microsoft.com/en-us/powershell/module/defender/set-mppreference#-platformupdateschannel">platform update channel</a> to beta. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp?WT.mc_id=Portal-fx#configurationengineupdateschannel">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp?WT.mc_id=Portal-fx#configurationplatformupdateschannel">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/defender-endpoint/manage-outdated-endpoints-microsoft-defender-antivirus?view=o365-worldwide#use-group-policy-to-specify-the-number-of-days-before-protection-is-considered-out-of-date">Defines</a> the number of days before spyware security intelligence is considered out of date to 2. The default is 7. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#signatureupdate_assignaturedue">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Defines the number of days before virus security intelligence is considered out of date to 2. The default is 7. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#signatureupdate_avsignaturedue">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-remediation-microsoft-defender-antivirus">default action</a> for Severe and High threat levels to Remove, for Medium and Low threat levels to Quarantine. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-microsoftdefenderantivirus#threats_threatiddefaultaction">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures real-time protection and Security Intelligence Updates to be enabled during OOBE. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationoobeenablertpandsigupdate">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables the <a href="https://techcommunity.microsoft.com/t5/microsoft-defender-for-endpoint/defending-against-ransomware-with-microsoft-defender-for/ba-p/3243941">Intel TDT</a> (Intel® Threat Detection Technology) integration with Microsoft Defender. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationinteltdtenabled">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Disables <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint-antivirus-performance-mode">Performance Mode</a> - <a href="https://learn.microsoft.com/en-us/windows/dev-drive/#understanding-security-risks-and-trust-in-relation-to-dev-drive">Security risks in relation to Dev Drive</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp?WT.mc_id=Portal-fx#configurationperformancemodestatus">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables a network protection setting that blocks malicious network traffic instead of displaying a warning. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationenableconvertwarntoblock">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Brute-Force Protection to use cloud aggregation to block IP addresses that are over 99% likely malicious <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksbruteforceprotectionbruteforceprotectionaggressiveness">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Brute-Force Protection to detect and block attempts to forcibly sign in and initiate sessions <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksbruteforceprotectionbruteforceprotectionconfiguredstate">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the internal feature logic to determine blocking time for the Brute-Force Protections <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksbruteforceprotectionbruteforceprotectionmaxblocktime">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Remote Encryption Protection to use cloud intel and context, and block when confidence level is above 90%. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksremoteencryptionprotectionremoteencryptionprotectionaggressiveness">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Remote Encryption Protection to detect and block attempts to replace local files with encrypted versions from another device <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksremoteencryptionprotectionremoteencryptionprotectionconfiguredstate">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the internal feature logic to determine blocking time for the Remote Encryption Protection <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksremoteencryptionprotectionremoteencryptionprotectionmaxblocktime">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Extends the brute-force protection coverage in the Microsoft Defender Antivirus to block local network addresses. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationbehavioralnetworkblocksbruteforceprotectionbruteforceprotectionpluginsbruteforceprotectionlocalnetworkblocking">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables <a href="https://learn.microsoft.com/en-us/defender-endpoint/microsoft-defender-core-service-configurations-and-experimentation">ECS Configurations</a> in the Microsoft Defender. They improve product health and security by <em>automatically</em> fixing any possible issues/bugs that may arise, in a timely manner.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Network Protection to be configured into block or audit mode on Windows Server. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/defender-csp#configurationallownetworkprotectiononwinserver">CSP</a></li>
</ul>
<br>
<blockquote>
<p>[!TIP]<br> <a href="https://learn.microsoft.com/en-us/defender-endpoint/tune-performance-defender-antivirus">Performance analyzer for Microsoft Defender Antivirus</a></p>
</blockquote>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Attack surface reduction rules<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#attack-surface-reduction-rules"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/ASRrules.png" alt="ASRrulesIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/0180bc6ace1ea086653cc405f142d1aada424150/Pictures/Readme%20Categories/Attack%20Surface%20Reduction/Attack%20Surface%20Reduction.svg?sanitize=true" alt="Attack surface reduction rules - Harden Windows Security GitHub repository" width="550"></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide">Attack surface reduction rules</a> target certain software behaviors, such as: <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-defender#attacksurfacereductionrules">CSP</a></p>
<ul>
<li>Launching executable files and scripts that attempt to download or run files</li>
<li>Running obfuscated or otherwise suspicious scripts</li>
<li>Performing behaviors that apps don't usually initiate during normal day-to-day work</li>
</ul>
<p>Such software behaviors are sometimes seen in legitimate applications. However, these behaviors are often considered risky because they are commonly abused by attackers through malware. Attack surface reduction rules can constrain software-based risky behaviors and help keep your organization safe.</p>
<p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/attack-surface-reduction">Reducing your attack surface</a> means protecting your devices and network, which leaves attackers with fewer ways to perform attacks. Configuring attack surface reduction rules in Windows can help!</p>
<blockquote>
<p>[!TIP]<br> <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/attack-surface-reduction-rules-reference?view=o365-worldwide#asr-rule-to-guid-matrix">all 19 available Attack Surface Reduction rules shown in the official chart</a> will be enabled. The Harden Windows Security application also allows you to individually configure each Attack Surface Reduction rule.</p>
</blockquote>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Bitlocker Settings<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#bitlocker-settings"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Bitlocker.png" alt="BitlockerIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/0180bc6ace1ea086653cc405f142d1aada424150/Pictures/Readme%20Categories/BitLocker%20Settings/BitLocker%20Settings.svg?sanitize=true" alt="Bitlocker Settings - Harden Windows Security" width="550"></p>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> The module sets up and configures Bitlocker <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-group-policy-settings">using official documentation</a>, with the most secure configuration and military grade encryption algorithm, XTS-AES-256, to protect the confidentiality and integrity of all information at rest. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/bitlocker-csp#encryptionmethodbydrivetype">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/bitlocker-csp#systemdrivesrequirestartupauthentication">CSP</a></p>
<ul>
<li> <p>It offers 2 security levels for OS drive encryption: <strong>Enhanced</strong> and <strong>Normal</strong>.</p> </li>
<li> <p>In <strong>Normal</strong> security level, the OS drive is encrypted with TPM and Startup PIN. This provides very high security for your data, specially with a PIN that's long, complicated (uppercase and lowercase letters, symbols, numbers, spaces) and isn't the same as your Windows Hello PIN.</p> </li>
<li> <p>In <strong>Enhanced</strong> security level, the OS drive is encrypted with TPM and Startup PIN and Startup key. This provides the highest level of protection by offering Multifactor Authentication. You will need to enter your PIN and also plug in a flash drive, containing a special BitLocker key, into your device in order to unlock it. <a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/countermeasures#preboot-authentication">Continue reading more about it here</a>.</p> </li>
<li> <p>Once the OS drive is encrypted, for every other non-OS drive, there will be prompts for confirmation before encrypting it. The encryption will use the same algorithm as the OS drive and uses <a href="https://learn.microsoft.com/en-us/powershell/module/bitlocker/enable-bitlockerautounlock">Auto-unlock key protector</a>. Removable flash drives are skipped.</p> </li>
<li> <p>The recovery information of all of the drives are saved in a single well-formatted text file in the root of the OS drive <code>C:\BitLocker-Recovery-Info-All-Drives.txt</code>. It's <strong>very important to keep it in a safe and reachable place as soon as possible, e.g., in OneDrive's Personal Vault which requires additional authentication to access.</strong> See <a href="https://www.microsoft.com/en-us/microsoft-365/onedrive/personal-vault">here</a> and <a href="https://support.microsoft.com/en-us/office/protect-your-onedrive-files-in-personal-vault-6540ef37-e9bf-4121-a773-56f98dce78c4">here</a> for more info. You can use it to unlock your drives if you ever forget your PIN, lose your Startup key (USB Flash Drive) or TPM no longer has the correct authorization (E.g., after a firmware change).</p> </li>
<li> <p>TPM has <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/tpm/tpm-fundamentals">special anti-hammering logic</a> which prevents malicious user from guessing the authorization data indefinitely. <a href="https://learn.microsoft.com/en-us/archive/blogs/dubaisec/tpm-lockout">Microsoft defines that maximum number of failed attempts</a> in Windows is 32 and every single failed attempt is forgotten after 2 hours. This means that every continuous two hours of powered on (and successfully booted) operation without an event which increases the counter will cause the counter to decrease by 1. You can view all the details using this <a href="https://learn.microsoft.com/en-us/powershell/module/trustedplatformmodule/get-tpm">PowerShell command</a>: <code>Get-TPM</code>.</p> </li>
<li> <p>Check out <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#lock-screen">Lock Screen</a> category for more info about the recovery password and the 2nd anti-hammering mechanism.</p> </li>
<li> <p>BitLocker will bring you a <a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/countermeasures#attacker-with-skill-and-lengthy-physical-access">real security</a> against the theft of your device if you strictly abide by the following basic rules:</p>
<ul>
<li> <p>As soon as you have finished working, either Hibernate or shut Windows down and allow for every shadow of information to disappear from RAM within 2 minutes. <strong>This practice is recommended in High-Risk Environments.</strong></p> </li>
<li> <p>Do not mix 3rd party encryption software and tools with Bitlocker. Bitlocker creates a secure end-to-end encrypted ecosystem for your device and its peripherals, this secure ecosystem is backed by things such as software, Virtualization Technology, TPM 2.0 and UEFI firmware, Bitlocker protects your data and entire device against <strong>real-life attacks and threats</strong>. You can encrypt your external SSDs and flash drives with Bitlocker too.</p> </li>
</ul> </li>
</ul> </li>
</ul>
<br>
<blockquote>
<p>[!IMPORTANT]<br> <a href="https://github.com/HotCakeX/Harden-Windows-Security/issues/63">AMD Zen 2 and 3 CPUs have a vulnerability in them</a>, if you use one of them, make sure your Bitlocker Startup PIN is at least 16 characters long <a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/bitlocker-group-policy-settings#configure-minimum-pin-length-for-startup"><em>(max is 20)</em></a>.</p>
</blockquote>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables or disables <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-countermeasures#protecting-thunderbolt-and-other-dma-ports">DMA protection from Bitlocker Countermeasures</a> based on the status of <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/kernel-dma-protection-for-thunderbolt">Kernel DMA protection</a>. Kernel DMA Protection is <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/kernel-dma-protection-for-thunderbolt#system-compatibility">not compatible</a> with other BitLocker DMA attacks countermeasures. It is recommended to disable the BitLocker DMA attacks countermeasures if the system supports Kernel DMA Protection (this module does that exactly). Kernel DMA Protection provides higher security bar for the system over the BitLocker DMA attack countermeasures, while maintaining usability of external peripherals. you can check the status of Kernel DMA protection <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/kernel-dma-protection-for-thunderbolt#how-to-check-if-kernel-dma-protection-is-enabled">using this official guide</a>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-dataprotection#allowdirectmemoryaccess">CSP</a></p>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-kernel-dma-protection">Kernel DMA Protection (Memory Access Protection) for OEMs</a> page shows the requirements for Kernel DMA Protection. for Intel CPUs, support for requirements such as VT-X and VT-D can be found in each CPU's respective product page. e.g. <a href="https://ark.intel.com/content/www/us/en/ark/products/230500/intel-core-i713700k-processor-30m-cache-up-to-5-40-ghz.html">Intel i7 13700K</a></li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Disallows standard (non-Administrator) users from changing the Bitlocker Startup PIN or password <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/bitlocker-csp#systemdrivesdisallowstandarduserscanchangepin">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-group-policy-settings#configure-minimum-pin-length-for-startup">Requires you to choose a PIN that contains at least 10 characters</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/bitlocker-csp#systemdrivesminimumpinlength">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> (Only on Physical machines) Enables Hibernate and adds Hibernate to Start menu's power options. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-power#allowhibernate">CSP</a></p>
<ul>
<li>Devices that support <a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby">Modern Standby</a> have the most security because <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/system-power-states">(S1-S3) power states</a> which belong to the <a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-vs-s3">legacy sleep modes</a> are not available. In Modern Standby, security components remain vigilant and the OS stays protected. Applying Microsoft Security Baselines also automatically disables the legacy (S1-S3) sleep states.</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/windows/win32/power/system-power-states#hibernation-file-types">sets Hibernate to full</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables network connectivity in standby on modern standby-capable systems. This ensures security updates for Microsoft Defender and Windows will be installed automatically. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-power#acconnectivityinstandby_2">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-group-policy-settings#allow-access-to-bitlocker-protected-removable-data-drives-from-earlier-versions-of-windows">Disallows access to Bitlocker-protected removable data drives from earlier versions of Windows.</a></li>
</ul>
<p>Refer to this <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-countermeasures">official documentation about the countermeasures of Bitlocker</a></p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Device Guard<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#device-guard"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/DeviceGuard.png" alt="DeviceGuardIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Readme%20Categories/Device%20Guard/Device%20Guard.png" alt="Device Guard Category - Harden Windows Security GitHub repository" width="600"></p>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity">Virtualization-Based Security + UEFI Lock</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-deviceguard?WT.mc_id=Portal-fx#enablevirtualizationbasedsecurity">CSP</a></p>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity#validate-enabled-vbs-and-memory-integrity-features">Validate enabled Windows Defender Device Guard hardware-based security features</a></li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/information-protection/kernel-dma-protection-for-thunderbolt">Secure boot (without requiring DMA protection) for Virtualization-Based Security</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-deviceguard?WT.mc_id=Portal-fx#requireplatformsecurityfeatures">CSP</a></p>
<ul>
<li> <p>This is in accordance with <a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity#use-registry-keys-to-enable-memory-integrity">Microsoft's recommendation</a>. This option provides Secure Boot with as much protection as is supported by a given computer’s hardware. A computer with input/output memory management units (IOMMUs) will have Secure Boot with DMA protection. A computer without IOMMUs will simply have Secure Boot enabled.</p> </li>
<li> <p>Secure boot has 2 parts, part 1 is enforced using the Group Policy by this module, but for part 2, you need to <a href="https://support.microsoft.com/en-us/windows/windows-11-and-secure-boot-a8ff1202-c0d9-42f5-940f-843abef64fad">enable Secure Boot in your UEFI firmware settings</a> <strong>if</strong> it's not enabled by default (which is the case on older hardware).</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-kernel-dma-protection">(Kernel) DMA protection hardware requirements</a></p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Virtualization-based protection of Code Integrity + UEFI Lock <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-VirtualizationBasedTechnology?WT.mc_id=Portal-fx#hypervisorenforcedcodeintegrity">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs">Require UEFI Memory Attributes Table (MAT)</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-VirtualizationBasedTechnology?WT.mc_id=Portal-fx#requireuefimemoryattributestable">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage#enable-virtualization-based-security-and-windows-defender-credential-guard">Windows Defender Credential Guard + UEFI Lock</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-deviceguard?WT.mc_id=Portal-fx#lsacfgflags">CSP</a></p>
<ul>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/dg-readiness-tool">Windows Defender Device Guard and Windows Defender Credential Guard hardware readiness tool</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-requirements">Windows Defender Credential Guard requirements</a></p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/system-guard-secure-launch-and-smm-protection#group-policy">System Guard Secure Launch and SMM protection (Firmware Protection)</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-deviceguard?WT.mc_id=Portal-fx#configuresystemguardlaunch">CSP</a></p>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/system-guard-secure-launch-and-smm-protection#how-to-verify-system-guard-secure-launch-is-configured-and-running">How to verify System Guard Secure Launch is configured and running</a></li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://techcommunity.microsoft.com/t5/microsoft-security-baselines/windows-11-version-22h2-security-baseline/ba-p/3632520">Kernel Mode Hardware Enforced Stack Protection</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection">Local Security Authority</a> (LSA) process Protection + UEFI Lock <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-lsa#configurelsaprotectedprocess">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <strong>Machine Identity Isolation Configuration</strong> in Enforcement mode.</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Enables Virtualization-based Security and Memory Integrity in <a href="https://learn.microsoft.com/en-us/windows/security/hardware-security/enable-virtualization-based-protection-of-code-integrity?tabs=reg">Mandatory mode</a>.</p>
<ul>
<li>Special care should be used before enabling this mode, since, in case of any failure of the virtualization modules, the system will refuse to boot.</li>
</ul> </li>
</ul>
<br>
<blockquote>
<p>[!TIP]<br> <strong>Most of the Device Guard and Virtualization-Based Security features are Automatically enabled by default</strong> on capable and modern hardware. The rest of them will be enabled and configured to the most secure state after you apply the Microsoft Security Baselines and the Harden Windows Security policies.</p>
<ul>
<li> <p><a href="https://www.microsoft.com/en-us/windows/business/windows-11-secured-core-computers"><strong>Check out Secured-Core PC requirements</strong></a>.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-hvci-enablement">Memory integrity and VBS enablement</a></p> </li>
</ul>
</blockquote>
<br>
<blockquote>
<p>[!IMPORTANT]<br> <strong>About UEFI Lock</strong></p>
<p>UEFI locked security measures are rooted in <strong>Proof of Physical Presence</strong> and they can't be disabled by modifying Group Policy, registry keys or other Administrative tasks. The only way to disable UEFI locked security measures is to have physical access to the computer, reboot and access the UEFI settings, supply the credentials to access the UEFI, turn off Secure Boot, reboot the system and then you will be able to disable those security measures with Administrator privileges.</p>
</blockquote>
<br>
<blockquote>
<p>[!NOTE]<br> <strong><a href="https://support.microsoft.com/en-us/windows/device-protection-in-windows-security-afa11526-de57-b1c5-599f-3a4c6a61c5e2">Device Protection in Windows Security Gives You One of These 4 Hardware Scores</a></strong></p>
<ol>
<li>Standard hardware security not supported</li>
<ul>
<li>This means that your device does not meet at least one of the requirements of Standard Hardware Security.</li>
</ul>
<br>
<li>Your device meets the requirements for Standard Hardware Security. </li>
<ul>
<li><a href="https://support.microsoft.com/en-us/topic/what-is-tpm-705f241d-025d-4470-80c5-4feeb24fa1ee">TPM 2.0</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot">Secure boot</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/win32/memory/data-execution-prevention">DEP</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/unified-extensible-firmware-interface">UEFI MAT</a></li>
</ul>
<br>
<li>Your device meets the requirements for Enhanced Hardware Security</li>
<ul>
<li><a href="https://support.microsoft.com/en-us/topic/what-is-tpm-705f241d-025d-4470-80c5-4feeb24fa1ee">TPM 2.0</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot">Secure boot</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/win32/memory/data-execution-prevention">DEP</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/unified-extensible-firmware-interface">UEFI MAT</a></li>
<li><a href="https://support.microsoft.com/en-us/windows/core-isolation-e30ed737-17d8-42f3-a2a9-87521df09b78">Memory Integrity</a></li>
</ul>
<br>
<li>Your device has all Secured-core PC features enabled</li>
<ul>
<li><a href="https://support.microsoft.com/en-us/topic/what-is-tpm-705f241d-025d-4470-80c5-4feeb24fa1ee">TPM 2.0</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot">Secure boot</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/win32/memory/data-execution-prevention">DEP</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/unified-extensible-firmware-interface">UEFI MAT</a></li>
<li><a href="https://support.microsoft.com/en-us/windows/core-isolation-e30ed737-17d8-42f3-a2a9-87521df09b78">Memory Integrity</a></li>
<li><a href="https://www.microsoft.com/en-us/security/blog/2020/11/12/system-management-mode-deep-dive-how-smm-isolation-hardens-the-platform/">System Management Mode (SMM)</a></li>
</ul>
</ol>
</blockquote>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>TLS Security<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#tls-security"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/TLS.png" alt="TLSIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/0180bc6ace1ea086653cc405f142d1aada424150/Pictures/Readme%20Categories/TLS%20Security/TLS%20Security.svg?sanitize=true" alt="TLS Security - Harden Windows Security repository GitHub" width="550"></p>
<br>
<p>Changes made by this category only affect things that use <a href="https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-">Schannel SSP</a>: that includes IIS web server, built-in inbox Windows apps and some other programs supplied by Microsoft, including Windows network communications, but not 3rd party software that use <a href="https://en.wikipedia.org/wiki/Comparison_of_TLS_implementations#Portability_concerns">portable stacks</a> like Java, nodejs, python or php.</p>
<p>If you want to read more: <a href="https://techcommunity.microsoft.com/t5/core-infrastructure-and-security/demystifying-schannel/ba-p/259233">Demystifying Schannel</a></p>
<blockquote>
<p>[!NOTE]<br> This category checks whether Battle.net client is installed on the system and if it is then includes <code>TLS_RSA_WITH_AES_256_CBC_SHA</code> as an additional cipher suite in the policy due to <a href="https://github.com/HotCakeX/Harden-Windows-Security/issues/38">a known issue</a>. The way Battle.net client is detected is by checking the presence of <code>Battle.net.exe</code> or <code>Battle.net Launcher.exe</code> in <code>C:\Program Files (x86)\Battle.net\</code> folder.</p>
</blockquote>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables TLS 1 and TLS 1.1 security protocols that only <strong>exist for backward compatibility</strong>. All modern software should and do use <code>TLS 1.2</code> and <code>TLS 1.3</code>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-cryptography#overrideminimumenabledtlsversionclient">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-cryptography#overrideminimumenabledtlsversionserver">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables <a href="https://security.stackexchange.com/questions/52461/how-weak-is-md5-as-a-password-hashing-function">MD5 Hashing Algorithm</a> that is <strong>only available for backward compatibility</strong></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables the following <a href="https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices">weak ciphers</a> that are <strong>only available for backward compatibility</strong>: <code>"DES 56-bit"</code>,<code>"RC2 40-bit"</code>,<code>"RC2 56-bit"</code>,<code>"RC2 128-bit"</code>,<code>"RC4 40-bit"</code>,<code>"RC4 56-bit"</code>,<code>"RC4 64-bit"</code>,<code>"RC4 128-bit"</code>,<code>"3DES 168-bit (Triple DES 168)"</code></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the <a href="https://www.ncsc.gov.uk/guidance/using-tls-to-protect-data">TLS</a> to only use the <a href="https://developers.cloudflare.com/ssl/reference/cipher-suites/recommendations/">following</a> secure <a href="https://learn.microsoft.com/en-us/windows/win32/secauthn/tls-cipher-suites-in-windows-11">cipher suites</a> and in this <a href="https://scanigma.com/knowledge-base">exact</a> order: <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-cryptography#tlsciphersuites">CSP</a></li>
</ul>
<pre><code>TLS_CHACHA20_POLY1305_SHA256
TLS_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
</code></pre>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows-server/security/tls/manage-tls">Configures</a> TLS ECC Curves to <a href="https://github.com/HotCakeX/Harden-Windows-Security/commit/5b5be1fcab8f7bf5d364f48459aecfc54c6eff9d#commitcomment-115982586">use the following</a> prioritized Curves order: <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-cryptography#configureellipticcurvecryptography">CSP</a></li>
</ul>
<pre><code>nistP521
curve25519
NistP384
NistP256
</code></pre>
<ul>
<li>By default, <a href="https://learn.microsoft.com/en-us/windows/win32/secauthn/tls-elliptic-curves-in-windows-10-1607-and-later">in Windows</a>, the order is this:</li>
</ul>
<pre><code>curve25519
NistP256
NistP384
</code></pre>
<p><em><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/About-TLS,-DNS,-Encryption-and-OPSEC-concepts">Read more in this Wiki post</a></em></p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Lock Screen<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#lock-screen"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/LockScreen.png" alt="LockScreenIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Lock%20Screen/Lock%20Screen.svg?sanitize=true" alt="An AI generated picture of a girl working in a server farm in Lock Screen Category" width="550"></p>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-machine-inactivity-limit">Automatically locks device after X seconds of inactivity</a> (just like mobile phones), which is set to 120 seconds (2 minutes) in this module, you can change that to any value you like. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#interactivelogon_machineinactivitylimit">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-do-not-require-ctrl-alt-del">Requires <strong>CTRL+ALT+DEL</strong> on the lock screen</a>, kernel protected set of key strokes. The reason and logic behind it is: <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#interactivelogon_donotrequirectrlaltdel">CSP</a></p>
<ul>
<li>A malicious user might install malware that looks like the standard sign-in dialog box for the Windows operating system and capture a user's password. The attacker can then sign into the compromised account with whatever level of user rights that user has.</li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-machine-account-lockout-threshold">a security anti-hammering feature</a> that sets a threshold of <strong>5</strong> for the number of failed sign-in attempts that causes the device to be locked by using BitLocker. Sign-in attempts include Windows password or Windows Hello authentication methods. This threshold means, if the specified maximum number of failed sign-in attempts is exceeded, the device will invalidate the Trusted Platform Module (TPM) protector and any other protector except the 48-digit recovery password, and then reboot. During Device Lockout mode, the computer or device only boots into the touch-enabled Windows Recovery Environment (WinRE) until an authorized user enters the recovery password to restore full access.</p>
<ul>
<li>This module (<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#bitlocker-settings">in the Bitlocker category</a>) automatically saves the 48-digit recovery password of each drive in itself, the location of it will also be visible on the PowerShell console when you run it. It is <strong>very important to keep it in a safe and reachable place, e.g. in OneDrive's Personal Vault which requires authentication to access. See <a href="https://www.microsoft.com/en-us/microsoft-365/onedrive/personal-vault">Here</a> and <a href="https://support.microsoft.com/en-us/office/protect-your-onedrive-files-in-personal-vault-6540ef37-e9bf-4121-a773-56f98dce78c4">Here</a> for more info about OneDrive's Personal Vault</strong></li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures account lockout policy: <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/account-lockout-threshold">Account lockout threshold</a>, Sets the number of allowed failed sign-in attempts to <strong>5</strong>. In combination with other policies in this category, this means every 5 failed sign-in attempts will need a full day to pass before 5 more attempts can be made, otherwise Bitlocker will engage, system will be restarted and 48-digit Bitlocker code will be asked. <strong>This policy greatly prevents brute force attempts.</strong> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock#accountlockoutpolicy">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures account lockout policy: Sets <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/account-lockout-duration">Account lockout duration</a> to <strong>1440 minutes or 1 day</strong>. In combination with other policies in this category, this means every 5 failed sign-in attempts will need a full day to pass before 5 more attempts can be made, otherwise Bitlocker will engage, system will be restarted and 48-digit Bitlocker code will be asked. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock#accountlockoutpolicy">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures account lockout policy: Sets <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/reset-account-lockout-counter-after">Reset account lockout counter</a> to <strong>1440 minutes or 1 day</strong>. In combination with other policies in this category, this means every 5 failed sign-in attempts will need a full day to pass before 5 more attempts can be made, otherwise Bitlocker will engage, system will be restarted and 48-digit Bitlocker code will be asked. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-devicelock#accountlockoutpolicy">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-display-user-information-when-the-session-is-locked">Hides email address of the Microsoft account on lock screen</a>, if your device is in a trusted place like at home then this isn't necessary.</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-dont-display-username-at-sign-in">Don't display username at sign-in</a>; If a user signs in as Other user, the full name of the user isn't displayed during sign-in. In the same context, if users type their email address and password at the sign-in screen and press Enter, the displayed text "Other user" remains unchanged, and is no longer replaced by the user's first and last name, as in previous versions of Windows 10. Additionally, if users enter their domain user name and password and click Submit, their full name isn't shown until the Start screen displays. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#interactivelogon_donotdisplayusernameatsignin">CSP</a></p>
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-dont-display-username-at-sign-in#best-practices">Useful</a> If you have devices that store sensitive data, with monitors displayed in unsecured locations, or if you have devices with sensitive data that are remotely accessed, revealing logged on user's full names or domain account names</li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/interactive-logon-do-not-display-last-user-name">Don't display last signed-in</a>; This security policy setting determines whether the name of the last user to sign in to the device is displayed on the Secure Desktop. If this policy is enabled, the full name of the last user to successfully sign in isn't displayed on the Secure Desktop, nor is the user's sign-in tile displayed. Additionally, if the Switch user feature is used, the full name and sign-in tile aren't displayed. The sign-in screen requests both Username + Windows Hello credentials. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#interactivelogon_donotdisplaylastsignedin">CSP</a></p>
<ul>
<li> <p>This feature can be useful to enable if you live in <em>High-Risk Environments</em> and you don't want anyone to get any information about your accounts when you aren't logged-in.</p> </li>
<li> <p>This policy will prevent you from using "Forgot my PIN" feature in lock screen or logon screen. If you forget your PIN, you won't be able to recover it.</p> </li>
<li> <p>If you use Windows Hello Face or Fingerprint, you can easily login using those credential providers without the need to supply username first.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#dontdisplaynetworkselectionui">Don't Display Network Selection UI on Lock Screen</a> (like WIFI Icon); This setting allows you to control whether anyone can interact with available networks UI on the logon screen. Once enabled, the device's network connectivity state cannot be changed without signing into Windows. Suitable for <em>High-Risk Environments</em>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#dontdisplaynetworkselectionui">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Applies the following <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/hello-manage-in-organization#pin-complexity">PIN Complexity rules</a> to Windows Hello <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#devicetenantidpoliciespincomplexity">CSP</a>. Please note that, by default, any character can be set as a PIN. However, the following policies ensure that certain characters are always included as a minimum requirement.</p>
<ul>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#usertenantidpoliciespincomplexitydigits">Must include digits</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#devicetenantidpoliciespincomplexitydigits">CSP</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#usertenantidpoliciespincomplexityexpiration">Expires</a> <strong>every 180 days</strong> (default behavior is to never expire) <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#devicetenantidpoliciespincomplexityexpiration">CSP</a></p>
<ul>
<li>Setting an expiration date ensures that, in the event of theft, a threat actor cannot indefinitely attempt to guess the PIN. After 180 days, the PIN expires, rendering it unusable even if guessed correctly. To reset the PIN, authentication via a Microsoft account or EntraID—likely inaccessible to the attacker—will be required. Combined with anti-hammering and BitLocker policies, this expiration guarantees that a threat actor cannot endlessly persist in guessing the PIN.</li>
</ul> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#usertenantidpoliciespincomplexityhistory">History</a> of the <strong>1</strong> most recent selected PIN is preserved to prevent the user from reusing it <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#devicetenantidpoliciespincomplexityhistory">CSP</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#usertenantidpoliciespincomplexitylowercaseletters">Must include lower-case letters</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/passportforwork-csp#devicetenantidpoliciespincomplexitylowercaseletters">CSP</a></p> </li>
</ul> </li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>User Account Control<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#user-account-control"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/UAC.png" alt="UACIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/503f187e5e870b776d281808fc5574e49f212955/Pictures/Readme%20Categories/User%20Account%20Control/User%20Account%20Control.svg?sanitize=true" alt="User Account Control - Harden Windows Security" width="550"></p>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode">Prompt for elevation of privilege on secure desktop for all binaries</a> in <a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gpsb/341747f5-6b5d-4d30-85fc-fa1cc04038d4">Administrator accounts</a>, which presents the sign-in UI and restricts functionality and access to the system until the sign-in requirements are satisfied. The <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation#reference">secure desktop's</a> primary difference from the user desktop is that only trusted processes running as SYSTEM are allowed to run here (that is, nothing is running at the user's privilege level). The path to get to the secure desktop from the user desktop must also be trusted through the entire chain. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#useraccountcontrol_behavioroftheelevationpromptforadministrators">CSP</a></p>
<ul>
<li> <p><strong>Default Behavior:</strong> Prompt for consent for non-Windows binaries: When an operation for a non-Microsoft application requires elevation of privilege, the user is prompted on the secure desktop to select either Permit or Deny. If the user selects Permit, the operation continues with the user's highest available privilege.</p> </li>
<li> <p><strong>Harden Windows Security Behavior:</strong> When an operation requires elevation of privilege, the user is prompted on the secure desktop to select either Permit or Deny. If the user selects Permit, the operation continues with the user's highest available privilege.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Only elevate executables that are signed and validated <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-account-control-only-elevate-executables-that-are-signed-and-validated">by enforcing cryptographic signatures on any interactive application</a> that requests elevation of privilege. One of the <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-account-control-only-elevate-executables-that-are-signed-and-validated#potential-impact">Potential impacts</a> of it is that it can prevent certain poorly designed programs from prompting for UAC. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#useraccountcontrol_onlyelevateexecutablefilesthataresignedandvalidated">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Hides the entry points for <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon">Fast User Switching</a>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-windowslogon#hidefastuserswitching">CSP</a></p>
<ul>
<li>This policy will prevent you from using "Forgot my PIN" feature in lock screen or logon screen. If you forget your PIN, you won't be able to recover it.</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the behavior of the elevation prompt for Standard users to Prompt for Credentials on the Secure Desktop. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-localpoliciessecurityoptions#useraccountcontrol_behavioroftheelevationpromptforstandardusers">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the type of <a href="https://techcommunity.microsoft.com/t5/microsoft-security-baselines/windows-11-version-24h2-security-baseline/ba-p/4252801">Admin Approval Mode</a> to be Admin Approval Mode with enhanced privilege protection.</li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Windows Firewall<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-firewall"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Firewall.png" alt="FirewallIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Windows%20Firewall/Windows%20Firewall.svg?sanitize=true" alt="Windows Firewall - Harden Windows Security GitHub repository" width="500"></p>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Sets the Network Location of all connections to Public; <a href="https://support.microsoft.com/en-us/windows/make-a-wi-fi-network-public-or-private-in-windows-0460117d-8d3e-a7ac-f003-7a0da607448d">Public network means less trust to other network devices</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Makes sure Windows Firewall is enabled for all profiles (which is the default) <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstorepublicprofileenablefirewall">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoreprivateprofileenablefirewall">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofileenablefirewall">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets inbound and outbound default actions for Domain Firewall Profile to Block; because this module is Not intended to be used on devices that are part of a domain or controlled by an Active Directory Domain Controller, since they will have their own policies and policy management systems in place. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofiledefaultinboundaction">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofiledefaultoutboundaction">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables Windows Firewall logging for Domain, Private and Public profiles, sets the log file size for each of them to the max <code>32.767 MB</code>. Defines separate log files for each of the firewall profiles. Logs only dropped packets for Private and Public profiles, Logs both dropped and successful packets for Domain profile. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofileenablelogdroppedpackets">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofilelogfilepath">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoredomainprofilelogmaxfilesize">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoreprivateprofileenablelogdroppedpackets">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoreprivateprofilelogfilepath">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstoreprivateprofilelogmaxfilesize">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstorepublicprofileenablelogdroppedpackets">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstorepublicprofilelogfilepath">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/firewall-csp#mdmstorepublicprofilelogmaxfilesize">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables <a href="https://techcommunity.microsoft.com/t5/networking-blog/mdns-in-the-enterprise/ba-p/3275777">Multicast DNS (mDNS) UDP-in Firewall Rules for all 3 Firewall profiles</a>, This might interfere with Miracast screen sharing, which relies on the Public profile, and homes where the Private profile is not selected, but it does add an extra measure of security in public places, like a coffee shop.
<ul>
<li>The domain name <code>.local</code> which is used in mDNS (Multicast DNS) <a href="https://en.wikipedia.org/wiki/.local">is a special-use domain name reserved by the Internet Engineering Task Force (IETF)</a> so that it may not be installed as a top-level domain in the Domain Name System (DNS) of the Internet.</li>
</ul> </li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Optional Windows Features<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#optional-windows-features"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/OptionalFeatures.png" alt="OptionalFeaturesIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Optional%20Windows%20Features/Optional%20Windows%20Features.png" alt="Optional Windows Features - Harden Windows Security GitHub repository" width="500"></p>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> The module <a href="https://learn.microsoft.com/en-us/powershell/module/dism/disable-windowsoptionalfeature">disables</a> the following rarely used features in <a href="https://learn.microsoft.com/en-us/windows/application-management/add-apps-and-features#use-windows-powershell-to-disable-specific-features">Windows optional features</a> (Control Panel):</p>
<ul>
<li> <p>PowerShell v2: because it's old and doesn't support <a href="https://devblogs.microsoft.com/powershell/powershell-the-blue-team/#antimalware-scan-interface-integration">AMSI</a>.</p> </li>
<li> <p>Work Folders client: not used when your computer is not part of a domain or enterprise network.</p> </li>
<li> <p>Internet Printing Client: used in combination with IIS web server, <a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/printing/manage-connect-printers-use-web-browser">old feature</a>, can be disabled without causing problems further down the road.</p> </li>
<li> <p>Windows Media Player (legacy): isn't needed anymore, <a href="https://blogs.windows.com/windows-insider/2021/11/16/new-media-player-for-windows-11-begins-rolling-out-to-windows-insiders/">Windows 11 has a modern media player app</a>.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/microsoft-defender-application-guard/md-app-guard-overview">Microsoft Defender Application Guard</a>, it's <a href="https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#deprecated-features">deprecated</a>. Learn more about <a href="https://edgestatic.azureedge.net/shared/cms/pdfs/Microsoft_Edge_Security_Whitepaper_v2.pdf">Microsoft Edge Security Features here</a>.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/powershell/module/dism/remove-windowscapability">Uninstalls</a> these optional features (Windows Settings -> Apps -> Optional Features):</p>
<ul>
<li> <p>Notepad (system): legacy Notepad program. Windows 11 has multi-tabbed modern Notepad app.</p> </li>
<li> <p>VBSCRIPT: a legacy <a href="https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features">deprecated</a> scripting engine component, <a href="https://techcommunity.microsoft.com/t5/windows-insider-program/windows-11-insider-dev-build-25309-allows-for-uninstallation-of/m-p/3759739">Microsoft does not recommend</a> using this component unless and until it is really required.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/deployedge/edge-ie-mode">Internet Explorer mode for Edge browser</a>: It's only used by a few possible organizations that have very old internal websites.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic">WMIC</a>: Old and <a href="https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features">deprecated</a>, not secure and is in <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/design/applications-that-can-bypass-appcontrol">Microsoft recommended block rules.</a></p> </li>
<li> <p>WordPad: Old and <a href="https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features">deprecated</a>. None of the new features of Word documents are supported in it. Recommended to use <a href="https://www.microsoft.com/en-us/microsoft-365/free-office-online-for-the-web">Word Online</a>, Notepad or M365 Word.</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/introducing-the-windows-powershell-ise">PowerShell ISE</a>: Old PowerShell environment that doesn't support versions above 5.1. Highly recommended to use <a href="https://apps.microsoft.com/detail/xp9khm4bk9fz7q">Visual Studio Code</a> for PowerShell usage and <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki#-powershell">learning</a>. You can even replicate the <a href="https://learn.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/how-to-replicate-the-ise-experience-in-vscode">ISE experience in Visual Studio Code</a>. You can access <a href="https://vscode.dev">Visual Studio Code online in your browser</a> without the need to install anything.</p> </li>
<li> <p>Steps Recorder: it's <a href="https://support.microsoft.com/en-us/windows/steps-recorder-deprecation-a64888d7-8482-4965-8ce3-25fb004e975f">deprecated</a>.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/powershell/module/dism/enable-windowsoptionalfeature">Enables</a> these optional features (Control Panel):</p>
<ul>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview">Windows Sandbox</a>: install, test and use programs in a disposable virtual operation system, completely separate from your main OS</p> </li>
<li> <p>Hyper-V: a great hybrid hypervisor (Type 1 and Type 2) to run virtual machines on. <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Hyper-V">check out this Hyper-V Wiki page</a></p> </li>
</ul> </li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Windows Networking<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-networking"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Networking.png" alt="NetworkingIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Readme%20Categories/Windows%20Networking/Windows%20Networking.png" alt="Windows Networking - Harden Windows Security GitHub repository" width="500"></p>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-netbt-interfaces-interface-netbiosoptions">Disables NetBIOS over TCP/IP</a> on all network interfaces.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Disables Smart Multi-Homed Name Resolution because it uses NetBIOS and LLMNR, <a href="https://techcommunity.microsoft.com/t5/networking-blog/aligning-on-mdns-ramping-down-netbios-name-resolution-and-llmnr/bc-p/3644260/highlight/true#M515">protocols that shouldn't be used</a> anymore. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-dnsclient#dns_smartmultihomednameresolution">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables <a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nbte/bec3913a-c359-4e6f-8c7e-40c2f43f546b#gt_5f0744c1-5105-4e4a-b71c-b9c7ecaed910">LMHOSTS lookup protocol</a> on all network adapters, legacy feature that's not used anymore.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Disables <a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/printing/manage-connect-printers-use-web-browser">Printing over HTTP</a> because HTTP is not encrypted and it's an old feature that's not used anymore. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-connectivity?WT.mc_id=Portal-fx#diableprintingoverhttp">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Clears all the entries in <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths">Remotely accessible registry paths</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Clears all the entries in <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-access-remotely-accessible-registry-paths-and-subpaths">Remotely accessible registry paths and subpaths</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the minimum required SMB version for <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/manage-smb-dialects?tabs=group-policy#smb-client"><strong>Client</strong></a> to <code>3.1.1</code> which is the latest available version at the moment and was introduced years ago with Windows 10.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the minimum required SMB version for <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/manage-smb-dialects?tabs=group-policy#smb-server"><strong>Server</strong></a> to <code>3.1.1</code> which is the latest available version at the moment and was introduced years ago with Windows 10.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> <a href="https://techcommunity.microsoft.com/t5/storage-at-microsoft/smb-ntlm-blocking-now-supported-in-windows-insider/ba-p/3916206">Blocks NTLM</a> completely for SMB.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/configure-smb-client-require-encryption">Requires encryption</a> for SMB client/workstation.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-security">Enables encryption</a> for SMB Server. Its status can be checked using the following PowerShell command: <code>(get-SmbServerConfiguration).EncryptData</code>. If the returned value is <code>$True</code> then SMB Encryption is turned on.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-over-quic">QUIC</a> for SMB Client.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-over-quic">QUIC</a> for SMB Server.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Cipher Suites from the default value of <code>AES_128_GCM,AES_128_CCM,AES_256_GCM,AES_256_CCM</code> to <code>AES_256_GCM,AES_256_CCM,AES_128_GCM,AES_128_CCM</code> for the SMB Client. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-lanmanworkstation#pol_ciphersuiteorder">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the Cipher Suites from the default value of <code>AES_128_GCM,AES_128_CCM,AES_256_GCM,AES_256_CCM</code> to <code>AES_256_GCM,AES_256_CCM,AES_128_GCM,AES_128_CCM</code> for the SMB Server. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-lanmanserver#pol_ciphersuiteorder">CSP</a></li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Miscellaneous Configurations<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#miscellaneous-configurations"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/MiscellaneousCommands.png" alt="MiscellaneousIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Miscellaneous%20Configurations/Miscellaneous%20Configurations.svg?sanitize=true" alt="Miscellaneous Configurations - Harden Windows Security" width="500"></p>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/install/elam-driver-requirements">Early launch antimalware</a> engine's status to <code>8</code> which is <strong>Good only.</strong> The default value is <code>3</code>, which allows good, unknown and 'bad but critical'. that is the default value, because setting it to <code>8</code> <a href="https://learn.microsoft.com/en-us/windows/compatibility/early-launch-antimalware#mitigation">can prevent your computer from booting</a> if the driver it relies on is critical but at the same time unknown or bad. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-system?WT.mc_id=Portal-fx#bootstartdriverinitialization">CSP</a></p>
<ul>
<li>By being launched first by the kernel, ELAM is ensured to be launched before any third-party software and is therefore able to detect malware in the boot process and prevent it from initializing. ELAM drivers must be specially signed by Microsoft to ensure they are started by the Windows kernel early in the boot process.</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Disables location services (Location, Windows Location Provider, Location Scripting) system wide. Websites and apps won't be able to use your precise location, however they will still be able to detect your location using your IP address. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-System?WT.mc_id=Portal-fx#allowlocation">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-locationprovideradm#disablewindowslocationprovider_1">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-sensors#disablelocationscripting_2">CSP</a></li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <code>svchost.exe</code> mitigations. built-in system services hosted in <code>svchost.exe</code> processes will have stricter security policies enabled on them. These stricter security policies include a policy requiring all binaries loaded in these processes to be signed by Microsoft, and a policy disallowing dynamically generated code. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-servicecontrolmanager">CSP</a></p>
<ul>
<li>Requires Business Windows licenses. e.g., <a href="https://www.microsoft.com/en-us/windows/business/windows-11-pro-workstations">Windows 11 pro for Workstations</a>, <a href="https://www.microsoft.com/en-us/microsoft-365/windows/windows-11-enterprise">Enterprise</a> or <a href="https://www.microsoft.com/en-us/education/products/windows">Education</a>.</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Turns on Enhanced mode search for Windows indexer. The default is classic mode. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-search#allowfindmyfiles">CSP</a>
<ul>
<li>This causes some UI elements in the search settings in Windows settings to become unavailable for Standard user accounts to view, because it will be a managed feature by an Administrator.</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/devices-prevent-users-from-installing-printer-drivers">Enforce the Administrator role for adding printer drivers</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-LocalPoliciesSecurityOptions?WT.mc_id=Portal-fx#devices_preventusersfrominstallingprinterdriverswhenconnectingtosharedprinters">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://techcommunity.microsoft.com/t5/storage-at-microsoft/configure-smb-signing-with-confidence/ba-p/2418102">SMB/LDAP Signing</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-LocalPoliciesSecurityOptions?WT.mc_id=Portal-fx#microsoftnetworkclient_digitallysigncommunicationsalways">CSP</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-LocalPoliciesSecurityOptions?WT.mc_id=Portal-fx#microsoftnetworkserver_digitallysigncommunicationsalways">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables Edge browser (stable/beta/dev channels) to download and install updates on any network, metered or not; because the updates are important and should not be suppressed.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/archive/blogs/virtual_pc_guy/why-do-you-have-to-elevate-powershell-to-use-hyper-v-cmdlets">Enables all Windows users to use Hyper-V and Windows Sandbox</a> by adding all Windows users to the "Hyper-V Administrators" security group using its <a href="https://learn.microsoft.com/en-us/windows/win32/secauthz/well-known-sids">SID</a>. By default, only Administrators can use Hyper-V or Windows Sandbox.</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Creates custom views for <a href="https://learn.microsoft.com/en-us/shows/inside/event-viewer">Windows Event Viewer</a> to help keep tabs on important security events:</p>
<ul>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-attack-surface-reduction?view=o365-worldwide#xml-for-attack-surface-reduction-rule-events">Attack Surface Reduction Rules</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-attack-surface-reduction?view=o365-worldwide#xml-for-controlled-folder-access-events">Controlled Folder Access</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-attack-surface-reduction?view=o365-worldwide#xml-for-exploit-protection-events">Exploit Protection</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-attack-surface-reduction?view=o365-worldwide#xml-for-network-protection-events">Network Protection</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/operations/event-id-explanations">MSI and Scripts for WDAC Auditing</a></p> </li>
<li> <p>Sudden Shut down events (due to power outage)</p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/operations/event-id-explanations">Code Integrity Operational (WDAC)</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/incorrect-shutdown-reason-code-sel">Restarts (By user or by the System/Apps)</a></p> </li>
<li> <p>Workstation <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4800">Locks</a> and <a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4801">Unlocks</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/audit-other-logonlogoff-events">Checks to make sure <em><strong>Other Logon/Logoff Events</strong></em> Audit is active</a> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-Audit?WT.mc_id=Portal-fx#accountlogonlogoff_auditotherlogonlogoffevents">CSP</a></p> </li>
<li> <p><a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4776">Failed Login attempts via PIN at lock screen</a></p>
<ul>
<li>Error/Status code <code>0xC0000064</code> indicates wrong PIN entered at lock screen</li>
</ul> </li>
<li> <p>USB storage Connects & Disconnects (Flash drives, phones etc.)</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables <strong>WinVerifyTrust Signature Validation</strong>, <a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2013-3900">a security feature related to WinVerifyTrust function that handles Windows Authenticode signature verification for portable executable (PE) files.</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing">Command line process auditing</a>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-admx-auditsettings#includecmdline">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables the RPC Endpoint Mapper Client Authentication policy. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-remoteprocedurecall#rpcendpointmapperclientauthentication">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables a policy that requests claims and compound authentication for Dynamic Access Control and Kerberos armoring. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-kerberos#kerberosclientsupportsclaimscompoundarmor">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Enables <a href="https://techcommunity.microsoft.com/t5/security-compliance-and-identity/a-new-modern-and-secure-print-experience-from-windows/ba-p/4002645">Windows Protected Print</a>. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-printers#configurewindowsprotectedprint">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Configures the <a href="https://learn.microsoft.com/en-us/windows-server/administration/OpenSSH/openssh-server-configuration#openssh-configuration-files">SSH client's configurations</a> to use the following secure MACs (Message Authentication Codes): <code>MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com</code>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Enables support for <a href="https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation">long paths</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> <a href="https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/system-cryptography-force-strong-key-protection-for-user-keys-stored-on-the-computer">Force strong key protection</a> for user keys stored on the computer. User is prompted when the key is first used.</li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Windows Update Configurations<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#windows-update-configurations"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/WindowsUpdate.png" alt="WindowsUpdate"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Windows%20Update/Windows%20Update.svg?sanitize=true" alt="Windows Update - Harden Windows Security GitHub repository" width="500"></p>
<br>
<p>Windows updates are extremely important. They always should be installed as fast as possible to stay secure and if a reboot is required, it should be done immediately. Threat actors can weaponize publicly disclosed vulnerabilities <a href="https://www.microsoft.com/en-us/security/blog/2023/04/18/nation-state-threat-actor-mint-sandstorm-refines-tradecraft-to-attack-high-value-targets/"><strong>the same day</strong> their POC (Proof-Of-Concept) is released.</a>.</p>
<p>In Windows by default, devices will scan daily, automatically download and install any applicable updates at a time optimized to reduce interference with usage, and then automatically try to restart when the end user is away.</p>
<p><strong>The following policies the module configures make sure the default behavior explained above is tightly enforced.</strong></p>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables <a href="https://techcommunity.microsoft.com/t5/windows-it-pro-blog/the-windows-update-policies-you-should-set-and-why/ba-p/3270914">Windows Update to download and install updates on any network</a>, metered or not; because the updates are important and should not be suppressed, <strong>that's what bad actors would want.</strong> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#allowautowindowsupdatedownloadovermeterednetwork">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Enables "Receive Updates for other Microsoft products" (such as PowerShell)</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables "Notify me when a restart is required to finish updating". <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#schedulerestartwarning">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Specifies the number of days before quality updates are installed on devices automatically to 1 day. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#configuredeadlinenoautorebootforqualityupdates">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Specifies the number of days before feature updates are installed on devices automatically to 1 day. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#configuredeadlinenoautorebootforfeatureupdates">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the number of grace period days before feature updates are installed on devices automatically to 1 day. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#configuredeadlinegraceperiodforfeatureupdates">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Sets the number of grace period days before quality updates are installed on devices automatically to 1 day. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#configuredeadlinegraceperiod">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> Configures the automatic updates to happen every day, automatically be downloaded and installed, notify users for restart. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update#allowautoupdate">CSP</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/bluemark.gif" width="25" alt="Blue Check mark denoting Group Policy"> <a href="https://learn.microsoft.com/en-us/windows/deployment/update/waas-configure-wufb">Enables features introduced via servicing that are off by default</a> so that users will be able to get new features after having Windows Update settings managed by Group Policy as the result of running this category. <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="15" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/windows/client-management/mdm/policy-csp-update?toc=%2Fwindows%2Fdeployment%2Ftoc.json&bc=%2Fwindows%2Fdeployment%2Fbreadcrumb%2Ftoc.json#allowtemporaryenterprisefeaturecontrol">CSP</a></li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Edge Browser configurations<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#edge-browser-configurations"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/EdgeBrowser.png" alt="EdgeBrowser"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Edge%20Browser/Edge%20Browser.svg?sanitize=true" alt="Edge Browser configurations - Harden Windows Security GitHub repository" width="500"></p>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#blockthirdpartycookies">Block 3rd party cookies</a> - Recommendatory policy</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#control-the-mode-of-dns-over-https">Set Edge to use system's DNS over HTTPS</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#configure-automatic-https">Automatic HTTPS upgrade of HTTP connections</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#encryptedclienthelloenabled">Enable Encrypted Client Hello</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#basicauthoverhttpenabled">Disable Basic HTTP authentication scheme</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#control-communication-with-the-experimentation-and-configuration-service">Allow devices using this hardening category to receive new features and experimentations like normal devices</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#allow-the-audio-sandbox-to-run">Enforce the audio process to run sandboxed</a></li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-policies#set-the-default-share-additional-operating-system-region-setting">Sets the share additional operating system region setting to never</a> - Recommendatory policy</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <a href="https://learn.microsoft.com/en-us/DeployEdge/microsoft-edge-policies#tlsciphersuitedenylist">Disables the following weak Cipher Suites</a></p>
<ul>
<li> <p><a href="https://clienttest.ssllabs.com:8443/ssltest/viewMyClient.html">Site 1 to test TLS in your browser</a></p> </li>
<li> <p><a href="https://browserleaks.com/tls">Site 2 to test TLS in your browser</a></p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/green-verification.gif" width="25" alt="Rotating green checkmark denoting CSP"> <a href="https://learn.microsoft.com/en-us/deployedge/configure-edge-with-mdm">CSP</a></li>
</ul>
<pre><code>TLS_RSA_WITH_AES_256_CBC_SHA Reason: NO Perfect Forward Secrecy, CBC, SHA1
TLS_RSA_WITH_AES_128_CBC_SHA Reason: NO Perfect Forward Secrecy, CBC, SHA1
TLS_RSA_WITH_AES_128_GCM_SHA256 Reason: NO Perfect Forward Secrecy
TLS_RSA_WITH_AES_256_GCM_SHA384 Reason: NO Perfect Forward Secrecy
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA Reason: CBC, SHA1
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Reason: CBC, SHA1
</code></pre>
<br>
<p>Due to security reasons, many policies cannot be used when you are signed into Edge browser using personal Microsoft account. This module does not use any of those policies. When those policies are applied, they are ignored by the browser and <code>edge://policy/</code> shows an error for them.</p>
<br>
<ul>
<li>You can view all of the policies being applied to your Edge browser by visiting this page: <code>edge://policy/</code></li>
<li>You can find all of the available internal Edge pages in here: <code>edge://about/</code></li>
</ul>
<br>
<ul>
<li>Useful links:
<ul>
<li><a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel">Microsoft Edge stable channel change log</a></li>
<li><a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnotes-security">Microsoft Edge Security updates change log</a></li>
<li><a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-beta-channel">Microsoft Edge Beta channel change log</a></li>
<li><a href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-mobile-stable-channel">Microsoft Edge Mobile stable channel change log</a></li>
<li><a href="https://www.microsoft.com/en-us/edge/download/insider">Edge Insider for Beta/Dev/Canary channels</a></li>
<li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=55319">Microsoft Edge Security baselines</a> - Work without ingesting <a href="https://www.microsoft.com/en-us/edge/business/download">ADMX policy files</a> first
<ul>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/issues/50">Reason why the module doesn't use it.</a></li>
</ul> </li>
</ul> </li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Certificate Checking Commands<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#certificate-checking-commands"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Certificate.png" alt="CertificateIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/0180bc6ace1ea086653cc405f142d1aada424150/Pictures/Readme%20Categories/Certificate%20Checking/Certificate%20Checking.svg?sanitize=true" alt="Certificate Checking Commands - Harden Windows Security" width="550"></p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> In this category, the module downloads and runs <a href="https://learn.microsoft.com/en-us/sysinternals/downloads/sigcheck">sigcheck64.exe</a> from <a href="https://learn.microsoft.com/en-us/sysinternals/">Sysinternals</a>, then lists valid certificates not rooted to the <a href="https://learn.microsoft.com/en-us/windows/win32/seccrypto/certificate-trust-list-overview">Microsoft Certificate Trust List</a> in the <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/install/local-machine-and-current-user-certificate-stores">User and Machine certificate stores</a>. <strong>Except for some possible Microsoft certificates, Windows insider builds certificates or certificates that have your own computer's name, which are perfectly safe and should not be deleted,</strong> All other certificates that will be listed should be treated as dangerous and removed from your system immediately.</p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Country IP Blocking<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#country-ip-blocking"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/CountryIPBlocking.png" alt="CountryIPBlockingIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/0180bc6ace1ea086653cc405f142d1aada424150/Pictures/Readme%20Categories/Country%20IP%20Blocking/Country%20IP%20Blocking.svg?sanitize=true" alt="Country IP Blocking - Harden Windows Security GitHub repository" width="500"></p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> The module uses the newest range of <code>IPv4</code> and <code>IPv6</code> addresses of <a href="https://www.state.gov/state-sponsors-of-terrorism/">State Sponsors of Terrorism</a> and <a href="https://orpa.princeton.edu/export-controls/sanctioned-countries">OFAC Sanctioned Countries</a>, directly <a href="https://github.com/HotCakeX/Official-IANA-IP-blocks">from official IANA sources</a> repository, then creates 2 rules (inbound and outbound) for each list in Windows firewall, completely blocking connections to and from those countries.</p>
<p>Once you have those Firewall rules added, you can <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Event-Viewer#how-to-identify-which-windows-firewall-rule-is-responsible-for-a-blocked-packets">use this method</a> to see if any of the blocked connections were from/to those countries.</p>
<blockquote>
<p>[!NOTE]<br> Threat actors can use VPN, VPS etc. to mask their originating IP address and location. So don't take this category as the perfect solution for network protection.</p>
</blockquote>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Downloads Defense Measures <a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#downloads-defense-measures-"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/DownloadsDefenseMeasures.png" alt="Downloads Defense Measures icon" width="48"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Readme%20Categories/Downloads%20Defense%20Measures/Downloads%20Defense%20Measures.png" alt="Downloads Defense Measures - Harden Windows Security GitHub repository" width="500"></p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <strong>T</strong>o combat the threat of more sophisticated malware, a preemptive measure is taken by creating and deploying a <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Introduction">WDAC</a> policy on the system. This policy blocks the execution of executables and <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/feature-availability">other potentially harmful file types</a> in the Downloads folder, using the <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/WDACConfig">WDACConfig module</a>.</p>
<p>This policy defends the system from malware that can launch itself automatically after being downloaded from the Internet. The user must ensure the file's safety and explicitly transfer it to a different folder before running it.</p>
<p>The WDAC policy employs a wildcard pattern to prevent any file from running in the Downloads folder. Additionally, it verifies that the system downloads folder in the user directory matches the downloads folder in the Edge browser's settings. If there is a discrepancy, a warning message is displayed on the console.</p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> <img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/discord-verify-gradient.gif" width="25" alt="Rotating green checkmark denoting Subcategory"> Creates a custom <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Introduction">WDAC</a> policy that blocks the execution of the following executables:</p>
<ul>
<li>wscript.exe</li>
<li>mshta.exe</li>
<li>cscript.exe</li>
</ul>
<p>They are <a href="https://textslashplain.com/2024/05/20/attack-techniques-full-trust-script-downloads/">insecure</a>, unsandboxed script hosts that pose a security risk.</p>
<br>
<p>All of the policies can be easily removed using the <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Harden%E2%80%90Windows%E2%80%90Security%E2%80%90Module#unprotect-windowssecurity-cmdlet"><strong>Unprotect-WindowsSecurity</strong></a> or <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Remove-WDACConfig"><strong>Remove-WDACConfig</strong></a> cmdlets.</p>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Non-Admin Commands<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#non-admin-commands"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/NonAdmin.png" alt="NonAdminIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/d6960a261913f979526c0fac7901effa4b72d813/Pictures/Readme%20Categories/Non-Admin%20Commands/Non-Admin%20Commands.svg?sanitize=true" alt="Non-Admin Commands - Harden Windows Security GitHub repository" width="500"></p>
<br>
<p>You don't need Admin privileges to run this category, because no system-wide changes is made. Changes in this category only apply to the current user account that is running the PowerShell session.</p>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Shows known file extensions in File explorer</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Shows hidden files, folders and drives (toggles the control panel folder options item)</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables websites accessing local language list - good for privacy</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Turns off safe search in Windows search, will enable +18 content to appear in searches; essentially toggles the button in: Windows settings > privacy and security > search permissions > safe search</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Enables Clipboard History</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Turns on text suggestions when typing on the physical keyboard</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Turns on "Multilingual text suggestions" for the current user, toggles the option in Windows settings</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Turns off sticky key shortcut of pressing shift key 5 times fast</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/Gifs/magenta-verification.gif" width="25" alt="Rotating pink checkmark denoting registry or cmdlet"> Disables Show reminders and incoming VoIP calls on the lock screen</li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#menu-back-to-top">💡 (back to categories)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Related<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#related"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Related.png" alt="RelatedIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/PNG%20and%20JPG/2152165465461.png" alt="An AI generated picture of a cat girl working in a server farm" width="500"></p>
<br>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="Azure DevOps Repository (mirror) bullet list item"> <a href="https://dev.azure.com/SpyNetGirl/_git/Harden-Windows-Security">Azure DevOps Repository (mirror)</a></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="Harden Windows Security website bullet list item"> <a href="https://hotcakex.github.io/">Harden Windows Security website</a></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="Official global IANA IP block for each country bullet list item"> <a href="https://hotcakex.github.io/Official-IANA-IP-blocks/">Official global IANA IP block for each country</a></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="Windows Security Blog bullet list item"> <a href="https://spynetgirl.github.io/">Windows Security Blog</a></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="WinSecureDNSMgr bullet list item"> <a href="https://github.com/HotCakeX/WinSecureDNSMgr">WinSecureDNSMgr</a></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/911587042608156732.webp" width="25" alt="Privacy, Anonymity and Compartmentalization bullet list item"> <a href="https://github.com/HotCakeX/Privacy-Anonymity-Compartmentalization">Privacy, Anonymity and Compartmentalization</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Trust<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#trust"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Trust.png" alt="TrustIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/56885df17213aecaa07453e008972a5b8dc918e5/Pictures/Readme%20Categories/Trust/Trust.svg?sanitize=true" alt="Trust The Harden Windows Security GitHub Repository" width="500"></p>
<h3>How can you 100% trust this repository and know that nothing shady is going on?</h3>
<p>This repository uses effective methods that make it easy to verify:</p>
<ul>
<li> <p>Change log history is present on GitHub. <em>(Despite some of my awkward documentation typos)</em></p> </li>
<li> <p><a href="https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds">Artifact attestations</a> are used to establish provenance for builds. It <a href="https://github.com/HotCakeX/Harden-Windows-Security/attestations">guarantees</a> that the package(s) you download from this repository are 100% created from the source code that exist in this repository.</p> </li>
<li> <p><a href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository">SBOMs</a> (Software Bill of Materials) are generated for the entire repository to comply with data protection standards and providing transparency. Together with attestation they provide <a href="https://slsa.dev/spec/v1.0/levels">SLSA L2 security level</a> for the build process. In the future, the workflows will be upgraded to comply with SLSA L3 level.</p> </li>
<li> <p>You can open the files in <a href="https://code.visualstudio.com"><strong>Visual Studio Code</strong></a> / <a href="https://vscode.dev"><strong>Visual Studio Code Web</strong></a> / <a href="https://github.com/codespaces/new?skip_quickstart=true&machine=standardLinux32gb&repo=569233100&ref=main&geo=EuropeWest"><strong>GitHub CodeSpace</strong></a>, and view them in a nice and easy to read environment, they are well formatted, commented and indented.</p> </li>
<li> <p>Commits are verified either with my GPG key or SSH key and <a href="https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits">Vigilant mode</a> is turned on in my GitHub account.</p> </li>
<li> <p>You can fork this repository, verify it until that point in time, then verify any subsequent changes/updates I push to this repository, <strong>at your own pace</strong> (using <code>Sync fork</code> and <code>Compare</code> options on your fork), and if you are happy with the changes, allow it to be merged with your own copy/fork on your GitHub account.</p> </li>
<li> <h4>Explanations for some of the files used by the Harden Windows Security module, ask about any other file(s) if you have questions, they are all in clear text.</h4>
<ul>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/Registry.csv">Registry.csv</a> includes some of the security measures' registry data.</p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/ProcessMitigations.csv">ProcessMitigations.csv</a> includes the process mitigations data.</p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/Default%20Security%20Policy.inf">Default Security Policy.inf</a> contains security policy data used during unprotect actions to restore defaults.</p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security%20Module/Main%20files/Resources/Registry%20resources.csv">Registry resources.csv</a> Includes the data used for compliance checking.</p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/Harden-Windows-Security.ps1">Harden-Windows-Security.ps1</a> is the boot-strapper for the Harden Windows Security module.</p> </li>
</ul> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Group-Policy#how-are-group-policies-used-by-the-harden-windows-security-module">How Are Group Policies Used by the Harden Windows Security Module?</a></p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Group-Policy#how-are-group-policies-for-the-module-created-and-maintained">How are Group Policies for this module created and maintained?</a></p> </li>
<li> <p><a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Group-Policy#how-to-verify-security-baselines-x-directory-and-100-trust-it">How to verify Security-Baselines-X directory and 100% trust it?</a></p> </li>
</ul>
<br>
<!-- Security-Baselines-X-VT:START -->
<!-- <a href=""> </a> -->
<!-- Security-Baselines-X-VT:END -->
<blockquote>
<p>[!TIP]<br> All files in this repository are zipped and automatically submitted to VirusTotal for scanning. Any available packages in the last release is also directly uploaded for scanning. It is done through a <a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/VirusTotal.yml">GitHub Action</a> that is triggered every time a release is made or a PR is merged. Find the history of the uploaded files in <a href="https://www.virustotal.com/gui/user/SpyNetGirl">my Virus Total profile</a>.</p>
</blockquote>
<ul>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/PSScriptAnalyzer.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/PSScriptAnalyzer.yml/badge.svg?sanitize=true" alt="PSScriptAnalyzer"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Repository%20And%20Package%20Scan%20on%20Virus%20Total.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Repository%20And%20Package%20Scan%20on%20Virus%20Total.yml/badge.svg?sanitize=true" alt="Repository And Package Scan on Virus Total"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/CodeQL%20Advanced%20-%20Security.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/CodeQL%20Advanced%20-%20Security.yml/badge.svg?sanitize=true" alt="CodeQL Advanced - Security"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/CodeQL%20Advanced%20-%20Quality.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/CodeQL%20Advanced%20-%20Quality.yml/badge.svg?sanitize=true" alt="CodeQL Advanced - Quality"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Sync%20to%20Azure%20DevOps.yaml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Sync%20to%20Azure%20DevOps.yaml/badge.svg?sanitize=true" alt="Sync to Azure DevOps"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Build%20AppControl%20Manager%20MSIX%20Package.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Build%20AppControl%20Manager%20MSIX%20Package.yml/badge.svg?sanitize=true" alt="Build AppControl Manager MSIX Package"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/dependabot/dependabot-updates"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/dependabot/dependabot-updates/badge.svg?sanitize=true" alt="Dependabot Updates"></a></li>
<li><a href="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Markdown%20Link%20Validator.yml"><img src="https://github.com/HotCakeX/Harden-Windows-Security/actions/workflows/Markdown%20Link%20Validator.yml/badge.svg?sanitize=true" alt="Markdown Link Validator"></a></li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Support<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#support"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Support.png" alt="SupportIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/9e33c645239ff9eaef2bd232b88a75f5d04de092/Pictures/Readme%20Categories/Support/Support.svg?sanitize=true" alt="Support Section - Harden Windows Security Repository" width="500"></p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/Heart%20Microsoft.webp" width="28" alt="If you have any questions, requests, suggestions etc"> If you have any questions, requests, suggestions etc. about this GitHub repository and its content, please open <a href="https://github.com/HotCakeX/Harden-Windows-Security/discussions">a new discussion</a> or <a href="https://github.com/HotCakeX/Harden-Windows-Security/issues">Issue</a>.</p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/WebP/Ninja%20cat.webp" width="28" alt="Reporting a vulnerability on this GitHub repository"> <a href="https://github.com/HotCakeX/Harden-Windows-Security/security/advisories">Reporting a vulnerability</a> on this GitHub repository.</p>
<p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/Outlook%20small.gif" alt="SpyNetGirl aka HotCakeX Outlook Email Address"> I can also be reached privately at: <a href="mailto:spynetgirl@outlook.com">spynetgirl@outlook.com</a></p>
<br>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Security Recommendations<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#security-recommendations"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/SecurityRecommendation.png" alt="SecurityRecommendationIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/f9920187acf754f7bc8c3509030142308dff9ee9/Pictures/Readme%20Categories/Security%20Recommendations/Security%20Recommendations.svg?sanitize=true" alt="Windows Security Recommendations - Harden Windows Security GitHub Repository" width="500"></p>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Always download your operation system from <a href="https://www.microsoft.com/en-us/software-download">official Microsoft websites</a>. Right now, Windows 11 is the latest version of Windows, its ISO file can be downloaded from this <a href="https://www.microsoft.com/en-us/software-download/windows11">official Microsoft server</a>. One of the worst things you can do to your own security and privacy is downloading your OS, which is the root of all the active and passive security measures, from a 3rd party website claiming they have the official unmodified files. There are countless bad things that can happen as the result of it such as threat actors embedding malware or backdoors inside the customized OS, or pre-installing customized root CA certificates in your OS so that they can perform TLS termination and view all of your HTTPS and encrypted Internet data in plain clear text, <strong>even if you use VPN.</strong> Having a poisoned and compromised certificate store is the endgame for you, and <em>that's just the tip of the iceberg.</em></p>
<ul>
<li>Refer to <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki">Wiki</a> to see <a href="https://github.com/HotCakeX/Harden-Windows-Security/wiki/Create-Bootable-USB-flash-drive-with-no-3rd-party-tools">how to create Bootable USB flash drive with no 3rd party tools</a></li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Whenever you want to install a program or app, first use the <a href="https://apps.microsoft.com/store/apps">Microsoft Store</a> or <a href="https://github.com/microsoft/winget-cli">Winget</a>, if the program or app you are looking for isn't available in there, then download it from its official website. <em>Somebody created a nice web interface for interacting with Winget CLI <a href="https://winstall.app/">here</a>.</em> Using Winget or Microsoft store provides many benefits:</p>
<ul>
<li> <p>Microsoft store UWP apps are secure in nature, digitally signed, in <a href="https://learn.microsoft.com/en-us/windows/msix/overview">MSIX format</a>. That means, installing and uninstalling them is guaranteed and there won't be any leftovers after uninstalling.</p> </li>
<li> <p>Microsoft store has Win32 apps too, they are traditional <code>.exe</code> installers that we are all familiar with. The store has a library feature that makes it easy to find the apps you previously installed.</p> </li>
<li> <p>Both Microsoft and Winget check the hash of the files by default, if a program or file is tampered, they will warn you and block the installation, whereas when you manually download a program from a website, you will have to manually verify the file hash with the hash shown on the website, if any.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Use Secure DNS; Windows 11 natively supports <a href="https://learn.microsoft.com/en-us/windows-server/networking/dns/doh-client-support">DNS over HTTPS</a> and <a href="https://techcommunity.microsoft.com/t5/networking-blog/dns-over-tls-available-to-windows-insiders/ba-p/3565859">DNS over TLS</a>.</p>
<ul>
<li>Use my <a href="https://github.com/HotCakeX/WinSecureDNSMgr">WinSecureDNSMgr module</a> to easily configure DNS over HTTPS in Windows</li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Only use Microsoft Edge for browser; It has <a href="https://web.archive.org/web/20230103160041/https://learn.microsoft.com/en-us/deployedge/ms-edge-security-for-business#external-threat-protection">the Highest-rated protection</a> against <a href="https://edgefrecdn.azureedge.net/shared/cms/lrs1c69a1j/public-files/473cac993bd24ae1947bd86e910d4d01.pdf">phishing</a> and <a href="https://edgefrecdn.azureedge.net/shared/cms/lrs1c69a1j/public-files/49958f5a10e748b28f1a235f6aac8d1e.pdf">malware</a>, available by default on Windows OS, has tightly integrated valuable Security features such as <a href="https://learn.microsoft.com/en-us/windows/security/application-security/application-isolation/microsoft-defender-application-guard/md-app-guard-overview">Microsoft Defender Application Guard</a>, <a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/virus-and-threat-protection/microsoft-defender-smartscreen/">Microsoft Defender SmartScreen</a>, <a href="https://support.microsoft.com/en-us/microsoft-edge/enhance-your-security-on-the-web-with-microsoft-edge-b8199f13-b21b-4a08-a806-daed31a1929d">Hardware Enforced Stack Protection</a>, <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/exploit-protection-reference?view=o365-worldwide#arbitrary-code-guard">Arbitrary Code Guard (ACG)</a><a></a>, <a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/exploit-protection-reference?view=o365-worldwide#control-flow-guard-cfg">Control Flow Guard (CFG)</a>, <a href="https://learn.microsoft.com/en-us/microsoft-edge/web-platform/tracking-prevention">Tracking Prevention</a> and <a href="https://support.microsoft.com/en-us/topic/use-the-microsoft-edge-secure-network-to-protect-your-browsing-885472e2-7847-4d89-befb-c80d3dda6318">Trusted built-in Secure Network feature from Cloudflare</a> just to name a few.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> <a href="https://support.microsoft.com/en-us/office/the-keys-to-the-kingdom-securing-your-devices-and-accounts-a925f8ad-af7e-40d8-9ce4-60ea1cac2ba4">Always enable Two-Factor/Multi-Factor Authentication</a> on websites, apps and services that you use. Preferably, use <a href="https://support.microsoft.com/en-us/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a">Microsoft Authenticator app</a> which has backup and restore feature, so you never lose access to your TOTPs (Time-Based One-Time Passwords) even if you lose your phone. Available for <a href="https://play.google.com/store/apps/details?id=com.azure.authenticator&gl=US">Android</a> and <a href="https://apps.apple.com/us/app/microsoft-authenticator/id983156458">IOS</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Make sure OneDrive backup for important folders (Desktop/Documents/Pictures) is enabled. It is fast, secure and works in any network condition and since it's <a href="https://techcommunity.microsoft.com/t5/microsoft-onedrive-blog/onedrive-sync-64-bit-for-windows-now-in-public-preview/ba-p/2260619">x64 (64-bit)</a>, it can handle a Lot of small and large files simultaneously.</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> When considering the use of a VPN, it is crucial to exercise discernment and only resort to it when absolutely necessary. A VPN can be a vital tool if you reside in a totalitarian, communist, or dictatorial regime, or in a nation where democratic principles are not upheld. However, if you live in a country that does not fall into these categories, it may be wise to reconsider the necessity of using a VPN. Your local ISP (Internet Service Provider) is likely more trustworthy than the ISP associated with a remote VPN server. By using a VPN, you are merely transferring the trust you place in your local ISP to an unknown entity—the ISP utilized by the VPN provider. It is important not to be swayed by the deceptive marketing tactics employed by VPN companies. The true identities, political affiliations, backgrounds, and loyalties of those behind these services often remain shrouded in mystery. In the permissive and open societies of the Western world, it is conceivable that <a href="https://www.techradar.com/news/iran-officials-linked-to-canada-based-free-vpn-provider">a VPN service could be established</a> by entities with questionable intentions, including <a href="https://x.com/lisa_loo_who/status/1567984903312257025">state sponsors of terrorism</a> or other hostile actors. Such services could be utilized <a href="https://archive.ph/xOVeY">to gather intelligence</a>, conduct data mining, and track users, posing significant risks to your privacy and security.</p>
<ul>
<li>There are situations where using VPN can provide security and privacy. For example, when using a public WiFi hotspot or basically any network that you don't have control over. In such cases, use <a href="https://cloudflarewarp.com/">Cloudflare WARP</a> which <a href="https://developers.cloudflare.com/warp-client/get-started/windows">uses WireGuard protocol</a>, <em>or as mentioned, use <a href="https://blog.cloudflare.com/cloudflare-now-powering-microsoft-edge-secure-network/">Secure Network in Edge browser that utilizes the same secure Cloudflare network</a></em>. It's free, it's from an American company that <a href="https://radar.cloudflare.com/">has global radar</a> and lots of insight about countries in the world in real-time, <a href="https://blog.cloudflare.com/application-security/">at least 19.7% of all websites use it (2022)</a>. Safe to say it's one of the <strong>backbones of the Internet.</strong></li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> <a href="https://support.microsoft.com/en-us/account-billing/how-to-go-passwordless-with-your-microsoft-account-674ce301-3574-4387-a93d-916751764c43">Go passwordless</a> with your <a href="https://www.microsoft.com/en-us/security/blog/2021/09/15/the-passwordless-future-is-here-for-your-microsoft-account/">Microsoft account</a> and use <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/hello-why-pin-is-better-than-password">Windows Hello authentication</a>. In your Microsoft account which has Outlook service, <a href="https://support.microsoft.com/en-us/office/add-or-remove-an-email-alias-in-outlook-com-459b1989-356d-40fa-a689-8f285b13f1f2">you can create up to 10 Email aliases</a> in addition to the 1 Email address you get when you made your Microsoft account, that means without creating a new account, you can have 11 Email addresses all of which will use the same inbox and account. You can specify which one of those Email aliases can be used to sign into your account, <a href="https://account.live.com/names/manage">in the sign in preferences of your Microsoft account settings</a>. So for example, when going passwordless, if you need you can give one of your Email aliases to others for communication or add it to a public profile of yours, then block sign in using that Email alias so nobody can send you authenticator notifications by entering that Email alias in the sign in page, and use the other 10 aliases that are private to sign into your Microsoft account with peace of mind. You can <a href="https://support.microsoft.com/en-us/office/inbox-rules-in-outlook-web-app-edea3d17-00c9-434b-b9b7-26ee8d9f5622">create a rule in your Outlook</a> so that all of the Emails sent to your public Email alias will be stored in a different folder, apart from your other inbox emails. All of this can be done using free Microsoft account and <a href="https://outlook.live.com/">Outlook webapp</a>.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Set a strong password for the UEFI firmware of your device so that it will ask for password before allowing any changes to be made to firmware. You can also configure the password to be required on startup.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Use <strong>NTFS</strong> (which is the default Filesystem in Windows) or <strong>ReFS</strong> (Resilient File System, newer). In addition to all their benefits, they support <code>Mark Of The Web</code> (MOTW) or <code>zone.identifier</code>. When a file is downloaded to a device running Windows, Mark of the Web is added to the file, identifying its source as being from the internet. <a href="https://learn.microsoft.com/en-us/deployoffice/security/internet-macros-blocked#mark-of-the-web-and-trusted-documents">You can read all the information about it in here</a>. If your USB flash drive is formatted as <code>FAT32</code>, change it to <code>NTFS</code>, because <code>FAT32</code> does not keep the <code>MOTW</code> of the files. If the file you are downloading is compressed in <code>.zip</code> format, make sure you open/extract it using Windows built-in support for <code>.zip</code> files because it keeps the MOTW of the files. If the compressed file you downloaded is in other formats such as <code>.7zip</code> or <code>.rar</code>, make sure you use an archive program that supports keeping the mark of the Web of files after extraction. One of those programs is NanaZip which is a fork of 7zip, available in <a href="https://www.microsoft.com/store/productId/9N8G7TSCL18R">Microsoft Store</a> and <a href="https://github.com/M2Team/NanaZip">GitHub</a>, compared to 7zip, it has better and modern GUI, and the application is <a href="https://learn.microsoft.com/en-us/security/trusted-root/program-requirements">digitally signed</a>. After installation, open it, navigate to <code>Tools</code> at the top then select <code>Options</code>, set <code>Propagate zone.id stream</code> to <code>Yes</code>. You can use this <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.3#-stream">PowerShell command</a> to find all the info about the Zone Identifier of the files you downloaded from the Internet.</li>
</ul>
<pre><code class="language-powershell">Get-Content <Path-To-File> -stream zone.identifier
</code></pre>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> When using Xbox, make sure you <a href="https://support.xbox.com/en-US/help/account-profile/signin-security/change-signin-preferences">configure sign-in preference</a> and set it to either <code>Ask for my PIN</code> or <code>Lock it down</code>. The latter is the most secure one since it will require authentication using Microsoft Authenticator app. <code>Ask for my PIN</code> is recommended for the most people because it will only require a PIN to be entered using controller.</li>
</ul>
<br>
<ul>
<li> <p><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> A few reminders about open source programs:</p>
<ul>
<li> <p>Unless you are a skilled programmer who can understand and verify every line of code in the source, and spends time to personally build the software from the source, and repeats all the aforementioned tasks for each subsequent version, then seeing the source code won't have any effect on you because you aren't able to understand nor verify it.</p> </li>
<li> <p>Do not assume that the entire Open Source community audits and verifies every line of code just because the source code is available, as we've seen in the <a href="https://techcommunity.microsoft.com/t5/microsoft-defender-vulnerability/microsoft-faq-and-guidance-for-xz-utils-backdoor/ba-p/4101961">XZ utility's backdoor</a> by state sponsored actors, they can have backdoors implanted in them in broad daylight and nobody might notice it for a long time.</p> </li>
<li> <p>The majority of <em>open source</em> programs are unsigned, meaning they don't have a digital signature, their developers haven't bought and used a code signing certificate to sign their program. Among other problems, this might pose a danger to the end-users by making it harder to create trust for those programs in security solutions such as Application Control or App Whitelisting, and makes it hard to authenticate them. <a href="https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms537361(v=vs.85)">Read Microsoft's Introduction to Code Signing</a>. Use <a href="https://azure.microsoft.com/en-us/products/trusted-signing">Azure Trusted Signing</a> which is <a href="https://azure.microsoft.com/en-us/pricing/details/trusted-signing/">affordable</a>.</p> </li>
</ul> </li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Use Microsoft account (MSA) or Microsoft Entra ID to sign into Windows. Never use local administrators. Real security is achieved when there is no local administrator and identities are managed using Entra ID. You will be able to enforce <a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/feature-multifactor-unlock">Multi-factor unlock</a>, for example use PIN + Fingerprint or PIN + Facial recognition, to unlock your device.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> Enable <a href="https://support.microsoft.com/en-us/windows/how-to-use-random-hardware-addresses-in-windows-ac58de34-35fc-31ff-c650-823fc48eb1bc"><em><strong>Random Hardware Addresses</strong></em></a> In Windows Settings -> Network & Internet -> WIFI. Currently, there is no Group Policy or associated registry key to automatically turn it on, that is why it is mentioned here in the security recommendations section. It has various security and privacy benefits such as your device cannot be uniquely identified by its hardware Mac address and the routers your connect to cannot uniquely identify you. You can set it to change daily in your WIFI network adapter's settings in Windows settings for even more benefits.</li>
</ul>
<br>
<ul>
<li><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/Gifs/RedStar.gif" width="30" alt="Red Star denoting Security Recommendation"> More Security Recommendations coming soon...</li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Resources<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#resources"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Resources.png" alt="ResourcesIcon"></a></h2>
<p align="center"><img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/PNG%20and%20JPG/fdasdsadas.png" alt="A beautiful pink laptop Windows 11, located on the table with coffee on the side" width="650"></p>
<ul>
<li><a href="https://microsoft.com">Microsoft.com</a>
<ul>
<li><a href="https://www.microsoft.com/en-us/security/blog/2020/09/01/force-firmware-code-to-be-measured-and-attested-by-secure-launch-on-windows-10/">Force firmware code to be measured and attested by Secure Launch</a></li>
</ul> </li>
<li><a href="https://learn.microsoft.com/en-us/">Microsoft Learn</a> - Technical Documentation
<ul>
<li><a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-defender-system-guard/how-hardware-based-root-of-trust-helps-protect-windows#secure-launchthe-dynamic-root-of-trust-for-measurement-drtm">Secure Launch—the Dynamic Root of Trust for Measurement (DRTM)</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/deployment/update/waas-quick-start">Quick guide to Windows as a service</a></li>
</ul> </li>
<li><a href="https://www.bsi.bund.de/EN/Service-Navi/Publikationen/publikationen_node.html">Germany Intelligence Agency - BND</a> - Federal Office for Information Security
<ul>
<li><a href="https://www.bsi.bund.de/EN/Service-Navi/Publikationen/Studien/SiSyPHuS_Win10/AP7/SiSyPHuS_AP7_node.html">Analysis of Device Guard</a></li>
<li><a href="https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Cyber-Sicherheit/SiSyPHus/E20172000_BSI_Win10_DGABGL_Win10_v_1_0.pdf?__blob=publicationFile&v=3">Device Guard Differential Analysis</a></li>
</ul> </li>
<li><a href="https://techcommunity.microsoft.com/">Microsoft Tech Community</a> - Official blogs and documentations</li>
<li><a href="https://learn.microsoft.com/en-us/windows/security/operating-system-security/device-management/windows-security-configuration-framework/windows-security-baselines">Microsoft Security baselines</a> - Security baselines from Microsoft</li>
<li><a href="https://www.youtube.com/@msftsecresponse">Microsoft Security Response Center (MSRC) YouTube channel</a>
<ul>
<li><a href="https://www.youtube.com/watch?v=quLa6kzzra0">BlueHat Seattle 2019 || Guarding Against Physical Attacks: The Xbox One Story</a></li>
<li><a href="https://msrc.microsoft.com/update-guide">Security Update Guide:</a> The Microsoft Security Response Center (MSRC) investigates all reports of security vulnerabilities affecting Microsoft products and services, and provides the information here as part of the ongoing effort to help you manage security risks and help keep your systems protected.</li>
<li><a href="https://msrc-blog.microsoft.com/">Microsoft Security Response Center Blog</a></li>
</ul> </li>
<li><a href="https://www.microsoft.com/en-us/security/blog/">Microsoft Security Blog</a></li>
<li><a href="https://news.microsoft.com/podcasts/">Microsoft Podcasts</a></li>
<li><a href="https://www.microsoft.com/en-us/msrc/bounty">Bug Bounty Program</a> - With bounties worth up to <code>250,000</code>$</li>
<li><a href="https://www.microsoft.com/en-us/msrc/mapp">Microsoft Active Protections Program</a></li>
<li><a href="https://www.microsoft.com/en-us/msrc/faqs-security-update-guide">Security Update Guide FAQs</a></li>
<li><a href="https://blogs.microsoft.com/on-the-issues/">Microsoft On the Issues</a> - Assessments, Investigations and Reports of APTs (Advanced Persistent Threats<a href="https://learn.microsoft.com/en-us/events/teched-2012/sia303">¹</a>) and nation-sponsored cyberattack operations globally</li>
<li><a href="http://download.microsoft.com/download/8/0/1/801358EC-2A0A-4675-A2E7-96C2E7B93E73/Framework_for_Cybersecurity_Info_Sharing.pdf">A high level overview paper by Microsoft (in <code>PDF</code>)</a>, framework for cybersecurity information sharing and risk reduction.</li>
<li><a href="https://learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool">Microsoft Threat Modeling Tool</a> - for software architects and developers</li>
<li><a href="https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor">Important events to monitor</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/security/">Windows Security portal</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/security-auditing-overview">Security auditing</a></li>
<li><a href="https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon">Microsoft SysInternals Sysmon for Windows Event Collection or SIEM</a></li>
<li><a href="http://aka.ms/cyberpaw">Privileged Access Workstations</a></li>
<li><a href="http://aka.ms/ESAE">Enhanced Security Administrative Environment (ESAE)</a></li>
<li><a href="https://youtu.be/InPiE0EOArs">New Zealand 2016 Demystifying the Windows Firewall – Learn how to irritate attackers without crippli</a></li>
<li><a href="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/">Download Windows virtual machines ready for development</a></li>
<li><a href="https://www.ncsc.gov.uk/section/advice-guidance/all-topics">UK National Cyber Security Centre Advice & guidance</a></li>
<li><a href="https://www.microsoft.com/en-us/wdsi/threats">Global threat activity</a></li>
<li><a href="https://aka.ms/zerotrust">Microsoft Zero Trust</a></li>
<li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/intelligence/understanding-malware">Understanding malware & other threats, phrases</a></li>
<li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/intelligence/malware-naming">Malware naming</a></li>
<li><a href="https://aka.ms/mddr">Microsoft Digital Defense Report</a></li>
<li><a href="https://www.microsoft.com/en-us/microsoft-365/microsoft-defender-for-individuals">Microsoft Defender for Individuals</a></li>
<li><a href="https://www.microsoft.com/en-us/wdsi/filesubmission">Submit a file for malware analysis</a></li>
<li><a href="https://www.microsoft.com/en-us/wdsi/driversubmission">Submit a driver for analysis</a></li>
<li><a href="https://admin.microsoft.com/servicestatus">Service health status</a></li>
<li><a href="https://ti.defender.microsoft.com/">Microsoft Defender Threat Intelligence</a>
<ul>
<li><a href="https://jeffreyappel.nl/how-works-microsoft-defender-threat-intelligence-defender-ti-and-what-is-the-difference-between-free-and-paid/">Free community edition vs Premium edition comparison</a></li>
</ul> </li>
<li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/intelligence/virus-initiative-criteria">Microsoft Virus Initiative</a></li>
<li><a href="https://news.microsoft.com/stories/cybercrime/">Digital Detectives @Microsoft</a></li>
<li><a href="https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/essential-eight/essential-eight-assessment-process-guide">Australia's Essential Eight</a></li>
<li><a href="https://www.nist.gov/privacy-framework/nist-privacy-framework-and-cybersecurity-framework-nist-special-publication-800-53">NIST 800-53</a></li>
<li><a href="https://learn.microsoft.com/en-us/azure/compliance/offerings/offering-cmmc">DoD's CMMC (Cybersecurity Maturity Model Certification)</a></li>
<li><a href="https://www.iso.org/standard/27001">ISO 27001</a></li>
<li><a href="https://public.cyber.mil/stigs/downloads/?_dl_facet_stigs=operating-systems">DoD Cyber Stigs (Security Technical Implementation Guides)</a></li>
<li><a href="https://csrc.nist.gov/pubs/sp/800/171/r2/upd1/final">NIST SP 800-171 Rev. 2 - Protecting Controlled Unclassified Information in Nonfederal Systems and Organizations</a></li>
<li><a href="https://learn.microsoft.com/en-us/security/privileged-access-workstations/privileged-access-success-criteria#clean-source-principle">Clean source principle</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/release-health/windows-message-center">Windows Message Center</a></li>
<li><a href="https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features">Deprecated features for Windows client</a></li>
<li><a href="https://aka.ms/mcra">Microsoft Cybersecurity Reference Architectures</a></li>
<li><a href="https://youtu.be/8T6ClX-y2AE?si=aICh_wZIJrMpM6xB">BlueHat IL 2023 - David Weston - Default Security</a></li>
<li><a href="https://www.microsoft.com/en-us/security/blog/2024/07/27/windows-security-best-practices-for-integrating-and-managing-security-tools/">Windows Security best practices for integrating and managing security tools</a></li>
<li><a href="https://www.microsoft.com/en-us/msrc/exploitability-index">Microsoft Exploitability Index</a></li>
<li><a href="https://aka.ms/MicrosoftIRNinjaHub">The Microsoft Incident Response Ninja Hub</a></li>
</ul>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>Roadmap<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#roadmap"><img src="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/images/PNGs/Roadmapicon.png" alt="RoadmapIcon"></a></h2>
<img src="https://raw.githubusercontent.com/HotCakeX/.github/main/Pictures/PNG%20and%20JPG/Harden%20Windows%20Security%20Repository%20Roadmap.png" alt="The Harden Windows Security Repository Roadmap">
<br>
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="horizontal super thin rainbow RGB line">
<br>
<h2>License<a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#license"><img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/LicenseFree.png" alt="LicenseFreeIcon"></a></h2>
<p>Using <a href="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/LICENSE">MIT License</a>. Free information without any paywall or things of that nature. The only mission of this GitHub repository is to give all Windows users accurate, up to date and correct facts and information about how to stay secure and safe in dangerous environments, and to stay not one, but Many steps, ahead of threat actors.</p>
<h3>Credits</h3>
<ul>
<li>Some of the icons are from <a href="https://icons8.com/">icons8</a></li>
<li>Windows, Azure etc. are trademarks of <a href="https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general">Microsoft Corporation</a></li>
</ul>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="Harden-Windows-Security is a PowerShell module">
<br>
<p align="center"> <a href="https://github.com/HotCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/github.svg?sanitize=true" alt="GitHub profile and icon"></a> <a href="https://www.last.fm/user/HotCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/lastfm.png" alt="Lastfm profile and icon"></a> <a href="https://open.spotify.com/user/eypgh60p3zw1duh9lbsbc2mix"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/spotify.svg?sanitize=true" alt="Spotify profile and icon"></a> <a href="https://stackexchange.com/users/27823952/spynet"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/stack-exchange.svg?sanitize=true" alt="StackExchange profile and icon"></a> <a href="https://steamcommunity.com/id/HotCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/steam.svg?sanitize=true" alt="Steam profile and icon"></a> <a href="https://www.twitch.tv/hot_cakex"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/twitch.svg?sanitize=true" alt="Twitch profile and icon"></a> <a href="https://hotcakex.github.io/"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/website-96.png" alt="Website and icon"></a> <a href="https://x.com/CyberCakeX"><img width="30" height="40" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/a99ff15b77daf6246b05e66f2357c900482bead5/Private/Images/Socials/X%20logo.svg?sanitize=true" alt="X profile and icon"></a> <a href="https://www.xbox.com/en-US/play/user/HottCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/xbox.svg?sanitize=true" alt="Xbox profile and icon"></a> <a href="https://www.youtube.com/@hotcakex"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/youtube.svg?sanitize=true" alt="YouTube profile and icon"></a> <a href="https://www.reddit.com/user/HotCakeXXXXXXXXXXXXX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/reddit.svg?sanitize=true" alt="Reddit profile and icon"></a> <a href="https://socialclub.rockstargames.com/member/----HotCakeX----"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/rockstar-social-club.svg?sanitize=true" alt="Rockstar Social Club profile and icon"></a> <a href="https://club.ubisoft.com/en-US/profile/HotCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/uplay.svg?sanitize=true" alt="Uplay profile and icon"></a> <a href="https://techcommunity.microsoft.com/t5/user/viewprofilepage/user-id/310193"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/microsoft.png" alt="Microsoft Tech Community profile and icon"></a> <a href="mailto:spynetgirl@outlook.com"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/outlook.svg?sanitize=true" alt="OutLook Email address and icon"></a> <a href="https://orcid.org/0009-0000-6616-4938"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/orcid_icon.png" alt="Orcid profile and icon"></a> <a href="https://spynetgirl.medium.com/"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/e0759dbc5b10c7ff9c10d09a49639e40ec780151/Private/Images/Socials/medium.svg?sanitize=true" alt="Medium profile and icon"></a> <a href="https://www.facebook.com/VioletCakeX"><img width="30" height="30" src="https://raw.githubusercontent.com/HotCakeX/HotCakeX/main/Private/Images/Socials/Facebook.svg?sanitize=true" alt="Facebook profile and icon"></a> <a href="https://mvp.microsoft.com/en-US/mvp/profile/4edbca65-7979-4779-b7e4-d182e123259b"><img width="30" height="35" src="https://mvp.microsoft.com/Assets/UserProfile/MVP/Badge.svg?sanitize=true" alt="MVP profile and icon"></a> </p>
<img src="https://github.com/HotCakeX/Harden-Windows-Security/raw/main/images/Gifs/1pxRainbowLine.gif" width="300000" alt="Harden-Windows-Security is a PowerShell module">
<p align="right"><a href="https://raw.githubusercontent.com/HotCakeX/Harden-Windows-Security/main/#readme-top">💡 (back to top)</a></p>
<br>
+
+
\ No newline at end of file
diff --git a/c++/daily/index.xml b/c++/daily/index.xml
index 3d1163ee873..c2e1ea986f3 100644
--- a/c++/daily/index.xml
+++ b/c++/daily/index.xml
@@ -1,7 +1,21 @@
GitHub C++ Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:44Z
+ 2024-12-01T01:30:24Z
Daily Trending of C++ in GitHub
+
+ LANDrop/LANDrop
+ 2024-12-01T01:30:24Z
+ tag:github.com,2024-12-01:/LANDrop/LANDrop
+
+ <p>Drop any files to any devices on your LAN.</p><hr><h1>Note: This repository does not reflect the latest LANDrop releases. We decided to temporarily close source LANDrop and we might re-open source it in the future. Thanks for your understanding!</h1>
<img src="https://raw.githubusercontent.com/LANDrop/LANDrop/master/LANDrop/icons/banner.png" width="300">
<p><img src="https://github.com/LANDrop/LANDrop/workflows/Package/badge.svg?sanitize=true" alt="Package"></p>
<blockquote>
<p>Drop any files to any devices on your LAN. No need to use instant messaging for that anymore.</p>
</blockquote>
<p>LANDrop is a cross-platform tool that you can use to conveniently transfer photos, videos, and other types of files to other devices on the same local network.</p>
<p>You can download prebuilts of LANDrop from the <a href="https://landrop.app/#downloads">official website</a>.</p>
<h2>Features</h2>
<ul>
<li>Cross platform: when we say it, we mean it. iOS, Android, macOS, Windows, Linux, name yours.</li>
<li>Ultra fast: uses your local network for transferring. Internet speed is not a limit.</li>
<li>Easy to use: intuitive UI. You know how to use it when you see it.</li>
<li>Secure: uses state-of-the-art cryptography algorithm. No one else can see your files.</li>
<li>No cellular data: outside? No problem. LANDrop can work on your personal hotspot, without consuming cellular data.</li>
<li>No compression: doesn't compress your photos and videos when sending.</li>
</ul>
<h2>Building</h2>
<p>The AppImage we provide as the prebuilt for Linux might not work on your machine. You can build LANDrop by yourself if the prebuilt doesn't work for you.</p>
<p>To build LANDrop:</p>
<ol>
<li>Download and install the dependencies: <a href="https://www.qt.io/download-qt-installer">Qt</a> and <a href="https://libsodium.gitbook.io/doc/#downloading-libsodium">libsodium</a><br> If you are using a Debian-based distro, such as Ubuntu, you can install libsodium via <pre><code>sudo apt install libsodium-dev
</code></pre> </li>
<li>Clone this repository <pre><code>git clone https://github.com/LANDrop/LANDrop
</code></pre> </li>
<li>Run the following commands <pre><code>mkdir -p LANDrop/build
cd LANDrop/build
qmake ../LANDrop
make -j$(nproc)
sudo make install
</code></pre> </li>
<li>You can now run LANDrop via <pre><code>landrop
</code></pre> </li>
</ol>
+
+
+ elalish/manifold
+ 2024-12-01T01:30:24Z
+ tag:github.com,2024-12-01:/elalish/manifold
+
+ <p>Geometry library for topological robustness</p><hr><h1>About Manifold</h1>
<p><a href="https://codecov.io/github/elalish/manifold"><img src="https://codecov.io/github/elalish/manifold/branch/master/graph/badge.svg?token=IIA8G5HVS7" alt="codecov"></a> <a href="https://badge.fury.io/py/manifold3d"><img src="https://badge.fury.io/py/manifold3d.svg?sanitize=true" alt="PyPI version"></a> <a href="https://badge.fury.io/js/manifold-3d"><img src="https://badge.fury.io/js/manifold-3d.svg?sanitize=true" alt="npm version"></a> <a href="https://twitter.com/intent/follow?screen_name=manifoldcad"><img src="https://img.shields.io/twitter/follow/manifoldcad?style=social&logo=twitter" alt="twitter"></a></p>
<p><a href="https://manifoldcad.org/docs/html/classmanifold_1_1_manifold.html"><strong>C++ Documentation</strong></a> | <a href="https://manifoldcad.org/jsdocs"><strong>TS Documentation</strong></a> | <a href="https://github.com/elalish/manifold/wiki/Manifold-Library"><strong>Algorithm Documentation</strong></a> | <a href="https://elalish.blogspot.com/search/label/Manifold"><strong>Blog Posts</strong></a> | <a href="https://manifoldcad.org/model-viewer.html"><strong>Web Examples</strong></a></p>
<p><a href="https://github.com/elalish/manifold">Manifold</a> is a geometry library dedicated to creating and operating on manifold triangle meshes. A <a href="https://github.com/elalish/manifold/wiki/Manifold-Library#manifoldness">manifold mesh</a> is a mesh that represents a solid object, and so is very important in manufacturing, CAD, structural analysis, etc. Manifold also supports arbitrary vertex properties and enables mapping of materials for rendering use-cases. Our primary goal is reliability: guaranteed manifold output without caveats or edge cases. Our secondary goal is performance: efficient algorithms that make extensive use of parallelization, or pipelining when only a single thread is available.</p>
<h2>Users</h2>
<p>Here is an incomplete list of our users, whose integrations may be anywhere from in-progress to released. Please feel free to send a PR to update this list with your own project - it's quite difficult for us to keep track.</p>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://openscad.org/">OpenSCAD</a></td>
<td><a href="https://ifcjs.github.io/info/">IFCjs</a></td>
<td><a href="https://github.com/rianadon/dactyl-configurator">Dactyl Web Configurator</a></td>
</tr>
<tr>
<td><a href="https://apps.apple.com/us/app/id1519508653?mt=8&platform=ipad">Nomad Sculpt</a></td>
<td><a href="https://grid.space/">Grid.Space</a></td>
<td><a href="https://github.com/wrongbad/badcad">badcad</a></td>
</tr>
<tr>
<td><a href="https://godotengine.org/">Godot Engine</a></td>
<td><a href="https://github.com/OCADml/OManifold">OCADml</a></td>
<td><a href="https://flitter.readthedocs.io/en/latest/">Flitter</a></td>
</tr>
<tr>
<td><a href="https://brlcad.org/">BRL-CAD</a></td>
<td><a href="https://polygonjs.com/">PolygonJS</a></td>
<td><a href="https://spherene.ch/">Spherene</a></td>
</tr>
<tr>
<td><a href="https://doc.babylonjs.com/features/featuresDeepDive/mesh/mergeMeshes#merging-meshes-with-constructive-solid-geometry">Babylon.js</a></td>
<td><a href="https://trimesh.org/">trimesh</a></td>
<td><a href="https://github.com/playkostudios/gypsum">Gypsum</a></td>
</tr>
<tr>
<td><a href="https://apps.apple.com/us/app/valence-3d/id6450967410?mt=8&platform=ipad">Valence 3D</a></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h3>Bindings & Packages</h3>
<p>If C++ isn't your cup of tea, Manifold also has bindings to many other languages, some maintained in this repository, and others elsewhere.</p>
<table>
<thead>
<tr>
<th>Language</th>
<th>Packager</th>
<th>Name</th>
<th>Maintenance</th>
</tr>
</thead>
<tbody>
<tr>
<td>C</td>
<td>N/A</td>
<td>N/A</td>
<td>internal</td>
</tr>
<tr>
<td>TS/JS</td>
<td>npm</td>
<td><a href="https://www.npmjs.com/package/manifold-3d">manifold-3d</a></td>
<td>internal</td>
</tr>
<tr>
<td>Python</td>
<td>PyPI</td>
<td><a href="https://pypi.org/project/manifold3d/">manifold3d</a></td>
<td>internal</td>
</tr>
<tr>
<td>Java</td>
<td>N/A</td>
<td><a href="https://github.com/SovereignShop/manifold">manifold</a></td>
<td>external</td>
</tr>
<tr>
<td>Clojure</td>
<td>N/A</td>
<td><a href="https://github.com/SovereignShop/clj-manifold3d">clj-manifold3d</a></td>
<td>external</td>
</tr>
<tr>
<td>C#</td>
<td>NuGet</td>
<td><a href="https://www.nuget.org/packages/ManifoldNET">ManifoldNET</a></td>
<td>external</td>
</tr>
<tr>
<td>Julia</td>
<td>Packages</td>
<td><a href="https://juliapackages.com/p/manifoldbindings">ManifoldBindings.jl</a></td>
<td>external</td>
</tr>
<tr>
<td>OCaml</td>
<td>N/A</td>
<td><a href="https://ocadml.github.io/OManifold/OManifold/index.html">OManifold</a></td>
<td>external</td>
</tr>
</tbody>
</table>
<h2>Frontend Sandboxes</h2>
<h3><a href="https://manifoldcad.org">ManifoldCAD.org</a></h3>
<p>If you like OpenSCAD / JSCAD, you might also like ManifoldCAD - our own solid modelling web app where you script in JS/TS. This uses our npm package, <a href="https://www.npmjs.com/package/manifold-3d">manifold-3d</a>, built via WASM. It's not quite as fast as our raw C++, but it's hard to beat for interoperability.</p>
<h3><a href="https://colab.research.google.com/drive/1VxrFYHPSHZgUbl9TeWzCeovlpXrPQ5J5?usp=sharing">Python Colab Example</a></h3>
<p>If you prefer Python to JS/TS, make your own copy of the example notebook above. It demonstrates interop between our <a href="https://pypi.org/project/manifold3d/"><code>manifold3d</code></a> PyPI library and the popular <a href="https://pypi.org/project/trimesh/"><code>trimesh</code></a> library, including showing the interactive model right in the notebook and saving 3D model output.</p>
<p><img src="https://manifoldcad.org/samples/models/mengerSponge192.png" alt="A metallic Menger sponge" title="A metallic Menger sponge"></p>
<h2>Manifold Library</h2>
<p>This library is fast with guaranteed manifold output. As such you need manifold meshes as input, which this library can create using constructors inspired by the OpenSCAD API, as well as a level set function for evaluating signed-distance functions (SDF) that improves significantly over Marching Cubes. You can also pass in your own mesh data, but you'll get an error status if the imported mesh isn't manifold. We provide a <a href="https://manifoldcad.org/docs/html/structmanifold_1_1_mesh_g_l_p.html"><code>Merge</code></a> function to fix slightly non-manifold meshes, but in general you may need one of the automated repair tools that exist mostly for 3D printing.</p>
<p>The most significant contribution here is a guaranteed-manifold <a href="https://github.com/elalish/manifold/wiki/Manifold-Library#mesh-boolean">mesh Boolean</a> algorithm, which I believe is the first of its kind. If you know of another, please open a discussion - a mesh Boolean algorithm robust to edge cases has been an open problem for many years. Likewise, if the Boolean here ever fails you, please submit an issue! This Boolean forms the basis of a CAD kernel, as it allows simple shapes to be combined into more complex ones.</p>
<p>Manifold has full support for arbitrary vertex properties, and also has IDs that make it easy to keep track of materials and what surfaces belong to what input objects or faces. See our <a href="https://manifoldcad.org/model-viewer.html">web example</a> for a simple demonstration of combining objects with unique textures.</p>
<p>Also included are a novel and powerful suite of refining functions for smooth mesh interpolation. They handle smoothing both triangles and quads, as well as keeping polygonal faces flat. You can easily create sharp or small-radius edges where desired, or even drive the curvature by normal vectors.</p>
<p>To aid in speed, this library makes extensive use of parallelization through TBB, if enabled. Not everything is so parallelizable, for instance a <a href="https://github.com/elalish/manifold/wiki/Manifold-Library#polygon-triangulation">polygon triangulation</a> algorithm is included which is serial. Even if compiled with parallel backend, the code will still fall back to the serial version of the algorithms if the problem size is small. The WASM build is serial-only for now, but still fast.</p>
<p>Look in the <a href="https://github.com/elalish/manifold/tree/master/samples">samples</a> directory for examples of how to use this library to make interesting 3D models. You may notice that some of these examples bare a certain resemblance to my OpenSCAD designs on <a href="https://www.thingiverse.com/emmett">Thingiverse</a>, which is no accident. Much as I love OpenSCAD, my library is dramatically faster and the code is more flexible.</p>
<h3>Dependencies</h3>
<p>Manifold no longer has <strong>any</strong> required dependencies! However, we do have several optional dependencies, of which the first two are strongly encouraged:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>CMake Flag</th>
<th>Provides</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/oneapi-src/oneTBB/"><code>TBB</code></a></td>
<td><code>MANIFOLD_PAR=ON</code></td>
<td>Parallel acceleration</td>
</tr>
<tr>
<td><a href="https://github.com/AngusJohnson/Clipper2"><code>Clipper2</code></a></td>
<td><code>MANIFOLD_CROSS_SECTION=ON</code></td>
<td>2D: <a href="https://manifoldcad.org/docs/html/classmanifold_1_1_cross_section.html"><code>CrossSection</code></a></td>
</tr>
<tr>
<td><a href="https://github.com/assimp/assimp"><code>Assimp</code></a></td>
<td><code>MANIFOLD_EXPORT=ON</code></td>
<td>Basic Mesh I/O</td>
</tr>
<tr>
<td><a href="https://github.com/wjakob/nanobind"><code>Nanobind</code></a></td>
<td><code>MANIFOLD_PYBIND=ON</code></td>
<td>Python bindings</td>
</tr>
<tr>
<td><a href="https://github.com/emscripten-core/emscripten"><code>Emscripten</code></a></td>
<td><code>MANIFOLD_JSBIND=ON</code></td>
<td>JS bindings via WASM</td>
</tr>
<tr>
<td><a href="https://github.com/google/googletest/"><code>GTest</code></a></td>
<td><code>MANIFOLD_TEST=ON</code></td>
<td>Testing framework</td>
</tr>
</tbody>
</table>
<h3>3D Formats</h3>
<p>Please avoid saving to STL files! They are lossy and inefficient - when saving a manifold mesh to STL there is no guarantee that the re-imported mesh will still be manifold, as the topology is lost. Please consider using <a href="https://3mf.io/">3MF</a> instead, as this format was designed from the beginning for manifold meshes representing solid objects.</p>
<p>If you use vertex properties for things like interpolated normals or texture UV coordinates, <a href="https://www.khronos.org/Gltf">glTF</a> is recommended, specifically using the <a href="https://github.com/KhronosGroup/glTF/raw/main/extensions/2.0/Vendor/EXT_mesh_manifold/README.md"><code>EXT_mesh_manifold</code></a> extension. This allows for the lossless and efficient transmission of manifoldness even with property boundaries. Try our <a href="https://manifoldcad.org/make-manifold">make-manifold</a> page to add this extension to your existing glTF/GLB models.</p>
<p>Manifold provides an optional <a href="https://manifoldcad.org/docs/html/group___mesh_i_o.html"><code>MeshIO</code></a> component based on <a href="https://assimp.org/">Assimp</a>, but it is limited in functionality and is primarily to aid in testing. If you are using our npm module, we have a much more capable <a href="https://github.com/elalish/manifold/raw/master/bindings/wasm/examples/gltf-io.ts">gltf-io.ts</a> you can use instead. For other languages we strongly recommend using existing packages that focus on 3D file I/O, e.g. <a href="https://trimesh.org/">trimesh</a> for Python, particularly when using vertex properties or materials.</p>
<h2>Building</h2>
<p>Only CMake, a C++ compiler, and Python are required to be installed and set up to build this library (it has been tested with GCC, LLVM, MSVC). However, a variety of optional dependencies can bring in more functionality, see below.</p>
<p>Build and test (Ubuntu or similar):</p>
<pre><code>git clone --recurse-submodules https://github.com/elalish/manifold.git
cd manifold
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. && make
test/manifold_test
</code></pre>
<p>CMake flags (usage e.g. <code>-DMANIFOLD_DEBUG=ON</code>):</p>
<ul>
<li><code>MANIFOLD_JSBIND=[OFF, <ON>]</code>: Build js binding (when using the emscripten toolchain).</li>
<li><code>MANIFOLD_CBIND=[<OFF>, ON]</code>: Build C FFI binding.</li>
<li><code>MANIFOLD_PYBIND=[OFF, <ON>]</code>: Build python binding, requires <code>nanobind</code>.</li>
<li><code>MANIFOLD_PAR=[<OFF>, ON]</code>: Enables multi-thread parallelization, requires <code>tbb</code>.</li>
<li><code>MANIFOLD_CROSS_SECTION=[OFF, <ON>]</code>: Build CrossSection for 2D support (needed by language bindings), requires <code>Clipper2</code>.</li>
<li><code>MANIFOLD_EXPORT=[<OFF>, ON]</code>: Enables <code>MeshIO</code> and GLB export of 3D models from the tests, requires <code>assimp</code>.</li>
<li><code>MANIFOLD_DEBUG=[<OFF>, ON]</code>: Enables internal assertions and exceptions. This incurs around 20% runtime overhead.</li>
<li><code>MANIFOLD_TEST=[OFF, <ON>]</code>: Build unit tests, requires <code>GTest</code>.</li>
<li><code>TRACY_ENABLE=[<OFF>, ON]</code>: Enable integration with tracy profiler. See profiling section below.</li>
</ul>
<p>Dependency version override:</p>
<ul>
<li><code>MANIFOLD_USE_BUILTIN_TBB=[<OFF>, ON]</code>: Use builtin version of tbb.</li>
<li><code>MANIFOLD_USE_BUILTIN_CLIPPER2=[<OFF>, ON]</code>: Use builtin version of clipper2.</li>
<li><code>MANIFOLD_USE_BUILTIN_NANOBIND=[<OFF>, ON]</code>: Use builtin version of nanobind.</li>
</ul>
<blockquote>
<p>Note: These three options can force the build to avoid using the system version of the dependency. This will either use the provided source directory via <code>FETCHCONTENT_SOURCE_DIR_*</code> (see below), or fetch the source from GitHub. Note that the dependency will be built as static dependency to avoid dynamic library conflict. When the system package is unavailable, the option will be automatically set to true.</p>
</blockquote>
<p>Offline building (with missing dependencies/dependency version override):</p>
<ul>
<li><code>MANIFOLD_DOWNLOADS=[OFF, <ON>]</code>: Automatically download missing dependencies. Need to set <code>FETCHCONTENT_SOURCE_DIR_*</code> if the dependency <code>*</code> is missing.</li>
<li><code>FETCHCONTENT_SOURCE_DIR_TBB</code>: path to tbb source (if <code>MANIFOLD_PAR</code> is enabled).</li>
<li><code>FETCHCONTENT_SOURCE_DIR_CLIPPER2</code>: path to tbb source (if <code>MANIFOLD_CROSS_SECTION</code> is enabled).</li>
<li><code>FETCHCONTENT_SOURCE_DIR_NANOBIND</code>: path to nanobind source (if <code>MANIFOLD_PYBIND</code> is enabled).</li>
<li><code>FETCHCONTENT_SOURCE_DIR_GOOGLETEST</code>: path to googletest source (if <code>MANIFOLD_TEST</code> is enabled).</li>
</ul>
<blockquote>
<p>Note: When <code>FETCHCONTENT_SOURCE_DIR_*</code> is set, CMake will use the provided source directly without downloading regardless of the value of <code>MANIFOLD_DOWNLOADS</code>.</p>
</blockquote>
<p>The build instructions used by our CI are in <a href="https://github.com/elalish/manifold/raw/master/.github/workflows/manifold.yml">manifold.yml</a>, which is a good source to check if something goes wrong and for instructions specific to other platforms, like Windows.</p>
<h3>WASM</h3>
<p>To build the JS WASM library, first install NodeJS and set up emscripten:</p>
<p>(on Mac):</p>
<pre><code>brew install nodejs
brew install emscripten
</code></pre>
<p>(on Linux):</p>
<pre><code>sudo apt install nodejs
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk/emsdk_env.sh
</code></pre>
<p>Then build:</p>
<pre><code>cd manifold
mkdir buildWASM
cd buildWASM
emcmake cmake -DCMAKE_BUILD_TYPE=Release .. && emmake make
node test/manifold_test.js
</code></pre>
<h3>Python</h3>
<p>The CMake script will build the python binding <code>manifold3d</code> automatically. To use the extension, please add <code>$BUILD_DIR/bindings/python</code> to your <code>PYTHONPATH</code>, where <code>$BUILD_DIR</code> is the build directory for CMake. Examples using the python binding can be found in <code>bindings/python/examples</code>. To see exported samples, run:</p>
<pre><code>sudo apt install pkg-config libpython3-dev python3 python3-distutils python3-pip
pip install trimesh pytest
python3 run_all.py -e
</code></pre>
<p>Run the following code in the interpreter for python binding documentation:</p>
<pre><code>>>> import manifold3d
>>> help(manifold3d)
</code></pre>
<p>For more detailed documentation, please refer to the C++ API.</p>
<h3>Windows Shenanigans</h3>
<p>Windows users should build with <code>-DBUILD_SHARED_LIBS=OFF</code>, as enabling shared libraries in general makes things very complicated.</p>
<p>The DLL file for manifoldc (C FFI bindings) when built with msvc is in <code>${CMAKE_BINARY_DIR}/bin/${BUILD_TYPE}/manifoldc.dll</code>. For example, for the following command, the path relative to the project root directory is <code>build/bin/Release/manifoldc.dll</code>.</p>
<pre><code class="language-sh">cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DMANIFOLD_DEBUG=ON -DMANIFOLD_PAR=${{matrix.parallel_backend}} -A x64 -B build
</code></pre>
<h2>Contributing</h2>
<p>Contributions are welcome! A lower barrier contribution is to simply make a PR that adds a test, especially if it repros an issue you've found. Simply name it prepended with DISABLED_, so that it passes the CI. That will be a very strong signal to me to fix your issue. However, if you know how to fix it yourself, then including the fix in your PR would be much appreciated!</p>
<h3>Formatting</h3>
<p>There is a formatting script <code>format.sh</code> that automatically formats everything. It requires clang-format, black formatter for python and <a href="https://github.com/BlankSpruce/gersemi">gersemi</a> for formatting cmake files.</p>
<p>Note that our script can run with clang-format older than 18, but the GitHub action check may fail due to slight differences between different versions of clang-format. In that case, either update your clang-format version or apply the patch from the GitHub action log.</p>
<h3>Profiling</h3>
<p>There is now basic support for the <a href="https://github.com/wolfpld/tracy">Tracy profiler</a> for our tests. To enable tracing, compile with <code>-DTRACY_ENABLE=on</code> cmake option, and run the test with Tracy server running. To enable memory profiling in addition to tracing, compile with <code>-DTRACY_MEMORY_USAGE=ON</code> in addition to <code>-DTRACY_ENABLE=ON</code>.</p>
<h2>About the author</h2>
<p>This library was started by <a href="https://elalish.blogspot.com/">Emmett Lalish</a>. I am currently a Google employee and this is my 20% project, not an official Google project. At my day job I'm the maintainer of <a href="https://modelviewer.dev/"><model-viewer></a>. I was the first employee at a 3D video startup, <a href="https://www.omnivor.io/">Omnivor</a>, and before that I worked on 3D printing at Microsoft, including <a href="https://www.microsoft.com/en-us/p/3d-builder/9wzdncrfj3t6?activetab=pivot%3Aoverviewtab">3D Builder</a>. Originally an aerospace engineer, I started at a small DARPA contractor doing seedling projects, one of which became <a href="https://en.wikipedia.org/wiki/Sea_Hunter">Sea Hunter</a>. I earned my doctorate from the University of Washington in control theory and published some <a href="https://www.researchgate.net/scientific-contributions/75011026_Emmett_Lalish">papers</a>.</p>
+
\ No newline at end of file
diff --git a/c++/monthly/index.xml b/c++/monthly/index.xml
new file mode 100644
index 00000000000..3ace27a61bd
--- /dev/null
+++ b/c++/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub C++ Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:10Z
+ Monthly Trending of C++ in GitHub
+
+
+ shader-slang/slang
+ 2024-12-01T01:52:10Z
+ tag:github.com,2024-12-01:/shader-slang/slang
+
+ <p>Making it easier to work with shaders</p><hr><h1>Slang</h1>
<p><img src="https://github.com/shader-slang/slang/actions/workflows/ci.yml/badge.svg?branch=master" alt="CI Status"> <img src="https://github.com/shader-slang/slang/actions/workflows/vk-gl-cts-nightly.yml/badge.svg?sanitize=true" alt="CTS Status"></p>
<p>Slang is a shading language that makes it easier to build and maintain large shader codebases in a modular and extensible fashion, while also maintaining the highest possible performance on modern GPUs and graphics APIs. Slang is based on years of collaboration between researchers at NVIDIA, Carnegie Mellon University, Stanford, MIT, UCSD and the University of Washington.</p>
<h2>Why Slang?</h2>
<p>The Slang shading language is designed to enable real-time graphics developers to work with large-scale, high-performance shader code.</p>
<h3>Write Shaders Once, Run Anywhere</h3>
<p>The Slang compiler can generate code for a wide variety of targets: D3D12, Vulkan, Metal, D3D11, OpenGL, CUDA, and even generate code to run on a CPU. For textual targets, such as Metal Shading Language (MSL) and CUDA, Slang produces readable code that preserves original identifier names, as well as the type and call structure, making it easier to debug.</p>
<h3>Access the Latest GPU Features</h3>
<p>Slang code is highly portable, but can still leverage unique platform capabilities, including the latest features in Direct3D and Vulkan. For example, developers can make full use of <a href="https://shader-slang.com/slang/user-guide/convenience-features.html#pointers-limited">pointers</a> when generating SPIR-V. Slang's <a href="https://shader-slang.com/slang/user-guide/capabilities.html">capability system</a> helps applications manage feature set differences across target platforms by ensuring code only uses available features during the type-checking step, before generating final code. Additionally, Slang provides <a href="https://shader-slang.com/slang/user-guide/a1-04-interop.html">flexible interop</a> features to enable directly embedding target code or SPIR-V into generated shaders.</p>
<h3>Leverage Neural Graphics with Automatic Differentiation</h3>
<p>Slang can <a href="https://shader-slang.com/slang/user-guide/autodiff.html">automatically generate both forward and backward derivative propagation code</a> for complex functions that involve arbitrary control flow and dynamic dispatch. This allows existing rendering codebases to easily become differentiable, or for Slang to serve as the kernel language in a PyTorch-driven machine learning framework via <a href="https://shader-slang.com/slang/user-guide/a1-02-slangpy.html"><code>slangtorch</code></a>.</p>
<h3>Scalable Software Development with Modules</h3>
<p>Slang provides a <a href="https://shader-slang.com/slang/user-guide/modules.html">module system</a> that enables logical organization of code for separate compilation. Slang modules can be independently compiled offline to a custom IR (with optional obfuscation) and then linked at runtime to generate code in formats such as DXIL or SPIR-V.</p>
<h3>Code Specialization that Works with Modules</h3>
<p>Slang supports <a href="https://shader-slang.com/slang/user-guide/interfaces-generics.html">generics and interfaces</a> (a.k.a. type traits/protocols), allowing for clear expression of shader specialization without the need for preprocessor techniques or string-pasting. Unlike C++ templates, Slang's generics are pre-checked and don't produce cascading error messages that are difficult to diagnose. The same generic shader can be specialized for a variety of different types to produce specialized code ahead of time, or on the fly, entirely under application control.</p>
<h3>Easy On-ramp for HLSL and GLSL Codebases</h3>
<p>Slang's syntax is similar to HLSL, and most existing HLSL code can be compiled with the Slang compiler out-of-the-box, or with just minor modifications. This allows existing shader codebases to immediately benefit from Slang without requiring a complete rewrite or port.</p>
<p>Slang provides a compatibility module that enables the use of most GLSL intrinsic functions and GLSL's parameter binding syntax.</p>
<h3>Comprehensive Tooling Support</h3>
<p>Slang comes with full support of IntelliSense editing features in Visual Studio Code and Visual Studio through the Language Server Protocol. Full debugging capabilities are also available through RenderDoc and SPIR-V based tools.</p>
<h2>Getting Started</h2>
<p>The fastest way to get started using Slang in your own development is to use a pre-built binary package, available through GitHub <a href="https://github.com/shader-slang/slang/releases">releases</a>. Slang binaries are also included in the <a href="https://vulkan.lunarg.com/sdk/home">Vulkan SDK</a> since version 1.3.296.0.</p>
<p>There are packages built for 32- and 64-bit Windows, as well as 64-bit Ubuntu. Each binary release includes the command-line <code>slangc</code> compiler, a shared library for the compiler, and the <code>slang.h</code> header.</p>
<p>See the user-guide for info on using the <code>slangc</code> command-line tool: <a href="https://shader-slang.com/slang/user-guide/compiling.html#command-line-compilation-with-slangc">Slang Command Line Usage</a>.</p>
<p>If you want to try out the Slang language without installing anything, a fast and simple way is to use the <a href="https://shader-slang.com/slang-playground">Slang Playground</a>. The playground allows you to compile Slang code to a variety of targets, and even run some simple shaders directly within the browser. The playground loads Slang compiler to your browser and runs all compilation locally. No data will be sent to any servers.</p>
<p>If you would like to build Slang from source, please consult the <a href="https://raw.githubusercontent.com/shader-slang/slang/master/docs/building.md">build instructions</a>.</p>
<h2>Documentation</h2>
<p>The Slang project provides a variety of different <a href="https://raw.githubusercontent.com/shader-slang/slang/master/docs/">documentation</a>, but most users would be well served starting with the <a href="https://shader-slang.github.io/slang/user-guide/">User's Guide</a>.</p>
<p>For developers writing Slang code, the <a href="https://shader-slang.com/stdlib-reference/">Slang Core Module Reference</a> provides detailed documentation on Slang's built-in types and functions.</p>
<p>We also provide a few <a href="https://raw.githubusercontent.com/shader-slang/slang/master/examples/">examples</a> of how to integrate Slang into a rendering application.</p>
<p>These examples use a graphics layer that we include with Slang called "GFX" which is an abstraction library of various graphics APIs (D3D11, D2D12, OpenGL, Vulkan, CUDA, and the CPU) to support cross-platform applications using GPU graphics and compute capabilities. If you'd like to learn more about GFX, see the <a href="https://shader-slang.com/slang/gfx-user-guide/index.html">GFX User Guide</a>.</p>
<p>Additionally, we recommend checking out <a href="https://github.com/nvpro-samples/vk_mini_samples/">Vulkan Mini Examples</a> for more examples of using Slang's language features available on Vulkan, such as pointers and the ray tracing intrinsics.</p>
<h2>Contributing</h2>
<p>If you'd like to contribute to the project, we are excited to have your input. The following guidelines should be observed by contributors:</p>
<ul>
<li>Please follow the contributor <a href="https://raw.githubusercontent.com/shader-slang/slang/master/CODE_OF_CONDUCT.md">Code of Conduct</a>.</li>
<li>Bugs reports and feature requests should go through the GitHub issue tracker</li>
<li>Changes should ideally come in as small pull requests on top of <code>master</code>, coming from your own personal fork of the project</li>
<li>Large features that will involve multiple contributors or a long development time should be discussed in issues, and broken down into smaller pieces that can be implemented and checked in in stages</li>
</ul>
<p><a href="https://raw.githubusercontent.com/shader-slang/slang/master/CONTRIBUTING.md">Contribution guide</a> describes the workflow for contributors at more detail.</p>
<h2>Limitations and Support</h2>
<h3>Platform support</h3>
<p>The Slang compiler and libraries can be built on the following platforms:</p>
<table>
<thead>
<tr>
<th align="center">Windows</th>
<th align="center">Linux</th>
<th align="center">MacOS</th>
<th align="center">WebAssembly</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">supported</td>
<td align="center">supported</td>
<td align="center">supported</td>
<td align="center">experimental</td>
</tr>
</tbody>
</table>
<p>Both <code>x86_64</code> and <code>aarch64</code> architectures are supported on Windows, Linux and MacOS platforms.</p>
<h3>Target support</h3>
<p>Slang can compile shader code to the following targets:</p>
<table>
<thead>
<tr>
<th align="center">Target</th>
<th align="center">Status</th>
<th align="center">Output Formats</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">Direct3D 11</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#direct3d-11">supported</a></td>
<td align="center">HLSL</td>
</tr>
<tr>
<td align="center">Direct3D 12</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#direct3d-12">supported</a></td>
<td align="center">HLSL</td>
</tr>
<tr>
<td align="center">Vulkan</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#vulkan">supported</a></td>
<td align="center">SPIRV, GLSL</td>
</tr>
<tr>
<td align="center">Metal</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#metal">experimental*</a></td>
<td align="center">Metal Shading Language</td>
</tr>
<tr>
<td align="center">WebGPU</td>
<td align="center">experimental**</td>
<td align="center">WGSL</td>
</tr>
<tr>
<td align="center">CUDA</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cuda-and-optix">supported</a></td>
<td align="center">C++ (compute only)</td>
</tr>
<tr>
<td align="center">Optix</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cuda-and-optix">experimental</a></td>
<td align="center">C++ (WIP)</td>
</tr>
<tr>
<td align="center">CPU</td>
<td align="center"><a href="https://shader-slang.com/slang/user-guide/targets.html#cpu-compute">experimental</a></td>
<td align="center">C++ (kernel), C++ (host), standalone executable, dynamic library</td>
</tr>
</tbody>
</table>
<blockquote>
<p>*Slang currently supports generating vertex, fragment, compute, task and mesh shaders for Metal.</p>
</blockquote>
<blockquote>
<p>**WGSL support is still work in-progress.</p>
</blockquote>
<p>For greater detail, see the <a href="https://shader-slang.com/slang/user-guide/targets.html">Supported Compilation Targets</a> section of the <a href="https://shader-slang.github.io/slang/user-guide/">User Guide</a></p>
<p>The Slang project has been used for production applications and large shader codebases, but it is still under active development. Support is currently focused on the platforms (Windows, Linux) and target APIs (Direct3D 12, Vulkan) where Slang is used most heavily. Users who are looking for support on other platforms or APIs should coordinate with the development team via the issue tracker to make sure that their use cases can be supported.</p>
<h2>License</h2>
<p>The Slang code itself is under the Apache 2.0 with LLVM Exception license (see <a href="https://raw.githubusercontent.com/shader-slang/slang/master/LICENSE">LICENSE</a>).</p>
<p>Builds of the core Slang tools depend on the following projects, either automatically or optionally, which may have their own licenses:</p>
<ul>
<li><a href="https://github.com/KhronosGroup/glslang"><code>glslang</code></a> (BSD)</li>
<li><a href="https://github.com/lz4/lz4"><code>lz4</code></a> (BSD)</li>
<li><a href="https://github.com/richgel999/miniz"><code>miniz</code></a> (MIT)</li>
<li><a href="https://github.com/KhronosGroup/SPIRV-Headers"><code>spirv-headers</code></a> (Modified MIT)</li>
<li><a href="https://github.com/KhronosGroup/SPIRV-Tools"><code>spirv-tools</code></a> (Apache 2.0)</li>
<li><a href="https://github.com/martinus/unordered_dense"><code>ankerl::unordered_dense::{map, set}</code></a> (MIT)</li>
</ul>
<p>Slang releases may include <a href="https://github.com/shader-slang/slang-llvm">slang-llvm</a> which includes <a href="https://github.com/llvm/llvm-project">LLVM</a> under the license:</p>
<ul>
<li><a href="https://llvm.org/docs/DeveloperPolicy.html#new-llvm-project-license-framework"><code>llvm</code></a> (Apache 2.0 License with LLVM exceptions)</li>
</ul>
<p>Some of the tests and example programs that build with Slang use the following projects, which may have their own licenses:</p>
<ul>
<li><a href="https://github.com/g-truc/glm"><code>glm</code></a> (MIT)</li>
<li><code>stb_image</code> and <code>stb_image_write</code> from the <a href="https://github.com/nothings/stb"><code>stb</code></a> collection of single-file libraries (Public Domain)</li>
<li><a href="https://github.com/tinyobjloader/tinyobjloader"><code>tinyobjloader</code></a> (MIT)</li>
</ul>
+
+
+ bitcoin/bitcoin
+ 2024-12-01T01:52:10Z
+ tag:github.com,2024-12-01:/bitcoin/bitcoin
+
+ <p>Bitcoin Core integration/staging tree</p><hr><h1>Bitcoin Core integration/staging tree</h1>
<p><a href="https://bitcoincore.org">https://bitcoincore.org</a></p>
<p>For an immediately usable, binary version of the Bitcoin Core software, see <a href="https://bitcoincore.org/en/download/">https://bitcoincore.org/en/download/</a>.</p>
<h2>What is Bitcoin Core?</h2>
<p>Bitcoin Core connects to the Bitcoin peer-to-peer network to download and fully validate blocks and transactions. It also includes a wallet and graphical user interface, which can be optionally built.</p>
<p>Further information about Bitcoin Core is available in the <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/doc">doc folder</a>.</p>
<h2>License</h2>
<p>Bitcoin Core is released under the terms of the MIT license. See <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/COPYING">COPYING</a> for more information or see <a href="https://opensource.org/licenses/MIT">https://opensource.org/licenses/MIT</a>.</p>
<h2>Development Process</h2>
<p>The <code>master</code> branch is regularly built (see <code>doc/build-*.md</code> for instructions) and tested, but it is not guaranteed to be completely stable. <a href="https://github.com/bitcoin/bitcoin/tags">Tags</a> are created regularly from release branches to indicate new official, stable release versions of Bitcoin Core.</p>
<p>The <a href="https://github.com/bitcoin-core/gui">https://github.com/bitcoin-core/gui</a> repository is used exclusively for the development of the GUI. Its master branch is identical in all monotree repositories. Release branches and tags do not exist, so please do not fork that repository unless it is for development reasons.</p>
<p>The contribution workflow is described in <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/CONTRIBUTING.md">CONTRIBUTING.md</a> and useful hints for developers can be found in <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/doc/developer-notes.md">doc/developer-notes.md</a>.</p>
<h2>Testing</h2>
<p>Testing and code review is the bottleneck for development; we get more pull requests than we can review and test on short notice. Please be patient and help out by testing other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money.</p>
<h3>Automated Testing</h3>
<p>Developers are strongly encouraged to write <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/README.md">unit tests</a> for new code, and to submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled during the generation of the build system) with: <code>ctest</code>. Further details on running and extending unit tests can be found in <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/src/test/README.md">/src/test/README.md</a>.</p>
<p>There are also <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/test">regression and integration tests</a>, written in Python. These tests can be run (if the <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/test">test dependencies</a> are installed) with: <code>build/test/functional/test_runner.py</code> (assuming <code>build</code> is your build directory).</p>
<p>The CI (Continuous Integration) systems make sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically.</p>
<h3>Manual Quality Assurance (QA) Testing</h3>
<p>Changes should be tested by somebody other than the developer who wrote the code. This is especially important for large or high-risk changes. It is useful to add a test plan to the pull request description if testing the changes is not straightforward.</p>
<h2>Translations</h2>
<p>Changes to translations as well as new translations can be submitted to <a href="https://www.transifex.com/bitcoin/bitcoin/">Bitcoin Core's Transifex page</a>.</p>
<p>Translations are periodically pulled from Transifex and merged into the git repository. See the <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/doc/translation_process.md">translation process</a> for details on how this works.</p>
<p><strong>Important</strong>: We do not accept translation changes as GitHub pull requests because the next pull from Transifex would automatically overwrite them again.</p>
+
+
+ carla-simulator/carla
+ 2024-12-01T01:52:10Z
+ tag:github.com,2024-12-01:/carla-simulator/carla
+
+ <p>Open-source simulator for autonomous driving research.</p><hr><h1>CARLA Simulator</h1>
<p><a href="http://carla.readthedocs.io"><img src="https://readthedocs.org/projects/carla/badge/?version=latest" alt="Documentation"></a></p>
<p><a href="http://carla.org"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/btn/web.png" alt="carla.org"></a> <a href="https://github.com/carla-simulator/carla/raw/master/Docs/download.md"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/btn/download.png" alt="download"></a> <a href="http://carla.readthedocs.io"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/btn/docs.png" alt="documentation"></a> <a href="https://github.com/carla-simulator/carla/discussions"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/btn/forum.png" alt="forum"></a> <a href="https://discord.gg/8kqACuC"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/btn/chat.png" alt="discord"></a> <a href="https://gurubase.io/g/carla-simulator"><img src="https://img.shields.io/badge/Gurubase-Ask%20CARLA%20Simulator%20Guru-006BFF" alt="Gurubase"></a></p>
<p>CARLA is an open-source simulator for autonomous driving research. CARLA has been developed from the ground up to support development, training, and validation of autonomous driving systems. In addition to open-source code and protocols, CARLA provides open digital assets (urban layouts, buildings, vehicles) that were created for this purpose and can be used freely. The simulation platform supports flexible specification of sensor suites and environmental conditions.</p>
<p><a href="https://www.youtube.com/watch?v=q4V9GYjA1pE"><img src="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/img/0_9_15_thumbnail.webp" alt="CARLA Video"></a></p>
<blockquote>
<p>[!NOTE] This is the development branch <code>ue4-dev</code> for the <strong>Unreal Engine 4.26 version of CARLA</strong>. This branch exists in parallel with the Unreal Engine 5.3 version of CARLA, in the <code>ue5-dev</code> branch. Please be sure that this version of CARLA is suitable for your needs as there are significant differences between the UE 4.26 and UE 5.3 versions of CARLA.</p>
</blockquote>
<h3>Download CARLA</h3>
<p>Linux:</p>
<ul>
<li><a href="https://tiny.carla.org/carla-latest-linux"><strong>Get CARLA overnight build</strong></a></li>
<li><a href="https://tiny.carla.org/additional-maps-latest-linux"><strong>Get AdditionalMaps overnight build</strong></a></li>
</ul>
<p>Windows:</p>
<ul>
<li><a href="https://tiny.carla.org/carla-latest-windows"><strong>Get CARLA overnight build</strong></a></li>
<li><a href="https://tiny.carla.org/additional-maps-latest-windows"><strong>Get AdditionalMaps overnight build</strong></a></li>
</ul>
<blockquote>
<p>[!WARNING] The CARLA package downloads are now provided using the BackBlaze CDN. The Amazon Web Service download links have been discontinued. Please ensure you update any relevant information in repositories using the CARLA simulator package versions.</p>
</blockquote>
<h3>Recommended system</h3>
<ul>
<li>Intel i7 gen 9th - 11th / Intel i9 gen 9th - 11th / AMD ryzen 7 / AMD ryzen 9</li>
<li>+32 GB RAM memory</li>
<li>NVIDIA RTX 3070 / NVIDIA RTX 3080 / NVIDIA RTX 4090</li>
<li>Ubuntu 20.04</li>
</ul>
<h2>Documentation</h2>
<p>The <a href="https://carla.readthedocs.io/en/latest/">CARLA documentation</a> is hosted on ReadTheDocs. Please see the following key links:</p>
<ul>
<li><a href="https://carla.readthedocs.io/en/latest/build_linux/">Building on Linux</a></li>
<li><a href="https://carla.readthedocs.io/en/latest/build_windows/">Building on Windows</a></li>
<li><a href="https://carla.readthedocs.io/en/latest/tuto_first_steps/">First steps</a></li>
<li><a href="https://carla.readthedocs.io/en/latest/catalogue/">CARLA asset catalogue</a></li>
<li><a href="https://carla.readthedocs.io/en/latest/python_api/">Python API reference</a></li>
<li><a href="https://carla.readthedocs.io/en/latest/bp_library/">Blueprint library</a></li>
</ul>
<h2>CARLA Ecosystem</h2>
<p>Repositories associated with the CARLA simulation platform:</p>
<ul>
<li><a href="https://leaderboard.carla.org/"><strong>CARLA Autonomous Driving leaderboard</strong></a>: Automatic platform to validate Autonomous Driving stacks</li>
<li><a href="https://github.com/carla-simulator/scenario_runner"><strong>Scenario_Runner</strong></a>: Engine to execute traffic scenarios in CARLA 0.9.X</li>
<li><a href="https://github.com/carla-simulator/ros-bridge"><strong>ROS-bridge</strong></a>: Interface to connect CARLA 0.9.X to ROS</li>
<li><a href="https://github.com/carla-simulator/driving-benchmarks"><strong>Driving-benchmarks</strong></a>: Benchmark tools for Autonomous Driving tasks</li>
<li><a href="https://github.com/felipecode/coiltraine"><strong>Conditional Imitation-Learning</strong></a>: Training and testing Conditional Imitation Learning models in CARLA</li>
<li><a href="https://github.com/carla-simulator/carla-autoware"><strong>AutoWare AV stack</strong></a>: Bridge to connect AutoWare AV stack to CARLA</li>
<li><a href="https://github.com/carla-simulator/reinforcement-learning"><strong>Reinforcement-Learning</strong></a>: Code for running Conditional Reinforcement Learning models in CARLA</li>
<li><a href="https://www.mathworks.com/products/roadrunner.html"><strong>RoadRunner</strong></a>: MATLAB GUI based application to create road networks in the ASAM OpenDRIVE format</li>
<li><a href="https://github.com/carla-simulator/carla-map-editor"><strong>Map Editor</strong></a>: Standalone GUI application to enhance RoadRunner maps with traffic lights and traffic signs information</li>
</ul>
<p><strong>Like what you see? Star us on GitHub to support the project!</strong></p>
<h2>Paper</h2>
<p>If you use CARLA, please cite our CoRL’17 paper.</p>
<p><em>CARLA: An Open Urban Driving Simulator</em><br>Alexey Dosovitskiy, German Ros, Felipe Codevilla, Antonio Lopez, Vladlen Koltun; PMLR 78:1-16 [<a href="http://proceedings.mlr.press/v78/dosovitskiy17a/dosovitskiy17a.pdf">PDF</a>] [<a href="https://www.youtube.com/watch?v=xfyK03MEZ9Q&feature=youtu.be&t=2h44m30s">talk</a>]</p>
<pre><code>@inproceedings{Dosovitskiy17,
title = {{CARLA}: {An} Open Urban Driving Simulator},
author = {Alexey Dosovitskiy and German Ros and Felipe Codevilla and Antonio Lopez and Vladlen Koltun},
booktitle = {Proceedings of the 1st Annual Conference on Robot Learning},
pages = {1--16},
year = {2017}
}
</code></pre>
<h2>Building CARLA</h2>
<p>Clone this repository locally from GitHub:</p>
<pre><code class="language-sh">git clone https://github.com/carla-simulator/carla.git .
</code></pre>
<p>Also, clone the <a href="https://github.com/CarlaUnreal/UnrealEngine">CARLA fork of the Unreal Engine</a> into an appropriate location:</p>
<pre><code class="language-sh">git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git .
</code></pre>
<p>Once you have cloned the repositories, follow the instructions for <a href="https://carla.readthedocs.io/en/latest/build_linux/">building in Linux</a> or <a href="https://carla.readthedocs.io/en/latest/build_windows/">building in Windows</a>.</p>
<h2>Contributing</h2>
<p>Please take a look at our <a href="https://carla.readthedocs.io/en/latest/cont_contribution_guidelines/">Contribution guidelines</a>.</p>
<h2>F.A.Q.</h2>
<p>If you run into problems, check our <a href="https://carla.readthedocs.io/en/latest/build_faq/">FAQ</a>.</p>
<h2>Licenses</h2>
<h4>CARLA licenses</h4>
<p>CARLA specific code is distributed under MIT License.</p>
<p>CARLA specific assets are distributed under CC-BY License.</p>
<h4>CARLA Dependency and Integration licenses</h4>
<p>The ad-rss-lib library compiled and linked by the <a href="https://raw.githubusercontent.com/carla-simulator/carla/ue4-dev/Docs/adv_rss.md">RSS Integration build variant</a> introduces <a href="https://opensource.org/licenses/LGPL-2.1">LGPL-2.1-only License</a>.</p>
<p>Unreal Engine 4 follows its <a href="https://www.unrealengine.com/en-US/faq">own license terms</a>.</p>
<p>CARLA uses three dependencies as part of the SUMO integration:</p>
<ul>
<li><a href="https://proj.org/">PROJ</a>, a generic coordinate transformation software which uses the <a href="https://proj.org/about.html#license">X/MIT open source license</a>.</li>
<li><a href="https://www.sqlite.org">SQLite</a>, part of the PROJ dependencies, which is <a href="https://www.sqlite.org/purchase/license">in the public domain</a>.</li>
<li><a href="https://xerces.apache.org/xerces-c/">Xerces-C</a>, a validating XML parser, which is made available under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache Software License, Version 2.0</a>.</li>
</ul>
<p>CARLA uses one dependency as part of the Chrono integration:</p>
<ul>
<li><a href="https://eigen.tuxfamily.org/index.php?title=Main_Page">Eigen</a>, a C++ template library for linear algebra which uses the <a href="https://www.mozilla.org/en-US/MPL/2.0/">MPL2 license</a>.</li>
</ul>
<p>CARLA uses the Autodesk FBX SDK for converting FBX to OBJ in the import process of maps. This step is optional, and the SDK is located <a href="https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2020-0">here</a></p>
<p>This software contains Autodesk® FBX® code developed by Autodesk, Inc. Copyright 2020 Autodesk, Inc. All rights, reserved. Such code is provided "as is" and Autodesk, Inc. disclaims any and all warranties, whether express or implied, including without limitation the implied warranties of merchantability, fitness for a particular purpose or non-infringement of third party rights. In no event shall Autodesk, Inc. be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of such code."</p>
+
+
\ No newline at end of file
diff --git a/c++/weekly/index.xml b/c++/weekly/index.xml
new file mode 100644
index 00000000000..079d72af6c5
--- /dev/null
+++ b/c++/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub C++ Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:09Z
+ Weekly Trending of C++ in GitHub
+
+
+ Serial-Studio/Serial-Studio
+ 2024-12-01T01:41:09Z
+ tag:github.com,2024-12-01:/Serial-Studio/Serial-Studio
+
+ <p>Flexible data visualization software for embedded devices and projects</p><hr><h1>Serial Studio</h1>
<a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/#"> <img width="192px" height="192px" src="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/icon.svg?sanitize=true" align="right"> </a>
<p><a href="https://github.com/Serial-Studio/Serial-Studio/commits/master"><img src="https://img.shields.io/github/last-commit/Serial-Studio/Serial-Studio?style=for-the-badge&logo=github" alt="Github commits"></a> <a href="https://github.com/Serial-Studio/Serial-Studio/graphs/contributors"><img src="https://img.shields.io/github/contributors/Serial-Studio/Serial-Studio?style=for-the-badge&logo=github" alt="GitHub contributors"></a> <a href="https://github.com/Serial-Studio/Serial-Studio/pull/new"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen?style=for-the-badge" alt="PR's Welcome"></a> <a href="https://github.com/Serial-Studio/Serial-Studio/releases/"><img src="https://img.shields.io/github/downloads/Serial-Studio/Serial-Studio/total.svg?style=for-the-badge&logo=github" alt="Github All Releases"></a> <a href="https://instagram.com/serialstudio.app"><img src="https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge&logo=instagram&logoColor=white" alt="Instagram"></a> <a href="https://www.paypal.com/donate?hosted_button_id=XN68J47QJKYDE"><img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="Donate"></a></p>
<p>Serial Studio is a multi-platform, versatile data visualization tool designed for embedded engineers, students, hackers, and teachers. It allows users to visualize, analyze, and represent data from their projects and devices without needing custom, project-specific visualization software. Serial Studio offers a flexible solution that adapts to a wide range of use cases, making it ideal for both educational and professional environments.</p>
<p>The tool was born out of my experience in multiple CanSat-based competitions, where I often found myself developing new Ground Station Software for each project. Over time, I realized it would be more efficient and sustainable to maintain a single, flexible Ground Station Software that allows users to define how incoming data is processed and displayed.</p>
<p>Today, Serial Studio is a powerful and adaptable tool, suitable not only for CanSat competitions but for any data acquisition and visualization project. It supports data retrieval from a wide range of sources, including hardware and software serial ports, MQTT, Bluetooth Low Energy (BLE), and network sockets (TCP/UDP).</p>
<p><em>Read this document in other languages</em>: <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/README_ES.md">Español</a> <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/README_ZH.md">简体中文</a> <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/README_DE.md">Deutsch</a> <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/README_RU.md">Русский</a> <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/README_FR.md">Français</a></p>
<p><img src="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/doc/screenshot.png" alt="Software usage"></p>
<h2>Features</h2>
<ul>
<li><strong>Cross-platform:</strong> Compatible with Windows, macOS, and Linux.</li>
<li><strong>CSV Export:</strong> Easily saves received data in CSV files for further analysis or processing.</li>
<li><strong>Support for multiple data sources:</strong> Handles a wide variety of sources, including serial ports, MQTT, Bluetooth Low Energy (BLE), and network sockets (TCP/UDP).</li>
<li><strong>Customizable visualization:</strong> Allows users to define and display data using various widgets, configurable via the project editor to meet specific needs.</li>
<li><strong>Customizable frame analysis:</strong> Provides the option to modify a JavaScript function to interpret incoming data frames, enabling the preprocessing of raw sensor data and handling of complex binary formats.</li>
<li><strong>MQTT publishing and receiving:</strong> Sends and receives data over the internet, enabling real-time data visualization from anywhere in the world.</li>
</ul>
<p>Visit the <strong><a href="https://github.com/Serial-Studio/Serial-Studio/wiki">Wiki</a></strong> for comprehensive guides, including:</p>
<ul>
<li><strong>Installation Instructions:</strong> Set up Serial Studio on Windows, macOS, or Linux.</li>
<li><strong>Quick Start Guide:</strong> Learn how to connect your device and visualize data in minutes.</li>
<li><strong>Advanced Topics:</strong> Explore data flow, frame parsing, and building custom dashboards.</li>
<li><strong>Examples:</strong> Examples with code, projects, and explanations to help you learn Serial Studio.</li>
</ul>
<h2>Development</h2>
<h3>Requirements</h3>
<p>To compile Serial Studio, the only required dependency is <a href="http://www.qt.io/download-open-source/">Qt</a>, preferrably with all plugins & modules installed. The desktop application compiles with <strong>Qt 6.8.0</strong>.</p>
<p>If you're compiling on GNU/Linux, you’ll also need to install <code>libgl1-mesa-dev</code>:</p>
<pre><code class="language-bash">sudo apt install libgl1-mesa-dev
</code></pre>
<p>Once Qt is installed, you can compile the project by opening the <strong>CMakeLists.txt</strong> file in your preferred IDE or by using the command line:</p>
<pre><code class="language-bash">mkdir build
cd build
cmake ../ -DPRODUCTION_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . -j 16
</code></pre>
<h2>Support & Tipping</h2>
<p>Open source software thrives on collaboration, creativity, and the generosity of its users. By supporting Serial Studio, you are directly contributing to its growth, sustainability, and ability to impact countless developers, makers, educators and innovators around the world.</p>
<p>If this project has helped you or inspired you, consider supporting it with a donation. Even small contributions make a big difference. Your generosity will keep this tool evolving and help more people to unlock their potential with open source software.</p>
<p>👉 <a href="https://www.paypal.com/donate?hosted_button_id=XN68J47QJKYDE">Donate/Tip Here</a></p>
<h2>License</h2>
<p>This project is licensed under the MIT License. For more details, see the <a href="https://raw.githubusercontent.com/Serial-Studio/Serial-Studio/master/LICENSE.md">LICENSE</a> file.</p>
+
+
+ OpenXRay/xray-16
+ 2024-12-01T01:41:09Z
+ tag:github.com,2024-12-01:/OpenXRay/xray-16
+
+ <p>Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. Join OpenXRay! ;)</p><hr><div align="center">
<p> <a href="https://github.com/OpenXRay"> <img src="https://raw.githubusercontent.com/OpenXRay/xray-16/dev/misc/media/OpenXRayCover.png" alt="Open for everyone"> </a> </p>
</div>
<h1 align="center"> OpenXRay </h1>
<p><strong>OpenXRay</strong> is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.</p>
<h2>Goals</h2>
<ol>
<li>Make it a drop-in replacement for original engine.
<ol>
<li>Aim at 99% compatibility and same behaviour, where possible.</li>
<li>Compile engine into a single executable file that you can just drop into <code>bin</code> folder. (see <a href="https://github.com/OpenXRay/xray-16/issues/210">#210</a>)</li>
</ol> </li>
<li>Support all three games in the series: SOC/CS/COP. (see <a href="https://raw.githubusercontent.com/OpenXRay/xray-16/dev/#supported-games">Supported games</a> below)</li>
<li>Fix original S.T.A.L.K.E.R. series bugs.</li>
<li>Introduce a solid platform for modmakers:
<ol>
<li>Add frame/render graph for those who want to add new graphics features.</li>
<li>Improve performance via refactoring the code, parallelizing the engine, making it multithreaded.</li>
<li>Add new scripting, development and debugging features.</li>
<li>New game SDK with new features.</li>
</ol> </li>
<li>Clean up engine code, make it easily portable to new platforms, minimize platform-specific code.</li>
<li>Enhance player's experience with new graphics, gameplay and other features that can be enabled optionally. (by default, we stay close to vanilla)</li>
</ol>
<h2>Main differences from original X-Ray are:</h2>
<ul>
<li>Support for 64-bit.</li>
<li>Support for ARM, ARM64, E2K (Elbrus 2000), PPC64LE.</li>
<li>Works on Linux, macOS, OSL (Elbrus OS).</li>
<li>New OpenGL renderer. (currently, requires OpenGL 4.1 minimum, lowering to at least OpenGL 3.3 is planned)</li>
<li>Improved performance, better FPS.</li>
<li>Original bugs fixes.</li>
<li>New features for modmakers.</li>
<li>Gamepad support. (not yet finished, but you can try already, see <a href="https://github.com/OpenXRay/xray-16/issues/943">#943</a>)</li>
<li>New game SDK being currently developed. (see <a href="https://github.com/OpenXRay/xray-16/wiki/%5BEN%5D-Game-Editor">Game Editor</a>)</li>
</ul>
<p>You can see the detailed differences table <a href="https://github.com/OpenXRay/xray-16/wiki/%5BEN%5D-Differences-from-original-X%E2%80%90Ray">here</a></p>
<h2>Supported games</h2>
<p>OpenXRay is based on X-Ray 1.6.02, used in S.T.A.L.K.E.R.: Call of Pripyat, so initially it supported only this game. <br> Currently, we are working on support for all three games in the series.</p>
<table>
<thead>
<tr>
<th>Call of Pripyat</th>
<th>Clear Sky</th>
<th>Shadow of Chernobyl</th>
</tr>
</thead>
<tbody>
<tr>
<td>Yes</td>
<td>Release candidate (see <a href="https://github.com/OpenXRay/xray-16/issues/382">#382</a>).<br>Minor bugs possible, but game is stable finishable.</td>
<td><strong>Not supported</strong> yet (see <a href="https://github.com/OpenXRay/xray-16/issues/392">#392</a>)</td>
</tr>
</tbody>
</table>
<h2>Documentation:</h2>
<p>Make sure to visit our <a href="https://github.com/OpenXRay/xray-16/wiki">wiki</a>.</p>
<table>
<thead>
<tr>
<th>How to</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Build and setup</td>
<td><a href="https://github.com/OpenXRay/xray-16/wiki/%5BEN%5D-How-to-build-and-setup-on-Windows">On Windows</a></td>
<td><a href="https://github.com/OpenXRay/xray-16/wiki/%5BEN%5D-How-to-build-and-setup-on-Linux">On Linux</a></td>
</tr>
<tr>
<td>Install and play</td>
<td><a href="https://github.com/OpenXRay/xray-16/wiki/%5BEN%5D-How-to-install-and-play">On Windows</a></td>
<td>-</td>
</tr>
</tbody>
</table>
<h2>Contributing</h2>
<p>All contributions are more than welcomed. There are several ways how you can contribute:</p>
<h3>Community</h3>
<p><a href="https://discord.gg/sjRMQwv"><img src="https://img.shields.io/discord/410170555619082240?label=Discord" alt="Discord"></a></p>
<p>Play and enjoy the game, <a href="https://github.com/OpenXRay/xray-16/issues/new/choose">file an Issue</a> when you encounter any bugs, or you have an enhancement request.</p>
<p>Join us on our <a href="https://discord.gg/sjRMQwv">Discord</a>, subscribe to our <a href="https://www.youtube.com/OpenXRay">YouTube channel</a>, join our <a href="https://vk.com/openxray">VK group</a>, leave a comment, put a like and communicate there! <br> Also you can put a star on this repository :)</p>
<h3>Development</h3>
<p><a href="https://github.com/OpenXRay/xray-16/actions/workflows/cibuild.yml"><img src="https://github.com/OpenXRay/xray-16/actions/workflows/cibuild.yml/badge.svg?sanitize=true" alt="GitHub Actions Build Status"></a> <a href="https://github.com/OpenXRay/xray-16/graphs/contributors"><img src="https://img.shields.io/github/contributors/OpenXRay/xray-16.svg?label=Contributors" alt="Contributors"></a></p>
<p>Join our efforts in making our beloved game better, send pull requests, participate in discussions and code reviews!</p>
<p>It is a place to share ideas on what to implement, gather people that want to work on the engine, and work on the source code. However, the following things should be taken into consideration:</p>
<ul>
<li>We want to keep the game close to the vanilla, so if you want to introduce new gameplay features, make sure it is optional, and doesn't break compatibility with original game resources (i.e. everything in <code>gamedata</code> folder and <code>.db*</code>/<code>.xdb</code> archives). You also may want to add non-gameplay features, fix bugs, or improve engine performance and code quality.</li>
<li>Major changes should be discussed before implementation.</li>
</ul>
<p>Take a look at our <a href="https://github.com/openxray/xray-16/issues">Issues</a> page:</p>
<ul>
<li>See issues labeled as <a href="https://github.com/OpenXRay/xray-16/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Good+first+issue%22">good first issue</a> to get familiar with the engine code in practice.</li>
<li>You may also want to look at issues labeled as <a href="https://github.com/OpenXRay/xray-16/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22Help+wanted%22">help wanted</a>. Some of them are difficult ones, though.</li>
</ul>
<p>The <code>dev</code> branch is the default and base branch for the project. It is used for development, and all pull requests should go there. But be aware that this branch sometimes may be broken, and we can only rarely do force pushes to this branch.</p>
<p>Be advised that this is a community project not sanctioned by GSC Game World in any way – and they remain the copyright holders of all the original source code and S.T.A.L.K.E.R. franchise. However, they know about many community projects, including this, and support the S.T.A.L.K.E.R. community efforts to make the game better.</p>
<h3>Funding</h3>
<p><a href="https://opencollective.com/openxray"><img src="https://opencollective.com/openxray/tiers/badge.svg?label=Financial%20contributors" alt="Financial Contributors"></a> <a href="https://github.com/sponsors/OpenXRay"><img src="https://img.shields.io/github/sponsors/openxray?color=brightgreen&label=Sponsors" alt="Sponsors"></a> <a href="https://patreon.com/openxray"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F5950725&query=data.attributes.patron_count&suffix=%20Patrons&color=success&label=Patreon&style=flat" alt="Patreon"></a></p>
<p>You may provide financial support for this project by donating via different ways:</p>
<ul>
<li><a href="https://boosty.to/openxray">Boosty</a> – a large part of the team is located in Russia, if you have an ability to donate through Boosty, please use it, since we don't have an ability to withdraw funds from services like Patreon, etc. to our local Russian banking cards/accounts.</li>
<li><a href="https://github.com/sponsors/OpenXRay">GitHub Sponsors</a>, <a href="https://patreon.com/openxray">Patreon</a>, <a href="https://opencollective.com/openxray">Open Collective</a> – funds raised from these services will be used to support our developers outside of Russia, and also we may use them to pay for paid services on GitHub, AppVeyor, etc.</li>
<li>BTC: 363ZUoWcQe9fDvRPK9Kee2YuPdyhSFQpr2</li>
<li>ETH: 0x45a4fe8566e76946591e1eeabf190aa09b1cdb66</li>
<li>TRX: TGx7QAhTPsRcwnb4mwCtNDU7NF6kuoACpt</li>
<li>Please, contact @xottab_duty in <a href="https://raw.githubusercontent.com/OpenXRay/xray-16/dev/discord.gg/sjRMQwv">our Discord</a> if you would like to use another cryptocurrency.</li>
</ul>
<p>Thank you for your support!</p>
<h2>Thanks</h2>
<ul>
<li><a href="https://gsc-game.com/">GSC Game World</a> – for creating S.T.A.L.K.E.R. and supporting the community;</li>
<li>Loxotron – for making the engine sources available;</li>
<li><a href="https://github.com/OpenXRay/xray-16/graphs/contributors">All the OpenXRay contributors</a> – for making the project better.
<ul>
<li>The first OpenXRay team (2014-2017) – for being at the origins of the project.
<ul>
<li><a href="https://github.com/nitrocaster">nitrocaster</a> – original project founder.</li>
<li><a href="https://github.com/Kaffeine">Kaffeine</a> – initial work on the Linux port, refactoring, polishing.</li>
<li><a href="https://github.com/CrossVR">Armada651</a> – creation of the OpenGL renderer, work on the build system, other project maintenance work.</li>
<li><a href="https://github.com/andrew-boyarshin">andrew-boyarshin</a> – work on the build system.</li>
<li>Swartz27 – work on renderer features.</li>
<li><a href="https://github.com/awdavies">awdavies</a> – project maintenance work.</li>
</ul> </li>
<li>The second OpenXRay team (2017-now) – for continuing work on the project.
<ul>
<li><a href="https://github.com/Xottab-DUTY">Xottab_DUTY</a> – current project leader.</li>
<li><a href="https://github.com/intorr">intorr</a> – work on the project quality. (memory leaks, refactoring, optimizations)</li>
<li><a href="https://github.com/eagleivg">eagleivg</a> – main part of the work on Linux port.</li>
<li><a href="https://github.com/q4a">q4a</a> – main part of the work on Linux port.</li>
<li><a href="https://github.com/SkyLoaderr">SkyLoader</a> – OpenGL renderer improvements and polishing, other project work.</li>
<li><a href="https://github.com/qweasdd136963">qweasdd136963</a> – supporting the <a href="https://github.com/qweasdd136963/OXR_CoC">OXR_COC</a> project (Call of Chernobyl port to latest OpenXRay), other project work on new features, refactoring and bug fixing.</li>
<li>JohnDoe_71Rus – our regular tester.</li>
<li><a href="https://github.com/007exe">Chip_exe</a> – work on Linux port, maintaining AUR package, our regular tester.</li>
<li><a href="https://github.com/a1batross">a1batross</a> – work on Linux port.</li>
<li><a href="https://github.com/FreeZoneMods">The Sin!</a> – new features, refactoring, bug fixing polishing.</li>
<li><a href="https://github.com/Zegeri">Zegeri</a> – work on Linux port, code quality, fixes, polishing.</li>
<li><a href="https://github.com/drug007">drug007</a> – work on Linux port.</li>
<li><a href="https://github.com/vTurbine">vTurbine</a> – work on renderer unification, refactoring, polishing.</li>
<li><a href="https://github.com/Zigatun">Zigatun</a> – work on ARM port.</li>
<li><a href="https://github.com/Masterkatze">Masterkatze</a> – work on the build system, bug fixing.</li>
<li><a href="https://github.com/ChugunovRoman">Chugunov Roman</a> – work on <a href="https://github.com/ChugunovRoman/xray-16">porting Call of Chernobyl to latest OpenXRay</a>, extending functionality for modmakers.</li>
<li><a href="https://github.com/yohjimane">yohjimane</a> – work on original game bugs fixes and new features.</li>
</ul> </li>
<li>Other contributors:
<ul>
<li><a href="https://github.com/alexgdi">alexgdi</a> – work on organizing project infrastructure, external dependencies.</li>
<li><a href="https://github.com/NeoAnomaly">NeoAnomaly</a> – help with debug functionality on Windows.</li>
<li><a href="https://github.com/RainbowZerg">RainbowZerg</a> – work on the renderer features, bug fixing.</li>
<li><a href="https://github.com/FozeSt">FozeSt</a> – help with some fixes and features.</li>
<li><a href="https://github.com/mrnotbadguy">mrnotbadguy</a> – work on gamepads support and bug fixing.</li>
<li><a href="https://github.com/devnexen">devnexen</a> – work on FreeBSD support and portability.</li>
<li><a href="https://github.com/ZeeWanderer">ZeeWanderer</a> – work on the build system.</li>
<li><a href="https://github.com/GeorgeIvlev">GeorgeIvlev</a> – work on the build system, bug fixing.</li>
<li><a href="https://github.com/TmLev">TmLev</a> – work on code quality and Docker support.</li>
<li><a href="https://github.com/Plotja">Plotja</a> – work on new gameplay features, bug fixes, portability, polishing.</li>
<li><a href="https://github.com/dimhotepus">dimhotepus</a> – work on code quality.</li>
<li><a href="https://github.com/HeapRaid">HeapRaid</a> – work on renderer cleanup, code quality, portability.</li>
<li><a href="https://github.com/Vertver">Vertver</a> – work on macOS support.</li>
<li><a href="https://github.com/Lnd-stoL">Lnd-stoL</a> – work on macOS support.</li>
<li><a href="https://github.com/GermanAizek">GermanAizek</a> – work on code quality, finding and fixing vanilla bugs.</li>
<li><a href="https://github.com/dasehak">dasehak</a> – work on FreeBSD support, finding and fixing vanilla bugs.</li>
</ul> </li>
</ul> </li>
<li>Particular projects:
<ul>
<li><a href="https://github.com/xrOxygen">Oxygen</a> – for being our friends and giving tips and help with new features, optimizations, bug fixes, etc.</li>
<li><a href="https://github.com/ShokerStlk/xray-16-SWM">Shoker Weapon Mod</a> and <a href="https://github.com/ShokerStlk">Shoker</a> – for contributing new features, bug fixing.</li>
<li><a href="https://github.com/Im-dex/xray-162">Im-Dex</a> – for the work on the engine.</li>
<li><a href="https://github.com/OGSR/OGSR-Engine">OGSR</a> – for amazing work on Shadow of Chernobyl.</li>
<li><a href="https://github.com/revolucas/CoC-Xray">Call of Chernobyl</a> and its contributors – for useful new features, bug fixes and optimizations.</li>
<li>Lost Alpha – for their effort on restoring the old game concept.</li>
<li>Lost Alpha DC – for continuing work on Lost Alpha.</li>
</ul> </li>
<li>Individuals:
<ul>
<li><a href="https://github.com/tamlin-mike">tamlin-mike</a> – for work on the build system.</li>
<li><a href="https://github.com/0xBADEAFFE">Vincent</a> – for work on the Linux port.</li>
<li><a href="https://github.com/abramcumner">abramcumner</a> – for useful fixes and additions.</li>
<li><a href="https://github.com/morrey">Morrey</a> – for work on Clear Sky support and his Return to Clear Sky mod.</li>
</ul> </li>
<li>Companies:
<ul>
<li><a href="https://www.cppdepend.com">CoderGears</a> – thanks for providing a <a href="https://www.cppdepend.com/cppdependfoross">free Pro Licence for CppDepend</a>, an amazing and powerful tool for C and C++. <br> <a href="https://www.cppdepend.com"><img src="https://www.cppdepend.com/images/cppdependlogo.png" alt="CppDepend logo"></a></li>
<li><a href="https://pvs-studio.com/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source">PVS-Studio LLC</a> – thanks for proving us a <a href="https://pvs-studio.ru/ru/order/open-source-license/?utm_source=website&utm_medium=github&utm_campaign=open_source">free licence</a> for PVS-Studio, a static analyzer for C, C++, C#, and Java code.</li>
</ul> </li>
</ul>
<p>If your work is being used in our project and you are not mentioned here or in the <a href="https://github.com/OpenXRay/xray-16/graphs/contributors">contributors page</a>, please, write to us and we will add you. Or send us a pull request with you added to this list ;)</p>
+
+
+ alibaba/MNN
+ 2024-12-01T01:41:09Z
+ tag:github.com,2024-12-01:/alibaba/MNN
+
+ <p>MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba</p><hr><p><img src="https://raw.githubusercontent.com/alibaba/MNN/master/doc/banner.png" alt="MNN"></p>
<p><a href="https://raw.githubusercontent.com/alibaba/MNN/master/README_CN.md">中文版本</a></p>
<p><a href="http://www.mnn.zone">MNN Homepage</a></p>
<h2>Intro</h2>
<p>MNN is a highly efficient and lightweight deep learning framework. It supports inference and training of deep learning models and has industry-leading performance for inference and training on-device. At present, MNN has been integrated into more than 30 apps of Alibaba Inc, such as Taobao, Tmall, Youku, DingTalk, Xianyu, etc., covering more than 70 usage scenarios such as live broadcast, short video capture, search recommendation, product searching by image, interactive marketing, equity distribution, security risk control. In addition, MNN is also used on embedded devices, such as IoT.</p>
<p><a href="https://github.com/alibaba/MNN/tree/master/transformers/llm">MNN-LLM</a> is a large language model runtime solution developed based on the MNN engine. The mission of this project is to deploy LLM models locally on everyone's platforms(Mobile Phone/PC/IOT). It supports popular large language models such as Qianwen, Baichuan, Zhipu, LLAMA, and others. <a href="https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html">MNN-LLM User guide</a></p>
<p><a href="https://github.com/alibaba/MNN/tree/master/transformers/diffusion">MNN-Diffusion</a> is a stable diffusion model runtime solution developed based on the MNN engine. The mission of this project is to deploy stable diffusion models locally on everyone's platforms. <a href="https://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html">MNN-Diffusion User guide</a></p>
<p><img src="https://raw.githubusercontent.com/alibaba/MNN/master/doc/architecture.png" alt="architecture"></p>
<p>Inside Alibaba, <a href="https://mp.weixin.qq.com/s/5I1ISpx8lQqvCS8tGd6EJw">MNN</a> works as the basic module of the compute container in the <a href="https://mp.weixin.qq.com/s/qpeCETty0BqqNJV9CMJafA">Walle</a> System, the first end-to-end, general-purpose, and large-scale production system for device-cloud collaborative machine learning, which has been published in the top system conference OSDI’22. The key design principles of MNN and the extensive benchmark testing results (vs. TensorFlow, TensorFlow Lite, PyTorch, PyTorch Mobile, TVM) can be found in the OSDI paper. The scripts and instructions for benchmark testing are put in the path “/benchmark”. If MNN or the design of Walle helps your research or production use, please cite our OSDI paper as follows:</p>
<pre><code>@inproceedings {proc:osdi22:walle,
author = {Chengfei Lv and Chaoyue Niu and Renjie Gu and Xiaotang Jiang and Zhaode Wang and Bin Liu and Ziqi Wu and Qiulin Yao and Congyu Huang and Panos Huang and Tao Huang and Hui Shu and Jinde Song and Bin Zou and Peng Lan and Guohuan Xu and Fei Wu and Shaojie Tang and Fan Wu and Guihai Chen},
title = {Walle: An {End-to-End}, {General-Purpose}, and {Large-Scale} Production System for {Device-Cloud} Collaborative Machine Learning},
booktitle = {16th USENIX Symposium on Operating Systems Design and Implementation (OSDI 22)},
year = {2022},
isbn = {978-1-939133-28-1},
address = {Carlsbad, CA},
pages = {249--265},
url = {https://www.usenix.org/conference/osdi22/presentation/lv},
publisher = {USENIX Association},
month = jul,
}
</code></pre>
<h2>Documentation and Workbench</h2>
<p>MNN's docs are in place in <a href="https://mnn-docs.readthedocs.io/en/latest">Read the docs</a>.</p>
<p>You can also read docs/README to build docs's html.</p>
<p>MNN Workbench could be downloaded from <a href="http://www.mnn.zone">MNN's homepage</a>, which provides pretrained models, visualized training tools, and one-click deployment of models to devices.</p>
<h2>Key Features</h2>
<h3>Lightweight</h3>
<ul>
<li>Optimized for devices, no dependencies, can be easily deployed to mobile devices and a variety of embedded devices.</li>
<li>iOS platform: static library size will full option for armv7+arm64 platforms is about 12MB, size increase of linked executables is about 2M.</li>
<li>Android platform: core so size is about 800KB (armv7a - c++_shared).</li>
<li>Using MNN_BUILD_MINI can reduce package size by about 25%, with a limit of fixed model input size</li>
<li>Support FP16 / Int8 quantize, can reduce model size 50%-70%</li>
</ul>
<h3>Versatility</h3>
<ul>
<li>Supports <code>Tensorflow</code>, <code>Caffe</code>, <code>ONNX</code>,<code>Torchscripts</code> and supports common neural networks such as <code>CNN</code>, <code>RNN</code>, <code>GAN</code>, <code>Transformer</code>.</li>
<li>Supports AI model with multi-inputs or multi-outputs, every kind of dimension format, dynamic inputs, controlflow.</li>
<li>MNN supports approximate full OPs used for the AI Model. The converter supports 178 <code>Tensorflow</code> OPs, 52 <code>Caffe</code> OPs, 163 <code>Torchscripts</code> OPs, 158 <code>ONNX</code> OPs.</li>
<li>Supports iOS 8.0+, Android 4.3+, and embedded devices with POSIX interface.</li>
<li>Supports hybrid computing on multiple devices. Currently supports CPU and GPU.</li>
</ul>
<h3>High performance</h3>
<ul>
<li>Implements core computing with lots of optimized assembly code to make full use of the ARM / x64 CPU.</li>
<li>Use Metal / OpenCL / Vulkan to support GPU inference on mobile.</li>
<li>Use CUDA and tensorcore to support NVIDIA GPU for better performance</li>
<li>Convolution and transposition convolution algorithms are efficient and stable. The Winograd convolution algorithm is widely used to better symmetric convolutions such as 3x3,4x4,5x5,6x6,7x7.</li>
<li>Twice speed increase for the new architecture ARM v8.2 with FP16 half-precision calculation support. 2.5 faster to use sdot for ARM v8.2 and VNNI.</li>
</ul>
<h3>Ease of use</h3>
<ul>
<li>Support use MNN's OP to do numerical calculating like numpy.</li>
<li>Support lightweight image process module like OpenCV, which is only 100k.</li>
<li>Support build model and train it on PC / mobile.</li>
<li>MNN Python API helps ML engineers to easily use MNN to infer, train, and process images, without dipping their toes in C++ code.</li>
</ul>
<p>The Architecture / Precision MNN supported is shown below:</p>
<ul>
<li>S :Support and work well, deeply optimized, recommend to use</li>
<li>A :Support and work well, can use</li>
<li>B :Support but has bug or not optimized, no recommend to use</li>
<li>C :Not Support</li>
</ul>
<table>
<thead>
<tr>
<th>Architecture / Precision</th>
<th></th>
<th>Normal</th>
<th>FP16</th>
<th>BF16</th>
<th>Int8</th>
</tr>
</thead>
<tbody>
<tr>
<td>CPU</td>
<td>Native</td>
<td>B</td>
<td>C</td>
<td>B</td>
<td>B</td>
</tr>
<tr>
<td></td>
<td>x86/x64-SSE4.1</td>
<td>A</td>
<td>B</td>
<td>B</td>
<td>A</td>
</tr>
<tr>
<td></td>
<td>x86/x64-AVX2</td>
<td>S</td>
<td>B</td>
<td>B</td>
<td>A</td>
</tr>
<tr>
<td></td>
<td>x86/x64-AVX512</td>
<td>S</td>
<td>B</td>
<td>B</td>
<td>S</td>
</tr>
<tr>
<td></td>
<td>ARMv7a</td>
<td>S</td>
<td>S (ARMv8.2)</td>
<td>S</td>
<td>S</td>
</tr>
<tr>
<td></td>
<td>ARMv8</td>
<td>S</td>
<td>S (ARMv8.2)</td>
<td>S(ARMv8.6)</td>
<td>S</td>
</tr>
<tr>
<td>GPU</td>
<td>OpenCL</td>
<td>A</td>
<td>S</td>
<td>C</td>
<td>C</td>
</tr>
<tr>
<td></td>
<td>Vulkan</td>
<td>A</td>
<td>A</td>
<td>C</td>
<td>C</td>
</tr>
<tr>
<td></td>
<td>Metal</td>
<td>A</td>
<td>S</td>
<td>C</td>
<td>C</td>
</tr>
<tr>
<td></td>
<td>CUDA</td>
<td>A</td>
<td>S</td>
<td>C</td>
<td>C</td>
</tr>
<tr>
<td>NPU</td>
<td>CoreML</td>
<td>B</td>
<td>B</td>
<td>C</td>
<td>C</td>
</tr>
<tr>
<td></td>
<td>HIAI</td>
<td>B</td>
<td>C</td>
<td>C</td>
<td>B</td>
</tr>
<tr>
<td></td>
<td>NNAPI</td>
<td>B</td>
<td>B</td>
<td>C</td>
<td>C</td>
</tr>
</tbody>
</table>
<h2>Tools</h2>
<p>Base on MNN (Tensor compute engine), we provided a series of tools for inference, train and general computation.</p>
<ul>
<li>MNN-Converter: Convert other models to MNN models for inference, such as Tensorflow(lite), Caffe, ONNX, Torchscripts. And do graph optimization to reduce computation.</li>
<li>MNN-Compress: Compress model to reduce size and increase performance / speed</li>
<li>MNN-Express: Support model with controlflow, use MNN's OP to do general-purpose computing.</li>
<li>MNN-CV: An OpenCV-like library, but based on MNN and then much more lightweight.</li>
<li>MNN-Train: Support train MNN model.</li>
</ul>
<h2>How to Discuss and Get Help From the MNN Community</h2>
<p>The group discussions are predominantly Chinese. But we welcome and will help English speakers.</p>
<p>Dingtalk discussion groups:</p>
<p>Group #1 (Full): 23329087</p>
<p>Group #2 (Full): 23350225</p>
<p>Group #3: QR code:</p>
<p><img src="https://raw.githubusercontent.com/alibaba/MNN/master/doc/dingdingmnn3.png" alt="MNN-3"></p>
<h2>Historical Paper</h2>
<p>The preliminary version of MNN, as mobile inference engine and with the focus on manual optimization, has also been published in MLSys 2020. Please cite the paper, if MNN previously helped your research:</p>
<pre><code>@inproceedings{alibaba2020mnn,
author = {Jiang, Xiaotang and Wang, Huan and Chen, Yiliu and Wu, Ziqi and Wang, Lichuan and Zou, Bin and Yang, Yafeng and Cui, Zongyang and Cai, Yu and Yu, Tianhang and Lv, Chengfei and Wu, Zhihua},
title = {MNN: A Universal and Efficient Inference Engine},
booktitle = {MLSys},
year = {2020}
}
</code></pre>
<h2>License</h2>
<p>Apache 2.0</p>
<h2>Acknowledgement</h2>
<p>MNN participants: Taobao Technology Department, Search Engineering Team, DAMO Team, Youku and other Alibaba Group employees.</p>
<p>MNN refers to the following projects:</p>
<ul>
<li><a href="https://github.com/BVLC/caffe">Caffe</a></li>
<li><a href="https://github.com/google/flatbuffers">flatbuffer</a></li>
<li><a href="https://github.com/google/gemmlowp">gemmlowp</a></li>
<li><a href="http://www.github.com/googlesamples/android-vulkan-tutorials">Google Vulkan demo</a></li>
<li><a href="https://github.com/halide/Halide">Halide</a></li>
<li><a href="https://github.com/XiaoMi/mace">Mace</a></li>
<li><a href="https://github.com/onnx/onnx">ONNX</a></li>
<li><a href="https://github.com/protocolbuffers/protobuf">protobuffer</a></li>
<li><a href="https://github.com/google/skia">skia</a></li>
<li><a href="https://github.com/tensorflow/tensorflow">Tensorflow</a></li>
<li><a href="https://github.com/Tencent/ncnn">ncnn</a></li>
<li><a href="https://github.com/PaddlePaddle/paddle-mobile">paddle-mobile</a></li>
<li><a href="https://github.com/nothings/stb">stb</a></li>
<li><a href="https://github.com/Tencent/rapidjson">rapidjson</a></li>
<li><a href="https://github.com/pybind/pybind11">pybind11</a></li>
<li><a href="https://github.com/pytorch/pytorch">pytorch</a></li>
<li><a href="https://github.com/huawei-noah/bolt">bolt</a></li>
<li><a href="https://chromium.googlesource.com/libyuv/libyuv">libyuv</a></li>
<li><a href="https://github.com/libjpeg-turbo/libjpeg-turbo">libjpeg</a></li>
<li><a href="https://github.com/opencv/opencv">opencv</a></li>
</ul>
+
+
\ No newline at end of file
diff --git a/c-objdump/daily/index.xml b/c-objdump/daily/index.xml
index 0dc1f03eab2..01a11cb66d3 100644
--- a/c-objdump/daily/index.xml
+++ b/c-objdump/daily/index.xml
@@ -1,7 +1,7 @@
GitHub C-ObjDump Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:36Z
+ 2024-12-01T01:30:22Z
Daily Trending of C-ObjDump in GitHub
\ No newline at end of file
diff --git a/c-objdump/monthly/index.xml b/c-objdump/monthly/index.xml
new file mode 100644
index 00000000000..c433a498562
--- /dev/null
+++ b/c-objdump/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub C-ObjDump Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:04Z
+ Monthly Trending of C-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/c-objdump/weekly/index.xml b/c-objdump/weekly/index.xml
new file mode 100644
index 00000000000..513fae523b4
--- /dev/null
+++ b/c-objdump/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub C-ObjDump Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:07Z
+ Weekly Trending of C-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/c/daily/index.xml b/c/daily/index.xml
index 29553c8440f..e10cf73b088 100644
--- a/c/daily/index.xml
+++ b/c/daily/index.xml
@@ -1,7 +1,14 @@
GitHub C Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:31Z
+ 2024-12-01T01:30:13Z
Daily Trending of C in GitHub
+
+ ashvardanian/SimSIMD
+ 2024-12-01T01:30:13Z
+ tag:github.com,2024-12-01:/ashvardanian/SimSIMD
+
+ <p>Up to 200x Faster Dot Products & Similarity Metrics — for Python, Rust, C, JS, and Swift, supporting f64, f32, f16 real & complex, i8, and bit vectors using SIMD for both AVX2, AVX-512, NEON, SVE, & SVE2 📐</p><hr><p><img src="https://github.com/ashvardanian/ashvardanian/raw/master/repositories/SimSIMD.jpg?raw=true" alt="SimSIMD banner"></p>
<p>Computing dot-products, similarity measures, and distances between low- and high-dimensional vectors is ubiquitous in Machine Learning, Scientific Computing, Geo-Spatial Analysis, and Information Retrieval. These algorithms generally have linear complexity in time, constant or linear complexity in space, and are data-parallel. In other words, it is easily parallelizable and vectorizable and often available in packages like BLAS (level 1) and LAPACK, as well as higher-level <code>numpy</code> and <code>scipy</code> Python libraries. Ironically, even with decades of evolution in compilers and numerical computing, <a href="https://ashvardanian.com/posts/simsimd-faster-scipy">most libraries can be 3-200x slower than hardware potential</a> even on the most popular hardware, like 64-bit x86 and Arm CPUs. Moreover, most lack mixed-precision support, which is crucial for modern AI! The rare few that support minimal mixed precision, run only on one platform, and are vendor-locked, by companies like Intel and Nvidia. SimSIMD provides an alternative. 1️⃣ SimSIMD functions are practically as fast as <code>memcpy</code>. 2️⃣ Unlike BLAS, most kernels are designed for mixed-precision and bit-level operations. 3️⃣ SimSIMD often <a href="https://pypi.org/project/simsimd/#files">ships more binaries than NumPy</a> and has more backends than most BLAS implementations, and more high-level interfaces than most libraries.</p>
<div>
<a href="https://pepy.tech/project/simsimd"> <img alt="PyPI" src="https://static.pepy.tech/personalized-badge/simsimd?period=total&units=abbreviation&left_color=black&right_color=blue&left_text=SimSIMD%20Python%20installs"> </a>
<a href="https://www.npmjs.com/package/simsimd"> <img alt="npm" src="https://img.shields.io/npm/dy/simsimd?label=JavaScript%20NPM%20installs"> </a>
<a href="https://crates.io/crates/simsimd"> <img alt="rust" src="https://img.shields.io/crates/d/simsimd?label=Rust%20Crate%20installs"> </a>
<img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/ashvardanian/simsimd">
<a href="https://github.com/ashvardanian/SimSIMD/actions/workflows/release.yml"> <img alt="GitHub Actions Ubuntu" src="https://img.shields.io/github/actions/workflow/status/ashvardanian/SimSIMD/release.yml?branch=main&label=Ubuntu&logo=github&color=blue"> </a>
<a href="https://github.com/ashvardanian/SimSIMD/actions/workflows/release.yml"> <img alt="GitHub Actions Windows" src="https://img.shields.io/github/actions/workflow/status/ashvardanian/SimSIMD/release.yml?branch=main&label=Windows&logo=windows&color=blue"> </a>
<a href="https://github.com/ashvardanian/SimSIMD/actions/workflows/release.yml"> <img alt="GitHub Actions MacOS" src="https://img.shields.io/github/actions/workflow/status/ashvardanian/SimSIMD/release.yml?branch=main&label=MacOS&logo=apple&color=blue"> </a>
<a href="https://github.com/ashvardanian/SimSIMD/actions/workflows/release.yml"> <img alt="GitHub Actions CentOS Linux" src="https://img.shields.io/github/actions/workflow/status/ashvardanian/SimSIMD/release.yml?branch=main&label=CentOS&logo=centos&color=blue"> </a>
</div>
<h2>Features</h2>
<p><strong>SimSIMD</strong> (Arabic: "سيمسيم دي") is a mixed-precision math library of <strong>over 350 SIMD-optimized kernels</strong> extensively used in AI, Search, and DBMS workloads. Named after the iconic <a href="https://en.wikipedia.org/wiki/Open_sesame">"Open Sesame"</a> command that opened doors to treasure in <em>Ali Baba and the Forty Thieves</em>, SimSimd can help you 10x the cost-efficiency of your computational pipelines. Implemented distance functions include:</p>
<ul>
<li>Euclidean (L2) and Cosine (Angular) spatial distances for Vector Search. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#cosine-similarity-reciprocal-square-root-and-newton-raphson-iteration">docs</a></em></li>
<li>Dot-Products for real & complex vectors for DSP & Quantum computing. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#complex-dot-products-conjugate-dot-products-and-complex-numbers">docs</a></em></li>
<li>Hamming (~ Manhattan) and Jaccard (~ Tanimoto) bit-level distances. <em><a href="https://github.com/ashvardanian/SimSIMD/pull/138">docs</a></em></li>
<li>Set Intersections for Sparse Vectors and Text Analysis. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#set-intersection-galloping-and-binary-search">docs</a></em></li>
<li>Mahalanobis distance and Quadratic forms for Scientific Computing. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#curved-spaces-mahalanobis-distance-and-bilinear-quadratic-forms">docs</a></em></li>
<li>Kullback-Leibler and Jensen–Shannon divergences for probability distributions. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#logarithms-in-kullback-leibler--jensenshannon-divergences">docs</a></em></li>
<li>Fused-Multiply-Add (FMA) and Weighted Sums to replace BLAS level 1 functions. <em><a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#mixed-precision-in-fused-multiply-add-and-weighted-sums">docs</a></em></li>
<li>For Levenshtein, Needleman–Wunsch, and Smith-Waterman, check <a href="https://github.com/ashvardanian/stringzilla">StringZilla</a>.</li>
<li>🔜 Haversine and Vincenty's formulae for Geospatial Analysis.</li>
</ul>
<p>Moreover, SimSIMD...</p>
<ul>
<li>handles <code>float64</code>, <code>float32</code>, <code>float16</code>, and <code>bfloat16</code> real & complex vectors.</li>
<li>handles <code>int8</code> integral, <code>int4</code> sub-byte, and <code>b8</code> binary vectors.</li>
<li>handles sparse <code>uint32</code> and <code>uint16</code> sets, and weighted sparse vectors.</li>
<li>is a zero-dependency <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#using-simsimd-in-c">header-only C 99</a> library.</li>
<li>has <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#using-simsimd-in-python">Python</a>, <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#using-simsimd-in-rust">Rust</a>, <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#using-simsimd-in-javascript">JS</a>, and <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#using-simsimd-in-swift">Swift</a> bindings.</li>
<li>has Arm backends for NEON, Scalable Vector Extensions (SVE), and SVE2.</li>
<li>has x86 backends for Haswell, Skylake, Ice Lake, Genoa, and Sapphire Rapids.</li>
<li>with both compile-time and runtime CPU feature detection easily integrates anywhere!</li>
</ul>
<p>Due to the high-level of fragmentation of SIMD support in different x86 CPUs, SimSIMD generally uses the names of select Intel CPU generations for its backends. They, however, also work on AMD CPUs. Intel Haswell is compatible with AMD Zen 1/2/3, while AMD Genoa Zen 4 covers AVX-512 instructions added to Intel Skylake and Ice Lake. You can learn more about the technical implementation details in the following blog-posts:</p>
<ul>
<li><a href="https://ashvardanian.com/posts/gcc-12-vs-avx512fp16/">Uses Horner's method for polynomial approximations, beating GCC 12 by 119x</a>.</li>
<li><a href="https://ashvardanian.com/posts/simsimd-faster-scipy/#tails-of-the-past-the-significance-of-masked-loads">Uses Arm SVE and x86 AVX-512's masked loads to eliminate tail <code>for</code>-loops</a>.</li>
<li><a href="https://github.com/ashvardanian/SimSIMD/releases/tag/v5.4.0">Substitutes LibC's <code>sqrt</code> with Newton Raphson iterations</a>.</li>
<li><a href="https://ashvardanian.com/posts/simd-set-intersections-sve2-avx512/">Uses Galloping and SVE2 histograms to intersect sparse vectors</a>.</li>
<li>For Python: <a href="https://ashvardanian.com/posts/pybind11-cpython-tutorial/">avoids slow PyBind11, SWIG, & <code>PyArg_ParseTuple</code></a> <a href="https://ashvardanian.com/posts/discount-on-keyword-arguments-in-python/">using faster calling convention</a>.</li>
<li>For JavaScript: <a href="https://ashvardanian.com/posts/javascript-ai-vector-search/">uses typed arrays and NAPI for zero-copy calls</a>.</li>
</ul>
<h2>Benchmarks</h2>
<table style="width: 100%; text-align: center; table-layout: fixed;">
<colgroup>
<col style="width: 33%;">
<col style="width: 33%;">
<col style="width: 33%;">
</colgroup>
<tbody>
<tr>
<th align="center">NumPy</th>
<th align="center">C 99</th>
<th align="center">SimSIMD</th>
</tr>
<!-- Cosine distances with different precision levels -->
<tr>
<td colspan="4" align="center">cosine distances between 1536d vectors in <code>int8</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.cosine --> 🚧 overflows<br> </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>10,548,600</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>11,379,300</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>16,151,800</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>13,524,000</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">cosine distances between 1536d vectors in <code>bfloat16</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.cosine --> 🚧 not supported<br> </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>119,835</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>403,909</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>9,738,540</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>4,881,900</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">cosine distances between 1536d vectors in <code>float16</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.cosine --> <span style="color:#ABABAB;">x86:</span> <b>40,481</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>21,451</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>501,310</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>871,963</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>7,627,600</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>3,316,810</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">cosine distances between 1536d vectors in <code>float32</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.cosine --> <span style="color:#ABABAB;">x86:</span> <b>253,902</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>46,394</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>882,484</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>399,661</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>8,202,910</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>3,400,620</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">cosine distances between 1536d vectors in <code>float64</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.cosine --> <span style="color:#ABABAB;">x86:</span> <b>212,421</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>52,904</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>839,301</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>837,126</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>1,538,530</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>1,678,920</b> ops/s </td>
</tr>
<!-- Euclidean distance with different precision level -->
<tr>
<td colspan="4" align="center">eculidean distance between 1536d vectors in <code>int8</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.sqeuclidean --> <span style="color:#ABABAB;">x86:</span> <b>252,113</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>177,443</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>6,690,110</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>4,114,160</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>18,989,000</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>18,878,200</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">eculidean distance between 1536d vectors in <code>bfloat16</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.sqeuclidean --> 🚧 not supported<br> </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>119,842</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>1,049,230</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>9,727,210</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>4,233,420</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">eculidean distance between 1536d vectors in <code>float16</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.sqeuclidean --> <span style="color:#ABABAB;">x86:</span> <b>54,621</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>71,793</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>196,413</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>911,370</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>19,466,800</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>3,522,760</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">eculidean distance between 1536d vectors in <code>float32</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.sqeuclidean --> <span style="color:#ABABAB;">x86:</span> <b>424,944</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>292,629</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>1,295,210</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>1,055,940</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>8,924,100</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>3,602,650</b> ops/s </td>
</tr>
<tr>
<td colspan="4" align="center">eculidean distance between 1536d vectors in <code>float64</code></td>
</tr>
<tr>
<td align="center">
<!-- scipy.spatial.distance.sqeuclidean --> <span style="color:#ABABAB;">x86:</span> <b>334,929</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>237,505</b> ops/s </td>
<td align="center">
<!-- serial --> <span style="color:#ABABAB;">x86:</span> <b>1,215,190</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>905,782</b> ops/s </td>
<td align="center">
<!-- simsimd --> <span style="color:#ABABAB;">x86:</span> <b>1,701,740</b> ops/s<br> <span style="color:#ABABAB;">arm:</span> <b>1,735,840</b> ops/s </td>
</tr>
<!-- Bilinear forms -->
<!-- Sparse set intersections -->
</tbody>
</table>
<blockquote>
<p>For benchmarks we mostly use 1536-dimensional vectors, like the embeddings produced by the OpenAI Ada API. The code was compiled with GCC 12, using glibc v2.35. The benchmarks performed on Arm-based Graviton3 AWS <code>c7g</code> instances and <code>r7iz</code> Intel Sapphire Rapids. Most modern Arm-based 64-bit CPUs will have similar relative speedups. Variance withing x86 CPUs will be larger.</p>
</blockquote>
<p>Similar speedups are often observed even when compared to BLAS and LAPACK libraries underlying most numerical computing libraries, including NumPy and SciPy in Python. Broader benchmarking results:</p>
<ul>
<li><a href="https://ashvardanian.com/posts/simsimd-faster-scipy/#appendix-1-performance-on-apple-m2-pro">Apple M2 Pro</a>.</li>
<li><a href="https://ashvardanian.com/posts/simsimd-faster-scipy/#appendix-2-performance-on-4th-gen-intel-xeon-platinum-8480">Intel Sapphire Rapids</a>.</li>
<li><a href="https://ashvardanian.com/posts/simsimd-faster-scipy/#appendix-3-performance-on-aws-graviton-3">AWS Graviton 3</a>.</li>
</ul>
<h2>Using SimSIMD in Python</h2>
<p>The package is intended to replace the usage of <code>numpy.inner</code>, <code>numpy.dot</code>, and <code>scipy.spatial.distance</code>. Aside from drastic performance improvements, SimSIMD significantly improves accuracy in mixed precision setups. NumPy and SciPy, processing <code>int8</code>, <code>uint8</code> or <code>float16</code> vectors, will use the same types for accumulators, while SimSIMD can combine <code>int8</code> enumeration, <code>int16</code> multiplication, and <code>int32</code> accumulation to avoid overflows entirely. The same applies to processing <code>float16</code> and <code>bfloat16</code> values with <code>float32</code> precision.</p>
<h3>Installation</h3>
<p>Use the following snippet to install SimSIMD and list available hardware acceleration options available on your machine:</p>
<pre><code class="language-sh">pip install simsimd
python -c "import simsimd; print(simsimd.get_capabilities())" # for hardware introspection
python -c "import simsimd; help(simsimd)" # for documentation
</code></pre>
<p>With precompiled binaries, SimSIMD ships <code>.pyi</code> interface files for type hinting and static analysis. You can check all the available functions in <a href="https://github.com/ashvardanian/SimSIMD/raw/main/python/annotations/__init__.pyi"><code>python/annotations/__init__.pyi</code></a>.</p>
<h3>One-to-One Distance</h3>
<pre><code class="language-py">import simsimd
import numpy as np
vec1 = np.random.randn(1536).astype(np.float32)
vec2 = np.random.randn(1536).astype(np.float32)
dist = simsimd.cosine(vec1, vec2)
</code></pre>
<p>Supported functions include <code>cosine</code>, <code>inner</code>, <code>sqeuclidean</code>, <code>hamming</code>, <code>jaccard</code>, <code>kulbackleibler</code>, <code>jensenshannon</code>, and <code>intersect</code>. Dot products are supported for both real and complex numbers:</p>
<pre><code class="language-py">vec1 = np.random.randn(768).astype(np.float64) + 1j * np.random.randn(768).astype(np.float64)
vec2 = np.random.randn(768).astype(np.float64) + 1j * np.random.randn(768).astype(np.float64)
dist = simsimd.dot(vec1.astype(np.complex128), vec2.astype(np.complex128))
dist = simsimd.dot(vec1.astype(np.complex64), vec2.astype(np.complex64))
dist = simsimd.vdot(vec1.astype(np.complex64), vec2.astype(np.complex64)) # conjugate, same as `np.vdot`
</code></pre>
<p>Unlike SciPy, SimSIMD allows explicitly stating the precision of the input vectors, which is especially useful for mixed-precision setups. The <code>dtype</code> argument can be passed both by name and as a positional argument:</p>
<pre><code class="language-py">dist = simsimd.cosine(vec1, vec2, "int8")
dist = simsimd.cosine(vec1, vec2, "float16")
dist = simsimd.cosine(vec1, vec2, "float32")
dist = simsimd.cosine(vec1, vec2, "float64")
dist = simsimd.hamming(vec1, vec2, "bin8")
</code></pre>
<p>Binary distance functions are computed at a bit-level. Meaning a vector of 10x 8-bit integers will be treated as a sequence of 80 individual bits or dimensions. This differs from NumPy, that can't handle smaller-than-byte types, but you can still avoid the <code>bin8</code> argument by reinterpreting the vector as booleans:</p>
<pre><code class="language-py">vec1 = np.random.randint(2, size=80).astype(np.uint8).packbits().view(np.bool_)
vec2 = np.random.randint(2, size=80).astype(np.uint8).packbits().view(np.bool_)
hamming_distance = simsimd.hamming(vec1, vec2)
jaccard_distance = simsimd.jaccard(vec1, vec2)
</code></pre>
<p>With other frameworks, like PyTorch, one can get a richer type-system than NumPy, but the lack of good CPython interoperability makes it hard to pass data without copies. Here is an example of using SimSIMD with PyTorch to compute the cosine similarity between two <code>bfloat16</code> vectors:</p>
<pre><code class="language-py">import numpy as np
buf1 = np.empty(8, dtype=np.uint16)
buf2 = np.empty(8, dtype=np.uint16)
# View the same memory region with PyTorch and randomize it
import torch
vec1 = torch.asarray(memoryview(buf1), copy=False).view(torch.bfloat16)
vec2 = torch.asarray(memoryview(buf2), copy=False).view(torch.bfloat16)
torch.randn(8, out=vec1)
torch.randn(8, out=vec2)
# Both libs will look into the same memory buffers and report the same results
dist_slow = 1 - torch.nn.functional.cosine_similarity(vec1, vec2, dim=0)
dist_fast = simsimd.cosine(buf1, buf2, "bfloat16")
</code></pre>
<p>It also allows using SimSIMD for half-precision complex numbers, which NumPy does not support. For that, view data as continuous even-length <code>np.float16</code> vectors and override type-resolution with <code>complex32</code> string.</p>
<pre><code class="language-py">vec1 = np.random.randn(1536).astype(np.float16)
vec2 = np.random.randn(1536).astype(np.float16)
simd.dot(vec1, vec2, "complex32")
simd.vdot(vec1, vec2, "complex32")
</code></pre>
<p>When dealing with sparse representations and integer sets, you can apply the <code>intersect</code> function to two 1-dimensional arrays of <code>uint16</code> or <code>uint32</code> integers:</p>
<pre><code class="language-py">from random import randint
import numpy as np
import simsimd as simd
length1, length2 = randint(1, 100), randint(1, 100)
vec1 = np.sort(np.random.randint(0, 1000, length1).astype(np.uint16))
vec2 = np.sort(np.random.randint(0, 1000, length2).astype(np.uint16))
slow_result = len(np.intersect1d(vec1, vec2))
fast_result = simd.intersect(vec1, vec2)
assert slow_result == fast_result
</code></pre>
<h3>One-to-Many Distances</h3>
<p>Every distance function can be used not only for one-to-one but also one-to-many and many-to-many distance calculations. For one-to-many:</p>
<pre><code class="language-py">vec1 = np.random.randn(1536).astype(np.float32) # rank 1 tensor
batch1 = np.random.randn(1, 1536).astype(np.float32) # rank 2 tensor
batch2 = np.random.randn(100, 1536).astype(np.float32)
dist_rank1 = simsimd.cosine(vec1, batch2)
dist_rank2 = simsimd.cosine(batch1, batch2)
</code></pre>
<h3>Many-to-Many Distances</h3>
<p>All distance functions in SimSIMD can be used to compute many-to-many distances. For two batches of 100 vectors to compute 100 distances, one would call it like this:</p>
<pre><code class="language-py">batch1 = np.random.randn(100, 1536).astype(np.float32)
batch2 = np.random.randn(100, 1536).astype(np.float32)
dist = simsimd.cosine(batch1, batch2)
</code></pre>
<p>Input matrices must have identical shapes. This functionality isn't natively present in NumPy or SciPy, and generally requires creating intermediate arrays, which is inefficient and memory-consuming.</p>
<h3>Many-to-Many All-Pairs Distances</h3>
<p>One can use SimSIMD to compute distances between all possible pairs of rows across two matrices (akin to <a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html"><code>scipy.spatial.distance.cdist</code></a>). The resulting object will have a type <code>DistancesTensor</code>, zero-copy compatible with NumPy and other libraries. For two arrays of 10 and 1,000 entries, the resulting tensor will have 10,000 cells:</p>
<pre><code class="language-py">import numpy as np
from simsimd import cdist, DistancesTensor
matrix1 = np.random.randn(1000, 1536).astype(np.float32)
matrix2 = np.random.randn(10, 1536).astype(np.float32)
distances: DistancesTensor = simsimd.cdist(matrix1, matrix2, metric="cosine") # zero-copy, managed by SimSIMD
distances_array: np.ndarray = np.array(distances, copy=True) # now managed by NumPy
</code></pre>
<h3>Element-wise Kernels</h3>
<p>SimSIMD also provides mixed-precision element-wise kernels, where the input vectors and the output have the same numeric type, but the intermediate accumulators are of a higher precision.</p>
<pre><code class="language-py">import numpy as np
from simsimd import fma, wsum
# Let's take two FullHD video frames
first_frame = np.random.randn(1920 * 1024).astype(np.uint8)
second_frame = np.random.randn(1920 * 1024).astype(np.uint8)
average_frame = np.empty_like(first_frame)
wsum(first_frame, second_frame, alpha=0.5, beta=0.5, out=average_frame)
# Slow analog with NumPy:
slow_average_frame = (0.5 * first_frame + 0.5 * second_frame).astype(np.uint8)
</code></pre>
<p>Similarly, the <code>fma</code> takes three arguments and computes the fused multiply-add operation. In applications like Machine Learning you may also benefit from using the "brain-float" format not natively supported by NumPy. In 3D Graphics, for example, we can use FMA to compute the <a href="https://en.wikipedia.org/wiki/Phong_shading">Phong shading model</a>:</p>
<pre><code class="language-py"># Assume a FullHD frame with random values for simplicity
light_intensity = np.random.rand(1920 * 1080).astype(np.float16) # Intensity of light on each pixel
diffuse_component = np.random.rand(1920 * 1080).astype(np.float16) # Diffuse reflectance on the surface
specular_component = np.random.rand(1920 * 1080).astype(np.float16) # Specular reflectance for highlights
output_color = np.empty_like(light_intensity) # Array to store the resulting color intensity
# Define the scaling factors for diffuse and specular contributions
alpha = 0.7 # Weight for the diffuse component
beta = 0.3 # Weight for the specular component
# Formula: color = alpha * light_intensity * diffuse_component + beta * specular_component
fma(light_intensity, diffuse_component, specular_component,
dtype="float16", # Optional, unless it can't be inferred from the input
alpha=alpha, beta=beta, out=output_color)
# Slow analog with NumPy for comparison
slow_output_color = (alpha * light_intensity * diffuse_component + beta * specular_component).astype(np.float16)
</code></pre>
<h3>Multithreading and Memory Usage</h3>
<p>By default, computations use a single CPU core. To override this behavior, use the <code>threads</code> argument. Set it to <code>0</code> to use all available CPU cores. Here is an example of dealing with large sets of binary vectors:</p>
<pre><code class="language-py">ndim = 1536 # OpenAI Ada embeddings
matrix1 = np.packbits(np.random.randint(2, size=(10_000, ndim)).astype(np.uint8))
matrix2 = np.packbits(np.random.randint(2, size=(1_000, ndim)).astype(np.uint8))
distances = simsimd.cdist(matrix1, matrix2,
metric="hamming", # Unlike SciPy, SimSIMD doesn't divide by the number of dimensions
out_dtype="uint8", # so we can use `uint8` instead of `float64` to save memory.
threads=0, # Use all CPU cores with OpenMP.
dtype="bin8", # Override input argument type to `bin8` eight-bit words.
)
</code></pre>
<p>By default, the output distances will be stored in double-precision <code>float64</code> floating-point numbers. That behavior may not be space-efficient, especially if you are computing the hamming distance between short binary vectors, that will generally fit into 8x smaller <code>uint8</code> or <code>uint16</code> types. To override this behavior, use the <code>dtype</code> argument.</p>
<h3>Helper Functions</h3>
<p>You can turn specific backends on or off depending on the exact environment. A common case may be avoiding AVX-512 on older AMD CPUs and <a href="https://travisdowns.github.io/blog/2020/08/19/icl-avx512-freq.html">Intel Ice Lake</a> CPUs to ensure the CPU doesn't change the frequency license and throttle performance.</p>
<pre><code class="language-py">$ simsimd.get_capabilities()
> {'serial': True, 'neon': False, 'sve': False, 'neon_f16': False, 'sve_f16': False, 'neon_bf16': False, 'sve_bf16': False, 'neon_i8': False, 'sve_i8': False, 'haswell': True, 'skylake': True, 'ice': True, 'genoa': True, 'sapphire': True, 'turin': True}
$ simsimd.disable_capability("sapphire")
$ simsimd.enable_capability("sapphire")
</code></pre>
<h3>Using Python API with USearch</h3>
<p>Want to use it in Python with <a href="https://github.com/unum-cloud/usearch">USearch</a>? You can wrap the raw C function pointers SimSIMD backends into a <code>CompiledMetric</code> and pass it to USearch, similar to how it handles Numba's JIT-compiled code.</p>
<pre><code class="language-py">from usearch.index import Index, CompiledMetric, MetricKind, MetricSignature
from simsimd import pointer_to_sqeuclidean, pointer_to_cosine, pointer_to_inner
metric = CompiledMetric(
pointer=pointer_to_cosine("f16"),
kind=MetricKind.Cos,
signature=MetricSignature.ArrayArraySize,
)
index = Index(256, metric=metric)
</code></pre>
<h2>Using SimSIMD in Rust</h2>
<p>To install, add the following to your <code>Cargo.toml</code>:</p>
<pre><code class="language-toml">[dependencies]
simsimd = "..."
</code></pre>
<p>Before using the SimSIMD library, ensure you have imported the necessary traits and types into your Rust source file. The library provides several traits for different distance/similarity kinds - <code>SpatialSimilarity</code>, <code>BinarySimilarity</code>, and <code>ProbabilitySimilarity</code>.</p>
<h3>Spatial Similarity: Cosine and Euclidean Distances</h3>
<pre><code class="language-rust">use simsimd::SpatialSimilarity;
fn main() {
let vector_a: Vec<f32> = vec![1.0, 2.0, 3.0];
let vector_b: Vec<f32> = vec![4.0, 5.0, 6.0];
// Compute the cosine similarity between vector_a and vector_b
let cosine_similarity = f32::cosine(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Cosine Similarity: {}", cosine_similarity);
// Compute the squared Euclidean distance between vector_a and vector_b
let sq_euclidean_distance = f32::sqeuclidean(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Squared Euclidean Distance: {}", sq_euclidean_distance);
}
</code></pre>
<p>Spatial similarity functions are available for <code>f64</code>, <code>f32</code>, <code>f16</code>, and <code>i8</code> types.</p>
<h3>Dot-Products: Inner and Complex Inner Products</h3>
<pre><code class="language-rust">use simsimd::SpatialSimilarity;
use simsimd::ComplexProducts;
fn main() {
let vector_a: Vec<f32> = vec![1.0, 2.0, 3.0, 4.0];
let vector_b: Vec<f32> = vec![5.0, 6.0, 7.0, 8.0];
// Compute the inner product between vector_a and vector_b
let inner_product = SpatialSimilarity::dot(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Inner Product: {}", inner_product);
// Compute the complex inner product between complex_vector_a and complex_vector_b
let complex_inner_product = ComplexProducts::dot(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
let complex_conjugate_inner_product = ComplexProducts::vdot(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Complex Inner Product: {:?}", complex_inner_product); // -18, 69
println!("Complex C. Inner Product: {:?}", complex_conjugate_inner_product); // 70, -8
}
</code></pre>
<p>Complex inner products are available for <code>f64</code>, <code>f32</code>, and <code>f16</code> types.</p>
<h3>Probability Distributions: Jensen-Shannon and Kullback-Leibler Divergences</h3>
<pre><code class="language-rust">use simsimd::SpatialSimilarity;
fn main() {
let vector_a: Vec<f32> = vec![1.0, 2.0, 3.0];
let vector_b: Vec<f32> = vec![4.0, 5.0, 6.0];
let cosine_similarity = f32::jensenshannon(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Cosine Similarity: {}", cosine_similarity);
let sq_euclidean_distance = f32::kullbackleibler(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Squared Euclidean Distance: {}", sq_euclidean_distance);
}
</code></pre>
<p>Probability similarity functions are available for <code>f64</code>, <code>f32</code>, and <code>f16</code> types.</p>
<h3>Binary Similarity: Hamming and Jaccard Distances</h3>
<p>Similar to spatial distances, one can compute bit-level distance functions between slices of unsigned integers:</p>
<pre><code class="language-rust">use simsimd::BinarySimilarity;
fn main() {
let vector_a = &[0b11110000, 0b00001111, 0b10101010];
let vector_b = &[0b11110000, 0b00001111, 0b01010101];
// Compute the Hamming distance between vector_a and vector_b
let hamming_distance = u8::hamming(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Hamming Distance: {}", hamming_distance);
// Compute the Jaccard distance between vector_a and vector_b
let jaccard_distance = u8::jaccard(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Jaccard Distance: {}", jaccard_distance);
}
</code></pre>
<p>Binary similarity functions are available only for <code>u8</code> types.</p>
<h3>Half-Precision Floating-Point Numbers</h3>
<p>Rust has no native support for half-precision floating-point numbers, but SimSIMD provides a <code>f16</code> type. It has no functionality - it is a <code>transparent</code> wrapper around <code>u16</code> and can be used with <code>half</code> or any other half-precision library.</p>
<pre><code class="language-rust">use simsimd::SpatialSimilarity;
use simsimd::f16 as SimF16;
use half::f16 as HalfF16;
fn main() {
let vector_a: Vec<HalfF16> = ...
let vector_b: Vec<HalfF16> = ...
let buffer_a: &[SimF16] = unsafe { std::slice::from_raw_parts(a_half.as_ptr() as *const SimF16, a_half.len()) };
let buffer_b: &[SimF16] = unsafe { std::slice::from_raw_parts(b_half.as_ptr() as *const SimF16, b_half.len()) };
// Compute the cosine similarity between vector_a and vector_b
let cosine_similarity = SimF16::cosine(&vector_a, &vector_b)
.expect("Vectors must be of the same length");
println!("Cosine Similarity: {}", cosine_similarity);
}
</code></pre>
<h3>Half-Precision Brain-Float Numbers</h3>
<p>The "brain-float-16" is a popular machine learning format. It's broadly supported in hardware and is very machine-friendly, but software support is still lagging behind. <a href="https://github.com/numpy/numpy/issues/19808">Unlike NumPy</a>, you can already use <code>bf16</code> datatype in SimSIMD. Luckily, to downcast <code>f32</code> to <code>bf16</code> you only have to drop the last 16 bits:</p>
<pre><code class="language-py">import numpy as np
import simsimd as simd
a = np.random.randn(ndim).astype(np.float32)
b = np.random.randn(ndim).astype(np.float32)
# NumPy doesn't natively support brain-float, so we need a trick!
# Luckily, it's very easy to reduce the representation accuracy
# by simply masking the low 16-bits of our 32-bit single-precision
# numbers. We can also add `0x8000` to round the numbers.
a_f32rounded = ((a.view(np.uint32) + 0x8000) & 0xFFFF0000).view(np.float32)
b_f32rounded = ((b.view(np.uint32) + 0x8000) & 0xFFFF0000).view(np.float32)
# To represent them as brain-floats, we need to drop the second half
a_bf16 = np.right_shift(a_f32rounded.view(np.uint32), 16).astype(np.uint16)
b_bf16 = np.right_shift(b_f32rounded.view(np.uint32), 16).astype(np.uint16)
# Now we can compare the results
expected = np.inner(a_f32rounded, b_f32rounded)
result = simd.inner(a_bf16, b_bf16, "bf16")
</code></pre>
<h3>Dynamic Dispatch in Rust</h3>
<p>SimSIMD provides a <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#dynamic-dispatch">dynamic dispatch</a> mechanism to select the most advanced micro-kernel for the current CPU. You can query supported backends and use the <code>SimSIMD::capabilities</code> function to select the best one.</p>
<pre><code class="language-rust">println!("uses neon: {}", capabilities::uses_neon());
println!("uses sve: {}", capabilities::uses_sve());
println!("uses haswell: {}", capabilities::uses_haswell());
println!("uses skylake: {}", capabilities::uses_skylake());
println!("uses ice: {}", capabilities::uses_ice());
println!("uses genoa: {}", capabilities::uses_genoa());
println!("uses sapphire: {}", capabilities::uses_sapphire());
println!("uses turin: {}", capabilities::uses_turin());
</code></pre>
<h2>Using SimSIMD in JavaScript</h2>
<p>To install, choose one of the following options depending on your environment:</p>
<ul>
<li><code>npm install --save simsimd</code></li>
<li><code>yarn add simsimd</code></li>
<li><code>pnpm add simsimd</code></li>
<li><code>bun install simsimd</code></li>
</ul>
<p>The package is distributed with prebuilt binaries, but if your platform is not supported, you can build the package from the source via <code>npm run build</code>. This will automatically happen unless you install the package with the <code>--ignore-scripts</code> flag or use Bun. After you install it, you will be able to call the SimSIMD functions on various <code>TypedArray</code> variants:</p>
<pre><code class="language-js">const { sqeuclidean, cosine, inner, hamming, jaccard } = require('simsimd');
const vectorA = new Float32Array([1.0, 2.0, 3.0]);
const vectorB = new Float32Array([4.0, 5.0, 6.0]);
const distance = sqeuclidean(vectorA, vectorB);
console.log('Squared Euclidean Distance:', distance);
</code></pre>
<p>Other numeric types and precision levels are supported as well. For double-precision floating-point numbers, use <code>Float64Array</code>:</p>
<pre><code class="language-js">const vectorA = new Float64Array([1.0, 2.0, 3.0]);
const vectorB = new Float64Array([4.0, 5.0, 6.0]);
const distance = cosine(vectorA, vectorB);
</code></pre>
<p>When doing machine learning and vector search with high-dimensional vectors you may want to quantize them to 8-bit integers. You may want to project values from the $[-1, 1]$ range to the $[-127, 127]$ range and then cast them to <code>Int8Array</code>:</p>
<pre><code class="language-js">const quantizedVectorA = new Int8Array(vectorA.map(v => (v * 127)));
const quantizedVectorB = new Int8Array(vectorB.map(v => (v * 127)));
const distance = cosine(quantizedVectorA, quantizedVectorB);
</code></pre>
<p>A more extreme quantization case would be to use binary vectors. You can map all positive values to <code>1</code> and all negative values and zero to <code>0</code>, packing eight values into a single byte. After that, Hamming and Jaccard distances can be computed.</p>
<pre><code class="language-js">const { toBinary, hamming } = require('simsimd');
const binaryVectorA = toBinary(vectorA);
const binaryVectorB = toBinary(vectorB);
const distance = hamming(binaryVectorA, binaryVectorB);
</code></pre>
<h2>Using SimSIMD in Sift</h2>
<p>To install, simply add the following dependency to you <code>Package.swift</code>:</p>
<pre><code class="language-swift">dependencies: [
.package(url: "https://github.com/ashvardanian/simsimd")
]
</code></pre>
<p>The package provides the most common spatial metrics for <code>Int8</code>, <code>Float16</code>, <code>Float32</code>, and <code>Float64</code> vectors.</p>
<pre><code class="language-swift">import SimSIMD
let vectorA: [Int8] = [1, 2, 3]
let vectorB: [Int8] = [4, 5, 6]
let cosineSimilarity = vectorA.cosine(vectorB) // Computes the cosine similarity
let dotProduct = vectorA.dot(vectorB) // Computes the dot product
let sqEuclidean = vectorA.sqeuclidean(vectorB) // Computes the squared Euclidean distance
</code></pre>
<h2>Using SimSIMD in C</h2>
<p>For integration within a CMake-based project, add the following segment to your <code>CMakeLists.txt</code>:</p>
<pre><code class="language-cmake">FetchContent_Declare(
simsimd
GIT_REPOSITORY https://github.com/ashvardanian/simsimd.git
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(simsimd)
</code></pre>
<p>After that, you can use the SimSIMD library in your C code in several ways. Simplest of all, you can include the headers, and the compiler will automatically select the most recent CPU extensions that SimSIMD will use.</p>
<pre><code class="language-c">#include <simsimd/simsimd.h>
int main() {
simsimd_f32_t vector_a[1536];
simsimd_f32_t vector_b[1536];
simsimd_kernel_punned_t distance_function = simsimd_metric_punned(
simsimd_metric_cos_k, // Metric kind, like the angular cosine distance
simsimd_datatype_f32_k, // Data type, like: f16, f32, f64, i8, b8, and complex variants
simsimd_cap_any_k); // Which CPU capabilities are we allowed to use
simsimd_distance_t distance;
distance_function(vector_a, vector_b, 1536, &distance);
return 0;
}
</code></pre>
<h3>Dynamic Dispatch in C</h3>
<p>To avoid hard-coding the backend, you can rely on <code>c/lib.c</code> to prepackage all possible backends in one binary, and select the most recent CPU features at runtime. That feature of the C library is called <a href="https://raw.githubusercontent.com/ashvardanian/SimSIMD/main/#dynamic-dispatch">dynamic dispatch</a> and is extensively used in the Python, JavaScript, and Rust bindings. To test which CPU features are available on the machine at runtime, use the following APIs:</p>
<pre><code class="language-c">int uses_dynamic_dispatch = simsimd_uses_dynamic_dispatch(); // Check if dynamic dispatch was enabled
simsimd_capability_t capabilities = simsimd_capabilities(); // Returns a bitmask
int uses_neon = simsimd_uses_neon();
int uses_sve = simsimd_uses_sve();
int uses_haswell = simsimd_uses_haswell();
int uses_skylake = simsimd_uses_skylake();
int uses_ice = simsimd_uses_ice();
int uses_genoa = simsimd_uses_genoa();
int uses_sapphire = simsimd_uses_sapphire();
</code></pre>
<p>To override compilation settings and switch between runtime and compile-time dispatch, define the following macro:</p>
<pre><code class="language-c">#define SIMSIMD_DYNAMIC_DISPATCH 1 // or 0
</code></pre>
<h3>Spatial Distances: Cosine and Euclidean Distances</h3>
<pre><code class="language-c">#include <simsimd/simsimd.h>
int main() {
simsimd_i8_t i8[1536];
simsimd_i8_t u8[1536];
simsimd_f64_t f64s[1536];
simsimd_f32_t f32s[1536];
simsimd_f16_t f16s[1536];
simsimd_bf16_t bf16s[1536];
simsimd_distance_t distance;
// Cosine distance between two vectors
simsimd_cos_i8(i8s, i8s, 1536, &distance);
simsimd_cos_u8(u8s, u8s, 1536, &distance);
simsimd_cos_f16(f16s, f16s, 1536, &distance);
simsimd_cos_f32(f32s, f32s, 1536, &distance);
simsimd_cos_f64(f64s, f64s, 1536, &distance);
simsimd_cos_bf16(bf16s, bf16s, 1536, &distance);
// Euclidean distance between two vectors
simsimd_l2sq_i8(i8s, i8s, 1536, &distance);
simsimd_l2sq_u8(u8s, u8s, 1536, &distance);
simsimd_l2sq_f16(f16s, f16s, 1536, &distance);
simsimd_l2sq_f32(f32s, f32s, 1536, &distance);
simsimd_l2sq_f64(f64s, f64s, 1536, &distance);
simsimd_l2sq_bf16(bf16s, bf16s, 1536, &distance);
return 0;
}
</code></pre>
<h3>Dot-Products: Inner and Complex Inner Products</h3>
<pre><code class="language-c">#include <simsimd/simsimd.h>
int main() {
// SimSIMD provides "sized" type-aliases without relying on `stdint.h`
simsimd_i8_t i8[1536];
simsimd_i8_t u8[1536];
simsimd_f16_t f16s[1536];
simsimd_f32_t f32s[1536];
simsimd_f64_t f64s[1536];
simsimd_bf16_t bf16s[1536];
simsimd_distance_t product;
// Inner product between two real vectors
simsimd_dot_i8(i8s, i8s, 1536, &product);
simsimd_dot_u8(u8s, u8s, 1536, &product);
simsimd_dot_f16(f16s, f16s, 1536, &product);
simsimd_dot_f32(f32s, f32s, 1536, &product);
simsimd_dot_f64(f64s, f64s, 1536, &product);
simsimd_dot_bf16(bf16s, bf16s, 1536, &product);
// SimSIMD provides complex types with `real` and `imag` fields
simsimd_f64c_t f64s[768];
simsimd_f32c_t f32s[768];
simsimd_f16c_t f16s[768];
simsimd_bf16c_t bf16s[768];
simsimd_distance_t products[2]; // real and imaginary parts
// Complex inner product between two vectors
simsimd_dot_f16c(f16cs, f16cs, 768, &products[0]);
simsimd_dot_f32c(f32cs, f32cs, 768, &products[0]);
simsimd_dot_f64c(f64cs, f64cs, 768, &products[0]);
simsimd_dot_bf16c(bf16cs, bf16cs, 768, &products[0]);
// Complex conjugate inner product between two vectors
simsimd_vdot_f16c(f16cs, f16cs, 768, &products[0]);
simsimd_vdot_f32c(f32cs, f32cs, 768, &products[0]);
simsimd_vdot_f64c(f64cs, f64cs, 768, &products[0]);
simsimd_vdot_bf16c(bf16cs, bf16cs, 768, &products[0]);
return 0;
}
</code></pre>
<h3>Binary Distances: Hamming and Jaccard Distances</h3>
<pre><code class="language-c">#include <simsimd/simsimd.h>
int main() {
simsimd_b8_t b8s[1536 / 8]; // 8 bits per word
simsimd_distance_t distance;
simsimd_hamming_b8(b8s, b8s, 1536 / 8, &distance);
simsimd_jaccard_b8(b8s, b8s, 1536 / 8, &distance);
return 0;
}
</code></pre>
<h3>Probability Distributions: Jensen-Shannon and Kullback-Leibler Divergences</h3>
<pre><code class="language-c">#include <simsimd/simsimd.h>
int main() {
simsimd_f64_t f64s[1536];
simsimd_f32_t f32s[1536];
simsimd_f16_t f16s[1536];
simsimd_distance_t divergence;
// Jensen-Shannon divergence between two vectors
simsimd_js_f16(f16s, f16s, 1536, &divergence);
simsimd_js_f32(f32s, f32s, 1536, &divergence);
simsimd_js_f64(f64s, f64s, 1536, &divergence);
// Kullback-Leibler divergence between two vectors
simsimd_kl_f16(f16s, f16s, 1536, &divergence);
simsimd_kl_f32(f32s, f32s, 1536, &divergence);
simsimd_kl_f64(f64s, f64s, 1536, &divergence);
return 0;
}
</code></pre>
<h3>Half-Precision Floating-Point Numbers</h3>
<p>If you aim to utilize the <code>_Float16</code> functionality with SimSIMD, ensure your development environment is compatible with C 11. For other SimSIMD functionalities, C 99 compatibility will suffice. To explicitly disable half-precision support, define the following macro before imports:</p>
<pre><code class="language-c">#define SIMSIMD_NATIVE_F16 0 // or 1
#define SIMSIMD_NATIVE_BF16 0 // or 1
#include <simsimd/simsimd.h>
</code></pre>
<h3>Compilation Settings and Debugging</h3>
<p><code>SIMSIMD_DYNAMIC_DISPATCH</code>:</p>
<blockquote>
<p>By default, SimSIMD is a header-only library. But if you are running on different generations of devices, it makes sense to pre-compile the library for all supported generations at once, and dispatch at runtime. This flag does just that and is used to produce the <code>simsimd.so</code> shared library, as well as the Python and other bindings.</p>
</blockquote>
<p>For Arm: <code>SIMSIMD_TARGET_NEON</code>, <code>SIMSIMD_TARGET_SVE</code>, <code>SIMSIMD_TARGET_SVE2</code>, <code>SIMSIMD_TARGET_NEON_F16</code>, <code>SIMSIMD_TARGET_SVE_F16</code>, <code>SIMSIMD_TARGET_NEON_BF16</code>, <code>SIMSIMD_TARGET_SVE_BF16</code>. For x86: (<code>SIMSIMD_TARGET_HASWELL</code>, <code>SIMSIMD_TARGET_SKYLAKE</code>, <code>SIMSIMD_TARGET_ICE</code>, <code>SIMSIMD_TARGET_GENOA</code>, <code>SIMSIMD_TARGET_SAPPHIRE</code>, <code>SIMSIMD_TARGET_TURIN</code>, <code>SIMSIMD_TARGET_SIERRA</code>.</p>
<blockquote>
<p>By default, SimSIMD automatically infers the target architecture and pre-compiles as many kernels as possible. In some cases, you may want to explicitly disable some of the kernels. Most often it's due to compiler support issues, like the lack of some recent intrinsics or low-precision numeric types. In other cases, you may want to disable some kernels to speed up the compilation process and trim the binary size.</p>
</blockquote>
<p><code>SIMSIMD_SQRT</code>, <code>SIMSIMD_RSQRT</code>, <code>SIMSIMD_LOG</code>:</p>
<blockquote>
<p>By default, for <strong>non</strong>-SIMD backends, SimSIMD may use <code>libc</code> functions like <code>sqrt</code> and <code>log</code>. Those are generally very accurate, but slow, and introduce a dependency on the C standard library. To avoid that you can override those definitions with your custom implementations, like: <code>#define SIMSIMD_RSQRT(x) (1 / sqrt(x))</code>.</p>
</blockquote>
<h2>Algorithms & Design Decisions 📚</h2>
<p>In general there are a few principles that SimSIMD follows:</p>
<ul>
<li>Avoid loop unrolling.</li>
<li>Never allocate memory.</li>
<li>Never throw exceptions or set <code>errno</code>.</li>
<li>Keep all function arguments the size of the pointer.</li>
<li>Avoid returning from public interfaces, use out-arguments instead.</li>
<li>Don't over-optimize for old CPUs and single- and double-precision floating-point numbers.</li>
<li>Prioritize mixed-precision and integer operations, and new ISA extensions.</li>
<li>Prefer saturated arithmetic and avoid overflows.</li>
</ul>
<p>Possibly, in the future:</p>
<ul>
<li>Best effort computation silencing <code>NaN</code> components in low-precision inputs.</li>
<li>Detect overflows and report the distance with a "signaling" <code>NaN</code>.</li>
</ul>
<p>Last, but not the least - don't build unless there is a demand for it. So if you have a specific use-case, please open an issue or a pull request, and ideally, bring in more users with similar needs.</p>
<h3>Cosine Similarity, Reciprocal Square Root, and Newton-Raphson Iteration</h3>
<p>The cosine similarity is the most common and straightforward metric used in machine learning and information retrieval. Interestingly, there are multiple ways to shoot yourself in the foot when computing it. The cosine similarity is the inverse of the cosine distance, which is the cosine of the angle between two vectors.</p>
<pre><code class="language-math">\text{CosineSimilarity}(a, b) = \frac{a \cdot b}{\|a\| \cdot \|b\|}
</code></pre>
<pre><code class="language-math">\text{CosineDistance}(a, b) = 1 - \frac{a \cdot b}{\|a\| \cdot \|b\|}
</code></pre>
<p>In NumPy terms, SimSIMD implementation is similar to:</p>
<pre><code class="language-python">import numpy as np
def cos_numpy(a: np.ndarray, b: np.ndarray) -> float:
ab, a2, b2 = np.dot(a, b), np.dot(a, a), np.dot(b, b) # Fused in SimSIMD
if a2 == 0 and b2 == 0: result = 0 # Same in SciPy
elif ab == 0: result = 1 # Division by zero error in SciPy
else: result = 1 - ab / (sqrt(a2) * sqrt(b2)) # Bigger rounding error in SciPy
return result
</code></pre>
<p>In SciPy, however, the cosine distance is computed as <code>1 - ab / np.sqrt(a2 * b2)</code>. It handles the edge case of a zero and non-zero argument pair differently, resulting in a division by zero error. It's not only less efficient, but also less accurate, given how the reciprocal square roots are computed. The C standard library provides the <code>sqrt</code> function, which is generally very accurate, but slow. The <code>rsqrt</code> in-hardware implementations are faster, but have different accuracy characteristics.</p>
<ul>
<li>SSE <code>rsqrtps</code> and AVX <code>vrsqrtps</code>: $1.5 \times 2^{-12}$ maximal relative error.</li>
<li>AVX-512 <code>vrsqrt14pd</code> instruction: $2^{-14}$ maximal relative error.</li>
<li>NEON <code>frsqrte</code> instruction has no documented error bounds, but <a href="https://gist.github.com/ashvardanian/5e5cf585d63f8ab6d240932313c75411">can be</a> $2^{-3}$.</li>
</ul>
<p>To overcome the limitations of the <code>rsqrt</code> instruction, SimSIMD uses the Newton-Raphson iteration to refine the initial estimate for high-precision floating-point numbers. It can be defined as:</p>
<pre><code class="language-math">x_{n+1} = x_n \cdot (3 - x_n \cdot x_n) / 2
</code></pre>
<p>On 1536-dimensional inputs on Intel Sapphire Rapids CPU a single such iteration can result in a 2-3 orders of magnitude relative error reduction:</p>
<table>
<thead>
<tr>
<th align="left">Datatype</th>
<th align="right">NumPy Error</th>
<th align="right">SimSIMD w/out Iteration</th>
<th align="right">SimSIMD</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>bfloat16</code></td>
<td align="right">1.89e-08 ± 1.59e-08</td>
<td align="right">3.07e-07 ± 3.09e-07</td>
<td align="right">3.53e-09 ± 2.70e-09</td>
</tr>
<tr>
<td align="left"><code>float16</code></td>
<td align="right">1.67e-02 ± 1.44e-02</td>
<td align="right">2.68e-05 ± 1.95e-05</td>
<td align="right">2.02e-05 ± 1.39e-05</td>
</tr>
<tr>
<td align="left"><code>float32</code></td>
<td align="right">2.21e-08 ± 1.65e-08</td>
<td align="right">3.47e-07 ± 3.49e-07</td>
<td align="right">3.77e-09 ± 2.84e-09</td>
</tr>
<tr>
<td align="left"><code>float64</code></td>
<td align="right">0.00e+00 ± 0.00e+00</td>
<td align="right">3.80e-07 ± 4.50e-07</td>
<td align="right">1.35e-11 ± 1.85e-11</td>
</tr>
</tbody>
</table>
<h3>Curved Spaces, Mahalanobis Distance, and Bilinear Quadratic Forms</h3>
<p>The Mahalanobis distance is a generalization of the Euclidean distance, which takes into account the covariance of the data. It's very similar in its form to the bilinear form, which is a generalization of the dot product.</p>
<pre><code class="language-math">\text{BilinearForm}(a, b, M) = a^T M b
</code></pre>
<pre><code class="language-math">\text{Mahalanobis}(a, b, M) = \sqrt{(a - b)^T M^{-1} (a - b)}
</code></pre>
<p>Bilinear Forms can be seen as one of the most important linear algebraic operations, surprisingly missing in BLAS and LAPACK. They are versatile and appear in various domains:</p>
<ul>
<li>In Quantum Mechanics, the expectation value of an observable $A$ in a state $\psi$ is given by $\langle \psi | A | \psi \rangle$, which is a bilinear form.</li>
<li>In Machine Learning, in Support Vector Machines (SVMs), bilinear forms define kernel functions that measure similarity between data points.</li>
<li>In Differential Geometry, the metric tensor, which defines distances and angles on a manifold, is a bilinear form on the tangent space.</li>
<li>In Economics, payoff functions in certain Game Theoretic problems can be modeled as bilinear forms of players' strategies.</li>
<li>In Physics, interactions between electric and magnetic fields can be expressed using bilinear forms.</li>
</ul>
<p>Broad applications aside, the lack of a specialized primitive for bilinear forms in BLAS and LAPACK means significant performance overhead. A $vector * matrix * vector$ product is a scalar, whereas its constituent parts ($vector * matrix$ and $matrix * vector$) are vectors:</p>
<ul>
<li>They need memory to be stored in: $O(n)$ allocation.</li>
<li>The data will be written to memory and read back, wasting CPU cycles.</li>
</ul>
<p>SimSIMD doesn't produce intermediate vector results, like <code>a @ M @ b</code>, but computes the bilinear form directly.</p>
<h3>Set Intersection, Galloping, and Binary Search</h3>
<p>The set intersection operation is generally defined as the number of elements that are common between two sets, represented as sorted arrays of integers. The most common way to compute it is a linear scan:</p>
<pre><code class="language-c">size_t intersection_size(int *a, int *b, size_t n, size_t m) {
size_t i = 0, j = 0, count = 0;
while (i < n && j < m) {
if (a[i] < b[j]) i++;
else if (a[i] > b[j]) j++;
else i++, j++, count++;
}
return count;
}
</code></pre>
<p>Alternatively, one can use the binary search to find the elements in the second array that are present in the first one. On every step the checked region of the second array is halved, which is called the <em>galloping search</em>. It's faster, but only when large arrays of very different sizes are intersected. Third approach is to use the SIMD instructions to compare multiple elements at once:</p>
<ul>
<li>Using string-intersection instructions on x86, like <code>pcmpestrm</code>.</li>
<li>Using integer-intersection instructions in AVX-512, like <code>vp2intersectd</code>.</li>
<li>Using vanilla equality checks present in all SIMD instruction sets.</li>
</ul>
<p>After benchmarking, the last approach was chosen, as it's the most flexible and often the fastest.</p>
<h3>Complex Dot Products, Conjugate Dot Products, and Complex Numbers</h3>
<p>Complex dot products are a generalization of the dot product to complex numbers. They are supported by most BLAS packages, but almost never in mixed precision. SimSIMD defines <code>dot</code> and <code>vdot</code> kernels as:</p>
<pre><code class="language-math">\text{dot}(a, b) = \sum_{i=0}^{n-1} a_i \cdot b_i
</code></pre>
<pre><code class="language-math">\text{vdot}(a, b) = \sum_{i=0}^{n-1} a_i \cdot \bar{b_i}
</code></pre>
<p>Where $\bar{b_i}$ is the complex conjugate of $b_i$. Putting that into Python code for scalar arrays:</p>
<pre><code class="language-python">def dot(a: List[number], b: List[number]) -> number:
a_real, a_imaginary = a[0::2], a[1::2]
b_real, b_imaginary = b[0::2], b[1::2]
ab_real, ab_imaginary = 0, 0
for ar, ai, br, bi in zip(a_real, a_imaginary, b_real, b_imaginary):
ab_real += ar * br - ai * bi
ab_imaginary += ar * bi + ai * br
return ab_real, ab_imaginary
def vdot(a: List[number], b: List[number]) -> number:
a_real, a_imaginary = a[0::2], a[1::2]
b_real, b_imaginary = b[0::2], b[1::2]
ab_real, ab_imaginary = 0, 0
for ar, ai, br, bi in zip(a_real, a_imaginary, b_real, b_imaginary):
ab_real += ar * br + ai * bi
ab_imaginary += ar * bi - ai * br
return ab_real, ab_imaginary
</code></pre>
<h3>Logarithms in Kullback-Leibler & Jensen–Shannon Divergences</h3>
<p>The Kullback-Leibler divergence is a measure of how one probability distribution diverges from a second, expected probability distribution. Jensen-Shannon divergence is a symmetrized and smoothed version of the Kullback-Leibler divergence, which can be used as a distance metric between probability distributions.</p>
<pre><code class="language-math">\text{KL}(P || Q) = \sum_{i} P(i) \log \frac{P(i)}{Q(i)}
</code></pre>
<pre><code class="language-math">\text{JS}(P, Q) = \frac{1}{2} \text{KL}(P || M) + \frac{1}{2} \text{KL}(Q || M), M = \frac{P + Q}{2}
</code></pre>
<p>Both functions are defined for non-negative numbers, and the logarithm is a key part of their computation.</p>
<h3>Mixed Precision in Fused-Multiply-Add and Weighted Sums</h3>
<p>The Fused-Multiply-Add (FMA) operation is a single operation that combines element-wise multiplication and addition with different scaling factors. The Weighted Sum is it's simplified variant without element-wise multiplication.</p>
<pre><code class="language-math">\text{FMA}_i(A, B, C, \alpha, \beta) = \alpha \cdot A_i \cdot B_i + \beta \cdot C_i
</code></pre>
<pre><code class="language-math">\text{WSum}_i(A, B, \alpha, \beta) = \alpha \cdot A_i + \beta \cdot B_i
</code></pre>
<p>In NumPy terms, the implementation may look like:</p>
<pre><code class="language-py">import numpy as np
def wsum(A: np.ndarray, B: np.ndarray, /, Alpha: float, Beta: float) -> np.ndarray:
assert A.dtype == B.dtype, "Input types must match and affect the output style"
return (Alpha * A + Beta * B).astype(A.dtype)
def fma(A: np.ndarray, B: np.ndarray, C: np.ndarray, /, Alpha: float, Beta: float) -> np.ndarray:
assert A.dtype == B.dtype and A.dtype == C.dtype, "Input types must match and affect the output style"
return (Alpha * A * B + Beta * C).astype(A.dtype)
</code></pre>
<p>The tricky part is implementing those operations in mixed precision, where the scaling factors are of different precision than the input and output vectors. SimSIMD uses double-precision floating-point scaling factors for any input and output precision, including <code>i8</code> and <code>u8</code> integers and <code>f16</code> and <code>bf16</code> floats. Depending on the generation of the CPU, given native support for <code>f16</code> addition and multiplication, the <code>f16</code> temporaries are used for <code>i8</code> and <code>u8</code> multiplication, scaling, and addition. For <code>bf16</code>, native support is generally limited to dot-products with subsequent partial accumulation, which is not enough for the FMA and WSum operations, so <code>f32</code> is used as a temporary.</p>
<h3>Auto-Vectorization & Loop Unrolling</h3>
<p>On the Intel Sapphire Rapids platform, SimSIMD was benchmarked against auto-vectorized code using GCC 12. GCC handles single-precision <code>float</code> but might not be the best choice for <code>int8</code> and <code>_Float16</code> arrays, which have been part of the C language since 2011.</p>
<table>
<thead>
<tr>
<th align="left">Kind</th>
<th align="right">GCC 12 <code>f32</code></th>
<th align="right">GCC 12 <code>f16</code></th>
<th align="right">SimSIMD <code>f16</code></th>
<th align="right"><code>f16</code> improvement</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Inner Product</td>
<td align="right">3,810 K/s</td>
<td align="right">192 K/s</td>
<td align="right">5,990 K/s</td>
<td align="right"><strong>31 x</strong></td>
</tr>
<tr>
<td align="left">Cosine Distance</td>
<td align="right">3,280 K/s</td>
<td align="right">336 K/s</td>
<td align="right">6,880 K/s</td>
<td align="right"><strong>20 x</strong></td>
</tr>
<tr>
<td align="left">Euclidean Distance ²</td>
<td align="right">4,620 K/s</td>
<td align="right">147 K/s</td>
<td align="right">5,320 K/s</td>
<td align="right"><strong>36 x</strong></td>
</tr>
<tr>
<td align="left">Jensen-Shannon Divergence</td>
<td align="right">1,180 K/s</td>
<td align="right">18 K/s</td>
<td align="right">2,140 K/s</td>
<td align="right"><strong>118 x</strong></td>
</tr>
</tbody>
</table>
<h3>Dynamic Dispatch</h3>
<p>Most popular software is precompiled and distributed with fairly conservative CPU optimizations, to ensure compatibility with older hardware. Database Management platforms, like ClickHouse, and Web Browsers, like Google Chrome,need to run on billions of devices, and they can't afford to be picky about the CPU features. For such users SimSIMD provides a dynamic dispatch mechanism, which selects the most advanced micro-kernel for the current CPU at runtime.</p>
<table>
<tbody>
<tr>
<th>Subset</th>
<th>F</th>
<th>CD</th>
<th>ER</th>
<th>PF</th>
<th>4FMAPS</th>
<th>4VNNIW</th>
<th>VPOPCNTDQ</th>
<th>VL</th>
<th>DQ</th>
<th>BW</th>
<th>IFMA</th>
<th>VBMI</th>
<th>VNNI</th>
<th>BF16</th>
<th>VBMI2</th>
<th>BITALG</th>
<th>VPCLMULQDQ</th>
<th>GFNI</th>
<th>VAES</th>
<th>VP2INTERSECT</th>
<th>FP16</th>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Xeon_Phi#Knights_Landing">Knights Landing</a> (Xeon Phi x200, 2016)</td>
<td colspan="2" rowspan="9" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="2" rowspan="2" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="17" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Xeon_Phi#Knights_Mill">Knights Mill</a> (Xeon Phi x205, 2017)</td>
<td colspan="3" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="14" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td> <a href="https://en.wikipedia.org/wiki/Skylake_(microarchitecture)#Skylake-SP_(14_nm)_Scalable_Performance">Skylake-SP</a>, <a href="https://en.wikipedia.org/wiki/Skylake_(microarchitecture)#Mainstream_desktop_processors">Skylake-X</a> (2017) </td>
<td colspan="4" rowspan="11" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
<td rowspan="4" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
<td colspan="3" rowspan="4" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="11" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Cannon_Lake_(microarchitecture)">Cannon Lake</a> (2018)</td>
<td colspan="2" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="9" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Cascade_Lake_(microarchitecture)">Cascade Lake</a> (2019)</td>
<td colspan="2" rowspan="2" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
<td rowspan="2" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="8" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Cooper_Lake_(microarchitecture)">Cooper Lake</a> (2020)</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="7" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Ice_Lake_(microarchitecture)">Ice Lake</a> (2019)</td>
<td colspan="7" rowspan="3" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td rowspan="3" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
<td colspan="5" rowspan="3" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="2" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Tiger_Lake_(microarchitecture)">Tiger Lake</a> (2020)</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Rocket_Lake">Rocket Lake</a> (2021)</td>
<td colspan="2" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Alder_Lake">Alder Lake</a> (2021)</td>
<td colspan="2" style="background:#FFB;color:black;vertical-align:middle;text-align:center;">Partial</td>
<td colspan="15" style="background:#FFB;color:black;vertical-align:middle;text-align:center;">Partial</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Zen_4">Zen 4</a> (2022)</td>
<td colspan="2" rowspan="3" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="13" rowspan="3" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td colspan="2" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Sapphire_Rapids_(microprocessor)">Sapphire Rapids</a> (2023)</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
</tr>
<tr>
<td><a href="https://en.wikipedia.org/wiki/Zen_5">Zen 5</a> (2024)</td>
<td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;">Yes</td>
<td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;">No</td>
</tr>
</tbody>
</table>
<p>You can compile SimSIMD on an old CPU, like Intel Haswell, and run it on a new one, like AMD Genoa, and it will automatically use the most advanced instructions available. Reverse is also true, you can compile on a new CPU and run on an old one, and it will automatically fall back to the most basic instructions. Moreover, the very first time you prove for CPU capabilities with <code>simsimd_capabilities()</code>, it initializes the dynamic dispatch mechanism, and all subsequent calls will be faster and won't face race conditions in multi-threaded environments.</p>
<h2>Target Specific Backends</h2>
<p>SimSIMD exposes all kernels for all backends, and you can select the most advanced one for the current CPU without relying on built-in dispatch mechanisms. That's handy for testing and benchmarking, but also in case you want to dispatch a very specific kernel for a very specific CPU, bypassing SimSIMD assignment logic. All of the function names follow the same pattern: <code>simsimd_{function}_{type}_{backend}</code>.</p>
<ul>
<li>The backend can be <code>serial</code>, <code>haswell</code>, <code>skylake</code>, <code>ice</code>, <code>genoa</code>, <code>sapphire</code>, <code>turin</code>, <code>neon</code>, or <code>sve</code>.</li>
<li>The type can be <code>f64</code>, <code>f32</code>, <code>f16</code>, <code>bf16</code>, <code>f64c</code>, <code>f32c</code>, <code>f16c</code>, <code>bf16c</code>, <code>i8</code>, or <code>b8</code>.</li>
<li>The function can be <code>dot</code>, <code>vdot</code>, <code>cos</code>, <code>l2sq</code>, <code>hamming</code>, <code>jaccard</code>, <code>kl</code>, <code>js</code>, or <code>intersect</code>.</li>
</ul>
<p>To avoid hard-coding the backend, you can use the <code>simsimd_kernel_punned_t</code> to pun the function pointer and the <code>simsimd_capabilities</code> function to get the available backends at runtime. To match all the function names, consider a RegEx:</p>
<pre><code class="language-regex">SIMSIMD_PUBLIC void simsimd_\w+_\w+_\w+\(
</code></pre>
<p>On Linux, you can use the following command to list all unique functions:</p>
<pre><code class="language-sh">$ grep -oP 'SIMSIMD_PUBLIC void simsimd_\w+_\w+_\w+\(' include/simsimd/*.h | sort | uniq
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_haswell(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_ice(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_neon(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_serial(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_hamming_b8_sve(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_haswell(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_ice(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_neon(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_serial(
> include/simsimd/binary.h:SIMSIMD_PUBLIC void simsimd_jaccard_b8_sve(
</code></pre>
+
\ No newline at end of file
diff --git a/c/monthly/index.xml b/c/monthly/index.xml
new file mode 100644
index 00000000000..9b07c1051c1
--- /dev/null
+++ b/c/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub C Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:00Z
+ Monthly Trending of C in GitHub
+
+
+ betaflight/betaflight
+ 2024-12-01T01:52:00Z
+ tag:github.com,2024-12-01:/betaflight/betaflight
+
+ <p>Open Source Flight Controller Firmware</p><hr><p><img src="https://raw.githubusercontent.com/betaflight/betaflight/master/images/bf_logo.png" alt="Betaflight"></p>
<p><a href="https://github.com/betaflight/betaflight/releases"><img src="https://img.shields.io/github/v/release/betaflight/betaflight" alt="Latest version"></a> <a href="https://github.com/betaflight/betaflight/actions/workflows/nightly.yml"><img src="https://img.shields.io/github/actions/workflow/status/betaflight/betaflight/nightly.yml?branch=master" alt="Build"></a> <a href="https://www.gnu.org/licenses/gpl-3.0"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg?sanitize=true" alt="License: GPL v3"></a> <a href="https://discord.gg/n4E6ak4u3c"><img src="https://img.shields.io/discord/868013470023548938" alt="Join us on Discord!"></a></p>
<p>Betaflight is flight controller software (firmware) used to fly multi-rotor craft and fixed wing craft.</p>
<p>This fork differs from Baseflight and Cleanflight in that it focuses on flight performance, leading-edge feature additions, and wide target support.</p>
<h2>Events</h2>
<table>
<thead>
<tr>
<th>Date</th>
<th>Event</th>
</tr>
</thead>
<tbody>
<tr>
<td>28-04-2024</td>
<td>Firmware 4.5 Release</td>
</tr>
</tbody>
</table>
<h2>News</h2>
<h3>Requirements for the submission of new and updated targets</h3>
<p>The following new requirements for pull requests adding new targets or modifying existing targets are put in place from now on:</p>
<ol>
<li> <p>Read the <a href="https://betaflight.com/docs/development/manufacturer/manufacturer-design-guidelines">hardware specification</a></p> </li>
<li> <p>No new F3 based targets will be accepted;</p> </li>
<li> <p>For any new target that is to be added, only a Unified Target config into <a href="https://github.com/betaflight/unified-targets/tree/master/configs/default">https://github.com/betaflight/unified-targets/tree/master/configs/default</a> needs to be submitted. See the <a href="https://betaflight.com/docs/manufacturer/creating-an-unified-target">instructions</a> for how to create a Unified Target configuration. If there is no Unified Target for the MCU type of the new target (see instructions above), then a 'legacy' format target definition into <code>src/main/target/</code> has to be submitted as well;</p> </li>
<li> <p>For changes to existing targets, the change needs to be applied to the Unified Target config in <a href="https://github.com/betaflight/unified-targets/tree/master/configs/default">https://github.com/betaflight/unified-targets/tree/master/configs/default</a>. If no Unified Target configuration for the target exists, a new Unified Target configuration will have to be created and submitted. If there is no Unified Target for the MCU type of the new target (see instructions above), then an update to the 'legacy' format target definition in <code>src/main/target/</code> has to be submitted alongside the update to the Unified Target configuration.</p> </li>
</ol>
<h2>Features</h2>
<p>Betaflight has the following features:</p>
<ul>
<li>Multi-color RGB LED strip support (each LED can be a different color using variable length WS2811 Addressable RGB strips - use for Orientation Indicators, Low Battery Warning, Flight Mode Status, Initialization Troubleshooting, etc)</li>
<li>DShot (150, 300 and 600), Multishot, Oneshot (125 and 42) and Proshot1000 motor protocol support</li>
<li>Blackbox flight recorder logging (to onboard flash or external microSD card where equipped)</li>
<li>Support for targets that use the STM32 F4, G4, F7 and H7 processors</li>
<li>PWM, PPM, SPI, and Serial (SBus, SumH, SumD, Spektrum 1024/2048, XBus, etc) RX connection with failsafe detection</li>
<li>Multiple telemetry protocols (CRSF, FrSky, HoTT smart-port, MSP, etc)</li>
<li>RSSI via ADC - Uses ADC to read PWM RSSI signals, tested with FrSky D4R-II, X8R, X4R-SB, & XSR</li>
<li>OSD support & configuration without needing third-party OSD software/firmware/comm devices</li>
<li>OLED Displays - Display information on: Battery voltage/current/mAh, profile, rate profile, mode, version, sensors, etc</li>
<li>In-flight manual PID tuning and rate adjustment</li>
<li>PID and filter tuning using sliders</li>
<li>Rate profiles and in-flight selection of them</li>
<li>Configurable serial ports for Serial RX, Telemetry, ESC telemetry, MSP, GPS, OSD, Sonar, etc - Use most devices on any port, softserial included</li>
<li>VTX support for Unify Pro and IRC Tramp</li>
<li>and MUCH, MUCH more.</li>
</ul>
<h2>Installation & Documentation</h2>
<p>See: <a href="https://betaflight.com/docs/wiki">https://betaflight.com/docs/wiki</a></p>
<h2>Support and Developers Channel</h2>
<p>There's a dedicated Discord server here:</p>
<p><a href="https://discord.gg/n4E6ak4u3c">https://discord.gg/n4E6ak4u3c</a></p>
<p>We also have a Facebook Group. Join us to get a place to talk about Betaflight, ask configuration questions, or just hang out with fellow pilots.</p>
<p><a href="https://www.facebook.com/groups/betaflightgroup/">https://www.facebook.com/groups/betaflightgroup/</a></p>
<p>Etiquette: Don't ask to ask and please wait around long enough for a reply - sometimes people are out flying, asleep or at work and can't answer immediately.</p>
<h2>Configuration Tool</h2>
<p>To configure Betaflight you should use the Betaflight-configurator GUI tool (Windows/OSX/Linux) which can be found here:</p>
<p><a href="https://github.com/betaflight/betaflight-configurator/releases/latest">https://github.com/betaflight/betaflight-configurator/releases/latest</a></p>
<h2>Contributing</h2>
<p>Contributions are welcome and encouraged. You can contribute in many ways:</p>
<ul>
<li>implement a new feature in the firmware or in configurator (see <a href="https://raw.githubusercontent.com/betaflight/betaflight/master/#Developers">below</a>);</li>
<li>documentation updates and corrections;</li>
<li>How-To guides - received help? Help others!</li>
<li>bug reporting & fixes;</li>
<li>new feature ideas & suggestions;</li>
<li>provide a new translation for configurator, or help us maintain the existing ones (see <a href="https://raw.githubusercontent.com/betaflight/betaflight/master/#Translators">below</a>).</li>
</ul>
<p>The best place to start is the Betaflight Discord (registration <a href="https://discord.gg/n4E6ak4u3c">here</a>). Next place is the github issue tracker:</p>
<p><a href="https://github.com/betaflight/betaflight/issues">https://github.com/betaflight/betaflight/issues</a> <a href="https://github.com/betaflight/betaflight-configurator/issues">https://github.com/betaflight/betaflight-configurator/issues</a></p>
<p>Before creating new issues please check to see if there is an existing one, search first otherwise you waste people's time when they could be coding instead!</p>
<p>If you want to contribute to our efforts financially, please consider making a donation to us through <a href="https://paypal.me/betaflight">PayPal</a>.</p>
<p>If you want to contribute financially on an ongoing basis, you should consider becoming a patron for us on <a href="https://www.patreon.com/betaflight">Patreon</a>.</p>
<h2>Developers</h2>
<p>Contribution of bugfixes and new features is encouraged. Please be aware that we have a thorough review process for pull requests, and be prepared to explain what you want to achieve with your pull request. Before starting to write code, please read our <a href="https://betaflight.com/docs/development">development guidelines</a> and <a href="https://betaflight.com/docs/development/CodingStyle">coding style definition</a>.</p>
<p>GitHub actions are used to run automatic builds</p>
<h2>Translators</h2>
<p>We want to make Betaflight accessible for pilots who are not fluent in English, and for this reason we are currently maintaining translations into 21 languages for Betaflight Configurator: Català, Dansk, Deutsch, Español, Euskera, Français, Galego, Hrvatski, Bahasa Indonesia, Italiano, 日本語, 한국어, Latviešu, Português, Português Brasileiro, polski, Русский язык, Svenska, 简体中文, 繁體中文. We have got a team of volunteer translators who do this work, but additional translators are always welcome to share the workload, and we are keen to add additional languages. If you would like to help us with translations, you have got the following options:</p>
<ul>
<li>if you help by suggesting some updates or improvements to translations in a language you are familiar with, head to <a href="https://crowdin.com/project/betaflight-configurator">crowdin</a> and add your suggested translations there;</li>
<li>if you would like to start working on the translation for a new language, or take on responsibility for proof-reading the translation for a language you are very familiar with, please head to the Betaflight Discord chat (registration <a href="https://discord.gg/n4E6ak4u3c">here</a>), and join the <a href="https://discord.com/channels/868013470023548938/1057773726915100702">'translation'</a> channel - the people in there can help you to get a new language added, or set you up as a proof reader.</li>
</ul>
<h2>Hardware Issues</h2>
<p>Betaflight does not manufacture or distribute their own hardware. While we are collaborating with and supported by a number of manufacturers, we do not do any kind of hardware support. If you encounter any hardware issues with your flight controller or another component, please contact the manufacturer or supplier of your hardware, or check RCGroups <a href="https://rcgroups.com/forums/showthread.php?t=2464844">https://rcgroups.com/forums/showthread.php?t=2464844</a> to see if others with the same problem have found a solution.</p>
<h2>Betaflight Releases</h2>
<p><a href="https://github.com/betaflight/betaflight/releases">https://github.com/betaflight/betaflight/releases</a></p>
<h2>Open Source / Contributors</h2>
<p>Betaflight is software that is <strong>open source</strong> and is available free of charge without warranty to all users.</p>
<p>Betaflight is forked from Cleanflight, so thanks goes to all those who have contributed to Cleanflight and its origins.</p>
<p>Origins for this fork (Thanks!):</p>
<ul>
<li><strong>Alexinparis</strong> (for MultiWii),</li>
<li><strong>timecop</strong> (for Baseflight),</li>
<li><strong>Dominic Clifton</strong> (for Cleanflight),</li>
<li><strong>borisbstyle</strong> (for Betaflight), and</li>
<li><strong>Sambas</strong> (for the original STM32F4 port).</li>
</ul>
<p>The Betaflight Configurator is forked from Cleanflight Configurator and its origins.</p>
<p>Origins for Betaflight Configurator:</p>
<ul>
<li><strong>Dominic Clifton</strong> (for Cleanflight configurator), and</li>
<li><strong>ctn</strong> (for the original Configurator).</li>
</ul>
<p>Big thanks to current and past contributors:</p>
<ul>
<li>Budden, Martin (martinbudden)</li>
<li>Bardwell, Joshua (joshuabardwell)</li>
<li>Blackman, Jason (blckmn)</li>
<li>ctzsnooze</li>
<li>Höglund, Anders (andershoglund)</li>
<li>Ledvina, Petr (ledvinap) - <strong>IO code awesomeness!</strong></li>
<li>kc10kevin</li>
<li>Keeble, Gary (MadmanK)</li>
<li>Keller, Michael (mikeller) - <strong>Configurator brilliance</strong></li>
<li>Kravcov, Albert (skaman82) - <strong>Configurator brilliance</strong></li>
<li>MJ666</li>
<li>Nathan (nathantsoi)</li>
<li>ravnav</li>
<li>sambas - <strong>bringing us the F4</strong></li>
<li>savaga</li>
<li>Stålheim, Anton (KiteAnton)</li>
</ul>
<p>And many many others who haven't been mentioned....</p>
+
+
+ arendst/Tasmota
+ 2024-12-01T01:52:00Z
+ tag:github.com,2024-12-01:/arendst/Tasmota
+
+ <p>Alternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at</p><hr><p><img src="https://raw.githubusercontent.com/arendst/Tasmota/development/tools/logo/TASMOTA_FullLogo_Vector.svg#gh-light-mode-only" alt="Tasmota logo"><img src="https://raw.githubusercontent.com/arendst/Tasmota/development/tools/logo/TASMOTA_FullLogo_Vector_White.svg#gh-dark-mode-only" alt="Tasmota logo"></p>
<p>Alternative firmware for <a href="https://en.wikipedia.org/wiki/ESP8266">ESP8266</a> and <a href="https://en.wikipedia.org/wiki/ESP32">ESP32</a> based devices with <strong>easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX</strong>. <em>Written for PlatformIO.</em></p>
<p><a href="http://ota.tasmota.com/tasmota/release"><img src="https://img.shields.io/github/release/arendst/Tasmota.svg?sanitize=true" alt="GitHub version"></a> <a href="https://github.com/arendst/Tasmota/releases/latest"><img src="https://img.shields.io/github/downloads/arendst/Tasmota/total.svg?sanitize=true" alt="GitHub download"></a> <a href="https://raw.githubusercontent.com/arendst/Tasmota/development/LICENSE.txt"><img src="https://img.shields.io/github/license/arendst/Tasmota.svg?sanitize=true" alt="License"></a> <a href="https://discord.gg/Ks2Kzd4"><img src="https://img.shields.io/discord/479389167382691863.svg?logo=discord&logoColor=white&color=5865F2&label=Discord" alt="Discord"></a> <a href="https://gitpod.io/#https://github.com/arendst/Tasmota"><img src="https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod" alt="Gitpod Ready-to-Code"></a></p>
<hr>
<p><strong>In light of current events we like to support the people behind <em>PlatformIO Project</em>, especially Ivan Kravets, and wish them the strength to help stop the war. See <a href="https://community.platformio.org/t/platformio-is-ukrainian-project-please-help-us-stop-the-war/26330">platformio-is-ukrainian-project-please-help-us-stop-the-war</a> for what you can do.</strong></p>
<hr>
<h2>Easy install</h2>
<p>Easy initial installation of Tasmota can be performed using the <a href="https://tasmota.github.io/install/">Tasmota WebInstaller</a>.</p>
<p>If you like <strong>Tasmota</strong>, give it a star, or fork it and contribute!</p>
<p><a href="https://github.com/arendst/Tasmota/stargazers"><img src="https://img.shields.io/github/stars/arendst/Tasmota.svg?style=social&label=Star" alt="GitHub stars"></a> <a href="https://github.com/arendst/Tasmota/network"><img src="https://img.shields.io/github/forks/arendst/Tasmota.svg?style=social&label=Fork" alt="GitHub forks"></a> <a href="https://paypal.me/tasmota"><img src="https://img.shields.io/badge/donate-PayPal-blue.svg?sanitize=true" alt="donate"></a></p>
<p>See <a href="https://github.com/arendst/Tasmota/raw/master/RELEASENOTES.md">RELEASENOTES.md</a> for release information.</p>
<p>Firmware binaries can be downloaded from <a href="http://ota.tasmota.com/tasmota/release/">http://ota.tasmota.com/tasmota/release/</a> or <a href="http://ota.tasmota.com/tasmota32/release/">http://ota.tasmota.com/tasmota32/release/</a> for ESP32 binaries.</p>
<h2>Development</h2>
<p><a href="https://github.com/arendst/Tasmota"><img src="https://img.shields.io/badge/development%20version-v14.3.x.x-blue.svg?sanitize=true" alt="Dev Version"></a> <a href="http://ota.tasmota.com/tasmota/"><img src="https://img.shields.io/badge/download-development-yellow.svg?sanitize=true" alt="Download Dev"></a> <a href="https://github.com/arendst/Tasmota/actions/workflows/build_all_the_things.yml"><img src="https://github.com/arendst/Tasmota/actions/workflows/build_all_the_things.yml/badge.svg?sanitize=true" alt="Tasmota CI"></a> <a href="https://github.com/arendst/Tasmota/actions/workflows/Tasmota_build_devel.yml"><img src="https://github.com/arendst/Tasmota/actions/workflows/Tasmota_build_devel.yml/badge.svg?sanitize=true" alt="Build_development"></a></p>
<p>See <a href="https://raw.githubusercontent.com/arendst/Tasmota/development/CHANGELOG.md">CHANGELOG.md</a> for detailed change information.</p>
<p>Unless your Tasmota powered device exhibits a problem or lacks a feature that you need, leave your device alone - it works so don’t make unnecessary changes! If the release version (i.e., the master branch) exhibits unexpected behaviour for your device and configuration, you should upgrade to the latest development version instead to see if your problem is resolved as some bugs in previous releases or development builds may already have been resolved.</p>
<p>Every commit made to the development branch, which is compiling successfully, will post new binary files at <a href="http://ota.tasmota.com/tasmota/">http://ota.tasmota.com/tasmota/</a> (this web address can be used for OTA updates too). It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted.</p>
<p>Note that there is a chance, as with any upgrade, that the device may not function as expected. You must always account for the possibility that you may need to flash the device via the serial programming interface if the OTA upgrade fails. Even with the master release, you should always attempt to test the device or a similar prototype before upgrading a device which is in production or is hard to reach. And, as always, make a backup of the device configuration before beginning any firmware update.</p>
<h2>Disclaimer</h2>
<p><span>⚠</span> <strong>DANGER OF ELECTROCUTION</strong> <span>⚠</span></p>
<p>If your device connects to mains electricity (AC power) there is danger of electrocution if not installed properly. If you don't know how to install it, please call an electrician (<em><strong>Beware:</strong></em> certain countries prohibit installation without a licensed electrician present). Remember: <em><strong>SAFETY FIRST</strong></em>. It is not worth the risk to yourself, your family and your home if you don't know exactly what you are doing. Never tinker or try to flash a device using the serial programming interface while it is connected to MAINS ELECTRICITY (AC power).</p>
<p>We don't take any responsibility nor liability for using this software nor for the installation or any tips, advice, videos, etc. given by any member of this site or any related site.</p>
<h2>Note</h2>
<p>Please do not ask to add new devices unless it requires additional code for new features. If the device is not listed as a module, try using <a href="https://tasmota.github.io/docs/Templates">Templates</a> first. If it is not listed in the <a href="http://templates.blakadder.com">Tasmota Device Templates Repository</a> create your own <a href="https://tasmota.github.io/docs/Templates#creating-your-template">Template</a>.</p>
<h2>Quick Install</h2>
<p>Download one of the released binaries from <a href="http://ota.tasmota.com/tasmota/release/">http://ota.tasmota.com/tasmota/release/</a> or <a href="http://ota.tasmota.com/tasmota32/release/">http://ota.tasmota.com/tasmota32/release/</a> and flash it to your hardware <a href="https://tasmota.github.io/docs/Getting-Started">using our installation guide</a>.</p>
<h2>Important User Compilation Information</h2>
<p>If you want to compile Tasmota yourself keep in mind the following:</p>
<ul>
<li>For ESP8285 based devices only Flash Mode <strong>DOUT</strong> is supported. Do not use Flash Mode DIO / QIO / QOUT as it might seem to brick your device.</li>
<li>For ESP8285 based devices Tasmota uses a 1M linker script WITHOUT spiffs <strong>1M (no SPIFFS)</strong> for optimal code space.</li>
<li>To make compile time changes to Tasmota use the <code>user_config_override.h</code> file. It assures keeping your custom settings when you download and compile a new version. You have to make a copy from the provided <code>user_config_override_sample.h</code> file and add your setting overrides.</li>
</ul>
<h2>Configuration Information</h2>
<p>Please refer to the installation and configuration articles in our <a href="https://tasmota.github.io/docs">documentation</a>.</p>
<h2>Migration Information</h2>
<p>See <a href="https://tasmota.github.io/docs/Upgrading#migration-path">migration path</a> for instructions how to migrate to a major version.</p>
<p><strong>Do not upgrade from minimal to minimal version. It will most likely fail at some point and will require flashing via serial.</strong> If you do have to use minimal versions, always OTA to a full version of the same release before applying next minimal version.</p>
<p>Pay attention to the following version breaks due to dynamic settings updates:</p>
<ol>
<li>Migrate to <strong>Sonoff-Tasmota 3.9.x</strong></li>
<li>Migrate to <strong>Sonoff-Tasmota 4.x</strong></li>
<li>Migrate to <strong>Sonoff-Tasmota 5.14</strong></li>
<li>Migrate to <strong>Sonoff-Tasmota 6.7.1</strong> (<a href="http://ota.tasmota.com/tasmota/release_6.7.1/sonoff.bin">http://ota.tasmota.com/tasmota/release_6.7.1/sonoff.bin</a>) - NOTICE underscore as a dash is not supported in older versions</li>
<li>Migrate to <strong>Tasmota 7.2.0</strong> (<a href="http://ota.tasmota.com/tasmota/release-7.2.0/tasmota.bin">http://ota.tasmota.com/tasmota/release-7.2.0/tasmota.bin</a>)</li>
</ol>
<p>--- Major change in parameter storage layout ---</p>
<ol start="6">
<li>Migrate to <strong>Tasmota 8.5.1</strong> (<a href="http://ota.tasmota.com/tasmota/release-8.5.1/tasmota.bin">http://ota.tasmota.com/tasmota/release-8.5.1/tasmota.bin</a>)</li>
</ol>
<p>--- Major change in internal GPIO function representation ---</p>
<ol start="7">
<li>Migrate to <strong>Tasmota 9.1</strong> (<a href="http://ota.tasmota.com/tasmota/release-9.1.0/tasmota.bin.gz">http://ota.tasmota.com/tasmota/release-9.1.0/tasmota.bin.gz</a>)</li>
<li>Upgrade to <strong>latest release</strong> (<a href="http://ota.tasmota.com/tasmota/release/tasmota.bin.gz">http://ota.tasmota.com/tasmota/release/tasmota.bin.gz</a>)</li>
</ol>
<p>While fallback or downgrading is common practice it was never supported due to Settings additions or changes in newer releases. Starting with release <strong>v9.1.0 Imogen</strong> the internal GPIO function representation has changed in such a way that fallback is only possible to the latest GPIO configuration before installing <strong>v9.1.0</strong>.</p>
<h2>Support Information</h2>
<img src="https://user-images.githubusercontent.com/5904370/68332933-e6e5a600-00d7-11ea-885d-50395f7239a1.png" width="150" align="right">
<p>For a database of supported devices see <a href="https://templates.blakadder.com">Tasmota Device Templates Repository</a></p>
<p>If you're looking for support on <strong>Tasmota</strong> there are some options available:</p>
<h3>Documentation</h3>
<ul>
<li><a href="https://tasmota.github.io/docs">Documentation Site</a>: For information on how to flash Tasmota, configure, use and expand it</li>
<li><a href="https://tasmota.github.io/docs/FAQ/">FAQ and Troubleshooting</a>: For information on common problems and solutions.</li>
<li><a href="https://tasmota.github.io/docs/Commands">Commands Information</a>: For information on all the commands supported by Tasmota.</li>
</ul>
<h3>Support's Community</h3>
<ul>
<li><a href="https://github.com/arendst/Tasmota/discussions">Tasmota Discussions</a>: For Tasmota usage questions, Feature Requests and Projects.</li>
<li><a href="https://discord.gg/Ks2Kzd4">Tasmota Users Chat</a>: For support, troubleshooting and general questions. You have better chances to get fast answers from members of the Tasmota Community.</li>
<li><a href="https://github.com/arendst/Tasmota/issues">Search in Issues</a>: You might find an answer to your question by searching current or closed issues.</li>
<li><a href="https://github.com/arendst/Tasmota/issues/new?template=Bug_report.md">Software Problem Report</a>: For reporting problems of Tasmota Software.</li>
</ul>
<h2>Contribute</h2>
<p>You can contribute to Tasmota by</p>
<ul>
<li>Providing Pull Requests (Features, Proof of Concepts, Language files or Fixes)</li>
<li>Testing new released features and report issues</li>
<li>Donating to acquire hardware for testing and implementing or out of gratitude</li>
<li>Contributing missing <a href="https://tasmota.github.io/docs">documentation</a> for features and devices</li>
</ul>
<p><a href="https://paypal.me/tasmota"><img src="https://img.shields.io/badge/donate-PayPal-blue.svg?sanitize=true" alt="donate"></a></p>
<h2>Credits</h2>
<p>People helping to keep the show on the road:</p>
<ul>
<li>Sfromis providing extensive user support</li>
<li>Barbudor providing user support and code fixes and additions</li>
<li>David Lang providing initial issue resolution and code optimizations</li>
<li>Heiko Krupp for his IRSend, HTU21, SI70xx and Wemo/Hue emulation drivers</li>
<li>Wiktor Schmidt for Travis CI implementation</li>
<li>Thom Dietrich for PlatformIO optimizations</li>
<li>Marinus van den Broek for his EspEasy groundwork</li>
<li>Pete Ba for more user friendly energy monitor calibration</li>
<li>Lobradov providing compile optimization tips</li>
<li>Flexiti for his initial timer implementation</li>
<li>reloxx13 for his <a href="https://github.com/reloxx13/TasmoAdmin">TasmoAdmin</a> management tool</li>
<li>Joachim Banzhaf for his TSL2561 library and driver</li>
<li>Andre Thomas for providing many drivers</li>
<li>Gijs Noorlander for his MHZ19, SenseAir and updated PubSubClient drivers</li>
<li>Erik Montnemery for his HomeAssistant Discovery concept and many code tuning tips</li>
<li>Federico Leoni for continued HomeAssistant Discovery support</li>
<li>Aidan Mountford for his HSB support</li>
<li>Daniel Ztolnai for his Serial Bridge implementation</li>
<li>Gerhard Mutz for multiple sensor & display drivers, Sunrise/Sunset, and scripting</li>
<li>Nuno Ferreira for his HC-SR04 driver</li>
<li>Adrian Scillato for his (security)fixes and implementing and maintaining KNX</li>
<li>Gennaro Tortone for implementing and maintaining Eastron drivers</li>
<li>Raymond Mouthaan for managing Wemos Wiki information</li>
<li>Norbert Richter for his <a href="https://github.com/tasmota/decode-config">decode-config.py</a> tool</li>
<li>Joel Stein, digiblur and Shantur Rathore for their Tuya research and driver</li>
<li>Frogmore42 for providing many issue answers</li>
<li>Jason2866 for platformio support and providing many issue answers</li>
<li>Blakadder for managing the document site and providing template management</li>
<li>Stephan Hadinger for refactoring light driver, enhancing HueEmulation, LVGL, Zigbee and Berry support</li>
<li>tmo for designing the official Tasmota logo</li>
<li>Stefan Bode for his Shutter and Deep sleep drivers</li>
<li>Jacek Ziółkowski for his <a href="https://github.com/jziolkowski/tdm">TDM</a> management tool and <a href="https://github.com/tasmota/tasmotizer">Tasmotizer</a> flashing tool</li>
<li>Christian Staars for NRF24L01 and HM-10 Bluetooth sensor support</li>
<li>Paul Diem for UDP Group communication support</li>
<li>Jörg Schüler-Maroldt for his initial ESP32 port</li>
<li>Javier Arigita for his thermostat driver</li>
<li>Simon Hailes for ESP32 Bluetooth extensions</li>
<li>Many more providing Tips, Wips, Pocs, PRs and Donations</li>
</ul>
<h2>License</h2>
<p>This program is licensed under GPL-3.0-only</p>
+
+
+ portapack-mayhem/mayhem-firmware
+ 2024-12-01T01:52:00Z
+ tag:github.com,2024-12-01:/portapack-mayhem/mayhem-firmware
+
+ <p>Custom firmware for the HackRF+PortaPack H1/H2/H4</p><hr><blockquote>
<p>[!WARNING] <strong>IF YOU'VE PAID FOR MAYHEM OR ANY PREPACKAGED VERSIONS, YOU'RE BEING SCAMMED.</strong></p>
<p>The only legitimate link to our repositories is the <a href="https://github.com/portapack-mayhem/mayhem-firmware">portapack-mayhem</a> organization on GitHub.</p>
</blockquote>
<h1>PortaPack Mayhem</h1>
<p><a href="https://github.com/portapack-mayhem/mayhem-firmware/actions/workflows/create_nightly_release.yml"><img src="https://github.com/portapack-mayhem/mayhem-firmware/actions/workflows/create_nightly_release.yml/badge.svg?branch=next" alt="Nightly Release"></a> <a href="https://codescene.io/projects/8381"><img src="https://codescene.io/projects/8381/status-badges/code-health" alt="CodeScene Code Health"></a> <a href="https://github.com/portapack-mayhem/mayhem-firmware/releases"><img src="https://img.shields.io/github/downloads/portapack-mayhem/mayhem-firmware/total" alt="GitHub All Releases"></a> <a href="https://github.com/portapack-mayhem/mayhem-firmware/releases/latest"><img src="https://img.shields.io/github/downloads/portapack-mayhem/mayhem-firmware/latest/total" alt="GitHub Releases"></a> <a href="https://hub.docker.com/r/eried/portapack"><img src="https://img.shields.io/docker/pulls/eried/portapack.svg?sanitize=true" alt="Docker Hub Pulls"></a> <a href="https://discord.gg/tuwVMv3"><img src="https://dcbadge.vercel.app/api/server/tuwVMv3?style=flat" alt="Discord Chat"></a></p>
<p>This is a fork of the <a href="https://github.com/furrtek/portapack-havoc/">Havoc</a> firmware, which itself was a fork of the <a href="https://github.com/sharebrained/portapack-hackrf">PortaPack</a> firmware, an add-on for the <a href="http://greatscottgadgets.com/hackrf/">HackRF</a>. A fork is a derivate, in this case one that has extra features and fixes when compared to the older versions.</p>
<p><a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/Hardware-overview"><img src="https://raw.githubusercontent.com/wiki/portapack-mayhem/mayhem-firmware/img/hw_overview_h2_front.png" height="400"></a> <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/Hardware-overview#portapack-internals"><img src="https://raw.githubusercontent.com/wiki/portapack-mayhem/mayhem-firmware/img/hw_overview_h2_inside.png" height="400"></a></p>
<p><em><a href="https://grabify.link/P9CO0J">PortaPack H2+HackRF+battery</a> (clone) with a custom <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/3d-printed-enclosure">3d printed case</a></em></p>
<h1>What is this?</h1>
<p>If you are new to <em>HackRF+PortaPack+Mayhem</em>, check these:</p>
<p><a href="https://grabify.link/6HKX9A"><img alt="The Latest HackRF & Portapak Combo - H4M The Flipper Zero Killer?" src="https://img.youtube.com/vi/Ew2qDgm2hf0/maxresdefault.jpg" width="701"></a></p>
<p><a href="https://grabify.link/X4D5TF"><img alt="It’s TOO Easy to Accidentally Do Illegal Stuff with This" src="https://img.youtube.com/vi/OPckpjBSAOw/maxresdefault.jpg" width="172"></a> <a href="https://grabify.link/F9MPOO"><img alt="HackRF Portapack H4M - Getting Started Guide" src="https://img.youtube.com/vi/wzP0zWi85SI/maxresdefault.jpg" width="172"></a> <a href="https://grabify.link/0JUHZ6"><img alt="The new HackRF Portapack H4M" src="https://img.youtube.com/vi/onQRdCITmuk/maxresdefault.jpg" width="172"></a> <a href="https://grabify.link/C0J6ZR"><img alt="HackRF 101 : Everything You Need to Know to Get Started!" src="https://img.youtube.com/vi/xGR_PMD9LeU/maxresdefault.jpg" width="172"></a></p>
<h1>Frequently Asked Questions</h1>
<p>This repository expands upon the previous work by many people and aims to constantly add new features, bugfixes and generate documentation to make further development easier. <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/How-to-collaborate">Collaboration</a> is always welcomed and appreciated.</p>
<h2>What to buy?</h2>
<!--not direct to h4m but to opensourcesdrlab https://grabify.link/TUOLYI--->
<p><span>✔</span> <img src="https://img.shields.io/badge/NEW-yellow" alt="Static Badge"> The fabulous <a href="https://grabify.link/0STXCA">PortaPack H4M Mayhem</a>, featuring numerous improvements and accessories. Sold by our friends at <a href="https://grabify.link/99SAMT">OpenSourceSDRLab</a>. Join their giveaways on discord (check the badge on top).</p>
<p><span>✔</span> A recommended one is this <a href="https://grabify.link/P9CO0J">PortaPack H2</a>, that includes everything you need with the plastic case "inspired" on <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/3d-printed-enclosure">this</a>.</p>
<p><span>✔</span> Some individuals lean towards the <a href="https://grabify.link/LZPBH9">H2 with a metal enclosure</a>, but its advantages remain debated. Share your insights on our <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/Hardware-overview">wiki</a>.</p>
<p><span>⚠</span> Be cautious , <em>ask</em> the seller about compatibility with the latest releases. Look out for the description of the item, if they provide the firmware files for an older version or they have custom setup instructions, this means it might be <strong>NOT compatible</strong>, for example:</p>
<p><img src="https://user-images.githubusercontent.com/1091420/214579017-9ad970b9-0917-48f6-a550-588226d3f89b.png" alt="image"></p>
<p><span>⚠</span> If it looks <strong>too different</strong>, this might mean that they are using their own recipe, check the <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/PortaPack-Versions">different models</a> in our wiki. For example all the H3 and clones of that version use their own version of the firmware. They do not contribute the changes back and eventually you will be left with a device that nobody maintains:</p>
<p><img src="https://user-images.githubusercontent.com/1091420/214581333-424900ee-26f8-4e96-be2f-69d8dc995ba9.png" alt="image"></p>
<h2>Where is the latest version?</h2>
<p>The current <strong>stable release</strong> is on the <a href="https://github.com/portapack-mayhem/mayhem-firmware/releases/latest"><img src="https://img.shields.io/github/v/release/portapack-mayhem/mayhem-firmware?label=Releases&style=social" alt="GitHub release (latest by date)"></a> page. Follow the instructions you can find in the release description. The <strong>latest (nightly) release</strong> can be found <a href="https://github.com/portapack-mayhem/mayhem-firmware/releases/">here</a>.</p>
<h2>How can I collaborate</h2>
<p>You can write <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki">documentation</a>, fix bugs and <a href="https://github.com/portapack-mayhem/mayhem-firmware/issues">answer issues</a> or add new functionality. Please check the following <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki/How-to-collaborate">guide</a> with details.</p>
<p>Consider that the hardware and firmware has been created and maintain by a <a href="https://github.com/mossmann/hackrf/graphs/contributors">lot</a> of <a href="https://github.com/portapack-mayhem/mayhem-firmware/graphs/contributors">people</a>, so always try collaborating your time and effort first. For coding related questions, if something does not fit as an issue, please join our Discord by clicking the chat badge on <a href="https://raw.githubusercontent.com/portapack-mayhem/mayhem-firmware/next/#portapack-mayhem">top</a>.</p>
<p><a href="https://github.com/portapack-mayhem/mayhem-firmware/graphs/contributors"><img src="https://contrib.rocks/image?repo=portapack-mayhem/mayhem-firmware" alt="Contributors"></a></p>
<p>To support the people behind the hardware, please buy a genuine <a href="https://greatscottgadgets.com/hackrf/">HackRF</a> and <a href="https://store.sharebrained.com/products/portapack-for-hackrf-one-kit">PortaPack</a>.</p>
<h2>What if I really want something specific?</h2>
<p>If what you need can be relevant in general, you can <a href="https://github.com/portapack-mayhem/mayhem-firmware/issues/new?assignees=&labels=enhancement&projects=&template=02_feature_request.yml">request a feature</a>. Alternatively, go to our Discord by clicking the chat badge on <a href="https://raw.githubusercontent.com/portapack-mayhem/mayhem-firmware/next/#portapack-mayhem">top</a> and discuss there.</p>
<h2>What if I need help?</h2>
<p>First, check the <a href="https://github.com/portapack-mayhem/mayhem-firmware/wiki">documentation</a>. If you find a bug or you think the problem is related to the current repository, please open an <a href="https://github.com/portapack-mayhem/mayhem-firmware/issues/new/choose">issue</a>.</p>
<p>You can reach the <a href="https://www.facebook.com/groups/177623356165819">official community</a> in Facebook, and our Discord by clicking the chat badge on <a href="https://raw.githubusercontent.com/portapack-mayhem/mayhem-firmware/next/#portapack-mayhem">top</a>.</p>
+
+
\ No newline at end of file
diff --git a/c/weekly/index.xml b/c/weekly/index.xml
new file mode 100644
index 00000000000..b50eacb4af0
--- /dev/null
+++ b/c/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub C Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:03Z
+ Weekly Trending of C in GitHub
+
+
+ hengyoush/kyanos
+ 2024-12-01T01:41:03Z
+ tag:github.com,2024-12-01:/hengyoush/kyanos
+
+ <p>Visualize the time packets spend in the kernel, watch & analyze in command line.</p><hr><h1>kyanos</h1>
<p><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#"><img src="https://img.shields.io/github/last-commit/hengyoush/kyanos" alt="GitHub last commit"></a> <a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#"><img src="https://img.shields.io/github/v/release/hengyoush/kyanos" alt="GitHub release"></a> <a href="https://github.com/hengyoush/kyanos/actions/workflows/test.yml"><img src="https://github.com/hengyoush/kyanos/actions/workflows/test.yml/badge.svg?sanitize=true" alt="Test"></a> <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/kyanos-demo.gif" alt=""> <a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/README_CN.md">简体中文</a> | English</p>
<ul>
<li><a href="https://kyanos.pages.dev/">English Document</a></li>
</ul>
<h2>Table of Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-what-is-kyanos">What is kyanos</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-examples">Examples</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-requirements">Requirements</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-how-to-get-kyanos">How to get kyanos</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-documentation">Documentation</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-usage">Usage</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#-feedback-and-contributions">Feedback and Contributions</a></li>
<li><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#%EF%B8%8F-contacts">Contacts</a></li>
</ul>
<h2>What is kyanos</h2>
<p>Kyanos is an <strong>eBPF-based</strong> network issue analysis tool that enables you to capture network requests, such as HTTP, Redis, and MySQL requests.<br> It also helps you analyze abnormal network issues and quickly troubleshooting without the complex steps of packet capturing, downloading, and analysis.</p>
<ol>
<li><strong>Powerful Traffic Filtering</strong>: Not only can filter based on traditional IP/port information, can also filter by process/container, L7 protocol information, request/response byte size, latency, and more.</li>
</ol>
<pre><code class="language-bash"># Filter by pid
./kyanos watch --pids 1234
# Filter by container id
./kyanos watch --container-id abc
# Filter by Redis key
./kyanos watch redis --keys my-key1,my-key2
# Filter by response byte size
./kyanos watch --resp-size 10000
</code></pre>
<ol start="2">
<li> <p><strong>Advanced Analysis Capabilities</strong> : Unlike tcpdump, which only provides fine-grained packet capture, Kyanos supports aggregating captured packet metrics across various dimensions, quickly providing the critical data most useful for troubleshooting.<br> Imagine if the bandwidth of your HTTP service is suddenly maxed out—how would you quickly analyze <code>which IPs</code> and <code>which requests</code> are causing it?<br> With Kyanos, you just need one command: <code>kyanos stat http --bigresp</code> to find the largest response byte sizes sent to remote IPs and view specific data on request and response metrics.<br> <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/whatkyanos.gif" alt="kyanos find big response"></p> </li>
<li> <p><strong>In-Depth Kernel-Level Latency Details</strong>: In real-world, slow queries to remote services like Redis can be challenging to diagnose precisely. Kyanos provides kernel trace points from the arrival of requests/responses at the network card to the kernel socket buffer, displaying these details in a visual format. This allows you to identify exactly which stage is causing delays.</p> </li>
</ol>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/timedetail.jpg" alt="kyanos time detail"></p>
<ol start="4">
<li> <p><strong>Lightweight and Dependency-Free</strong>: Almost zero dependencies—just a single binary file and one command, with all results displayed in the command line.</p> </li>
<li> <p><strong>Automatic SSL Traffic Decryption</strong> : All captured requests and responses are presented in plaintext.</p> </li>
</ol>
<h2>Examples</h2>
<p><strong>Capture HTTP Traffic with Latency Details</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash">./kyanos watch http
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-watch-http.gif" alt="kyanos quick start watch http"></p>
<p><strong>Capture Redis Traffic with Latency Details</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash">./kyanos watch redis
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-redis.gif" alt="kyanos quick start watch redis"></p>
<p><strong>Identify the Slowest Requests in the Last 5 Seconds</strong></p>
<p>Run the command:</p>
<pre><code class="language-bash"> ./kyanos stat --slow --time 5
</code></pre>
<p>The result is as follows:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/qs-stat-slow.gif" alt="kyanos stat slow"></p>
<h2>❗ Requirements</h2>
<p>Kyanos currently supports kernel versions 3.10(from 3.10.0-957) and 4.14 or above (with plans to support versions between 4.7 and 4.14 in the future).</p>
<blockquote>
<p>You can check your kernel version using <code>uname -r</code>.</p>
</blockquote>
<h2>🎯 How to get kyanos</h2>
<p>You can download a statically linked binary compatible with x86_64 and arm64 architectures from the <a href="https://github.com/hengyoush/kyanos/releases">release page</a>:</p>
<pre><code class="language-bash">tar xvf kyanos_vx.x.x_linux_x86.tar.gz
</code></pre>
<p>Then, run:</p>
<pre><code class="language-bash">kyanos watch
</code></pre>
<p>If the following table appears: <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/quickstart-success.png" alt="kyanos quick start success"> 🎉 Congratulations! Kyanos has started successfully.</p>
<h2>📝 Documentation</h2>
<p><a href="https://kyanos.pages.dev/">English Document</a></p>
<h2>⚙ Usage</h2>
<p>The simplest usage captures all protocols currently supported by Kyanos:</p>
<pre><code class="language-bash">./kyanos watch
</code></pre>
<p>Each request-response record is stored as a row in a table, with each column capturing basic information about that request. You can use the arrow keys or <code>j/k</code> to move up and down through the records: <img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/watch-result.jpg" alt="kyanos watch result"></p>
<p>Press <code>Enter</code> to access the details view:</p>
<p><img src="https://raw.githubusercontent.com/hengyoush/kyanos/main/docs/public/watch-result-detail.jpg" alt="kyanos watch result detail"></p>
<p>In the details view, the first section shows <strong>Latency Details</strong>. Each block represents a "node" that the data packet passes through, such as the process, network card, and socket buffer.<br> Each block includes a time value indicating the time elapsed from the previous node to this node, showing the process flow from the process sending the request to the network card, to the response being copied to the socket buffer, and finally read by the process, with each step’s duration displayed.</p>
<p>The second section provides <strong>Detailed Request and Response Content</strong>, split into Request and Response parts, and truncates content over 1024 bytes.</p>
<p>For targeted traffic capture, such as HTTP traffic:</p>
<pre><code class="language-bash">./kyanos watch http
</code></pre>
<p>You can narrow it further to capture traffic for a specific HTTP path:</p>
<pre><code class="language-bash">./kyanos watch http --path /abc
</code></pre>
<p>Learn more: <a href="https://kyanos.pages.dev/">Kyanos Docs</a></p>
<h2>🤝 Feedback and Contributions</h2>
<blockquote>
<p>[!IMPORTANT] If you encounter any issues or bugs while using the tool, please feel free to ask questions in the issue tracker.</p>
</blockquote>
<h2>🗨️ Contacts</h2>
<p>For more detailed inquiries, you can use the following contact methods:</p>
<ul>
<li><strong>My Email:</strong> <a href="mailto:hengyoush1@163.com">hengyoush1@163.com</a></li>
<li><strong>My Blog:</strong> <a href="http://blog.deadlock.cloud/">http://blog.deadlock.cloud</a></li>
</ul>
<p><a href="https://raw.githubusercontent.com/hengyoush/kyanos/main/#top">Back to top</a></p>
+
+
+ google/AFL
+ 2024-12-01T01:41:03Z
+ tag:github.com,2024-12-01:/google/AFL
+
+ <p>american fuzzy lop - a security-oriented fuzzer</p><hr><h1>american fuzzy lop</h1>
<p><a href="https://travis-ci.org/google/AFL"><img src="https://travis-ci.org/google/AFL.svg?branch=master" alt="Build Status"></a></p>
<p>Originally developed by Michal Zalewski <a href="mailto:lcamtuf@google.com">lcamtuf@google.com</a>.</p>
<p>See <a href="https://raw.githubusercontent.com/google/AFL/master/docs/QuickStartGuide.txt">QuickStartGuide.txt</a> if you don't have time to read this file.</p>
<h2>1) Challenges of guided fuzzing</h2>
<p>Fuzzing is one of the most powerful and proven strategies for identifying security issues in real-world software; it is responsible for the vast majority of remote code execution and privilege escalation bugs found to date in security-critical software.</p>
<p>Unfortunately, fuzzing is also relatively shallow; blind, random mutations make it very unlikely to reach certain code paths in the tested code, leaving some vulnerabilities firmly outside the reach of this technique.</p>
<p>There have been numerous attempts to solve this problem. One of the early approaches - pioneered by Tavis Ormandy - is corpus distillation. The method relies on coverage signals to select a subset of interesting seeds from a massive, high-quality corpus of candidate files, and then fuzz them by traditional means. The approach works exceptionally well, but requires such a corpus to be readily available. In addition, block coverage measurements provide only a very simplistic understanding of program state, and are less useful for guiding the fuzzing effort in the long haul.</p>
<p>Other, more sophisticated research has focused on techniques such as program flow analysis ("concolic execution"), symbolic execution, or static analysis. All these methods are extremely promising in experimental settings, but tend to suffer from reliability and performance problems in practical uses - and currently do not offer a viable alternative to "dumb" fuzzing techniques.</p>
<h2>2) The afl-fuzz approach</h2>
<p>American Fuzzy Lop is a brute-force fuzzer coupled with an exceedingly simple but rock-solid instrumentation-guided genetic algorithm. It uses a modified form of edge coverage to effortlessly pick up subtle, local-scale changes to program control flow.</p>
<p>Simplifying a bit, the overall algorithm can be summed up as:</p>
<ol>
<li> <p>Load user-supplied initial test cases into the queue,</p> </li>
<li> <p>Take next input file from the queue,</p> </li>
<li> <p>Attempt to trim the test case to the smallest size that doesn't alter the measured behavior of the program,</p> </li>
<li> <p>Repeatedly mutate the file using a balanced and well-researched variety of traditional fuzzing strategies,</p> </li>
<li> <p>If any of the generated mutations resulted in a new state transition recorded by the instrumentation, add mutated output as a new entry in the queue.</p> </li>
<li> <p>Go to 2.</p> </li>
</ol>
<p>The discovered test cases are also periodically culled to eliminate ones that have been obsoleted by newer, higher-coverage finds; and undergo several other instrumentation-driven effort minimization steps.</p>
<p>As a side result of the fuzzing process, the tool creates a small, self-contained corpus of interesting test cases. These are extremely useful for seeding other, labor- or resource-intensive testing regimes - for example, for stress-testing browsers, office applications, graphics suites, or closed-source tools.</p>
<p>The fuzzer is thoroughly tested to deliver out-of-the-box performance far superior to blind fuzzing or coverage-only tools.</p>
<h2>3) Instrumenting programs for use with AFL</h2>
<p>When source code is available, instrumentation can be injected by a companion tool that works as a drop-in replacement for gcc or clang in any standard build process for third-party code.</p>
<p>The instrumentation has a fairly modest performance impact; in conjunction with other optimizations implemented by afl-fuzz, most programs can be fuzzed as fast or even faster than possible with traditional tools.</p>
<p>The correct way to recompile the target program may vary depending on the specifics of the build process, but a nearly-universal approach would be:</p>
<pre><code class="language-shell">$ CC=/path/to/afl/afl-gcc ./configure
$ make clean all
</code></pre>
<p>For C++ programs, you'd would also want to set <code>CXX=/path/to/afl/afl-g++</code>.</p>
<p>The clang wrappers (afl-clang and afl-clang++) can be used in the same way; clang users may also opt to leverage a higher-performance instrumentation mode, as described in llvm_mode/README.llvm.</p>
<p>When testing libraries, you need to find or write a simple program that reads data from stdin or from a file and passes it to the tested library. In such a case, it is essential to link this executable against a static version of the instrumented library, or to make sure that the correct .so file is loaded at runtime (usually by setting <code>LD_LIBRARY_PATH</code>). The simplest option is a static build, usually possible via:</p>
<pre><code class="language-shell">$ CC=/path/to/afl/afl-gcc ./configure --disable-shared
</code></pre>
<p>Setting <code>AFL_HARDEN=1</code> when calling 'make' will cause the CC wrapper to automatically enable code hardening options that make it easier to detect simple memory bugs. Libdislocator, a helper library included with AFL (see libdislocator/README.dislocator) can help uncover heap corruption issues, too.</p>
<p>PS. ASAN users are advised to review <a href="https://raw.githubusercontent.com/google/AFL/master/docs/notes_for_asan.txt">notes_for_asan.txt</a> file for important caveats.</p>
<h2>4) Instrumenting binary-only apps</h2>
<p>When source code is <em>NOT</em> available, the fuzzer offers experimental support for fast, on-the-fly instrumentation of black-box binaries. This is accomplished with a version of QEMU running in the lesser-known "user space emulation" mode.</p>
<p>QEMU is a project separate from AFL, but you can conveniently build the feature by doing:</p>
<pre><code class="language-shell">$ cd qemu_mode
$ ./build_qemu_support.sh
</code></pre>
<p>For additional instructions and caveats, see qemu_mode/README.qemu.</p>
<p>The mode is approximately 2-5x slower than compile-time instrumentation, is less conducive to parallelization, and may have some other quirks.</p>
<h2>5) Choosing initial test cases</h2>
<p>To operate correctly, the fuzzer requires one or more starting file that contains a good example of the input data normally expected by the targeted application. There are two basic rules:</p>
<ul>
<li> <p>Keep the files small. Under 1 kB is ideal, although not strictly necessary. For a discussion of why size matters, see <a href="https://raw.githubusercontent.com/google/AFL/master/docs/perf_tips.txt">perf_tips.txt</a>.</p> </li>
<li> <p>Use multiple test cases only if they are functionally different from each other. There is no point in using fifty different vacation photos to fuzz an image library.</p> </li>
</ul>
<p>You can find many good examples of starting files in the testcases/ subdirectory that comes with this tool.</p>
<p>PS. If a large corpus of data is available for screening, you may want to use the afl-cmin utility to identify a subset of functionally distinct files that exercise different code paths in the target binary.</p>
<h2>6) Fuzzing binaries</h2>
<p>The fuzzing process itself is carried out by the afl-fuzz utility. This program requires a read-only directory with initial test cases, a separate place to store its findings, plus a path to the binary to test.</p>
<p>For target binaries that accept input directly from stdin, the usual syntax is:</p>
<pre><code class="language-shell">$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program [...params...]
</code></pre>
<p>For programs that take input from a file, use '@@' to mark the location in the target's command line where the input file name should be placed. The fuzzer will substitute this for you:</p>
<pre><code class="language-shell">$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@
</code></pre>
<p>You can also use the -f option to have the mutated data written to a specific file. This is useful if the program expects a particular file extension or so.</p>
<p>Non-instrumented binaries can be fuzzed in the QEMU mode (add -Q in the command line) or in a traditional, blind-fuzzer mode (specify -n).</p>
<p>You can use -t and -m to override the default timeout and memory limit for the executed process; rare examples of targets that may need these settings touched include compilers and video decoders.</p>
<p>Tips for optimizing fuzzing performance are discussed in <a href="https://raw.githubusercontent.com/google/AFL/master/docs/perf_tips.txt">perf_tips.txt</a>.</p>
<p>Note that afl-fuzz starts by performing an array of deterministic fuzzing steps, which can take several days, but tend to produce neat test cases. If you want quick & dirty results right away - akin to zzuf and other traditional fuzzers - add the -d option to the command line.</p>
<h2>7) Interpreting output</h2>
<p>See the <a href="https://raw.githubusercontent.com/google/AFL/master/docs/status_screen.txt">status_screen.txt</a> file for information on how to interpret the displayed stats and monitor the health of the process. Be sure to consult this file especially if any UI elements are highlighted in red.</p>
<p>The fuzzing process will continue until you press Ctrl-C. At minimum, you want to allow the fuzzer to complete one queue cycle, which may take anywhere from a couple of hours to a week or so.</p>
<p>There are three subdirectories created within the output directory and updated in real time:</p>
<ul>
<li> <p>queue/ - test cases for every distinctive execution path, plus all the starting files given by the user. This is the synthesized corpus mentioned in section 2. Before using this corpus for any other purposes, you can shrink it to a smaller size using the afl-cmin tool. The tool will find a smaller subset of files offering equivalent edge coverage.</p> </li>
<li> <p>crashes/ - unique test cases that cause the tested program to receive a fatal signal (e.g., SIGSEGV, SIGILL, SIGABRT). The entries are grouped by the received signal.</p> </li>
<li> <p>hangs/ - unique test cases that cause the tested program to time out. The default time limit before something is classified as a hang is the larger of 1 second and the value of the -t parameter. The value can be fine-tuned by setting AFL_HANG_TMOUT, but this is rarely necessary.</p> </li>
</ul>
<p>Crashes and hangs are considered "unique" if the associated execution paths involve any state transitions not seen in previously-recorded faults. If a single bug can be reached in multiple ways, there will be some count inflation early in the process, but this should quickly taper off.</p>
<p>The file names for crashes and hangs are correlated with parent, non-faulting queue entries. This should help with debugging.</p>
<p>When you can't reproduce a crash found by afl-fuzz, the most likely cause is that you are not setting the same memory limit as used by the tool. Try:</p>
<pre><code class="language-shell">$ LIMIT_MB=50
$ ( ulimit -Sv $[LIMIT_MB << 10]; /path/to/tested_binary ... )
</code></pre>
<p>Change LIMIT_MB to match the -m parameter passed to afl-fuzz. On OpenBSD, also change -Sv to -Sd.</p>
<p>Any existing output directory can be also used to resume aborted jobs; try:</p>
<pre><code class="language-shell">$ ./afl-fuzz -i- -o existing_output_dir [...etc...]
</code></pre>
<p>If you have gnuplot installed, you can also generate some pretty graphs for any active fuzzing task using afl-plot. For an example of how this looks like, see <a href="http://lcamtuf.coredump.cx/afl/plot/">http://lcamtuf.coredump.cx/afl/plot/</a>.</p>
<h2>8) Parallelized fuzzing</h2>
<p>Every instance of afl-fuzz takes up roughly one core. This means that on multi-core systems, parallelization is necessary to fully utilize the hardware. For tips on how to fuzz a common target on multiple cores or multiple networked machines, please refer to <a href="https://raw.githubusercontent.com/google/AFL/master/docs/parallel_fuzzing.txt">parallel_fuzzing.txt</a>.</p>
<p>The parallel fuzzing mode also offers a simple way for interfacing AFL to other fuzzers, to symbolic or concolic execution engines, and so forth; again, see the last section of <a href="https://raw.githubusercontent.com/google/AFL/master/docs/parallel_fuzzing.txt">parallel_fuzzing.txt</a> for tips.</p>
<h2>9) Fuzzer dictionaries</h2>
<p>By default, afl-fuzz mutation engine is optimized for compact data formats - say, images, multimedia, compressed data, regular expression syntax, or shell scripts. It is somewhat less suited for languages with particularly verbose and redundant verbiage - notably including HTML, SQL, or JavaScript.</p>
<p>To avoid the hassle of building syntax-aware tools, afl-fuzz provides a way to seed the fuzzing process with an optional dictionary of language keywords, magic headers, or other special tokens associated with the targeted data type -- and use that to reconstruct the underlying grammar on the go:</p>
<p><a href="http://lcamtuf.blogspot.com/2015/01/afl-fuzz-making-up-grammar-with.html">http://lcamtuf.blogspot.com/2015/01/afl-fuzz-making-up-grammar-with.html</a></p>
<p>To use this feature, you first need to create a dictionary in one of the two formats discussed in dictionaries/README.dictionaries; and then point the fuzzer to it via the -x option in the command line.</p>
<p>(Several common dictionaries are already provided in that subdirectory, too.)</p>
<p>There is no way to provide more structured descriptions of the underlying syntax, but the fuzzer will likely figure out some of this based on the instrumentation feedback alone. This actually works in practice, say:</p>
<p><a href="http://lcamtuf.blogspot.com/2015/04/finding-bugs-in-sqlite-easy-way.html">http://lcamtuf.blogspot.com/2015/04/finding-bugs-in-sqlite-easy-way.html</a></p>
<p>PS. Even when no explicit dictionary is given, afl-fuzz will try to extract existing syntax tokens in the input corpus by watching the instrumentation very closely during deterministic byte flips. This works for some types of parsers and grammars, but isn't nearly as good as the -x mode.</p>
<p>If a dictionary is really hard to come by, another option is to let AFL run for a while, and then use the token capture library that comes as a companion utility with AFL. For that, see libtokencap/README.tokencap.</p>
<h2>10) Crash triage</h2>
<p>The coverage-based grouping of crashes usually produces a small data set that can be quickly triaged manually or with a very simple GDB or Valgrind script. Every crash is also traceable to its parent non-crashing test case in the queue, making it easier to diagnose faults.</p>
<p>Having said that, it's important to acknowledge that some fuzzing crashes can be difficult to quickly evaluate for exploitability without a lot of debugging and code analysis work. To assist with this task, afl-fuzz supports a very unique "crash exploration" mode enabled with the -C flag.</p>
<p>In this mode, the fuzzer takes one or more crashing test cases as the input, and uses its feedback-driven fuzzing strategies to very quickly enumerate all code paths that can be reached in the program while keeping it in the crashing state.</p>
<p>Mutations that do not result in a crash are rejected; so are any changes that do not affect the execution path.</p>
<p>The output is a small corpus of files that can be very rapidly examined to see what degree of control the attacker has over the faulting address, or whether it is possible to get past an initial out-of-bounds read - and see what lies beneath.</p>
<p>Oh, one more thing: for test case minimization, give afl-tmin a try. The tool can be operated in a very simple way:</p>
<pre><code class="language-shell">$ ./afl-tmin -i test_case -o minimized_result -- /path/to/program [...]
</code></pre>
<p>The tool works with crashing and non-crashing test cases alike. In the crash mode, it will happily accept instrumented and non-instrumented binaries. In the non-crashing mode, the minimizer relies on standard AFL instrumentation to make the file simpler without altering the execution path.</p>
<p>The minimizer accepts the -m, -t, -f and @@ syntax in a manner compatible with afl-fuzz.</p>
<p>Another recent addition to AFL is the afl-analyze tool. It takes an input file, attempts to sequentially flip bytes, and observes the behavior of the tested program. It then color-codes the input based on which sections appear to be critical, and which are not; while not bulletproof, it can often offer quick insights into complex file formats. More info about its operation can be found near the end of <a href="https://raw.githubusercontent.com/google/AFL/master/docs/technical_details.txt">technical_details.txt</a>.</p>
<h2>11) Going beyond crashes</h2>
<p>Fuzzing is a wonderful and underutilized technique for discovering non-crashing design and implementation errors, too. Quite a few interesting bugs have been found by modifying the target programs to call abort() when, say:</p>
<ul>
<li> <p>Two bignum libraries produce different outputs when given the same fuzzer-generated input,</p> </li>
<li> <p>An image library produces different outputs when asked to decode the same input image several times in a row,</p> </li>
<li> <p>A serialization / deserialization library fails to produce stable outputs when iteratively serializing and deserializing fuzzer-supplied data,</p> </li>
<li> <p>A compression library produces an output inconsistent with the input file when asked to compress and then decompress a particular blob.</p> </li>
</ul>
<p>Implementing these or similar sanity checks usually takes very little time; if you are the maintainer of a particular package, you can make this code conditional with <code>#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION</code> (a flag also shared with libfuzzer) or <code>#ifdef __AFL_COMPILER</code> (this one is just for AFL).</p>
<h2>12) Common-sense risks</h2>
<p>Please keep in mind that, similarly to many other computationally-intensive tasks, fuzzing may put strain on your hardware and on the OS. In particular:</p>
<ul>
<li> <p>Your CPU will run hot and will need adequate cooling. In most cases, if cooling is insufficient or stops working properly, CPU speeds will be automatically throttled. That said, especially when fuzzing on less suitable hardware (laptops, smartphones, etc), it's not entirely impossible for something to blow up.</p> </li>
<li> <p>Targeted programs may end up erratically grabbing gigabytes of memory or filling up disk space with junk files. AFL tries to enforce basic memory limits, but can't prevent each and every possible mishap. The bottom line is that you shouldn't be fuzzing on systems where the prospect of data loss is not an acceptable risk.</p> </li>
<li> <p>Fuzzing involves billions of reads and writes to the filesystem. On modern systems, this will be usually heavily cached, resulting in fairly modest "physical" I/O - but there are many factors that may alter this equation. It is your responsibility to monitor for potential trouble; with very heavy I/O, the lifespan of many HDDs and SSDs may be reduced.</p> <p>A good way to monitor disk I/O on Linux is the 'iostat' command:</p> </li>
</ul>
<pre><code class="language-shell"> $ iostat -d 3 -x -k [...optional disk ID...]
</code></pre>
<h2>13) Known limitations & areas for improvement</h2>
<p>Here are some of the most important caveats for AFL:</p>
<ul>
<li> <p>AFL detects faults by checking for the first spawned process dying due to a signal (SIGSEGV, SIGABRT, etc). Programs that install custom handlers for these signals may need to have the relevant code commented out. In the same vein, faults in child processed spawned by the fuzzed target may evade detection unless you manually add some code to catch that.</p> </li>
<li> <p>As with any other brute-force tool, the fuzzer offers limited coverage if encryption, checksums, cryptographic signatures, or compression are used to wholly wrap the actual data format to be tested.</p> <p>To work around this, you can comment out the relevant checks (see experimental/libpng_no_checksum/ for inspiration); if this is not possible, you can also write a postprocessor, as explained in experimental/post_library/.</p> </li>
<li> <p>There are some unfortunate trade-offs with ASAN and 64-bit binaries. This isn't due to any specific fault of afl-fuzz; see <a href="https://raw.githubusercontent.com/google/AFL/master/docs/notes_for_asan.txt">notes_for_asan.txt</a> for tips.</p> </li>
<li> <p>There is no direct support for fuzzing network services, background daemons, or interactive apps that require UI interaction to work. You may need to make simple code changes to make them behave in a more traditional way. Preeny may offer a relatively simple option, too - see: <a href="https://github.com/zardus/preeny">https://github.com/zardus/preeny</a></p> <p>Some useful tips for modifying network-based services can be also found at: <a href="https://www.fastly.com/blog/how-to-fuzz-server-american-fuzzy-lop">https://www.fastly.com/blog/how-to-fuzz-server-american-fuzzy-lop</a></p> </li>
<li> <p>AFL doesn't output human-readable coverage data. If you want to monitor coverage, use afl-cov from Michael Rash: <a href="https://github.com/mrash/afl-cov">https://github.com/mrash/afl-cov</a></p> </li>
<li> <p>Occasionally, sentient machines rise against their creators. If this happens to you, please consult <a href="http://lcamtuf.coredump.cx/prep/">http://lcamtuf.coredump.cx/prep/</a>.</p> </li>
</ul>
<p>Beyond this, see INSTALL for platform-specific tips.</p>
<h2>14) Special thanks</h2>
<p>Many of the improvements to afl-fuzz wouldn't be possible without feedback, bug reports, or patches from:</p>
<pre><code> Jann Horn Hanno Boeck
Felix Groebert Jakub Wilk
Richard W. M. Jones Alexander Cherepanov
Tom Ritter Hovik Manucharyan
Sebastian Roschke Eberhard Mattes
Padraig Brady Ben Laurie
@dronesec Luca Barbato
Tobias Ospelt Thomas Jarosch
Martin Carpenter Mudge Zatko
Joe Zbiciak Ryan Govostes
Michael Rash William Robinet
Jonathan Gray Filipe Cabecinhas
Nico Weber Jodie Cunningham
Andrew Griffiths Parker Thompson
Jonathan Neuschfer Tyler Nighswander
Ben Nagy Samir Aguiar
Aidan Thornton Aleksandar Nikolich
Sam Hakim Laszlo Szekeres
David A. Wheeler Turo Lamminen
Andreas Stieger Richard Godbee
Louis Dassy teor2345
Alex Moneger Dmitry Vyukov
Keegan McAllister Kostya Serebryany
Richo Healey Martijn Bogaard
rc0r Jonathan Foote
Christian Holler Dominique Pelle
Jacek Wielemborek Leo Barnes
Jeremy Barnes Jeff Trull
Guillaume Endignoux ilovezfs
Daniel Godas-Lopez Franjo Ivancic
Austin Seipp Daniel Komaromy
Daniel Binderman Jonathan Metzman
Vegard Nossum Jan Kneschke
Kurt Roeckx Marcel Bohme
Van-Thuan Pham Abhik Roychoudhury
Joshua J. Drake Toby Hutton
Rene Freingruber Sergey Davidoff
Sami Liedes Craig Young
Andrzej Jackowski Daniel Hodson
</code></pre>
<p>Thank you!</p>
<h2>15) Contact</h2>
<p>Questions? Concerns? Bug reports? Please use GitHub.</p>
<p>There is also a mailing list for the project; to join, send a mail to <a href="mailto:afl-users+subscribe@googlegroups.com">afl-users+subscribe@googlegroups.com</a>. Or, if you prefer to browse archives first, try: <a href="https://groups.google.com/group/afl-users">https://groups.google.com/group/afl-users</a>.</p>
+
+
+ apache/cloudberry
+ 2024-12-01T01:41:03Z
+ tag:github.com,2024-12-01:/apache/cloudberry
+
+ <p>One advanced and mature open-source MPP (Massively Parallel Processing) database. Open source alternative to Greenplum Database.</p><hr><h1>Apache Cloudberry (Incubating)</h1>
<p align="center">
<picture>
<source media="(prefers-color-scheme: light)" srcset="./.github/full_color_black.svg">
<source media="(prefers-color-scheme: dark)" srcset="./.github/full_color_white.svg">
<img alt="Cloudberry Database Logo" src="https://raw.githubusercontent.com/apache/cloudberry/main/.github/full_color_black.svg?sanitize=true" width="400px">
</picture> </p>
<p><a href="https://cloudberry.apache.org"><img src="https://img.shields.io/badge/Website-eebc46" alt="Website"></a> <a href="https://cloudberry.apache.org/docs"><img src="https://img.shields.io/badge/Documentation-acd94a" alt="Documentation"></a> <a href="https://inviter.co/apache-cloudberry"><img src="https://img.shields.io/badge/Join_Slack-6a32c9" alt="Slack"></a> <a href="https://twitter.com/ASFCloudberry"><img src="https://img.shields.io/twitter/follow/ASFCloudberry" alt="Twitter Follow"></a> <a href="https://cloudberry.apache.org/community/wechat"><img src="https://img.shields.io/badge/WeChat-eebc46" alt="WeChat"></a> <a href="https://youtube.com/@ApacheCloudberry"><img src="https://img.shields.io/badge/Youtube-gebc46" alt="Youtube"></a> <a href="https://github.com/apache/cloudberry/discussions"><img src="https://img.shields.io/github/discussions/apache/cloudberry" alt="GitHub Discussions"></a> <img src="https://img.shields.io/github/commit-activity/m/apache/cloudberry" alt="GitHub commit activity(branch)"> <img src="https://img.shields.io/github/contributors/apache/cloudberry" alt="GitHub contributors"> <img src="https://img.shields.io/github/license/apache/cloudberry" alt="GitHub License"> <a href="https://github.com/apache/cloudberry/actions/workflows/build-cloudberry.yml"><img src="https://github.com/apache/cloudberry/actions/workflows/build-cloudberry.yml/badge.svg?sanitize=true" alt="Apache Cloudberry Build"></a></p>
<hr>
<h2>Introduction</h2>
<p>Apache Cloudberry (Incubating), created by the original developers of Greenplum Database, is one advanced and mature open-source Massively Parallel Processing (MPP) database, which evolves from the open-source version of the Pivotal Greenplum Database®️ but features a newer PostgreSQL kernel and more advanced enterprise capabilities. It can serve as a data warehouse and can also be used for large-scale analytics and AI/ML workloads.</p>
<h2>Build and try out</h2>
<h3>Build from source</h3>
<p>You can follow <a href="https://raw.githubusercontent.com/apache/cloudberry/main/deploy/build">these guides</a> to build Cloudberry on Linux OS (including RHEL/Rocky Linux, and Ubuntu) and macOS.</p>
<h3>Try out quickly</h3>
<p>Welcome to try out Cloudberry via building <a href="https://github.com/apache/cloudberry-bootcamp">one Docker-based Sandbox</a>, which is tailored to help you gain a basic understanding of Cloudberry's capabilities and features a range of materials, including tutorials, sample code, and crash courses.</p>
<h2>Repositories</h2>
<p>This is the main repository for Apache Cloudberry (Incubating). Alongside this, there are several ecosystem repositories for Cloudberry, including the website, extensions, connectors, adapters, and other utilities.</p>
<ul>
<li><a href="https://github.com/apache/cloudberry-site">apache/cloudberry-site</a>: website and documentation sources.</li>
<li><a href="https://github.com/apache/cloudberry-bootcamp">apache/cloudberry-bootcamp</a>: help you quickly try out Cloudberry via one Docker-based Sandbox.</li>
<li><a href="https://github.com/apache/cloudberry-gpbackup">apache/cloudberry-gpbackup</a>: backup utility for Cloudberry.</li>
<li><a href="https://github.com/apache/cloudberry-go-libs">apache/cloudberry-go-libs</a>: go-libs for Cloudberry.</li>
<li><a href="https://github.com/apache/cloudberry-gpbackup-s3-plugin">apache/cloudberry-gpbackup-s3-plugin</a>: S3 plugin for use with Cloudberry backup utility.</li>
<li><a href="https://github.com/apache/cloudberry-pxf">apache/cloudberry-pxf</a>: Platform Extension Framework (PXF) for Cloudberry.</li>
</ul>
<h2>Community & Support</h2>
<p>We have many channels for community members to discuss, ask for help, feedback, and chat:</p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Slack</td>
<td><a href="https://inviter.co/apache-cloudberry">Click to Join</a> the real-time chat on Slack for QA, Dev, Events, and more. Don't miss out! Check out the <a href="https://cloudberry.apache.org/community/slack">Slack guide</a> to learn more.</td>
</tr>
<tr>
<td>Q&A</td>
<td>Ask for help when running/developing Cloudberry, visit <a href="https://github.com/apache/cloudberry/discussions/categories/q-a">GitHub Discussions - QA</a>.</td>
</tr>
<tr>
<td>New ideas / Feature Requests</td>
<td>Share ideas for new features, visit <a href="https://github.com/apache/cloudberry/discussions/categories/ideas-feature-requests">GitHub Discussions - Ideas</a>.</td>
</tr>
<tr>
<td>Report bugs</td>
<td>Problems and issues in Apache Cloudberry core. If you find bugs, welcome to submit them <a href="https://github.com/apache/cloudberrydb/issues">here</a>.</td>
</tr>
<tr>
<td>Report a security vulnerability</td>
<td>View our <a href="https://github.com/apache/cloudberry/security/policy">security policy</a> to learn how to report and contact us.</td>
</tr>
<tr>
<td>Community events</td>
<td>Including meetups, webinars, conferences, and more events, visit the <a href="https://cloudberry.apache.org/community/events">Events page</a> and subscribe events calendar.</td>
</tr>
<tr>
<td>Documentation</td>
<td><a href="https://cloudberry.apache.org/docs/">Official documentation</a> for Cloudberry. You can explore it to discover more details about us.</td>
</tr>
</tbody>
</table>
<h2>Contribution</h2>
<p>Contributions can be diverse, such as code enhancements, bug fixes, feature proposals, documents, marketing, and so on. No contribution is too small, we encourage all types of contributions. Cloudberry community welcomes contributions from anyone, new and experienced! Our <a href="https://cloudberry.apache.org/contribute">contribution guide</a> will help you get started with the contribution.</p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Code contribution</td>
<td>Learn how to contribute code to the Cloudberry, including coding preparation, conventions, workflow, review, and checklist following the <a href="https://cloudberry.apache.org/contribute/code">code contribution guide</a>.</td>
</tr>
<tr>
<td>Submit the proposal</td>
<td>Proposing major changes to Cloudberry through <a href="https://cloudberry.apache.org/contribute/proposal">proposal guide</a>.</td>
</tr>
<tr>
<td>Doc contribution</td>
<td>We need you to join us to help us improve the documentation, see the <a href="https://cloudberry.apache.org/contribute/doc">doc contribution guide</a>.</td>
</tr>
</tbody>
</table>
<h2>Roadmap</h2>
<p>You can check our <a href="https://github.com/orgs/cloudberrydb/discussions/369">Cloudberry Roadmap 2024</a> out to see the product plans and goals we want to achieve in 2024. Welcome to share your thoughts and ideas to join us in shaping the future of Apache Cloudberry (Incubating). (We will update the Roadmap after entering the Incubator.)</p>
<h2>Acknowledgment</h2>
<p>Thanks to <a href="https://www.postgresql.org/">PostgreSQL</a>, <a href="https://greenplum.org/">Greenplum Database</a> and other great open source projects to make Apache Cloudberry has a sound foundation.</p>
<h2>License</h2>
<p>Cloudberry is licensed under the Apache License, Version 2.0. For details, see the <a href="https://raw.githubusercontent.com/apache/cloudberry/main/LICENSE">LICENSE</a>.</p>
<h2>ASF Incubator disclaimer</h2>
<p>Apache Cloudberry is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required for all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p>
+
+
\ No newline at end of file
diff --git a/c2hs-haskell/daily/index.xml b/c2hs-haskell/daily/index.xml
index cde74a7fad7..95b57c597c6 100644
--- a/c2hs-haskell/daily/index.xml
+++ b/c2hs-haskell/daily/index.xml
@@ -1,7 +1,7 @@
GitHub C2hs Haskell Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:36Z
+ 2024-12-01T01:30:23Z
Daily Trending of C2hs Haskell in GitHub
\ No newline at end of file
diff --git a/c2hs-haskell/monthly/index.xml b/c2hs-haskell/monthly/index.xml
new file mode 100644
index 00000000000..d0c83bff863
--- /dev/null
+++ b/c2hs-haskell/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub C2hs Haskell Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:04Z
+ Monthly Trending of C2hs Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/c2hs-haskell/weekly/index.xml b/c2hs-haskell/weekly/index.xml
new file mode 100644
index 00000000000..61d8594252b
--- /dev/null
+++ b/c2hs-haskell/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub C2hs Haskell Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:07Z
+ Weekly Trending of C2hs Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/cabal-config/daily/index.xml b/cabal-config/daily/index.xml
index e5f387bff59..e190226eea9 100644
--- a/cabal-config/daily/index.xml
+++ b/cabal-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cabal Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:49Z
+ 2024-12-01T01:30:36Z
Daily Trending of Cabal Config in GitHub
\ No newline at end of file
diff --git a/cabal-config/monthly/index.xml b/cabal-config/monthly/index.xml
new file mode 100644
index 00000000000..d461cfa9d04
--- /dev/null
+++ b/cabal-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cabal Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:15Z
+ Monthly Trending of Cabal Config in GitHub
+
+
\ No newline at end of file
diff --git a/cabal-config/weekly/index.xml b/cabal-config/weekly/index.xml
new file mode 100644
index 00000000000..afe54a1236b
--- /dev/null
+++ b/cabal-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cabal Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:19Z
+ Weekly Trending of Cabal Config in GitHub
+
+
\ No newline at end of file
diff --git a/cadence/daily/index.xml b/cadence/daily/index.xml
index cc77bafe861..5905b8363d3 100644
--- a/cadence/daily/index.xml
+++ b/cadence/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cadence Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:50Z
+ 2024-12-01T01:30:36Z
Daily Trending of Cadence in GitHub
\ No newline at end of file
diff --git a/cadence/monthly/index.xml b/cadence/monthly/index.xml
new file mode 100644
index 00000000000..e0e3d8c0de4
--- /dev/null
+++ b/cadence/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cadence Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:15Z
+ Monthly Trending of Cadence in GitHub
+
+
\ No newline at end of file
diff --git a/cadence/weekly/index.xml b/cadence/weekly/index.xml
new file mode 100644
index 00000000000..4a61409fa4c
--- /dev/null
+++ b/cadence/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cadence Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:19Z
+ Weekly Trending of Cadence in GitHub
+
+
\ No newline at end of file
diff --git a/cairo/daily/index.xml b/cairo/daily/index.xml
index cafa7f58dd7..ea12ddc0669 100644
--- a/cairo/daily/index.xml
+++ b/cairo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cairo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:49Z
+ 2024-12-01T01:30:37Z
Daily Trending of Cairo in GitHub
\ No newline at end of file
diff --git a/cairo/monthly/index.xml b/cairo/monthly/index.xml
new file mode 100644
index 00000000000..0109dec6afe
--- /dev/null
+++ b/cairo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cairo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:15Z
+ Monthly Trending of Cairo in GitHub
+
+
\ No newline at end of file
diff --git a/cairo/weekly/index.xml b/cairo/weekly/index.xml
new file mode 100644
index 00000000000..ec3ce2b6b82
--- /dev/null
+++ b/cairo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cairo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:20Z
+ Weekly Trending of Cairo in GitHub
+
+
\ No newline at end of file
diff --git a/cap'n-proto/daily/index.xml b/cap'n-proto/daily/index.xml
index 146c6ef75c6..7a8aef3490e 100644
--- a/cap'n-proto/daily/index.xml
+++ b/cap'n-proto/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cap'n Proto Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:51Z
+ 2024-12-01T01:30:38Z
Daily Trending of Cap'n Proto in GitHub
\ No newline at end of file
diff --git a/cap'n-proto/monthly/index.xml b/cap'n-proto/monthly/index.xml
new file mode 100644
index 00000000000..686a3b19ac3
--- /dev/null
+++ b/cap'n-proto/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cap'n Proto Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:16Z
+ Monthly Trending of Cap'n Proto in GitHub
+
+
\ No newline at end of file
diff --git a/cap'n-proto/weekly/index.xml b/cap'n-proto/weekly/index.xml
new file mode 100644
index 00000000000..8447eda1b13
--- /dev/null
+++ b/cap'n-proto/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cap'n Proto Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:20Z
+ Weekly Trending of Cap'n Proto in GitHub
+
+
\ No newline at end of file
diff --git a/cartocss/daily/index.xml b/cartocss/daily/index.xml
index b6c58db9273..2e601f331fd 100644
--- a/cartocss/daily/index.xml
+++ b/cartocss/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CartoCSS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:53Z
+ 2024-12-01T01:30:40Z
Daily Trending of CartoCSS in GitHub
\ No newline at end of file
diff --git a/cartocss/monthly/index.xml b/cartocss/monthly/index.xml
new file mode 100644
index 00000000000..b748e269e97
--- /dev/null
+++ b/cartocss/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CartoCSS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:18Z
+ Monthly Trending of CartoCSS in GitHub
+
+
\ No newline at end of file
diff --git a/cartocss/weekly/index.xml b/cartocss/weekly/index.xml
new file mode 100644
index 00000000000..ee9823a669e
--- /dev/null
+++ b/cartocss/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CartoCSS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:23Z
+ Weekly Trending of CartoCSS in GitHub
+
+
\ No newline at end of file
diff --git a/ceylon/daily/index.xml b/ceylon/daily/index.xml
index 3a204297d50..b4ff10868c9 100644
--- a/ceylon/daily/index.xml
+++ b/ceylon/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ceylon Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:53Z
+ 2024-12-01T01:30:40Z
Daily Trending of Ceylon in GitHub
\ No newline at end of file
diff --git a/ceylon/monthly/index.xml b/ceylon/monthly/index.xml
new file mode 100644
index 00000000000..410d5e1ce13
--- /dev/null
+++ b/ceylon/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ceylon Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:18Z
+ Monthly Trending of Ceylon in GitHub
+
+
\ No newline at end of file
diff --git a/ceylon/weekly/index.xml b/ceylon/weekly/index.xml
new file mode 100644
index 00000000000..3ef02647e21
--- /dev/null
+++ b/ceylon/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ceylon Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:22Z
+ Weekly Trending of Ceylon in GitHub
+
+
\ No newline at end of file
diff --git a/chapel/daily/index.xml b/chapel/daily/index.xml
index 05e2011e8c2..527a1759738 100644
--- a/chapel/daily/index.xml
+++ b/chapel/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Chapel Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:52Z
+ 2024-12-01T01:30:40Z
Daily Trending of Chapel in GitHub
\ No newline at end of file
diff --git a/chapel/monthly/index.xml b/chapel/monthly/index.xml
new file mode 100644
index 00000000000..cdb0bdf1cf8
--- /dev/null
+++ b/chapel/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Chapel Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:17Z
+ Monthly Trending of Chapel in GitHub
+
+
\ No newline at end of file
diff --git a/chapel/weekly/index.xml b/chapel/weekly/index.xml
new file mode 100644
index 00000000000..df038da5bd4
--- /dev/null
+++ b/chapel/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Chapel Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:23Z
+ Weekly Trending of Chapel in GitHub
+
+
\ No newline at end of file
diff --git a/charity/daily/index.xml b/charity/daily/index.xml
index b59dbf4ccdd..ce9d98cdac9 100644
--- a/charity/daily/index.xml
+++ b/charity/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Charity Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:54Z
+ 2024-12-01T01:30:41Z
Daily Trending of Charity in GitHub
\ No newline at end of file
diff --git a/charity/monthly/index.xml b/charity/monthly/index.xml
new file mode 100644
index 00000000000..9b875418306
--- /dev/null
+++ b/charity/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Charity Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:20Z
+ Monthly Trending of Charity in GitHub
+
+
\ No newline at end of file
diff --git a/charity/weekly/index.xml b/charity/weekly/index.xml
new file mode 100644
index 00000000000..b2f1bdd44d9
--- /dev/null
+++ b/charity/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Charity Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:24Z
+ Weekly Trending of Charity in GitHub
+
+
\ No newline at end of file
diff --git a/chuck/daily/index.xml b/chuck/daily/index.xml
index 9df3ceabd64..7211cd635b7 100644
--- a/chuck/daily/index.xml
+++ b/chuck/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ChucK Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:55Z
+ 2024-12-01T01:30:41Z
Daily Trending of ChucK in GitHub
\ No newline at end of file
diff --git a/chuck/monthly/index.xml b/chuck/monthly/index.xml
new file mode 100644
index 00000000000..1971fdc5b68
--- /dev/null
+++ b/chuck/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ChucK Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:20Z
+ Monthly Trending of ChucK in GitHub
+
+
\ No newline at end of file
diff --git a/chuck/weekly/index.xml b/chuck/weekly/index.xml
new file mode 100644
index 00000000000..0f06e885b1e
--- /dev/null
+++ b/chuck/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ChucK Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:24Z
+ Weekly Trending of ChucK in GitHub
+
+
\ No newline at end of file
diff --git a/cil/daily/index.xml b/cil/daily/index.xml
index 6ef575c346c..f16bdb01d8c 100644
--- a/cil/daily/index.xml
+++ b/cil/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CIL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:55Z
+ 2024-12-01T01:30:42Z
Daily Trending of CIL in GitHub
\ No newline at end of file
diff --git a/cil/monthly/index.xml b/cil/monthly/index.xml
new file mode 100644
index 00000000000..13d1b37c740
--- /dev/null
+++ b/cil/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CIL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:19Z
+ Monthly Trending of CIL in GitHub
+
+
\ No newline at end of file
diff --git a/cil/weekly/index.xml b/cil/weekly/index.xml
new file mode 100644
index 00000000000..b6b83579a6f
--- /dev/null
+++ b/cil/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CIL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:23Z
+ Weekly Trending of CIL in GitHub
+
+
\ No newline at end of file
diff --git a/cirru/daily/index.xml b/cirru/daily/index.xml
index 7c4ecd1b52a..f92346d5265 100644
--- a/cirru/daily/index.xml
+++ b/cirru/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cirru Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:56Z
+ 2024-12-01T01:30:43Z
Daily Trending of Cirru in GitHub
\ No newline at end of file
diff --git a/cirru/monthly/index.xml b/cirru/monthly/index.xml
new file mode 100644
index 00000000000..fc67d91f1cc
--- /dev/null
+++ b/cirru/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cirru Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:21Z
+ Monthly Trending of Cirru in GitHub
+
+
\ No newline at end of file
diff --git a/cirru/weekly/index.xml b/cirru/weekly/index.xml
new file mode 100644
index 00000000000..2fd712c7464
--- /dev/null
+++ b/cirru/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cirru Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:25Z
+ Weekly Trending of Cirru in GitHub
+
+
\ No newline at end of file
diff --git a/clarion/daily/index.xml b/clarion/daily/index.xml
index c93e92878c7..38b8cd60f01 100644
--- a/clarion/daily/index.xml
+++ b/clarion/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Clarion Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:56Z
+ 2024-12-01T01:30:44Z
Daily Trending of Clarion in GitHub
\ No newline at end of file
diff --git a/clarion/monthly/index.xml b/clarion/monthly/index.xml
new file mode 100644
index 00000000000..cfeb75ce980
--- /dev/null
+++ b/clarion/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clarion Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:21Z
+ Monthly Trending of Clarion in GitHub
+
+
\ No newline at end of file
diff --git a/clarion/weekly/index.xml b/clarion/weekly/index.xml
new file mode 100644
index 00000000000..d75c182b3ea
--- /dev/null
+++ b/clarion/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clarion Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:25Z
+ Weekly Trending of Clarion in GitHub
+
+
\ No newline at end of file
diff --git a/clarity/daily/index.xml b/clarity/daily/index.xml
index ceb56378d2e..21fd693f1f3 100644
--- a/clarity/daily/index.xml
+++ b/clarity/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Clarity Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:57Z
+ 2024-12-01T01:30:43Z
Daily Trending of Clarity in GitHub
\ No newline at end of file
diff --git a/clarity/monthly/index.xml b/clarity/monthly/index.xml
new file mode 100644
index 00000000000..d2814444c92
--- /dev/null
+++ b/clarity/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clarity Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:21Z
+ Monthly Trending of Clarity in GitHub
+
+
\ No newline at end of file
diff --git a/clarity/weekly/index.xml b/clarity/weekly/index.xml
new file mode 100644
index 00000000000..525b3c6436e
--- /dev/null
+++ b/clarity/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clarity Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:26Z
+ Weekly Trending of Clarity in GitHub
+
+
\ No newline at end of file
diff --git a/classic-asp/daily/index.xml b/classic-asp/daily/index.xml
index 0aea71fa16d..9203186d38e 100644
--- a/classic-asp/daily/index.xml
+++ b/classic-asp/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Classic ASP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:04Z
+ 2024-12-01T01:29:53Z
Daily Trending of Classic ASP in GitHub
\ No newline at end of file
diff --git a/classic-asp/monthly/index.xml b/classic-asp/monthly/index.xml
new file mode 100644
index 00000000000..a99bc567073
--- /dev/null
+++ b/classic-asp/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Classic ASP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:33Z
+ Monthly Trending of Classic ASP in GitHub
+
+
\ No newline at end of file
diff --git a/classic-asp/weekly/index.xml b/classic-asp/weekly/index.xml
new file mode 100644
index 00000000000..1f8431f40b3
--- /dev/null
+++ b/classic-asp/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Classic ASP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:39Z
+ Weekly Trending of Classic ASP in GitHub
+
+
\ No newline at end of file
diff --git a/clean/daily/index.xml b/clean/daily/index.xml
index fc077910891..ad5f3e41c4c 100644
--- a/clean/daily/index.xml
+++ b/clean/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Clean Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:57Z
+ 2024-12-01T01:30:45Z
Daily Trending of Clean in GitHub
\ No newline at end of file
diff --git a/clean/monthly/index.xml b/clean/monthly/index.xml
new file mode 100644
index 00000000000..b6a20e732a0
--- /dev/null
+++ b/clean/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clean Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:22Z
+ Monthly Trending of Clean in GitHub
+
+
\ No newline at end of file
diff --git a/clean/weekly/index.xml b/clean/weekly/index.xml
new file mode 100644
index 00000000000..1f836f3d03b
--- /dev/null
+++ b/clean/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clean Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:27Z
+ Weekly Trending of Clean in GitHub
+
+
\ No newline at end of file
diff --git a/click/daily/index.xml b/click/daily/index.xml
index 81430e7dc7f..4f2a7f315c6 100644
--- a/click/daily/index.xml
+++ b/click/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Click Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:57Z
+ 2024-12-01T01:30:44Z
Daily Trending of Click in GitHub
\ No newline at end of file
diff --git a/click/monthly/index.xml b/click/monthly/index.xml
new file mode 100644
index 00000000000..fd9aa3ab8dc
--- /dev/null
+++ b/click/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Click Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:23Z
+ Monthly Trending of Click in GitHub
+
+
\ No newline at end of file
diff --git a/click/weekly/index.xml b/click/weekly/index.xml
new file mode 100644
index 00000000000..badd66519a0
--- /dev/null
+++ b/click/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Click Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:27Z
+ Weekly Trending of Click in GitHub
+
+
\ No newline at end of file
diff --git a/clips/daily/index.xml b/clips/daily/index.xml
index b12986df99f..ab6535037db 100644
--- a/clips/daily/index.xml
+++ b/clips/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CLIPS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:58Z
+ 2024-12-01T01:30:45Z
Daily Trending of CLIPS in GitHub
\ No newline at end of file
diff --git a/clips/monthly/index.xml b/clips/monthly/index.xml
new file mode 100644
index 00000000000..4cb3709b989
--- /dev/null
+++ b/clips/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CLIPS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:23Z
+ Monthly Trending of CLIPS in GitHub
+
+
\ No newline at end of file
diff --git a/clips/weekly/index.xml b/clips/weekly/index.xml
new file mode 100644
index 00000000000..5f6511ee519
--- /dev/null
+++ b/clips/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CLIPS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:27Z
+ Weekly Trending of CLIPS in GitHub
+
+
\ No newline at end of file
diff --git a/clojure/daily/index.xml b/clojure/daily/index.xml
index 4be68a53423..ef126ef1de5 100644
--- a/clojure/daily/index.xml
+++ b/clojure/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Clojure Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:58Z
+ 2024-12-01T01:30:45Z
Daily Trending of Clojure in GitHub
\ No newline at end of file
diff --git a/clojure/monthly/index.xml b/clojure/monthly/index.xml
new file mode 100644
index 00000000000..a6d77ea15a7
--- /dev/null
+++ b/clojure/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clojure Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:24Z
+ Monthly Trending of Clojure in GitHub
+
+
\ No newline at end of file
diff --git a/clojure/weekly/index.xml b/clojure/weekly/index.xml
new file mode 100644
index 00000000000..3dc1bdbbcad
--- /dev/null
+++ b/clojure/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Clojure Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:28Z
+ Weekly Trending of Clojure in GitHub
+
+
\ No newline at end of file
diff --git a/closure-templates/daily/index.xml b/closure-templates/daily/index.xml
index 5443f03c905..b6f0df27c9b 100644
--- a/closure-templates/daily/index.xml
+++ b/closure-templates/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Closure Templates Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:59Z
+ 2024-12-01T01:30:47Z
Daily Trending of Closure Templates in GitHub
\ No newline at end of file
diff --git a/closure-templates/monthly/index.xml b/closure-templates/monthly/index.xml
new file mode 100644
index 00000000000..2c99d29fceb
--- /dev/null
+++ b/closure-templates/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Closure Templates Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:24Z
+ Monthly Trending of Closure Templates in GitHub
+
+
\ No newline at end of file
diff --git a/closure-templates/weekly/index.xml b/closure-templates/weekly/index.xml
new file mode 100644
index 00000000000..a812abe92ce
--- /dev/null
+++ b/closure-templates/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Closure Templates Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:29Z
+ Weekly Trending of Closure Templates in GitHub
+
+
\ No newline at end of file
diff --git a/cloud-firestore-security-rules/daily/index.xml b/cloud-firestore-security-rules/daily/index.xml
index cf1f139b1bb..46aa987a558 100644
--- a/cloud-firestore-security-rules/daily/index.xml
+++ b/cloud-firestore-security-rules/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cloud Firestore Security Rules Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:59Z
+ 2024-12-01T01:30:46Z
Daily Trending of Cloud Firestore Security Rules in GitHub
\ No newline at end of file
diff --git a/cloud-firestore-security-rules/monthly/index.xml b/cloud-firestore-security-rules/monthly/index.xml
new file mode 100644
index 00000000000..a60beec9a74
--- /dev/null
+++ b/cloud-firestore-security-rules/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cloud Firestore Security Rules Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:25Z
+ Monthly Trending of Cloud Firestore Security Rules in GitHub
+
+
\ No newline at end of file
diff --git a/cloud-firestore-security-rules/weekly/index.xml b/cloud-firestore-security-rules/weekly/index.xml
new file mode 100644
index 00000000000..7e5a275da15
--- /dev/null
+++ b/cloud-firestore-security-rules/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cloud Firestore Security Rules Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:29Z
+ Weekly Trending of Cloud Firestore Security Rules in GitHub
+
+
\ No newline at end of file
diff --git a/cmake/daily/index.xml b/cmake/daily/index.xml
index 80de0b2ec20..74c1bddf8b8 100644
--- a/cmake/daily/index.xml
+++ b/cmake/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CMake Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:00Z
+ 2024-12-01T01:30:47Z
Daily Trending of CMake in GitHub
\ No newline at end of file
diff --git a/cmake/monthly/index.xml b/cmake/monthly/index.xml
new file mode 100644
index 00000000000..1211e18eecc
--- /dev/null
+++ b/cmake/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub CMake Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:26Z
+ Monthly Trending of CMake in GitHub
+
+
+ ecmwf/ecbuild
+ 2024-12-01T01:52:26Z
+ tag:github.com,2024-12-01:/ecmwf/ecbuild
+
+ <p>A CMake-based build system, consisting of a collection of CMake macros and functions that ease the managing of software build systems</p><hr>
+
+
\ No newline at end of file
diff --git a/cmake/weekly/index.xml b/cmake/weekly/index.xml
new file mode 100644
index 00000000000..f9b6a580829
--- /dev/null
+++ b/cmake/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CMake Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:30Z
+ Weekly Trending of CMake in GitHub
+
+
\ No newline at end of file
diff --git a/cobol/daily/index.xml b/cobol/daily/index.xml
index e2b09807cf3..12dd3c88f0b 100644
--- a/cobol/daily/index.xml
+++ b/cobol/daily/index.xml
@@ -1,7 +1,7 @@
GitHub COBOL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:00Z
+ 2024-12-01T01:30:46Z
Daily Trending of COBOL in GitHub
\ No newline at end of file
diff --git a/cobol/monthly/index.xml b/cobol/monthly/index.xml
new file mode 100644
index 00000000000..8c430c3fc2e
--- /dev/null
+++ b/cobol/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub COBOL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:25Z
+ Monthly Trending of COBOL in GitHub
+
+
\ No newline at end of file
diff --git a/cobol/weekly/index.xml b/cobol/weekly/index.xml
new file mode 100644
index 00000000000..1d6de7fd49e
--- /dev/null
+++ b/cobol/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub COBOL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:29Z
+ Weekly Trending of COBOL in GitHub
+
+
\ No newline at end of file
diff --git a/codeowners/daily/index.xml b/codeowners/daily/index.xml
index 39baa7c18ab..3ddc5fe7d62 100644
--- a/codeowners/daily/index.xml
+++ b/codeowners/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CODEOWNERS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:01Z
+ 2024-12-01T01:30:48Z
Daily Trending of CODEOWNERS in GitHub
\ No newline at end of file
diff --git a/codeowners/monthly/index.xml b/codeowners/monthly/index.xml
new file mode 100644
index 00000000000..d86b867be47
--- /dev/null
+++ b/codeowners/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CODEOWNERS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:26Z
+ Monthly Trending of CODEOWNERS in GitHub
+
+
\ No newline at end of file
diff --git a/codeowners/weekly/index.xml b/codeowners/weekly/index.xml
new file mode 100644
index 00000000000..b7a03ba2a0c
--- /dev/null
+++ b/codeowners/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CODEOWNERS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:31Z
+ Weekly Trending of CODEOWNERS in GitHub
+
+
\ No newline at end of file
diff --git a/codeql/daily/index.xml b/codeql/daily/index.xml
index 9c5b264bd0a..62102d9a023 100644
--- a/codeql/daily/index.xml
+++ b/codeql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CodeQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:02Z
+ 2024-12-01T01:30:48Z
Daily Trending of CodeQL in GitHub
\ No newline at end of file
diff --git a/codeql/monthly/index.xml b/codeql/monthly/index.xml
new file mode 100644
index 00000000000..8da76f0eff9
--- /dev/null
+++ b/codeql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CodeQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:27Z
+ Monthly Trending of CodeQL in GitHub
+
+
\ No newline at end of file
diff --git a/codeql/weekly/index.xml b/codeql/weekly/index.xml
new file mode 100644
index 00000000000..bab73b42455
--- /dev/null
+++ b/codeql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CodeQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:31Z
+ Weekly Trending of CodeQL in GitHub
+
+
\ No newline at end of file
diff --git a/coffeescript/daily/index.xml b/coffeescript/daily/index.xml
index 33998908f9c..d8cdb50b5f1 100644
--- a/coffeescript/daily/index.xml
+++ b/coffeescript/daily/index.xml
@@ -1,14 +1,7 @@
GitHub CoffeeScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:02Z
+ 2024-12-01T01:30:49Z
Daily Trending of CoffeeScript in GitHub
-
- oozcitak/xmlbuilder-js
- 2024-11-30T01:30:02Z
- tag:github.com,2024-11-30:/oozcitak/xmlbuilder-js
-
- <p>An XML builder for node.js</p><hr>
-
\ No newline at end of file
diff --git a/coffeescript/monthly/index.xml b/coffeescript/monthly/index.xml
new file mode 100644
index 00000000000..123718785a7
--- /dev/null
+++ b/coffeescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CoffeeScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:28Z
+ Monthly Trending of CoffeeScript in GitHub
+
+
\ No newline at end of file
diff --git a/coffeescript/weekly/index.xml b/coffeescript/weekly/index.xml
new file mode 100644
index 00000000000..349019a531a
--- /dev/null
+++ b/coffeescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CoffeeScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:32Z
+ Weekly Trending of CoffeeScript in GitHub
+
+
\ No newline at end of file
diff --git a/coldfusion-cfc/daily/index.xml b/coldfusion-cfc/daily/index.xml
index 2bf9dfdd8e8..111e3c0e8a8 100644
--- a/coldfusion-cfc/daily/index.xml
+++ b/coldfusion-cfc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ColdFusion CFC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:03Z
+ 2024-12-01T01:30:50Z
Daily Trending of ColdFusion CFC in GitHub
\ No newline at end of file
diff --git a/coldfusion-cfc/monthly/index.xml b/coldfusion-cfc/monthly/index.xml
new file mode 100644
index 00000000000..0f7ebbe1788
--- /dev/null
+++ b/coldfusion-cfc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ColdFusion CFC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:29Z
+ Monthly Trending of ColdFusion CFC in GitHub
+
+
\ No newline at end of file
diff --git a/coldfusion-cfc/weekly/index.xml b/coldfusion-cfc/weekly/index.xml
new file mode 100644
index 00000000000..d4264ea5dbc
--- /dev/null
+++ b/coldfusion-cfc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ColdFusion CFC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:32Z
+ Weekly Trending of ColdFusion CFC in GitHub
+
+
\ No newline at end of file
diff --git a/coldfusion/daily/index.xml b/coldfusion/daily/index.xml
index fb678a9d46e..2e4a52b7616 100644
--- a/coldfusion/daily/index.xml
+++ b/coldfusion/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ColdFusion Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:01Z
+ 2024-12-01T01:30:49Z
Daily Trending of ColdFusion in GitHub
\ No newline at end of file
diff --git a/coldfusion/monthly/index.xml b/coldfusion/monthly/index.xml
new file mode 100644
index 00000000000..e96801ecd2d
--- /dev/null
+++ b/coldfusion/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ColdFusion Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:27Z
+ Monthly Trending of ColdFusion in GitHub
+
+
\ No newline at end of file
diff --git a/coldfusion/weekly/index.xml b/coldfusion/weekly/index.xml
new file mode 100644
index 00000000000..908e6d08173
--- /dev/null
+++ b/coldfusion/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ColdFusion Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:31Z
+ Weekly Trending of ColdFusion in GitHub
+
+
\ No newline at end of file
diff --git a/collada/daily/index.xml b/collada/daily/index.xml
index fd16f62be2b..5b5643d3e33 100644
--- a/collada/daily/index.xml
+++ b/collada/daily/index.xml
@@ -1,7 +1,7 @@
GitHub COLLADA Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:03Z
+ 2024-12-01T01:30:50Z
Daily Trending of COLLADA in GitHub
\ No newline at end of file
diff --git a/collada/monthly/index.xml b/collada/monthly/index.xml
new file mode 100644
index 00000000000..05335bb3291
--- /dev/null
+++ b/collada/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub COLLADA Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:28Z
+ Monthly Trending of COLLADA in GitHub
+
+
\ No newline at end of file
diff --git a/collada/weekly/index.xml b/collada/weekly/index.xml
new file mode 100644
index 00000000000..53613390049
--- /dev/null
+++ b/collada/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub COLLADA Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:33Z
+ Weekly Trending of COLLADA in GitHub
+
+
\ No newline at end of file
diff --git a/common-lisp/daily/index.xml b/common-lisp/daily/index.xml
index 82c868788ae..4537d318415 100644
--- a/common-lisp/daily/index.xml
+++ b/common-lisp/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Common Lisp Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:04Z
+ 2024-12-01T01:30:51Z
Daily Trending of Common Lisp in GitHub
\ No newline at end of file
diff --git a/common-lisp/monthly/index.xml b/common-lisp/monthly/index.xml
new file mode 100644
index 00000000000..e3ff64163f2
--- /dev/null
+++ b/common-lisp/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Common Lisp Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:29Z
+ Monthly Trending of Common Lisp in GitHub
+
+
\ No newline at end of file
diff --git a/common-lisp/weekly/index.xml b/common-lisp/weekly/index.xml
new file mode 100644
index 00000000000..87477790a6b
--- /dev/null
+++ b/common-lisp/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Common Lisp Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:34Z
+ Weekly Trending of Common Lisp in GitHub
+
+
+ SawfishWM/sawfish
+ 2024-12-01T01:41:34Z
+ tag:github.com,2024-12-01:/SawfishWM/sawfish
+
+ <p>Sawfish Window-Manager</p><hr><p>This is sawfish, a highly configurable window manager for X11.</p>
<p>It is released under the terms of the GNU GPL, copyright (c) John Harper <a href="mailto:jsh@users.sourceforge.net">jsh@users.sourceforge.net</a></p>
<p>Maintainer until 2007 was: John Harper Maintainer until Dec 2008 was: Janek Kozicki <a href="mailto:cosurgi@gmail.com">cosurgi@gmail.com</a> Maintainer since Dec 2008 is: Christopher Bratusek <a href="mailto:nano@jpberlin.de">nano@jpberlin.de</a></p>
<p>For more details, see the sawfish wiki: <a href="http://sawfish.wikia.com/">http://sawfish.wikia.com/</a></p>
<p>Manifesto</p>
<hr>
<p>Sawfish is an extensible window manager using an Emacs Lisp-like scripting language--all window decorations are configurable, the basic idea is to have as much user-interface policy as possible controlled through the Lisp language.</p>
<p>Despite this extensibility its policy is currently very minimal compared to most window managers. Its aim is simply to manage windows in the most flexible and attractive manner possible. As such it does not implement desktop backgrounds, applications docks, or other things that may be achieved through separate applications.</p>
<p>All high-level wm functions are implemented in Lisp for future extensibility or redefinition. Currently this includes menus (using GTK+), interactive window moving and resizing, virtual desktop, iconification, focus/transient window policies, frame theme definitions and much more.</p>
<p>Also, most received events are exported to the Lisp environment through ``key-bindings'' and hooks, similar to in Emacs. These events include pointer behaviour and many internal X11 events (enter/leave, focus-in/focus-out, map/unmap, etc..)</p>
+
+
\ No newline at end of file
diff --git a/common-workflow-language/daily/index.xml b/common-workflow-language/daily/index.xml
index 5b5f4be9acb..10a4888d911 100644
--- a/common-workflow-language/daily/index.xml
+++ b/common-workflow-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Common Workflow Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:03Z
+ 2024-12-01T01:30:50Z
Daily Trending of Common Workflow Language in GitHub
\ No newline at end of file
diff --git a/common-workflow-language/monthly/index.xml b/common-workflow-language/monthly/index.xml
new file mode 100644
index 00000000000..47749f49d9a
--- /dev/null
+++ b/common-workflow-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Common Workflow Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:29Z
+ Monthly Trending of Common Workflow Language in GitHub
+
+
\ No newline at end of file
diff --git a/common-workflow-language/weekly/index.xml b/common-workflow-language/weekly/index.xml
new file mode 100644
index 00000000000..a3be73eb117
--- /dev/null
+++ b/common-workflow-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Common Workflow Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:33Z
+ Weekly Trending of Common Workflow Language in GitHub
+
+
\ No newline at end of file
diff --git a/component-pascal/daily/index.xml b/component-pascal/daily/index.xml
index c98d824590b..55cf1f4bd2f 100644
--- a/component-pascal/daily/index.xml
+++ b/component-pascal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Component Pascal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:06Z
+ 2024-12-01T01:30:53Z
Daily Trending of Component Pascal in GitHub
\ No newline at end of file
diff --git a/component-pascal/monthly/index.xml b/component-pascal/monthly/index.xml
new file mode 100644
index 00000000000..25e0d746474
--- /dev/null
+++ b/component-pascal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Component Pascal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:30Z
+ Monthly Trending of Component Pascal in GitHub
+
+
\ No newline at end of file
diff --git a/component-pascal/weekly/index.xml b/component-pascal/weekly/index.xml
new file mode 100644
index 00000000000..8d8395e712e
--- /dev/null
+++ b/component-pascal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Component Pascal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:35Z
+ Weekly Trending of Component Pascal in GitHub
+
+
\ No newline at end of file
diff --git a/conll-u/daily/index.xml b/conll-u/daily/index.xml
index 71e092da591..de522857b22 100644
--- a/conll-u/daily/index.xml
+++ b/conll-u/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CoNLL-U Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:05Z
+ 2024-12-01T01:30:52Z
Daily Trending of CoNLL-U in GitHub
\ No newline at end of file
diff --git a/conll-u/monthly/index.xml b/conll-u/monthly/index.xml
new file mode 100644
index 00000000000..d0502cc07b3
--- /dev/null
+++ b/conll-u/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CoNLL-U Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:31Z
+ Monthly Trending of CoNLL-U in GitHub
+
+
\ No newline at end of file
diff --git a/conll-u/weekly/index.xml b/conll-u/weekly/index.xml
new file mode 100644
index 00000000000..14acb764821
--- /dev/null
+++ b/conll-u/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CoNLL-U Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:36Z
+ Weekly Trending of CoNLL-U in GitHub
+
+
\ No newline at end of file
diff --git a/cool/daily/index.xml b/cool/daily/index.xml
index f10b17b1d14..f21ebac3591 100644
--- a/cool/daily/index.xml
+++ b/cool/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cool Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:06Z
+ 2024-12-01T01:30:53Z
Daily Trending of Cool in GitHub
\ No newline at end of file
diff --git a/cool/monthly/index.xml b/cool/monthly/index.xml
new file mode 100644
index 00000000000..5f9610def94
--- /dev/null
+++ b/cool/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cool Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:31Z
+ Monthly Trending of Cool in GitHub
+
+
\ No newline at end of file
diff --git a/cool/weekly/index.xml b/cool/weekly/index.xml
new file mode 100644
index 00000000000..53bd42a62ab
--- /dev/null
+++ b/cool/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cool Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:35Z
+ Weekly Trending of Cool in GitHub
+
+
\ No newline at end of file
diff --git a/coq/daily/index.xml b/coq/daily/index.xml
index d4d5a76cf9c..3012b185365 100644
--- a/coq/daily/index.xml
+++ b/coq/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Coq Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:06Z
+ 2024-12-01T01:30:52Z
Daily Trending of Coq in GitHub
\ No newline at end of file
diff --git a/coq/monthly/index.xml b/coq/monthly/index.xml
new file mode 100644
index 00000000000..8299302eb87
--- /dev/null
+++ b/coq/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Coq Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:31Z
+ Monthly Trending of Coq in GitHub
+
+
\ No newline at end of file
diff --git a/coq/weekly/index.xml b/coq/weekly/index.xml
new file mode 100644
index 00000000000..537b6f55d3d
--- /dev/null
+++ b/coq/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Coq Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:35Z
+ Weekly Trending of Coq in GitHub
+
+
\ No newline at end of file
diff --git a/cpp-objdump/daily/index.xml b/cpp-objdump/daily/index.xml
index 02327dc9eab..25faf663e0d 100644
--- a/cpp-objdump/daily/index.xml
+++ b/cpp-objdump/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cpp-ObjDump Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:07Z
+ 2024-12-01T01:30:54Z
Daily Trending of Cpp-ObjDump in GitHub
\ No newline at end of file
diff --git a/cpp-objdump/monthly/index.xml b/cpp-objdump/monthly/index.xml
new file mode 100644
index 00000000000..ce0debae64f
--- /dev/null
+++ b/cpp-objdump/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cpp-ObjDump Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:32Z
+ Monthly Trending of Cpp-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/cpp-objdump/weekly/index.xml b/cpp-objdump/weekly/index.xml
new file mode 100644
index 00000000000..00fe9242851
--- /dev/null
+++ b/cpp-objdump/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cpp-ObjDump Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:37Z
+ Weekly Trending of Cpp-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/creole/daily/index.xml b/creole/daily/index.xml
index cbb8eb87b80..8fc0fdf1080 100644
--- a/creole/daily/index.xml
+++ b/creole/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Creole Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:07Z
+ 2024-12-01T01:30:54Z
Daily Trending of Creole in GitHub
\ No newline at end of file
diff --git a/creole/monthly/index.xml b/creole/monthly/index.xml
new file mode 100644
index 00000000000..e16fa696293
--- /dev/null
+++ b/creole/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Creole Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:32Z
+ Monthly Trending of Creole in GitHub
+
+
\ No newline at end of file
diff --git a/creole/weekly/index.xml b/creole/weekly/index.xml
new file mode 100644
index 00000000000..467a308ac30
--- /dev/null
+++ b/creole/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Creole Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:37Z
+ Weekly Trending of Creole in GitHub
+
+
\ No newline at end of file
diff --git a/crystal/daily/index.xml b/crystal/daily/index.xml
index 9f070ad1e9c..3e28bfb64dc 100644
--- a/crystal/daily/index.xml
+++ b/crystal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Crystal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:08Z
+ 2024-12-01T01:30:55Z
Daily Trending of Crystal in GitHub
\ No newline at end of file
diff --git a/crystal/monthly/index.xml b/crystal/monthly/index.xml
new file mode 100644
index 00000000000..e76d5dbf33d
--- /dev/null
+++ b/crystal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Crystal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:33Z
+ Monthly Trending of Crystal in GitHub
+
+
\ No newline at end of file
diff --git a/crystal/weekly/index.xml b/crystal/weekly/index.xml
new file mode 100644
index 00000000000..da257c018f1
--- /dev/null
+++ b/crystal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Crystal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:37Z
+ Weekly Trending of Crystal in GitHub
+
+
\ No newline at end of file
diff --git a/cson/daily/index.xml b/cson/daily/index.xml
index a93ff7c52ba..d71cffb7c9c 100644
--- a/cson/daily/index.xml
+++ b/cson/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CSON Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:09Z
+ 2024-12-01T01:30:56Z
Daily Trending of CSON in GitHub
\ No newline at end of file
diff --git a/cson/monthly/index.xml b/cson/monthly/index.xml
new file mode 100644
index 00000000000..ea37fd173ec
--- /dev/null
+++ b/cson/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CSON Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:34Z
+ Monthly Trending of CSON in GitHub
+
+
\ No newline at end of file
diff --git a/cson/weekly/index.xml b/cson/weekly/index.xml
new file mode 100644
index 00000000000..89d8d4f96ed
--- /dev/null
+++ b/cson/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CSON Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:38Z
+ Weekly Trending of CSON in GitHub
+
+
\ No newline at end of file
diff --git a/csound-document/daily/index.xml b/csound-document/daily/index.xml
index fe50dd8cf54..a8f6dbc4cc7 100644
--- a/csound-document/daily/index.xml
+++ b/csound-document/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Csound Document Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:09Z
+ 2024-12-01T01:30:55Z
Daily Trending of Csound Document in GitHub
\ No newline at end of file
diff --git a/csound-document/monthly/index.xml b/csound-document/monthly/index.xml
new file mode 100644
index 00000000000..c0c1d33a6bd
--- /dev/null
+++ b/csound-document/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Document Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:34Z
+ Monthly Trending of Csound Document in GitHub
+
+
\ No newline at end of file
diff --git a/csound-document/weekly/index.xml b/csound-document/weekly/index.xml
new file mode 100644
index 00000000000..92069734911
--- /dev/null
+++ b/csound-document/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Document Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:38Z
+ Weekly Trending of Csound Document in GitHub
+
+
\ No newline at end of file
diff --git a/csound-score/daily/index.xml b/csound-score/daily/index.xml
index e95da52625d..f54589871a7 100644
--- a/csound-score/daily/index.xml
+++ b/csound-score/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Csound Score Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:10Z
+ 2024-12-01T01:30:56Z
Daily Trending of Csound Score in GitHub
\ No newline at end of file
diff --git a/csound-score/monthly/index.xml b/csound-score/monthly/index.xml
new file mode 100644
index 00000000000..97ab306f1d9
--- /dev/null
+++ b/csound-score/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Score Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:35Z
+ Monthly Trending of Csound Score in GitHub
+
+
\ No newline at end of file
diff --git a/csound-score/weekly/index.xml b/csound-score/weekly/index.xml
new file mode 100644
index 00000000000..e9744e0f807
--- /dev/null
+++ b/csound-score/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Score Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:39Z
+ Weekly Trending of Csound Score in GitHub
+
+
\ No newline at end of file
diff --git a/csound/daily/index.xml b/csound/daily/index.xml
index c97064beb8d..828e9a5a4df 100644
--- a/csound/daily/index.xml
+++ b/csound/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Csound Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:09Z
+ 2024-12-01T01:30:56Z
Daily Trending of Csound in GitHub
\ No newline at end of file
diff --git a/csound/monthly/index.xml b/csound/monthly/index.xml
new file mode 100644
index 00000000000..f767a5bac5d
--- /dev/null
+++ b/csound/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:34Z
+ Monthly Trending of Csound in GitHub
+
+
\ No newline at end of file
diff --git a/csound/weekly/index.xml b/csound/weekly/index.xml
new file mode 100644
index 00000000000..00f26dd5c54
--- /dev/null
+++ b/csound/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Csound Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:39Z
+ Weekly Trending of Csound in GitHub
+
+
\ No newline at end of file
diff --git a/css/daily/index.xml b/css/daily/index.xml
index c2cf14f4be3..118889b142c 100644
--- a/css/daily/index.xml
+++ b/css/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CSS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:12Z
+ 2024-12-01T01:30:59Z
Daily Trending of CSS in GitHub
\ No newline at end of file
diff --git a/css/monthly/index.xml b/css/monthly/index.xml
new file mode 100644
index 00000000000..273fff5f295
--- /dev/null
+++ b/css/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub CSS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:38Z
+ Monthly Trending of CSS in GitHub
+
+
+ sindresorhus/github-markdown-css
+ 2024-12-01T01:52:38Z
+ tag:github.com,2024-12-01:/sindresorhus/github-markdown-css
+
+ <p>The minimal amount of CSS to replicate the GitHub Markdown style</p><hr><h1>github-markdown-css</h1>
<blockquote>
<p>The minimal amount of CSS to replicate the GitHub Markdown style</p>
</blockquote>
<p><strong>The CSS is generated. Contributions should go to <a href="https://github.com/sindresorhus/generate-github-markdown-css">this repo</a>.</strong></p>
<p><a href="http://sindresorhus.com/github-markdown-css"><img src="https://cloud.githubusercontent.com/assets/170270/5219062/f22a978c-7685-11e4-8316-af25b6c89bc0.png" width="300"></a></p>
<h2><a href="https://sindresorhus.com/github-markdown-css">Demo</a></h2>
<h2>Install</h2>
<p>Download <a href="https://raw.githubusercontent.com/sindresorhus/github-markdown-css/gh-pages/github-markdown.css">manually</a>, from <a href="https://cdnjs.com/libraries/github-markdown-css">CDNJS</a>, or with npm:</p>
<pre><code class="language-sh">npm install github-markdown-css
</code></pre>
<h2>Usage</h2>
<p>Import the <code>github-markdown.css</code> file and add a <code>markdown-body</code> class to the container of your rendered Markdown and set a width for it. GitHub uses <code>980px</code> width and <code>45px</code> padding, and <code>15px</code> padding for mobile.</p>
<pre><code class="language-html"><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="github-markdown.css">
<style>
.markdown-body {
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
padding: 45px;
}
@media (max-width: 767px) {
.markdown-body {
padding: 15px;
}
}
</style>
<article class="markdown-body">
<h1>Unicorns</h1>
<p>All the things</p>
</article>
</code></pre>
<p>You can use <a href="https://docs.github.com/en/free-pro-team@latest/rest/reference/markdown">GitHub's <code>/markdown</code> API</a> to turn Markdown into the HTML that GitHub generates, which works well with the CSS in this repo. Other Markdown parsers will mostly work with these styles too. To mimic how GitHub highlights code, you can use <a href="https://github.com/wooorm/starry-night"><code>starry-night</code></a> with your Markdown parser of choice.</p>
<p>There are 3 themes provided in this package:</p>
<ul>
<li><strong>github-markdown.css</strong>: (default) Automatically switches between light and dark through <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme"><code>@media (prefers-color-scheme)</code></a>.</li>
<li><strong>github-markdown-light.css</strong>: Light-only.</li>
<li><strong>github-markdown-dark.css</strong>: Dark-only.</li>
</ul>
<p>You may know that now GitHub supports more than 2 themes including <code>dark_dimmed</code>, <code>dark_high_contrast</code> and <code>colorblind</code> variants. If you want to try these themes, you can generate them on your own! See next section.</p>
<h2>How</h2>
<p>See <a href="https://github.com/sindresorhus/generate-github-markdown-css"><code>generate-github-markdown-css</code></a> for how it's generated and ability to generate your own.</p>
<h2>Dev</h2>
<p>Run <code>npm run make</code> to update the CSS.</p>
+
+
+ IBM/plex
+ 2024-12-01T01:52:38Z
+ tag:github.com,2024-12-01:/IBM/plex
+
+ <p>The package of IBM’s typeface, IBM Plex.</p><hr><h1>IBM Plex® typeface</h1>
<p align="center"> <a href="https://www.ibm.com/plex/"> <img alt="Plex" src="https://i.imgur.com/yB9xz60.jpg"> </a> </p>
<p>Meet the IBM Plex® typeface, our corporate typeface family. It’s global, it’s versatile and it’s distinctly IBM.</p>
<p>We designed the IBM Plex typeface carefully to meet our needs as a global tech company and express who we are as IBMers. It took two years and a lot of work to get here, but today, we have a signature typeface we’re proud of and excited to share with the world. Discover more about our development of the <a href="https://www.ibm.com/plex/">IBM Plex typeface</a>.</p>
<p>The IBM Plex typeface is an open-source project available for download and various uses following the Open Font License (OFL). The IBM Plex family comes in Sans, Serif, Mono, and Sans Condensed, all with Roman and true italics. Plex has been designed to work well in user interface (UI) environments and other mediums. This project provides all source files and multiple formats to support most typographical situations. Currently, IBM Plex Sans supports extended Latin, Arabic, Chinese (Traditional), Cyrillic, Devanagari, Greek, Hebrew, Japanese, Korean, and Thai. The Chinese SC (Simplified) version will be available in Q4 2024.</p>
<p>Additionally, we have introduced IBM Plex® Math. This highly anticipated release includes over 5,000 new glyphs, covering a wide range of mathematical symbols such as alphanumeric, double-struck, Fraktur, operators, script, icons, arrows, Greek letters, phonetics, technical and geometric shapes — making it one of the most complete math fonts available today. IBM Plex Math provides a fresh and comprehensive alternative to STIX and Microsoft’s Cambria. Its compatibility with IBM Plex Serif Regular makes it an ideal choice for IBM researchers and mathematicians.</p>
<p>Thanks for trying the IBM Plex typeface! We hope you like it.</p>
<h2>Add the IBM Plex typeface to your device</h2>
<p>Please download the latest zip files from our <a href="https://github.com/IBM/plex/releases">releases page</a> for installation.</p>
<h3>IBM Plex typeface packages</h3>
<table>
<thead>
<tr>
<th>Package</th>
<th>NPM</th>
</tr>
</thead>
<tbody>
<tr>
<td>IBM Plex Math</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-math">@ibm/plex-math</a></td>
</tr>
<tr>
<td>IBM Plex Mono</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-mono">@ibm/plex-mono</a></td>
</tr>
<tr>
<td>IBM Plex Sans</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans">@ibm/plex-sans</a></td>
</tr>
<tr>
<td>IBM Plex Sans Arabic</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-arabic">@ibm/plex-sans-arabic</a></td>
</tr>
<tr>
<td>IBM Plex Sans Condensed</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-condensed">@ibm/plex-sans-condensed</a></td>
</tr>
<tr>
<td>IBM Plex Sans Devanagari</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-devanagari">@ibm/plex-sans-devanagari</a></td>
</tr>
<tr>
<td>IBM Plex Sans Hebrew</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-hebrew">@ibm/plex-sans-hebrew</a></td>
</tr>
<tr>
<td>IBM Plex Sans Japanese</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-jp">@ibm/plex-sans-jp</a></td>
</tr>
<tr>
<td>IBM Plex Sans Korean</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-kr">@ibm/plex-sans-kr</a></td>
</tr>
<tr>
<td>IBM Plex Sans Chinese TC</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-tc">@ibm/plex-sans-tc</a></td>
</tr>
<tr>
<td>IBM Plex Sans Thai</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-thai">@ibm/plex-sans-thai</a></td>
</tr>
<tr>
<td>IBM Plex Sans Thai Looped</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-sans-thai-looped">@ibm/plex-sans-thai-looped</a></td>
</tr>
<tr>
<td>IBM Plex Serif</td>
<td><a href="https://www.npmjs.com/package/@ibm/plex-serif">@ibm/plex-serif</a></td>
</tr>
</tbody>
</table>
+
+
+ primefaces/sakai-react
+ 2024-12-01T01:52:38Z
+ tag:github.com,2024-12-01:/primefaces/sakai-react
+
+ <p>Free React Admin Template</p><hr><p>This is a <a href="https://nextjs.org/">Next.js</a> project bootstrapped with <a href="https://github.com/vercel/next.js/tree/canary/packages/create-next-app"><code>create-next-app</code></a>.</p>
<h2>Getting Started</h2>
<p>First, run the development server:</p>
<pre><code class="language-bash">npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
</code></pre>
<p>Open <a href="http://localhost:3000">http://localhost:3000</a> with your browser to see the result.</p>
<h2>Learn More</h2>
<p>To learn more about Next.js, take a look at the following resources:</p>
<ul>
<li><a href="https://nextjs.org/docs">Next.js Documentation</a> - learn about Next.js features and API.</li>
<li><a href="https://nextjs.org/learn">Learn Next.js</a> - an interactive Next.js tutorial.</li>
</ul>
+
+
\ No newline at end of file
diff --git a/css/weekly/index.xml b/css/weekly/index.xml
new file mode 100644
index 00000000000..472299aa832
--- /dev/null
+++ b/css/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub CSS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:42Z
+ Weekly Trending of CSS in GitHub
+
+
+ MeiK2333/github-style
+ 2024-12-01T01:41:42Z
+ tag:github.com,2024-12-01:/MeiK2333/github-style
+
+ <p></p><hr><h1>github-style</h1>
<h2>Init hugo site</h2>
<pre><code class="language-bash">hugo new site mysite
cd mysite
</code></pre>
<h2>Install the theme</h2>
<pre><code class="language-bash">git submodule add git@github.com:MeiK2333/github-style.git themes/github-style
</code></pre>
<h2>Update the theme</h2>
<p>If you just installed the theme, it is already in the latest version. If not, you can update using the below commands</p>
<pre><code class="language-bash">cd themes/github-style
git pull
</code></pre>
<p>Then, you need to rename the previous <code>posts</code> folder to <code>post</code></p>
<pre><code class="language-bash">cd <you-project-folder>
mv content/posts content/post
</code></pre>
<h2>Setup readme</h2>
<pre><code class="language-bash">hugo new readme.md
echo '`Hello World!`' > content/readme.md
</code></pre>
<h2>Pin post</h2>
<pre><code>---
pin: true
---
</code></pre>
<h2>Add new post</h2>
<p>Hugo will create a post with <code>draft: true</code>, change it to false in order for it to show in the website.</p>
<pre><code>hugo new post/title_of_the_post.md
</code></pre>
<h2>Limit display content</h2>
<h3>Approach 1: use summary</h3>
<pre><code>---
title: "title"
date: 2019-10-22T18:46:47+08:00
draft: false
summary: "The summary content"
---
</code></pre>
<h3>Approach 2: use <code><!--more--></code></h3>
<p>Use <code><!--more--></code> to separate content that will display in the posts page as abstraction and the rest of the content. This is different from summary, as summary will not appear in the post.</p>
<pre><code>---
title: "title"
date: 2019-10-22T18:46:47+08:00
draft: false
---
abstraction show in the post page
<!--more-->
other content
</code></pre>
<h2>Add last modified date</h2>
<p>add to <code>config.toml</code></p>
<pre><code class="language-toml">lastmod = true
[frontmatter]
lastmod = ["lastmod", ":fileModTime", ":default"]
</code></pre>
<h2>Use <a href="https://github.com/gitalk/gitalk">gitalk</a> to support comments</h2>
<p>add to <code>config.toml</code></p>
<pre><code class="language-toml">enableGitalk = true
[params.gitalk]
clientID = "Your client ID"
clientSecret = "Your client secret"
repo = "repo"
owner = "Your Github username"
admin = "Your Github username"
id = "location.pathname"
labels = "gitalk"
perPage = 30
pagerDirection = "last"
createIssueManually = true
distractionFreeMode = false
</code></pre>
<h2>Support LaTeX</h2>
<p>In you post add <code>math: true</code> to <a href="https://gohugo.io/content-management/front-matter/">front matter</a></p>
<pre><code>---
katex: math
---
</code></pre>
<p>Then the <a href="https://katex.org/docs/autorender.html">katex script</a> will auto render the string enclosed by delimiters.</p>
<pre><code># replace ... with latex formula
display inline \\( ... \\)
display block $$ ... $$
</code></pre>
<p><img src="https://raw.githubusercontent.com/MeiK2333/github-style/master/images/latex_example.png" alt="latex example"></p>
<h2>Support MathJax</h2>
<p>you can add MathJax:true to frontmatter</p>
<pre><code>mathJax: true
</code></pre>
<h2>config.toml example</h2>
<pre><code class="language-toml">baseURL = "https://meik2333.com/"
languageCode = "zh-cn"
title = "MeiK's blog"
theme = "github-style"
pygmentsCodeFences = true
pygmentsUseClasses = true
[params]
author = "MeiK"
description = "In solitude, where we are least alone."
github = "MeiK2333"
facebook = "MeiK2333"
twitter = "MeiK2333"
linkedin = "MeiK2333"
instagram = "MeiK2333"
tumblr = "MeiK2333"
email = "meik2333@gmail.com"
url = "https://meik2333.com"
keywords = "blog, google analytics"
rss = true
lastmod = true
userStatusEmoji = "😀"
favicon = "/images/github.png"
avatar = "/images/avatar.png"
headerIcon = "/images/GitHub-Mark-Light-32px.png"
location = "China"
enableGitalk = true
[params.gitalk]
clientID = "Your client ID"
clientSecret = "Your client secret"
repo = "repo"
owner = "MeiK2333"
admin = "MeiK2333"
id = "location.pathname"
labels = "gitalk"
perPage = 15
pagerDirection = "last"
createIssueManually = true
distractionFreeMode = false
[[params.links]]
title = "Link"
href = "https://github.com/meik2333"
[[params.links]]
title = "Link2"
href = "https://meik2333.com"
icon = "https://meik2333.com/images/avatar.png"
[frontmatter]
lastmod = ["lastmod", ":fileModTime", ":default"]
[services]
[services.googleAnalytics]
ID = "UA-123456-789"
</code></pre>
<h2>Support collapsible block</h2>
<p>You can create a collapsible block like this:</p>
<pre><code>{{<details "summary title">}}
block content
{{</details>}}
</code></pre>
<p>And it will show like this:</p>
<details>
<summary>summary title</summary>
<p>block content</p>
</details>
<h2>Support local search</h2>
<p>add to <code>config.toml</code></p>
<pre><code class="language-toml">[params]
enableSearch = true
[outputs]
home = ["html", "json"]
[outputFormats.json]
mediaType = "application/json"
baseName = "index"
isPlainText = false
</code></pre>
<p>We can do local search now, it is implemented by <code>fuse.js</code>.</p>
<h2>deploy.sh example</h2>
<p>There are various way to deploy to github, here is a link to official <a href="https://gohugo.io/hosting-and-deployment/hosting-on-github/">document</a>.</p>
<p>Here is an sample. Note line 22 have <code>env HUGO_ENV="production"</code>, makes sure googleAnalysis is loaded during production, but is not loaded when we are testing it in localhost.</p>
<pre><code class="language-bash">#!/bin/sh
if [ "`git status -s`" ]
then
echo "The working directory is dirty. Please commit any pending changes."
exit 1;
fi
echo "Deleting old publication"
rm -rf public
mkdir public
git worktree prune
rm -rf .git/worktrees/public/
echo "Checking out gh-pages branch into public"
git worktree add -B gh-pages public origin/gh-pages
echo "Removing existing files"
rm -rf public/*
echo "Generating site"
env HUGO_ENV="production" hugo -t github-style
echo "Updating gh-pages branch"
cd public && git add --all && git commit -m "Publishing to gh-pages (publish.sh)"
#echo "Pushing to github"
#git push --all
</code></pre>
<p>Then you can verify the site is working and use <code>git push --all</code> to push the change to github. If you don't want to check again every time, you can uncomment the <code>#git push --all</code> in the script.</p>
<h2>TODO</h2>
<ul>
<li>重写标题导航,那玩意儿引入的 JS 在控制台报错。</li>
</ul>
+
+
\ No newline at end of file
diff --git a/csv/daily/index.xml b/csv/daily/index.xml
index e97836bf4ca..f40c1aed5f2 100644
--- a/csv/daily/index.xml
+++ b/csv/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CSV Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:11Z
+ 2024-12-01T01:30:57Z
Daily Trending of CSV in GitHub
\ No newline at end of file
diff --git a/csv/monthly/index.xml b/csv/monthly/index.xml
new file mode 100644
index 00000000000..6e338747110
--- /dev/null
+++ b/csv/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CSV Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:35Z
+ Monthly Trending of CSV in GitHub
+
+
\ No newline at end of file
diff --git a/csv/weekly/index.xml b/csv/weekly/index.xml
new file mode 100644
index 00000000000..b3eac705a9d
--- /dev/null
+++ b/csv/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CSV Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:40Z
+ Weekly Trending of CSV in GitHub
+
+
\ No newline at end of file
diff --git a/cuda/daily/index.xml b/cuda/daily/index.xml
index 591b916e5c2..0a29da47a7b 100644
--- a/cuda/daily/index.xml
+++ b/cuda/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cuda Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:11Z
+ 2024-12-01T01:30:59Z
Daily Trending of Cuda in GitHub
\ No newline at end of file
diff --git a/cuda/monthly/index.xml b/cuda/monthly/index.xml
new file mode 100644
index 00000000000..f9ae770a104
--- /dev/null
+++ b/cuda/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cuda Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:37Z
+ Monthly Trending of Cuda in GitHub
+
+
\ No newline at end of file
diff --git a/cuda/weekly/index.xml b/cuda/weekly/index.xml
new file mode 100644
index 00000000000..4f7c7d0d0ec
--- /dev/null
+++ b/cuda/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Cuda Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:41Z
+ Weekly Trending of Cuda in GitHub
+
+
+ efeslab/Nanoflow
+ 2024-12-01T01:41:41Z
+ tag:github.com,2024-12-01:/efeslab/Nanoflow
+
+ <p>A throughput-oriented high-performance serving framework for LLMs</p><hr>
+
+
\ No newline at end of file
diff --git a/cue/daily/index.xml b/cue/daily/index.xml
index 2c3c37db320..b2f28d0dda6 100644
--- a/cue/daily/index.xml
+++ b/cue/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CUE Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:10Z
+ 2024-12-01T01:30:57Z
Daily Trending of CUE in GitHub
\ No newline at end of file
diff --git a/cue/monthly/index.xml b/cue/monthly/index.xml
new file mode 100644
index 00000000000..ca22e3d9efa
--- /dev/null
+++ b/cue/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CUE Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:36Z
+ Monthly Trending of CUE in GitHub
+
+
\ No newline at end of file
diff --git a/cue/weekly/index.xml b/cue/weekly/index.xml
new file mode 100644
index 00000000000..44bd5ff98ec
--- /dev/null
+++ b/cue/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CUE Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:40Z
+ Weekly Trending of CUE in GitHub
+
+
\ No newline at end of file
diff --git a/curl-config/daily/index.xml b/curl-config/daily/index.xml
index 3724e12198d..0c4d72e799c 100644
--- a/curl-config/daily/index.xml
+++ b/curl-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub cURL Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:15Z
+ 2024-12-01T01:31:01Z
Daily Trending of cURL Config in GitHub
\ No newline at end of file
diff --git a/curl-config/monthly/index.xml b/curl-config/monthly/index.xml
new file mode 100644
index 00000000000..5d54ad994dc
--- /dev/null
+++ b/curl-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub cURL Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:40Z
+ Monthly Trending of cURL Config in GitHub
+
+
\ No newline at end of file
diff --git a/curl-config/weekly/index.xml b/curl-config/weekly/index.xml
new file mode 100644
index 00000000000..e8b8849ab3f
--- /dev/null
+++ b/curl-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub cURL Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:45Z
+ Weekly Trending of cURL Config in GitHub
+
+
\ No newline at end of file
diff --git a/curry/daily/index.xml b/curry/daily/index.xml
index 9345633240f..a5741d287e4 100644
--- a/curry/daily/index.xml
+++ b/curry/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Curry Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:16Z
+ 2024-12-01T01:31:00Z
Daily Trending of Curry in GitHub
\ No newline at end of file
diff --git a/curry/monthly/index.xml b/curry/monthly/index.xml
new file mode 100644
index 00000000000..c9f662a3cee
--- /dev/null
+++ b/curry/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Curry Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:40Z
+ Monthly Trending of Curry in GitHub
+
+
\ No newline at end of file
diff --git a/curry/weekly/index.xml b/curry/weekly/index.xml
new file mode 100644
index 00000000000..e94d8ee5fd1
--- /dev/null
+++ b/curry/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Curry Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:45Z
+ Weekly Trending of Curry in GitHub
+
+
\ No newline at end of file
diff --git a/cweb/daily/index.xml b/cweb/daily/index.xml
index 54a455ef504..1a668c8081f 100644
--- a/cweb/daily/index.xml
+++ b/cweb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub CWeb Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:15Z
+ 2024-12-01T01:31:01Z
Daily Trending of CWeb in GitHub
\ No newline at end of file
diff --git a/cweb/monthly/index.xml b/cweb/monthly/index.xml
new file mode 100644
index 00000000000..8aa67df64ef
--- /dev/null
+++ b/cweb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CWeb Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:40Z
+ Monthly Trending of CWeb in GitHub
+
+
\ No newline at end of file
diff --git a/cweb/weekly/index.xml b/cweb/weekly/index.xml
new file mode 100644
index 00000000000..e31acde5738
--- /dev/null
+++ b/cweb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub CWeb Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:46Z
+ Weekly Trending of CWeb in GitHub
+
+
\ No newline at end of file
diff --git a/cycript/daily/index.xml b/cycript/daily/index.xml
index e8b404d71cd..8b9d6d9c884 100644
--- a/cycript/daily/index.xml
+++ b/cycript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cycript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:17Z
+ 2024-12-01T01:31:02Z
Daily Trending of Cycript in GitHub
\ No newline at end of file
diff --git a/cycript/monthly/index.xml b/cycript/monthly/index.xml
new file mode 100644
index 00000000000..e3b813886f8
--- /dev/null
+++ b/cycript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cycript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:41Z
+ Monthly Trending of Cycript in GitHub
+
+
\ No newline at end of file
diff --git a/cycript/weekly/index.xml b/cycript/weekly/index.xml
new file mode 100644
index 00000000000..d6f2a998796
--- /dev/null
+++ b/cycript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cycript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:46Z
+ Weekly Trending of Cycript in GitHub
+
+
\ No newline at end of file
diff --git a/cython/daily/index.xml b/cython/daily/index.xml
index 51819bfeaf0..f81e13129a8 100644
--- a/cython/daily/index.xml
+++ b/cython/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Cython Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:18Z
+ 2024-12-01T01:31:03Z
Daily Trending of Cython in GitHub
\ No newline at end of file
diff --git a/cython/monthly/index.xml b/cython/monthly/index.xml
new file mode 100644
index 00000000000..a358b6dbf70
--- /dev/null
+++ b/cython/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cython Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:42Z
+ Monthly Trending of Cython in GitHub
+
+
\ No newline at end of file
diff --git a/cython/weekly/index.xml b/cython/weekly/index.xml
new file mode 100644
index 00000000000..a4ee2889841
--- /dev/null
+++ b/cython/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Cython Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:47Z
+ Weekly Trending of Cython in GitHub
+
+
\ No newline at end of file
diff --git a/d-objdump/daily/index.xml b/d-objdump/daily/index.xml
index 9b36f4d313e..f61549ecbc9 100644
--- a/d-objdump/daily/index.xml
+++ b/d-objdump/daily/index.xml
@@ -1,7 +1,7 @@
GitHub D-ObjDump Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:19Z
+ 2024-12-01T01:31:04Z
Daily Trending of D-ObjDump in GitHub
\ No newline at end of file
diff --git a/d-objdump/monthly/index.xml b/d-objdump/monthly/index.xml
new file mode 100644
index 00000000000..9e7f9e34561
--- /dev/null
+++ b/d-objdump/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub D-ObjDump Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:43Z
+ Monthly Trending of D-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/d-objdump/weekly/index.xml b/d-objdump/weekly/index.xml
new file mode 100644
index 00000000000..a945545ee25
--- /dev/null
+++ b/d-objdump/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub D-ObjDump Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:48Z
+ Weekly Trending of D-ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/d/daily/index.xml b/d/daily/index.xml
index 3761461ffcd..69b8cd2e936 100644
--- a/d/daily/index.xml
+++ b/d/daily/index.xml
@@ -1,7 +1,7 @@
GitHub D Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:20Z
+ 2024-12-01T01:31:05Z
Daily Trending of D in GitHub
\ No newline at end of file
diff --git a/d/monthly/index.xml b/d/monthly/index.xml
new file mode 100644
index 00000000000..53258808bfa
--- /dev/null
+++ b/d/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub D Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:44Z
+ Monthly Trending of D in GitHub
+
+
\ No newline at end of file
diff --git a/d/weekly/index.xml b/d/weekly/index.xml
new file mode 100644
index 00000000000..25beb6da23b
--- /dev/null
+++ b/d/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub D Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:49Z
+ Weekly Trending of D in GitHub
+
+
\ No newline at end of file
diff --git a/dafny/daily/index.xml b/dafny/daily/index.xml
index 7cc4b499b13..f53e165b5f2 100644
--- a/dafny/daily/index.xml
+++ b/dafny/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Dafny Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:19Z
+ 2024-12-01T01:31:04Z
Daily Trending of Dafny in GitHub
\ No newline at end of file
diff --git a/dafny/monthly/index.xml b/dafny/monthly/index.xml
new file mode 100644
index 00000000000..3aa92e6373a
--- /dev/null
+++ b/dafny/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dafny Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:44Z
+ Monthly Trending of Dafny in GitHub
+
+
\ No newline at end of file
diff --git a/dafny/weekly/index.xml b/dafny/weekly/index.xml
new file mode 100644
index 00000000000..c4605bc5419
--- /dev/null
+++ b/dafny/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dafny Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:48Z
+ Weekly Trending of Dafny in GitHub
+
+
\ No newline at end of file
diff --git a/darcs-patch/daily/index.xml b/darcs-patch/daily/index.xml
index a6ed9d15a05..9bf84697ba5 100644
--- a/darcs-patch/daily/index.xml
+++ b/darcs-patch/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Darcs Patch Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:20Z
+ 2024-12-01T01:31:06Z
Daily Trending of Darcs Patch in GitHub
\ No newline at end of file
diff --git a/darcs-patch/monthly/index.xml b/darcs-patch/monthly/index.xml
new file mode 100644
index 00000000000..5094f560c5f
--- /dev/null
+++ b/darcs-patch/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Darcs Patch Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:45Z
+ Monthly Trending of Darcs Patch in GitHub
+
+
\ No newline at end of file
diff --git a/darcs-patch/weekly/index.xml b/darcs-patch/weekly/index.xml
new file mode 100644
index 00000000000..207f2ae15c7
--- /dev/null
+++ b/darcs-patch/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Darcs Patch Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:50Z
+ Weekly Trending of Darcs Patch in GitHub
+
+
\ No newline at end of file
diff --git a/dart/daily/index.xml b/dart/daily/index.xml
index 273966f9d80..b3cf0837c60 100644
--- a/dart/daily/index.xml
+++ b/dart/daily/index.xml
@@ -1,14 +1,7 @@
GitHub Dart Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:22Z
+ 2024-12-01T01:31:08Z
Daily Trending of Dart in GitHub
-
- yunweneric/flutter-widgethub
- 2024-11-30T01:30:22Z
- tag:github.com,2024-11-30:/yunweneric/flutter-widgethub
-
- <p>From ready-to-use components and flexible layout blocks to smooth animations and striking effects, Flutter Widget Hub is a collection of some pretty UIS aimed at helping developers create beautiful, functional flutter apps quickly and efficiently.</p><hr><p align="center"> <a href="https://flutterwidgethub.com/" target="blank"><img src="https://raw.githubusercontent.com/yunweneric/flutter-widgethub/main/assets/images/fwh.png" alt="Flutter widget landing page"></a> </p>
<p align="center">Welcome to <a href="https://flutterwidgethub.com/" target="_blank"> Flutter Widget Hub </a>Build Stunning Flutter Apps with Ease</p>
<p align="center"> <a><img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/yunweneric/flutter-widgethub?color=%233867D6&style=for-the-badge"></a> <a><img alt="GitHub issues" src="https://img.shields.io/github/issues-raw/yunweneric/flutter-widgethub?color=%233867D6&style=for-the-badge"></a> <a href="" target="_blank"><img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/yunweneric/flutter-widgethub?color=%233867D6&style=for-the-badge"></a> <a><img alt="GitHub forks" src="https://img.shields.io/github/forks/yunweneric/flutter-widgethub?color=%233867D6&style=for-the-badge"></a> <a><img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/yunweneric/flutter-widgethub?color=%233867D6&style=for-the-badge"></a> <a href="https://flutterwidgethub.com/"><img alt="Website" src="https://img.shields.io/website?color=%233867D6&style=for-the-badge&up_color=3F51B5&up_message=Visit%20us&url=https%3A%2F%2Fpayunit.net%2Fdocs%2F"></a> </p>
<p>From ready-to-use components and flexible layout blocks to smooth animations and striking effects, Flutter Widget Hub is a collection of some pretty UIS aimed at helping developers create beautiful, functional flutter apps quickly and efficiently.</p>
<h3>Features</h3>
<ul>
<li> <h4>Templates</h4> <p>A wide range of pre-built UI templates from app clones to demo apps all in one place</p> </li>
<li> <h4>Blocs</h4> <p>A collection of reusable layout blocks to help you create consistent and responsive layouts</p> </li>
<li> <h4>Animations</h4> <p>Smooth and captivating animations that can be easily applied to any element.</p> </li>
<li> <h4>Effects</h4> <p>Visual effects ranging from shadows and gradients to more complex transformations</p> </li>
</ul>
<h3>Setup</h3>
<ul>
<li> <h4>Version support</h4> <p>FVM is compiled in flutter version <strong>3.22.1</strong>. You can use <a href="https://fvm.app/">FVM</a> to manage your flutter version</p> </li>
<li> <h4>Running app</h4> <p>You can find the <strong>main_dev.dart</strong> and <strong>main_prod.dart</strong> files in the lib/app/core folder. In the <strong>.vscode</strong> folder, you can find the launch config for dev and prod environment</p> <h3>NB: Ensure you have an env.json or dev.env.json file out of your project in a folder called envs/fwh</h3> </li>
<li> <h4>Building app with wasm support</h4> </li>
</ul>
<pre><code class="language-bash">flutter build web --wasm --target lib/app/core/main_dev.dart --dart-define-from-file=../envs/fwh/dev.env.json
</code></pre>
<pre><code class="language-bash">flutter build web --wasm --target lib/app/core/main_prod.dart --dart-define-from-file=../envs/fwh/env.json
</code></pre>
<h3>Request New Component</h3>
<p>If you will like the community to build a custom component tailored for a specific use case, you can <a href="https://github.com/yunweneric/flutter-widgethub/issues">Request a component</a> that and label it accordingly.</p>
<h3>Contribution Guide</h3>
<p>We welcome contributions from the community to make this SDK better! <a href="https://raw.githubusercontent.com/yunweneric/flutter-widgethub/main/CONTRIBUTION.md">Find the complete Contribution guide here</a></p>
<h3>Code of Conduct</h3>
<p>Please note that this project is governed by a Code of Conduct. We expect all contributors and users to adhere to it. The Code of Conduct can be found in the <code>CODE_OF_CONDUCT.md</code> file in this repository.</p>
<h3>License</h3>
<p>This Library is released under the MIT License. You can find the license details in the <code>LICENSE</code> file.</p>
<h3>Support</h3>
<p>For any questions, issues, or feature requests, feel free to create an issue in this repository or contact us at <a href="mailto:yunweneric@gmail.com">yunweneric@gmail.com</a>.</p>
<h3>Acknowledgements</h3>
<p>We would like to thank all contributors who have helped in making flutter widget hub project possible.</p>
-
\ No newline at end of file
diff --git a/dart/monthly/index.xml b/dart/monthly/index.xml
new file mode 100644
index 00000000000..665760bc6c4
--- /dev/null
+++ b/dart/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Dart Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:47Z
+ Monthly Trending of Dart in GitHub
+
+
+ HemantKArya/BloomeeTunes
+ 2024-12-01T01:52:47Z
+ tag:github.com,2024-12-01:/HemantKArya/BloomeeTunes
+
+ <p>🌸Bloomee is a cross-platform music app designed to bring you ad-free tunes from various sources. 🌼🎵</p><hr><p><img src="https://raw.githubusercontent.com/HemantKArya/BloomeeTunes/main/assets/docs/bloomeetunes_new_banner.png" alt="BloomeeTunes"> <strong></strong></p>
<h1 align="center"><strong>Bloomee🌸</strong></h1>
<p></p>
<p align="center"><a href="https://github.com/HemantKArya/BloomeeTunes/releases/latest"><img alt="GitHub Downloads (all assets, all releases)" src="https://img.shields.io/github/downloads/HemantKArya/BloomeeTunes/total?style=for-the-badge"> <img alt="GitHub Release" src="https://img.shields.io/github/v/release/HemantKArya/BloomeeTunes?display_name=release&style=for-the-badge&color=f01d7c"></a> <img alt="GitHub License" src="https://img.shields.io/github/license/HemantKArya/BloomeeTunes?style=for-the-badge&color=1881cc"> <img alt="GitHub Actions Workflow Status" src="https://img.shields.io/github/actions/workflow/status/HemantKArya/BloomeeTunes/checkout.yml?style=for-the-badge"> <img src="https://img.shields.io/badge/Flutter-02569B?style=for-the-badge&logo=flutter&logoColor=white"><br><img src="https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white"> <img src="https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white"> <img src="https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black"> </p>
<br> Bloomee is experimental cross-platform open Source Music player designed to bring you Ad-free tunes from various sources. Dive into a world of limitless music from platforms like YouTube and Jio Saavn, with more sources blooming soon! 🌼🎵
<p><img src="https://raw.githubusercontent.com/HemantKArya/BloomeeTunes/main/assets/docs/banner2BloomeScrnShot.png" alt="BloomeeTunesScrnShots"></p>
<p><img src="https://raw.githubusercontent.com/HemantKArya/BloomeeTunes/main/assets/docs/lyricsscrn.png" alt="BloomeeDesktop"></p>
<h3><strong>Why Bloomee?</strong></h3>
<p>🌟 <strong>Ad-Free Experience:</strong> Say goodbye to interruptions and enjoy uninterrupted musical bliss.</p>
<p>🌍 <strong>Multi-Source Player:</strong> Access your favorite tracks from diverse platforms, with more sources continually joining our melody garden.</p>
<p>🚀 <strong>Flutter-Powered Learning:</strong> Bloomee is not just about music; it's about learning and growing with Flutter and BLoC architecture. Explore the intersection of beautiful design and smooth functionality while mastering the art of app development.</p>
<h3><strong>Features</strong></h3>
<ul>
<li><input type="checkbox" checked disabled> 🚫 Ad-Free Music</li>
<li><input type="checkbox" checked disabled> 📝 Lyrics Support (Time Synced)</li>
<li><input type="checkbox" checked disabled> 📊 Scrobble music with Last.FM</li>
<li><input type="checkbox" checked disabled> 🎵 Offline Music Experience</li>
<li><input type="checkbox" checked disabled> 🔽 Import playlists from various source.</li>
<li><input type="checkbox" checked disabled> ⏲️ Sleep Timer</li>
<li><input type="checkbox" checked disabled> 🎧 Personalized Playlist Creation and Sharing</li>
<li><input type="checkbox" checked disabled> 🌐 Daily Updated Global Charts. (Billboard, Last.fm and more.)</li>
<li><input type="checkbox" checked disabled> 🖥️ Support for Android, Windows and Linux.</li>
<li><input type="checkbox" checked disabled> 📉 Minimal Data Usage</li>
<li><input type="checkbox" checked disabled> 💾 Space Efficient</li>
<li><input type="checkbox" checked disabled> 🏃 Lightweight App</li>
<li><input type="checkbox" checked disabled> 🔓 Open Source</li>
<li><input type="checkbox" checked disabled> 💿 Play Automatic Related Songs</li>
<li><input type="checkbox" checked disabled> 🎸 Share your playlists with others</li>
<li><input type="checkbox" disabled> 🎼 AI-Generated Playlist</li>
<li><input type="checkbox" disabled> 💡 AI-Based Recommendations</li>
<li><input type="checkbox" disabled> 🆎 Multi-Language support</li>
</ul>
<h3 align="center">Download for Android, Windows & Linux(dev) 😍</h3>
<p align="center"><a href="https://github.com/HemantKArya/BloomeeTunes/releases"><img src="https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white" height="40/"></a> <a href="https://sourceforge.net/projects/bloomee/files/latest/download"><img alt="Download BloomeeTunes" src="https://a.fsdn.com/con/app/sf-download-button" height="40" srcset="https://a.fsdn.com/con/app/sf-download-button?button_size=2x 2x"></a></p>
<br>
<h3 align="center"> Now you can support me via</h3>
<p align="center"><a href="https://liberapay.com/hemantkarya/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg?sanitize=true"></a></p>
<a href="https://liberapay.com/hemantkarya/donate"> <h3><strong>Contribute to BloomeeTunes! 🎶</strong></h3> <p>🌱 <strong>Every Note Counts:</strong> Your contribution, no matter how small, adds to the richness of Bloomee. Whether you're fixing a bug, enhancing features, or suggesting improvements, your notes in our melody matter. Also I'm new to flutter, So every contribution will help me and this project.</p> <p>🚀 <strong>Learn and Grow:</strong> Contribute to Bloomee and enhance your Flutter and BLoC skills. Every pull request is an opportunity to learn, and we encourage contributors of all levels to join the journey.</p> <p><strong>How to Contribute:</strong></p>
<ol>
<li> <p><strong>Fork the Repository:</strong> Start your Bloomee journey by forking <strong>main(Branch)</strong>.</p> </li>
<li> <p><strong>Clone Locally:</strong> Clone the forked repository to your local machine.</p> </li>
<li> <p><strong>Create a Branch:</strong> Create a new branch for your contribution.</p> </li>
<li> <p><strong>Make Changes:</strong> Make your contribution - fix a bug, add a feature, or improve the documentation.</p> </li>
<li> <p><strong>Push Changes:</strong> Push your changes to your forked repository.</p> </li>
<li> <p><strong>Create a Pull Request:</strong> Submit a pull request, and let your notes join the Bloomee Symphony!</p> </li>
</ol> <br> </a>
<p align="center"><a href="https://liberapay.com/hemantkarya/donate"> </a><a href="https://apt.izzysoft.de/fdroid/index/apk/ls.bloomee.musicplayer"> <img alt="izzyondroid" src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroidButtonGreyBorder.svg?sanitize=true" height="45/"></a></p>
<h4 align="center">Get in touch with me at :-</h4>
<p align="center"> <a href="https://www.linkedin.com/in/iamhemantindia/"> <img src="https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white"> </a> <a href="https://instagram.com/iamhemantindia/"> <img src="https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge&logo=instagram&logoColor=white"> </a> <a href="https://x.com/iamhemantindia/"> <img src="https://img.shields.io/badge/X-000000?style=for-the-badge&logo=x&logoColor=white"> </a> <a href="mailto:iamhemantindia@protonmail.com/"> <img src="https://img.shields.io/badge/proton%20mail-6D4AFF?style=for-the-badge&logo=protonmail&logoColor=white"> </a> </p>
+
+
+ DJDoubleD/refreezer
+ 2024-12-01T01:52:47Z
+ tag:github.com,2024-12-01:/DJDoubleD/refreezer
+
+ <p>An alternative Deezer music streaming & downloading client, based on Freezer.</p><hr><p><img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/banner.png?raw=true" alt="ReFreezer"></p>
<p><a href="https://raw.githubusercontent.com/DJDoubleD/releases/latest"><img src="https://img.shields.io/github/v/release/DJDoubleD/ReFreezer?color=blue" alt="Latest Version"></a> <a href="https://raw.githubusercontent.com/DJDoubleD/releases/latest"><img src="https://img.shields.io/github/release-date/DJDoubleD/ReFreezer" alt="Release date"></a> <a href="https://raw.githubusercontent.com/DJDoubleD/releases"><img src="https://img.shields.io/github/downloads/DJDoubleD/ReFreezer/latest/total?color=blue&label=downloads%20latest" alt="Downloads Latest"></a> <a href="https://raw.githubusercontent.com/DJDoubleD/releases"><img src="https://img.shields.io/github/downloads/DJDoubleD/ReFreezer/total?color=blue&label=downloads%20total" alt="Downloads Total"></a> <a href="https://docs.flutter.dev/tools/sdk"><img src="https://shields.io/badge/Flutter-v3.24.4-darkgreen.svg?sanitize=true" alt="Flutter Version"></a> <a href="https://dart.dev/get-dart"><img src="https://shields.io/badge/Dart-v3.5.4-darkgreen.svg?sanitize=true" alt="Dart Version"></a> <a href="https://crowdin.com/project/refreezer"><img src="https://badges.crowdin.net/refreezer/localized.svg?sanitize=true" alt="Crowdin"></a> <a href="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/LICENSE"><img src="https://img.shields.io/github/license/DJDoubleD/ReFreezer?flat" alt="License"></a></p>
<p><a href="https://dart.dev/"><img src="https://img.shields.io/badge/Dart-0175C2?style=for-the-badge&logo=dart&logoColor=white" alt="Dart"></a> <a href="https://flutter.dev/"><img src="https://img.shields.io/badge/Flutter-02569B?style=for-the-badge&logo=flutter&logoColor=white" alt="Flutter"></a> <a href="https://www.java.com/"><img src="https://img.shields.io/badge/Java-ED8B00?style=for-the-badge&logo=openjdk&logoColor=white" alt="Java"></a></p>
<hr>
<p>An alternative Deezer music streaming & downloading client, based on Freezer. The entire codebase has been updated/rewritten to be compatible with the latest version of flutter, the dart SDK & android (current build target is API level 34).</p>
<h2>Screenshots</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Login.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Home.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Player.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Lyrics.jpg" width="200"> </p>
<details>
<summary><b>More Android Phone</b></summary>
<p align="center"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Search.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/SearchResults.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Library.jpg" width="200"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/DownloadRunning.jpg" width="200">
<!--<img src="./assets/screenshots/DownloadFinished.jpg" width=200>---> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/PlayerHorizontal.jpg" height="200"> </p>
</details>
<br>
<details>
<summary><b>Android Auto</b></summary>
<p align="center"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Android_Auto-Head_Unit-home.png" max-height="400"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Android_Auto-Head_Unit-more.png" max-height="400"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Android_Auto-Head_Unit-play.png" max-height="400"> <img src="https://raw.githubusercontent.com/DJDoubleD/refreezer/master/assets/screenshots/Android_Auto-Head_Unit-wide-playing.png" max-height="400"> </p>
</details>
<h2>Features & changes</h2>
<ul>
<li>Restored all features of the old Freezer app, most notably:
<ul>
<li>Restored all login options</li>
<li>Restored Highest quality streaming and download options (premium account required, free accounts limited to MP3 128kbps)</li>
</ul> </li>
<li>Support downloading to external storage (sdcard) for android 11 and up</li>
<li>Restored homescreen and added new Flow & Mood smart playlist options</li>
<li>Fixed Log-out (no need for restart anymore)</li>
<li>Improved/fixed queue screen and queue handling (shuffle & rearranging)</li>
<li>Updated lyrics screen to also support unsynced lyrics</li>
<li>Some minor UI changes to better accomadate horizontal/tablet view</li>
<li>Updated entire codebase to fully support latest flutter & dart SDK versions</li>
<li>Updated to gradle version 8.5.1</li>
<li>Removed included c libraries (openssl & opencrypto) and replaced them with custom native java implementation</li>
<li>Replaced the included decryptor-jni c library with a custom native java implementation</li>
<li>Implemented null-safety</li>
<li>Removed the need of custom just_audio & audio_service plugin versions & refactored source code to use the latest version of the official plugins</li>
<li>Multiple other fixes</li>
</ul>
<h2>Compile from source</h2>
<p>Install the latest flutter SDK: <a href="https://flutter.dev/docs/get-started/install">https://flutter.dev/docs/get-started/install</a><br> (Optional) Generate keys for release build: <a href="https://flutter.dev/docs/deployment/android">https://flutter.dev/docs/deployment/android</a></p>
<p>Download source:</p>
<pre><code class="language-powershell">git clone https://github.com/DJDoubleD/ReFreezer
git submodule init
git submodule update
</code></pre>
<p>Create a <code>.env</code> file in the <code>lib</code> folder of the project and add the following content:</p>
<pre><code class="language-text"># Deezer API credentials
deezerClientId = '<Your_Deezer_Client_Id>';
deezerClientSecret = '<Your_Deezer_Client_Secret>';
# LastFM API credentials
lastFmApiKey = '<Your_LastFM_API_Key>'
lastFmApiSecret = 'Your_LastFM_API_Secret'
</code></pre>
<p>Build generated files:</p>
<p>Use following script to (re)build generated classes in submodules and main project:</p>
<pre><code class="language-powershell">.\run_build_runner.ps1
</code></pre>
<p>or run these commands manually in the relevant submodules to (re)build the generated files:</p>
<pre><code class="language-powershell">flutter pub get
dart run build_runner clean
dart run build_runner build --delete-conflicting-outputs
</code></pre>
<p>Compile:</p>
<pre><code class="language-powershell"> flutter build apk --split-per-abi --release
</code></pre>
<p>NOTE: You have to use own keys, or build debug using <code>flutter build apk --debug</code></p>
<h3>Generate your own keys</h3>
<h4>Step 1: create a JKS file</h4>
<p>Make sure your Java JDK folder is in your PATH variable and execute the following command in the ./android folder of the project:</p>
<pre><code class="language-bash">keytool -genkey -v -keystore ./keys.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <YourKeyAlias>
</code></pre>
<p>Follow the instructions show in the commandline to fill out the desired fields of your keystore.</p>
<h4>Step 2: create a key.properties file</h4>
<p>Inside the ./android (next to the keys.jks file from step 1), create a file <code>key.properties</code> with the following contents:</p>
<pre><code class="language-text">storePassword=<storePassword>
keyPassword=<keyPassword>
keyAlias=<YourKeyAlias>
storeFile=../keys.jks
</code></pre>
<h2>Disclaimer & Legal</h2>
<p><strong>ReFreezer</strong> was not developed for piracy, but educational and private usage. It may be illegal to use this in your country! I will not be responsible for how you use <strong>ReFreezer</strong>.</p>
<p><strong>ReFreezer</strong> uses both Deezer's public and internal API's, but is not endorsed, certified or otherwise approved in any way by Deezer.</p>
<p>The Deezer brand and name is the registered trademark of its respective owner.</p>
<p><strong>ReFreezer</strong> has no partnership, sponsorship or endorsement with Deezer.</p>
<p>By using <strong>ReFreezer</strong> you agree to the following: <a href="https://www.deezer.com/legal/cgu">https://www.deezer.com/legal/cgu</a></p>
+
+
+ deckerst/aves
+ 2024-12-01T01:52:47Z
+ tag:github.com,2024-12-01:/deckerst/aves
+
+ <p>Aves is a gallery and metadata explorer app, built for Android with Flutter.</p><hr><div align="center">
<img src="https://raw.githubusercontent.com/deckerst/aves/develop/aves_logo.svg?sanitize=true" alt="Aves logo" width="200">
<h2>Aves</h2>
<p><img src="https://img.shields.io/github/v/release/deckerst/aves?include_prereleases&sort=semver" alt="Version badge"> <img src="https://img.shields.io/github/actions/workflow/status/deckerst/aves/quality-check.yml?branch=develop" alt="Build badge"></p>
<p>Aves is a gallery and metadata explorer app. It is built for Android, with Flutter.</p>
<p><a href="https://play.google.com/store/apps/details?id=deckers.thibault.aves&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1"><img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt="Get it on Google Play" height="80"></a> <a href="https://apt.izzysoft.de/fdroid/index/apk/deckers.thibault.aves"><img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="80"></a> <a href="https://f-droid.org/packages/deckers.thibault.aves.libre"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80"></a> <a href="https://github.com/deckerst/aves/releases/latest"><img src="https://raw.githubusercontent.com/deckerst/common/main/assets/get-it-on-github.png" alt="Get it on GitHub" height="80"></a></p>
<p><a href="https://github.com/deckerst/aves/wiki/App-Versions">Compare versions</a></p>
<div align="left">
<h2>Features</h2>
<p>Aves can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like <strong>multi-page TIFFs, SVGs, old AVIs and more</strong>!</p>
<p>It scans your media collection to identify <strong>motion photos</strong>, <strong>panoramas</strong> (aka photo spheres), <strong>360° videos</strong>, as well as <strong>GeoTIFF</strong> files.</p>
<p><strong>Navigation and search</strong> is an important part of Aves. The goal is for users to easily flow from albums to photos to tags to maps, etc.</p>
<p>Aves integrates with Android (from KitKat to Android 14, including Android TV) with features such as <strong>widgets</strong>, <strong>app shortcuts</strong>, <strong>screen saver</strong> and <strong>global search</strong> handling. It also works as a <strong>media viewer and picker</strong>.</p>
<h2>Screenshots</h2>
<div align="center">
<p><a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/1.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/1.png" alt="Collection screenshot" width="130"></a> <a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/2.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/2.png" alt="Image screenshot" width="130"></a> <a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/5.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/5.png" alt="Stats screenshot" width="130"></a> <a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/3.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/3.png" alt="Info (basic) screenshot" width="130"></a> <a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/4.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/4.png" alt="Info (metadata) screenshot" width="130"></a> <a href="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/play/en/6.png"><img src="https://raw.githubusercontent.com/deckerst/aves_extra/main/screenshots/readme/en/6.png" alt="Countries screenshot" width="130"></a></p>
<div align="left">
<h2>Changelog</h2>
<p>The list of changes for past and future releases is available <a href="https://github.com/deckerst/aves/raw/develop/CHANGELOG.md">here</a>.</p>
<h2>Permissions</h2>
<p>Aves requires a few permissions to do its job:</p>
<ul>
<li><strong>read contents of shared storage</strong>: the app only accesses media files, and modifying them requires explicit access grants from the user,</li>
<li><strong>read locations from media collection</strong>: necessary to display the media coordinates, and to group them by country (via reverse geocoding),</li>
<li><strong>have network access</strong>: necessary for the map view, and most likely for precise reverse geocoding too,</li>
<li><strong>view network connections</strong>: checking for connection states allows Aves to gracefully degrade features that depend on internet.</li>
</ul>
<h2>Contributing</h2>
<h3>Issues</h3>
<p><a href="https://github.com/deckerst/aves/issues/new?assignees=&labels=type%3Abug&template=bug_report.md&title=">Bug reports</a> and <a href="https://github.com/deckerst/aves/issues/new?assignees=&labels=type%3Afeature&template=feature_request.md&title=">feature requests</a> are welcome, but read the <a href="https://github.com/deckerst/aves/issues/234">guidelines</a> first. If you have questions, check out the <a href="https://github.com/deckerst/aves/discussions">discussions</a>.</p>
<h3>Code</h3>
<p>At this stage this project does <em>not</em> accept PRs.</p>
<h3>Translations</h3>
<p>Translations are powered by <a href="https://hosted.weblate.org/engage/aves/">Weblate</a> and the effort of wonderfully generous volunteers. <a href="https://hosted.weblate.org/engage/aves/"> <img src="https://hosted.weblate.org/widgets/aves/-/multi-auto.svg?sanitize=true" alt="Translation status"> </a></p>
<p>If you want to translate this app in your language and share the result, <a href="https://github.com/deckerst/aves/wiki/Contributing-to-Translations">there is a guide</a>.</p>
<h3>Donations</h3>
<p>Some users have expressed the wish to financially support the project. Thanks! ❤️</p>
<p><a href="https://www.paypal.com/donate/?hosted_button_id=RWKQ4J7D8USX6"><img src="https://raw.githubusercontent.com/deckerst/common/main/assets/paypal-badge-cropped.png" alt="Donate with PayPal" height="40"></a> <a href="https://liberapay.com/deckerst/donate"><img src="https://liberapay.com/assets/widgets/donate.svg?sanitize=true" alt="Donate using Liberapay" height="40"></a></p>
<h2>Project Setup</h2>
<p>Before running or building the app, update the dependencies for the desired flavor:</p>
<pre><code># scripts/apply_flavor_play.sh
</code></pre>
<p>To build the project, create a file named <code><app dir>/android/key.properties</code>. It should contain a reference to a keystore for app signing, and other necessary credentials. See <a href="https://github.com/deckerst/aves/raw/develop/android/key_template.properties">key_template.properties</a> for the expected keys.</p>
<p>To run the app:</p>
<pre><code># ./flutterw run -t lib/main_play.dart --flavor play
</code></pre>
</div>
</div>
</div>
</div>
+
+
\ No newline at end of file
diff --git a/dart/weekly/index.xml b/dart/weekly/index.xml
new file mode 100644
index 00000000000..7a1f65ee4ed
--- /dev/null
+++ b/dart/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Dart Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:52Z
+ Weekly Trending of Dart in GitHub
+
+
+ cake-tech/cake_wallet
+ 2024-12-01T01:41:52Z
+ tag:github.com,2024-12-01:/cake-tech/cake_wallet
+
+ <p>The open source repository for Cake Wallet, a noncustodial multi-currency wallet, and Monero.com, a noncustodial Monero-only wallet. Need help? Check out https://guides.cakewallet.com</p><hr><div align="center">
<p><img src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/Logo_CakeWallet.png" alt="logo"></p>
</div>
<p><img src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/devices.png" alt="devices"></p>
<div align="center">
<p><a href="https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=iphone"><img height="42" src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/app-store-badge.svg?sanitize=true"></a> <a href="https://play.google.com/store/apps/details?id=com.cakewallet.cake_wallet"><img height="42" src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/google-play-badge.png"></a> <a href="https://fdroid.cakelabs.com"><img height="42" src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/f-droid-badge.png"></a> <a href="https://apps.apple.com/us/app/cake-wallet/id1334702542?platform=mac"><img height="42" src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/mac-store-badge.svg?sanitize=true"></a> <a href="https://github.com/cake-tech/cake_wallet/releases"><img height="42" src="https://raw.githubusercontent.com/cake-tech/cake_wallet/main/.github/assets/linux-badge.svg?sanitize=true"></a></p>
</div>
<h1>Cake Wallet</h1>
<p><a href="https://cakewallet.com">Cake Wallet</a> is an open-source, non-custodial, and private multi-currency crypto wallet for Android, iOS, macOS, and Linux.</p>
<p>Cake Wallet includes support for several cryptocurrencies, including:</p>
<ul>
<li>Monero (XMR)</li>
<li>Bitcoin (BTC)</li>
<li>Ethereum (ETH)</li>
<li>Litecoin (LTC)</li>
<li>Bitcoin Cash (BCH)</li>
<li>Polygon (Pol)</li>
<li>Solana (SOL)</li>
<li>Nano (XNO)</li>
<li>Haven (XHV)</li>
</ul>
<h2>Features</h2>
<h3>App-Wide Features</h3>
<ul>
<li>Completely noncustodial. <em>Your keys, your coins.</em></li>
<li>Built-in exchange for dozens of pairs</li>
<li>Easily pay cryptocurrency invoices with fixed rate exchanges</li>
<li>Buy cryptocurrency (BTC/LTC/XMR/ETH) with credit/debit/bank</li>
<li>Sell cryptocurrency by bank transfer</li>
<li>Scan QR codes for easy cryptocurrency transfers</li>
<li>Create several wallets</li>
<li>Select your own custom nodes/servers</li>
<li>Address book</li>
<li>Backup to an external location or iCloud</li>
<li>Send to OpenAlias, Unstoppable Domains, Yats, and FIO Crypto Handles</li>
<li>Set desired network fee level</li>
<li>Store local transaction notes</li>
<li>Extremely simple user experience</li>
<li>Convenient exchange and sending templates for recurring payments</li>
<li>Create donation links and invoices in the receive screen</li>
<li>Robust privacy settings (eg: Tor-only connections)</li>
<li>Robust security settings (eg: Cake 2FA)</li>
</ul>
<h3>Monero Specific Features</h3>
<ul>
<li>The Monero view key is retained on the device for maximum privacy</li>
<li>Full support for Monero subaddresses and accounts</li>
<li>Specify restore height for faster syncing</li>
<li>Specify multiple recipients for batch sending</li>
<li>Optionally set Monero nodes as trusted for faster syncing</li>
<li>Specify a proxy for Monero nodes, compatible with Tor and i2p</li>
</ul>
<h3>Bitcoin Specific Features</h3>
<ul>
<li>Bitcoin coin control (specify specific outputs to spend)</li>
<li>Automatically generate new addresses</li>
<li>Specify multiple recipients for batch sending</li>
</ul>
<h3>Ethereum Specific Features</h3>
<ul>
<li>Store ETH and all ERc-20 tokens</li>
<li>Add custom tokens by contract address</li>
<li>Enable or disable Etherscan for transaction history</li>
</ul>
<h3>Litecoin Specific Features</h3>
<ul>
<li>Litecoin coin control (specify specific outputs to spend)</li>
<li>Automatically generate new addresses</li>
<li>Specify multiple recipients for batch sending</li>
</ul>
<h3>Haven Specific Features</h3>
<ul>
<li>Send, receive, and store XHV and all xAssets like xUSD, xEUR, xAG, etc.</li>
</ul>
<h1>Monero.com by Cake Wallet for Android and iOS</h1>
<h2>Open Source Monero-Only Wallet</h2>
<p><em>Exchanging to/from other assets is also supported.</em></p>
<h2>Links</h2>
<ul>
<li>Website: <a href="https://monero.com">https://monero.com</a></li>
<li>App Store (iOS): <a href="https://apps.apple.com/app/id1601990386">https://apps.apple.com/app/id1601990386</a></li>
<li>Google Play: <a href="https://play.google.com/store/apps/details?id=com.monero.app">https://play.google.com/store/apps/details?id=com.monero.app</a></li>
<li>F-Droid: <a href="https://fdroid.cakelabs.com">https://fdroid.cakelabs.com</a></li>
<li>APK: <a href="https://github.com/cake-tech/cake_wallet/releases">https://github.com/cake-tech/cake_wallet/releases</a></li>
</ul>
<h1>Support</h1>
<p>We have 24/7 free support. Please contact <a href="mailto:support@cakewallet.com">support@cakewallet.com</a></p>
<p>We have excellent user guides, which are also open-source and open for contributions: <a href="https://guides.cakewallet.com">https://guides.cakewallet.com</a></p>
<h1>Build Instructions</h1>
<p>More instructions to follow</p>
<p>For instructions on how to build for Android: please view file <code>howto-build-android.md</code></p>
<h1>Contributing</h1>
<h2>Improving translations</h2>
<p>Edit the applicable <code>strings_XX.arb</code> file in <code>res/values/</code> and open a pull request with the changes.</p>
<h2>Current list of language files:</h2>
<ul>
<li>English</li>
<li>Spanish</li>
<li>French</li>
<li>German</li>
<li>Italian</li>
<li>Portuguese</li>
<li>Dutch</li>
<li>Polish</li>
<li>Croatian</li>
<li>Russian</li>
<li>Ukrainian</li>
<li>Hindi</li>
<li>Japanese</li>
<li>Chinese</li>
<li>Korean</li>
<li>Thai</li>
<li>Arabic</li>
<li>Turkish</li>
<li>Burmese</li>
<li>Urdu</li>
<li>Bulgarian</li>
<li>Czech</li>
<li>Indonesian</li>
<li>Hausa</li>
<li>Yoruba</li>
</ul>
<h2>Add a new language</h2>
<ol>
<li> <p>Create a new <code>strings_XX.arb</code> file in <code>res/values/</code>, replacing XX with the language's <a href="https://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1 code</a>.</p> </li>
<li> <p>Edit the strings in this file, replacing XXX below with the translation for each string.</p> </li>
</ol>
<p><code>"welcome": "Welcome to",</code> -> <code>"welcome": "XXX",</code></p>
<ol start="3">
<li>For strings where there is a variable, denoted by a $ symbol and braces, such as ${status}, the string in braces should not be translated. For example, when editing line 106:</li>
</ol>
<p>"time" : "${minutes}m ${seconds}s"</p>
<p>The only parts to be translated, if needed, are the values m and s after the variables.</p>
<ol start="4">
<li> <p>Add the language to <code>lib/entities/language_service.dart</code> under both <code>supportedLocales</code> and <code>localeCountryCode</code>. Use the name of the language in the local language and in English in parentheses after for <code>supportedLocales</code>. Use the <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3">ISO 3166-1 alpha-3 code</a> for <code>localeCountryCode</code>. You must choose one country, so choose the country with the most native speakers of this language or is otherwise best associated with this language.</p> </li>
<li> <p>Add a relevant flag to <code>assets/images/flags/XXXX.png</code>, replacing XXXX with the 3 letters localeCountryCode. The image must be 42x26 pixels with 3 pixels of transparent margin on all 4 sides. You can resize the flag with <a href="https://www.getpaint.net/">paint.net</a> to 36x20 pixels, expand the canvas to 42x26 pixels with the flag anchored in the middle, and then manually delete the 3 pixels on each side to make it transparent. Or you can use another program like Photoshop.</p> </li>
<li> <p>Add the new language code to <code>tool/utils/translation/translation_constants.dart</code></p> </li>
</ol>
<h2>Add a new fiat currency</h2>
<ol>
<li> <p>Check with <a href="https://guides.cakewallet.com">Cake Wallet support</a> to see if the desired new fiat currency is available through our fiat API. Not all fiat currencies are.</p> </li>
<li> <p>If the currency is associated strongly with a specific issuing country, map the <a href="https://en.wikipedia.org/wiki/ISO_4217">ISO 4217</a> currency code with the applicable <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3">ISO 3166-1 alpha-3 code</a> in <code>lib/entities/fiat_currency.dart</code>. If the currency is used in a whole region or organization, then map with a reasonable interpretation of this (eg: eur countryCode for EUR symbol).</p> </li>
<li> <p>Add the raw mapping underneath in <code>lib/entities/fiat_currency.dart</code> following the same format as the others.</p> </li>
<li> <p>Add a flag of the issuing country or organization to <code>assets/images/flags/XXXX.png</code>, replacing XXXX with the ISO 3166-1 alpha-3 code used above (eg: <code>usa.png</code>, <code>eur.png</code>). Do not add this if the flag with the same name already exists. The image must be 42x26 pixels with a 3 pixels of transparent margin on all 4 sides.</p> </li>
</ol>
<hr>
<p>Copyright (C) 2018-2023 Cake Labs LLC</p>
+
+
\ No newline at end of file
diff --git a/dataweave/daily/index.xml b/dataweave/daily/index.xml
index eb4e5f72e30..726ebe354cd 100644
--- a/dataweave/daily/index.xml
+++ b/dataweave/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DataWeave Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:21Z
+ 2024-12-01T01:31:06Z
Daily Trending of DataWeave in GitHub
\ No newline at end of file
diff --git a/dataweave/monthly/index.xml b/dataweave/monthly/index.xml
new file mode 100644
index 00000000000..5ab01c12e60
--- /dev/null
+++ b/dataweave/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DataWeave Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:45Z
+ Monthly Trending of DataWeave in GitHub
+
+
\ No newline at end of file
diff --git a/dataweave/weekly/index.xml b/dataweave/weekly/index.xml
new file mode 100644
index 00000000000..f61b3633c06
--- /dev/null
+++ b/dataweave/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DataWeave Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:50Z
+ Weekly Trending of DataWeave in GitHub
+
+
\ No newline at end of file
diff --git a/debian-package-control-file/daily/index.xml b/debian-package-control-file/daily/index.xml
index f14e26f0d1d..bede261370f 100644
--- a/debian-package-control-file/daily/index.xml
+++ b/debian-package-control-file/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Debian Package Control File Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:21Z
+ 2024-12-01T01:31:06Z
Daily Trending of Debian Package Control File in GitHub
\ No newline at end of file
diff --git a/debian-package-control-file/monthly/index.xml b/debian-package-control-file/monthly/index.xml
new file mode 100644
index 00000000000..9b9373dad84
--- /dev/null
+++ b/debian-package-control-file/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Debian Package Control File Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:45Z
+ Monthly Trending of Debian Package Control File in GitHub
+
+
\ No newline at end of file
diff --git a/debian-package-control-file/weekly/index.xml b/debian-package-control-file/weekly/index.xml
new file mode 100644
index 00000000000..618b595b5ad
--- /dev/null
+++ b/debian-package-control-file/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Debian Package Control File Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:50Z
+ Weekly Trending of Debian Package Control File in GitHub
+
+
\ No newline at end of file
diff --git a/denizenscript/daily/index.xml b/denizenscript/daily/index.xml
index 3f65cfdf5c4..60c6ec2d269 100644
--- a/denizenscript/daily/index.xml
+++ b/denizenscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DenizenScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:28Z
+ 2024-12-01T01:31:12Z
Daily Trending of DenizenScript in GitHub
\ No newline at end of file
diff --git a/denizenscript/monthly/index.xml b/denizenscript/monthly/index.xml
new file mode 100644
index 00000000000..72a13940f6f
--- /dev/null
+++ b/denizenscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DenizenScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:53Z
+ Monthly Trending of DenizenScript in GitHub
+
+
\ No newline at end of file
diff --git a/denizenscript/weekly/index.xml b/denizenscript/weekly/index.xml
new file mode 100644
index 00000000000..072cd7b00e0
--- /dev/null
+++ b/denizenscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DenizenScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:55Z
+ Weekly Trending of DenizenScript in GitHub
+
+
\ No newline at end of file
diff --git a/desktop/daily/index.xml b/desktop/daily/index.xml
index ed908d6cf66..13c0088ff7e 100644
--- a/desktop/daily/index.xml
+++ b/desktop/daily/index.xml
@@ -1,7 +1,7 @@
GitHub desktop Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:28Z
+ 2024-12-01T01:31:12Z
Daily Trending of desktop in GitHub
\ No newline at end of file
diff --git a/desktop/monthly/index.xml b/desktop/monthly/index.xml
new file mode 100644
index 00000000000..1c6ab2efd5a
--- /dev/null
+++ b/desktop/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub desktop Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:52Z
+ Monthly Trending of desktop in GitHub
+
+
\ No newline at end of file
diff --git a/desktop/weekly/index.xml b/desktop/weekly/index.xml
new file mode 100644
index 00000000000..1f294ffde1c
--- /dev/null
+++ b/desktop/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub desktop Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:55Z
+ Weekly Trending of desktop in GitHub
+
+
\ No newline at end of file
diff --git a/dhall/daily/index.xml b/dhall/daily/index.xml
index 3556a69988d..882c3efba14 100644
--- a/dhall/daily/index.xml
+++ b/dhall/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Dhall Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:28Z
+ 2024-12-01T01:31:12Z
Daily Trending of Dhall in GitHub
\ No newline at end of file
diff --git a/dhall/monthly/index.xml b/dhall/monthly/index.xml
new file mode 100644
index 00000000000..fe3756ec667
--- /dev/null
+++ b/dhall/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dhall Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:53Z
+ Monthly Trending of Dhall in GitHub
+
+
\ No newline at end of file
diff --git a/dhall/weekly/index.xml b/dhall/weekly/index.xml
new file mode 100644
index 00000000000..b5928a6aaeb
--- /dev/null
+++ b/dhall/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dhall Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:54Z
+ Weekly Trending of Dhall in GitHub
+
+
\ No newline at end of file
diff --git a/diff/daily/index.xml b/diff/daily/index.xml
index e1e147789cc..2d321aac873 100644
--- a/diff/daily/index.xml
+++ b/diff/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Diff Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:28Z
+ 2024-12-01T01:31:13Z
Daily Trending of Diff in GitHub
\ No newline at end of file
diff --git a/diff/monthly/index.xml b/diff/monthly/index.xml
new file mode 100644
index 00000000000..0e4b23a0292
--- /dev/null
+++ b/diff/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Diff Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:53Z
+ Monthly Trending of Diff in GitHub
+
+
\ No newline at end of file
diff --git a/diff/weekly/index.xml b/diff/weekly/index.xml
new file mode 100644
index 00000000000..e85a73432f4
--- /dev/null
+++ b/diff/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Diff Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:55Z
+ Weekly Trending of Diff in GitHub
+
+
\ No newline at end of file
diff --git a/digital-command-language/daily/index.xml b/digital-command-language/daily/index.xml
index a8381454241..9d591c3777b 100644
--- a/digital-command-language/daily/index.xml
+++ b/digital-command-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DIGITAL Command Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:30Z
+ 2024-12-01T01:31:13Z
Daily Trending of DIGITAL Command Language in GitHub
\ No newline at end of file
diff --git a/digital-command-language/monthly/index.xml b/digital-command-language/monthly/index.xml
new file mode 100644
index 00000000000..cd12a4a2e40
--- /dev/null
+++ b/digital-command-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DIGITAL Command Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:54Z
+ Monthly Trending of DIGITAL Command Language in GitHub
+
+
\ No newline at end of file
diff --git a/digital-command-language/weekly/index.xml b/digital-command-language/weekly/index.xml
new file mode 100644
index 00000000000..b48c7befbad
--- /dev/null
+++ b/digital-command-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DIGITAL Command Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:57Z
+ Weekly Trending of DIGITAL Command Language in GitHub
+
+
\ No newline at end of file
diff --git a/dircolors/daily/index.xml b/dircolors/daily/index.xml
index 254d2a836aa..5e5b8850c80 100644
--- a/dircolors/daily/index.xml
+++ b/dircolors/daily/index.xml
@@ -1,7 +1,7 @@
GitHub dircolors Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:29Z
+ 2024-12-01T01:31:14Z
Daily Trending of dircolors in GitHub
\ No newline at end of file
diff --git a/dircolors/monthly/index.xml b/dircolors/monthly/index.xml
new file mode 100644
index 00000000000..74b5e0ac077
--- /dev/null
+++ b/dircolors/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub dircolors Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:54Z
+ Monthly Trending of dircolors in GitHub
+
+
\ No newline at end of file
diff --git a/dircolors/weekly/index.xml b/dircolors/weekly/index.xml
new file mode 100644
index 00000000000..1cbb815ed30
--- /dev/null
+++ b/dircolors/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub dircolors Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:56Z
+ Weekly Trending of dircolors in GitHub
+
+
\ No newline at end of file
diff --git a/directx-3d-file/daily/index.xml b/directx-3d-file/daily/index.xml
index 7c3a8595cab..33c56a57e12 100644
--- a/directx-3d-file/daily/index.xml
+++ b/directx-3d-file/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DirectX 3D File Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:30Z
+ 2024-12-01T01:31:14Z
Daily Trending of DirectX 3D File in GitHub
\ No newline at end of file
diff --git a/directx-3d-file/monthly/index.xml b/directx-3d-file/monthly/index.xml
new file mode 100644
index 00000000000..e90328481ac
--- /dev/null
+++ b/directx-3d-file/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DirectX 3D File Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:54Z
+ Monthly Trending of DirectX 3D File in GitHub
+
+
\ No newline at end of file
diff --git a/directx-3d-file/weekly/index.xml b/directx-3d-file/weekly/index.xml
new file mode 100644
index 00000000000..0331c5e4b15
--- /dev/null
+++ b/directx-3d-file/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DirectX 3D File Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:56Z
+ Weekly Trending of DirectX 3D File in GitHub
+
+
\ No newline at end of file
diff --git a/dm/daily/index.xml b/dm/daily/index.xml
index fb9ef40ac8f..0376161896e 100644
--- a/dm/daily/index.xml
+++ b/dm/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DM Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:30Z
+ 2024-12-01T01:31:17Z
Daily Trending of DM in GitHub
\ No newline at end of file
diff --git a/dm/monthly/index.xml b/dm/monthly/index.xml
new file mode 100644
index 00000000000..d14feea31e6
--- /dev/null
+++ b/dm/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DM Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:57Z
+ Monthly Trending of DM in GitHub
+
+
\ No newline at end of file
diff --git a/dm/weekly/index.xml b/dm/weekly/index.xml
new file mode 100644
index 00000000000..e96dc468d70
--- /dev/null
+++ b/dm/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DM Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:03Z
+ Weekly Trending of DM in GitHub
+
+
\ No newline at end of file
diff --git a/dns-zone/daily/index.xml b/dns-zone/daily/index.xml
index 5f6ab7d7ef3..aec9231899c 100644
--- a/dns-zone/daily/index.xml
+++ b/dns-zone/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DNS Zone Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:32Z
+ 2024-12-01T01:31:19Z
Daily Trending of DNS Zone in GitHub
\ No newline at end of file
diff --git a/dns-zone/monthly/index.xml b/dns-zone/monthly/index.xml
new file mode 100644
index 00000000000..031a9079aa5
--- /dev/null
+++ b/dns-zone/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DNS Zone Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:58Z
+ Monthly Trending of DNS Zone in GitHub
+
+
\ No newline at end of file
diff --git a/dns-zone/weekly/index.xml b/dns-zone/weekly/index.xml
new file mode 100644
index 00000000000..60f211be77f
--- /dev/null
+++ b/dns-zone/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DNS Zone Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:04Z
+ Weekly Trending of DNS Zone in GitHub
+
+
\ No newline at end of file
diff --git a/dockerfile/daily/index.xml b/dockerfile/daily/index.xml
index f016695c817..6aa20b6fd33 100644
--- a/dockerfile/daily/index.xml
+++ b/dockerfile/daily/index.xml
@@ -1,14 +1,7 @@
GitHub Dockerfile Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:33Z
+ 2024-12-01T01:31:20Z
Daily Trending of Dockerfile in GitHub
-
- astral-sh/uv-docker-example
- 2024-11-30T01:30:33Z
- tag:github.com,2024-11-30:/astral-sh/uv-docker-example
-
- <p>An example of using uv in Docker images</p><hr><h1>uv-docker-example</h1>
<p>An example project for using uv in Docker images, with a focus on best practices for developing with the project mounted in the local image.</p>
<p>See the <a href="https://docs.astral.sh/uv/guides/integration/docker/">uv Docker integration guide</a> for more background.</p>
<h2>Trying it out</h2>
<p>A <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/run.sh"><code>run.sh</code></a> utility is provided for quickly building the image and starting a container. This script demonstrates best practices for developing using the container, using bind mounts for the project and virtual environment directories.</p>
<p>To build and run the web application in the container using <code>docker run</code>:</p>
<pre><code class="language-console">$ ./run.sh
</code></pre>
<p>Then, check out <a href="http://localhost:8000"><code>http://localhost:8000</code></a> to see the website.</p>
<p>A Docker compose configuration is also provided to demonstrate best practices for developing using the container with Docker compose. Docker compose is more complex than using <code>docker run</code>, but has more robust support for various workflows.</p>
<p>To build and run the web application using Docker compose:</p>
<pre><code>docker compose up --watch
</code></pre>
<p>By default, the image is set up to start the web application. However, a command-line interface is provided for demonstration purposes as well.</p>
<p>To run the command-line entrypoint in the container:</p>
<pre><code class="language-console">$ ./run.sh hello
</code></pre>
<h2>Project overview</h2>
<h3>Dockerfile</h3>
<p>The <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/Dockerfile"><code>Dockerfile</code></a> defines the image and includes:</p>
<ul>
<li>Installation of uv</li>
<li>Installing the project dependencies and the project separately for optimal image build caching</li>
<li>Placing environment executables on the <code>PATH</code></li>
<li>Running the web application</li>
</ul>
<p>The <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/multistage.Dockerfile"><code>multistage.Dockerfile</code></a> example extends the <code>Dockerfile</code> example to use multistage builds to reduce the final size of the image.</p>
<h3>Dockerignore file</h3>
<p>The <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/.dockerignore"><code>.dockerignore</code></a> file includes an entry for the <code>.venv</code> directory to ensure the <code>.venv</code> is not included in image builds. Note that the <code>.dockerignore</code> file is not applied to volume mounts during container runs.</p>
<h3>Run script</h3>
<p>The <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/run.sh"><code>run.sh</code></a> script includes an example of invoking <code>docker run</code> for local development, mounting the source code for the project into the container so that edits are reflected immediately.</p>
<h3>Docker compose file</h3>
<p>The <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/compose.yml">compose.yml</a> file includes a Docker compose definition for the web application. It includes a <a href="https://docs.docker.com/compose/file-watch/#compose-watch-versus-bind-mounts"><code>watch</code> directive</a> for Docker compose, which is a best-practice method for updating the container on local changes.</p>
<h3>Application code</h3>
<p>The Python application code for the project is at <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/src/uv_docker_example/__init__.py"><code>src/uv_docker_example/__init__.py</code></a> — there's a command line entrypoint and a basic FastAPI application — both of which just display "hello world" output.</p>
<h3>Project definition</h3>
<p>The project at <a href="https://raw.githubusercontent.com/astral-sh/uv-docker-example/main/pyproject.toml"><code>pyproject.toml</code></a> includes Ruff as an example development dependency, includes FastAPI as a dependency, and defines a <code>hello</code> entrypoint for the application.</p>
<h2>Useful commands</h2>
<p>To check that the environment is up-to-date after image builds:</p>
<pre><code class="language-console">$ ./run.sh uv sync --frozen
Audited 2 packages ...
</code></pre>
<p>To enter a <code>bash</code> shell in the container:</p>
<pre><code class="language-console">$ ./run.sh /bin/bash
</code></pre>
<p>To build the image without running anything:</p>
<pre><code class="language-console">$ docker build .
</code></pre>
<p>To build the multistage image:</p>
<pre><code class="language-console">$ docker build . --file multistage.Dockerfile
</code></pre>
-
\ No newline at end of file
diff --git a/dockerfile/monthly/index.xml b/dockerfile/monthly/index.xml
new file mode 100644
index 00000000000..7a4f822a868
--- /dev/null
+++ b/dockerfile/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Dockerfile Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:59Z
+ Monthly Trending of Dockerfile in GitHub
+
+
+ medusajs/docker-medusa
+ 2024-12-01T01:52:59Z
+ tag:github.com,2024-12-01:/medusajs/docker-medusa
+
+ <p>This repo is managed by the Medusa Community. Medusa does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk.</p><hr><p align="center"> <a href="https://www.medusajs.com"> <img alt="Medusa" src="https://user-images.githubusercontent.com/7554214/153162406-bf8fd16f-aa98-4604-b87b-e13ab4baf604.png" width="100"> </a> </p>
<h1 align="center"> Medusa </h1>
<h4 align="center"> <a href="https://github.com/medusajs/admin">Medusa Admin</a> | <a href="https://www.medusajs.com">Website</a> | <a href="https://www.medusajs.com/blog">Blog</a> | <a href="https://www.linkedin.com/company/medusa-commerce">LinkedIn</a> | <a href="https://twitter.com/medusajs">Twitter</a> | <a href="https://docs.medusajs.com">Documentation</a> | <a href="https://medusajs.notion.site/medusajs/Medusa-Home-3485f8605d834a07949b17d1a9f7eafd">Notion</a> </h4>
<p align="center"> Medusa is an open-source headless commerce engine that enables developers to create amazing digital commerce experiences. </p>
<p align="center"> <a href="https://github.com/medusajs/medusa/raw/master/LICENSE"> <img src="https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true" alt="Medusa is released under the MIT license."> </a> <a href="https://github.com/medusajs/medusa/raw/master/CONTRIBUTING.md"> <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="PRs welcome!"> </a> <a href="https://www.producthunt.com/posts/medusa"><img src="https://img.shields.io/badge/Product%20Hunt-%231%20Product%20of%20the%20Day-%23DA552E" alt="Product Hunt"></a> <a href="https://discord.gg/xpCwq3Kfn8"> <img src="https://img.shields.io/badge/chat-on%20discord-7289DA.svg?sanitize=true" alt="Discord Chat"> </a> <a href="https://twitter.com/intent/follow?screen_name=medusajs"> <img src="https://img.shields.io/twitter/follow/medusajs.svg?label=Follow%20@medusajs" alt="Follow @medusajs"> </a> </p>
<h2>Please note</h2>
<p>This repo is managed by the Medusa Community. Medusa does not provide official support for Docker, but we will accept fixes and documentation. Use at your own risk.</p>
<p><strong>This project is inteded for development only at this time.</strong></p>
<p>The files for both the <i>Medusa server</i> and the <i>Storefront</i> are loaded in Bind Mounts allowing you to change the server functionality and have the change be hot-reloaded onto your running containers.</p>
<p></p>
<hr>
<h2>Requirements</h2>
<p>To use Docker with Medusa, you should have created a Medusa project. Check out our <a href="https://github.com/medusajs/medusa#quickstart">Quickstart</a> to get started.</p>
<p>Additionally, you should have <code>docker</code> and <code>docker-compose</code> installed on your system.</p>
<h2>Getting Started</h2>
<p>To set up Medusa in a development environment with Docker, you should copy files <code>docker-compose.yml</code>, <code>docker-compose.override.yml, </code>backend/develop.sh<code>, and </code>backend/Dockerfile` to your Medusa project.</p>
<p>Then build the images since they are not published on dockerhub. This is accomplished by adding the <code>--build</code> flag as shown below:</p>
<pre><code class="language-bash">docker compose up --build
</code></pre>
<p>Having already built the Docker images you can run docker compose without the <code>--build</code> flag.</p>
<pre><code>docker compose up
</code></pre>
<p>Your local Medusa setup is now running with each of the services occupying the following ports:</p>
<ul>
<li><b>Medusa Server</b>: 9000 </li>
<li><b>Medusa Admin</b>: 7000 </li>
<li><b>Storefront</b>: 8000 </li>
<li><b>postgres</b>: 5432 </li>
<li><b>redis</b>: 6379 </li>
</ul>
<p><em>Note: If you change the dependencies of your projects by adding new packages you can simply rebuild that package with the same tag <code>test</code> and run <code>docker compose up</code> once again to update your environment.</em></p>
<h3>Seeding your Medusa store</h3>
<p>To add seed data to your medusa store run this command in a seperate</p>
<pre><code>docker exec medusa-server medusa seed -f ./data/seed.json
</code></pre>
<h2>Running Medusa with docker in production</h2>
<p>This repository and each of the services contain dockerfiles for both development and production, named <code>Dockerfile</code> and <code>Dockerfile.prod</code> respectively. The <code>Dockerfile.prod</code> copies the local files from disk and builds a production ready image based on your local development progress. Your specific needs for a production like container might differ from the <code>Dockerfile.prod</code> but it should provide a template and an idea of the requirements for each of the basic services.</p>
<p>To run the services in a production state <code>docker compose</code> is simply run with the <code>docker-compose.production.yml</code> file as well as the basic <code>docker-compose.yml</code> file as seen below. If you wish to build the production ready images and then start them run <code>docker compose up</code> with the <code>--build</code> flag as described above.</p>
<pre><code>docker compose up -f docker-compose.yml -f docker-compose.production.yml up
</code></pre>
<p><code>docker-compose.production.yml</code> contains production relevant overrides to the services described in the <code>docker-compose.yml</code> development file.</p>
<h2>Try it out</h2>
<pre><code>curl -X GET localhost:9000/store/products | python -m json.tool
</code></pre>
<p>After the seed script has run you will have the following things in you database:</p>
<ul>
<li>a User with the email: <a href="mailto:admin@medusa-test.com">admin@medusa-test.com</a> and password: supersecret</li>
<li>a Region called Default Region with the countries GB, DE, DK, SE, FR, ES, IT</li>
<li>a Shipping Option called Standard Shipping which costs 10 EUR</li>
<li>a Product called Cool Test Product with 4 Product Variants that all cost 19.50 EUR</li>
</ul>
<p>Visit <a href="https://docs.medusa-comerce.com">docs.medusa-commerce.com</a> for further guides.</p>
<p> <a href="https://www.medusa-commerce.com"> Website </a> | <a href="https://medusajs.notion.site/medusajs/Medusa-Home-3485f8605d834a07949b17d1a9f7eafd"> Notion Home </a> | <a href="https://twitter.com/intent/follow?screen_name=medusajs"> Twitter </a> | <a href="https://docs.medusa-commerce.com"> Docs </a> </p>
+
+
\ No newline at end of file
diff --git a/dockerfile/weekly/index.xml b/dockerfile/weekly/index.xml
new file mode 100644
index 00000000000..3f60b28924a
--- /dev/null
+++ b/dockerfile/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dockerfile Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:06Z
+ Weekly Trending of Dockerfile in GitHub
+
+
\ No newline at end of file
diff --git a/dogescript/daily/index.xml b/dogescript/daily/index.xml
index 668ca93d553..23cbca54357 100644
--- a/dogescript/daily/index.xml
+++ b/dogescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Dogescript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:31Z
+ 2024-12-01T01:31:18Z
Daily Trending of Dogescript in GitHub
\ No newline at end of file
diff --git a/dogescript/monthly/index.xml b/dogescript/monthly/index.xml
new file mode 100644
index 00000000000..d52fdf9aee6
--- /dev/null
+++ b/dogescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dogescript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:52:58Z
+ Monthly Trending of Dogescript in GitHub
+
+
\ No newline at end of file
diff --git a/dogescript/weekly/index.xml b/dogescript/weekly/index.xml
new file mode 100644
index 00000000000..5e16ea58e43
--- /dev/null
+++ b/dogescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dogescript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:05Z
+ Weekly Trending of Dogescript in GitHub
+
+
\ No newline at end of file
diff --git a/dtrace/daily/index.xml b/dtrace/daily/index.xml
index 53cbb840d7c..ab7f81e9cda 100644
--- a/dtrace/daily/index.xml
+++ b/dtrace/daily/index.xml
@@ -1,7 +1,7 @@
GitHub DTrace Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:39Z
+ 2024-12-01T01:31:34Z
Daily Trending of DTrace in GitHub
\ No newline at end of file
diff --git a/dtrace/monthly/index.xml b/dtrace/monthly/index.xml
new file mode 100644
index 00000000000..2db266589b3
--- /dev/null
+++ b/dtrace/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DTrace Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:05Z
+ Monthly Trending of DTrace in GitHub
+
+
\ No newline at end of file
diff --git a/dtrace/weekly/index.xml b/dtrace/weekly/index.xml
new file mode 100644
index 00000000000..97f1efefa4b
--- /dev/null
+++ b/dtrace/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub DTrace Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:11Z
+ Weekly Trending of DTrace in GitHub
+
+
\ No newline at end of file
diff --git a/dylan/daily/index.xml b/dylan/daily/index.xml
index 939fca0b1e2..c139d49ca8a 100644
--- a/dylan/daily/index.xml
+++ b/dylan/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Dylan Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:39Z
+ 2024-12-01T01:31:33Z
Daily Trending of Dylan in GitHub
\ No newline at end of file
diff --git a/dylan/monthly/index.xml b/dylan/monthly/index.xml
new file mode 100644
index 00000000000..86318e60ff2
--- /dev/null
+++ b/dylan/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dylan Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:06Z
+ Monthly Trending of Dylan in GitHub
+
+
\ No newline at end of file
diff --git a/dylan/weekly/index.xml b/dylan/weekly/index.xml
new file mode 100644
index 00000000000..c1a39440cc4
--- /dev/null
+++ b/dylan/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Dylan Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:11Z
+ Weekly Trending of Dylan in GitHub
+
+
\ No newline at end of file
diff --git a/e-mail/daily/index.xml b/e-mail/daily/index.xml
index 8e0f16539b6..38691b92336 100644
--- a/e-mail/daily/index.xml
+++ b/e-mail/daily/index.xml
@@ -1,7 +1,7 @@
GitHub E-mail Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:41Z
+ 2024-12-01T01:31:35Z
Daily Trending of E-mail in GitHub
\ No newline at end of file
diff --git a/e-mail/monthly/index.xml b/e-mail/monthly/index.xml
new file mode 100644
index 00000000000..a5b5e0ce89b
--- /dev/null
+++ b/e-mail/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub E-mail Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:07Z
+ Monthly Trending of E-mail in GitHub
+
+
\ No newline at end of file
diff --git a/e-mail/weekly/index.xml b/e-mail/weekly/index.xml
new file mode 100644
index 00000000000..a669f8f37f0
--- /dev/null
+++ b/e-mail/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub E-mail Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:13Z
+ Weekly Trending of E-mail in GitHub
+
+
\ No newline at end of file
diff --git a/e/daily/index.xml b/e/daily/index.xml
index c78c8186d80..7aa65c7ec3e 100644
--- a/e/daily/index.xml
+++ b/e/daily/index.xml
@@ -1,7 +1,7 @@
GitHub E Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:39Z
+ 2024-12-01T01:31:33Z
Daily Trending of E in GitHub
\ No newline at end of file
diff --git a/e/monthly/index.xml b/e/monthly/index.xml
new file mode 100644
index 00000000000..5e0c4a6fe9c
--- /dev/null
+++ b/e/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub E Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:05Z
+ Monthly Trending of E in GitHub
+
+
\ No newline at end of file
diff --git a/e/weekly/index.xml b/e/weekly/index.xml
new file mode 100644
index 00000000000..fb97d7ce9b3
--- /dev/null
+++ b/e/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub E Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:11Z
+ Weekly Trending of E in GitHub
+
+
\ No newline at end of file
diff --git a/eagle/daily/index.xml b/eagle/daily/index.xml
index 8b35e65a7d7..b0c95221e06 100644
--- a/eagle/daily/index.xml
+++ b/eagle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Eagle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:40Z
+ 2024-12-01T01:31:34Z
Daily Trending of Eagle in GitHub
\ No newline at end of file
diff --git a/eagle/monthly/index.xml b/eagle/monthly/index.xml
new file mode 100644
index 00000000000..53f5621c367
--- /dev/null
+++ b/eagle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Eagle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:07Z
+ Monthly Trending of Eagle in GitHub
+
+
\ No newline at end of file
diff --git a/eagle/weekly/index.xml b/eagle/weekly/index.xml
new file mode 100644
index 00000000000..0c0168f3f46
--- /dev/null
+++ b/eagle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Eagle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:12Z
+ Weekly Trending of Eagle in GitHub
+
+
\ No newline at end of file
diff --git a/earthly/daily/index.xml b/earthly/daily/index.xml
index f4f72b4158c..6cebb263d27 100644
--- a/earthly/daily/index.xml
+++ b/earthly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Earthly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:41Z
+ 2024-12-01T01:31:35Z
Daily Trending of Earthly in GitHub
\ No newline at end of file
diff --git a/earthly/monthly/index.xml b/earthly/monthly/index.xml
new file mode 100644
index 00000000000..9c45c4e9cc4
--- /dev/null
+++ b/earthly/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Earthly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:07Z
+ Monthly Trending of Earthly in GitHub
+
+
\ No newline at end of file
diff --git a/earthly/weekly/index.xml b/earthly/weekly/index.xml
new file mode 100644
index 00000000000..fced4cb2f75
--- /dev/null
+++ b/earthly/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Earthly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:12Z
+ Weekly Trending of Earthly in GitHub
+
+
\ No newline at end of file
diff --git a/easybuild/daily/index.xml b/easybuild/daily/index.xml
index 745ccf060d9..01c522270c8 100644
--- a/easybuild/daily/index.xml
+++ b/easybuild/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Easybuild Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:41Z
+ 2024-12-01T01:31:35Z
Daily Trending of Easybuild in GitHub
\ No newline at end of file
diff --git a/easybuild/monthly/index.xml b/easybuild/monthly/index.xml
new file mode 100644
index 00000000000..fbc1dcd6332
--- /dev/null
+++ b/easybuild/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Easybuild Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:08Z
+ Monthly Trending of Easybuild in GitHub
+
+
\ No newline at end of file
diff --git a/easybuild/weekly/index.xml b/easybuild/weekly/index.xml
new file mode 100644
index 00000000000..c98ce067147
--- /dev/null
+++ b/easybuild/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Easybuild Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:13Z
+ Weekly Trending of Easybuild in GitHub
+
+
\ No newline at end of file
diff --git a/ebnf/daily/index.xml b/ebnf/daily/index.xml
index 7316cf98366..1b2324f932a 100644
--- a/ebnf/daily/index.xml
+++ b/ebnf/daily/index.xml
@@ -1,7 +1,7 @@
GitHub EBNF Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:43Z
+ 2024-12-01T01:31:36Z
Daily Trending of EBNF in GitHub
\ No newline at end of file
diff --git a/ebnf/monthly/index.xml b/ebnf/monthly/index.xml
new file mode 100644
index 00000000000..2d6b90784eb
--- /dev/null
+++ b/ebnf/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EBNF Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:09Z
+ Monthly Trending of EBNF in GitHub
+
+
\ No newline at end of file
diff --git a/ebnf/weekly/index.xml b/ebnf/weekly/index.xml
new file mode 100644
index 00000000000..59072504c7b
--- /dev/null
+++ b/ebnf/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EBNF Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:14Z
+ Weekly Trending of EBNF in GitHub
+
+
\ No newline at end of file
diff --git a/ec/daily/index.xml b/ec/daily/index.xml
index 8da1cf97171..cd6ff62ccca 100644
--- a/ec/daily/index.xml
+++ b/ec/daily/index.xml
@@ -1,7 +1,7 @@
GitHub eC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:42Z
+ 2024-12-01T01:31:37Z
Daily Trending of eC in GitHub
\ No newline at end of file
diff --git a/ec/monthly/index.xml b/ec/monthly/index.xml
new file mode 100644
index 00000000000..878c49152f8
--- /dev/null
+++ b/ec/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub eC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:08Z
+ Monthly Trending of eC in GitHub
+
+
\ No newline at end of file
diff --git a/ec/weekly/index.xml b/ec/weekly/index.xml
new file mode 100644
index 00000000000..81c76a0bef7
--- /dev/null
+++ b/ec/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub eC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:15Z
+ Weekly Trending of eC in GitHub
+
+
\ No newline at end of file
diff --git a/ecere-projects/daily/index.xml b/ecere-projects/daily/index.xml
index eacc7e78546..0bc06c5fcb4 100644
--- a/ecere-projects/daily/index.xml
+++ b/ecere-projects/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ecere Projects Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:43Z
+ 2024-12-01T01:31:36Z
Daily Trending of Ecere Projects in GitHub
\ No newline at end of file
diff --git a/ecere-projects/monthly/index.xml b/ecere-projects/monthly/index.xml
new file mode 100644
index 00000000000..fe7a4f015dc
--- /dev/null
+++ b/ecere-projects/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ecere Projects Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:09Z
+ Monthly Trending of Ecere Projects in GitHub
+
+
\ No newline at end of file
diff --git a/ecere-projects/weekly/index.xml b/ecere-projects/weekly/index.xml
new file mode 100644
index 00000000000..8fefc4ebc0f
--- /dev/null
+++ b/ecere-projects/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ecere Projects Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:14Z
+ Weekly Trending of Ecere Projects in GitHub
+
+
\ No newline at end of file
diff --git a/ecl/daily/index.xml b/ecl/daily/index.xml
index 7137bad0172..a3cb9624491 100644
--- a/ecl/daily/index.xml
+++ b/ecl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ECL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:42Z
+ 2024-12-01T01:31:37Z
Daily Trending of ECL in GitHub
\ No newline at end of file
diff --git a/ecl/monthly/index.xml b/ecl/monthly/index.xml
new file mode 100644
index 00000000000..eaee481e833
--- /dev/null
+++ b/ecl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ECL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:09Z
+ Monthly Trending of ECL in GitHub
+
+
\ No newline at end of file
diff --git a/ecl/weekly/index.xml b/ecl/weekly/index.xml
new file mode 100644
index 00000000000..9deb8bb5d82
--- /dev/null
+++ b/ecl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ECL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:14Z
+ Weekly Trending of ECL in GitHub
+
+
\ No newline at end of file
diff --git a/eclipse/daily/index.xml b/eclipse/daily/index.xml
index bc0cf05c8aa..3155086f8d4 100644
--- a/eclipse/daily/index.xml
+++ b/eclipse/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ECLiPSe Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:44Z
+ 2024-12-01T01:31:38Z
Daily Trending of ECLiPSe in GitHub
\ No newline at end of file
diff --git a/eclipse/monthly/index.xml b/eclipse/monthly/index.xml
new file mode 100644
index 00000000000..7b8df0042cb
--- /dev/null
+++ b/eclipse/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ECLiPSe Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:11Z
+ Monthly Trending of ECLiPSe in GitHub
+
+
\ No newline at end of file
diff --git a/eclipse/weekly/index.xml b/eclipse/weekly/index.xml
new file mode 100644
index 00000000000..f281438b7dc
--- /dev/null
+++ b/eclipse/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ECLiPSe Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:16Z
+ Weekly Trending of ECLiPSe in GitHub
+
+
\ No newline at end of file
diff --git a/editorconfig/daily/index.xml b/editorconfig/daily/index.xml
index ac45d7726c0..6620f273feb 100644
--- a/editorconfig/daily/index.xml
+++ b/editorconfig/daily/index.xml
@@ -1,7 +1,7 @@
GitHub EditorConfig Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:46Z
+ 2024-12-01T01:31:40Z
Daily Trending of EditorConfig in GitHub
\ No newline at end of file
diff --git a/editorconfig/monthly/index.xml b/editorconfig/monthly/index.xml
new file mode 100644
index 00000000000..53ef093c6bf
--- /dev/null
+++ b/editorconfig/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EditorConfig Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:12Z
+ Monthly Trending of EditorConfig in GitHub
+
+
\ No newline at end of file
diff --git a/editorconfig/weekly/index.xml b/editorconfig/weekly/index.xml
new file mode 100644
index 00000000000..8ffd2478d81
--- /dev/null
+++ b/editorconfig/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EditorConfig Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:18Z
+ Weekly Trending of EditorConfig in GitHub
+
+
\ No newline at end of file
diff --git a/edje-data-collection/daily/index.xml b/edje-data-collection/daily/index.xml
index a382651f3dd..02b02c1120a 100644
--- a/edje-data-collection/daily/index.xml
+++ b/edje-data-collection/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Edje Data Collection Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:46Z
+ 2024-12-01T01:31:39Z
Daily Trending of Edje Data Collection in GitHub
\ No newline at end of file
diff --git a/edje-data-collection/monthly/index.xml b/edje-data-collection/monthly/index.xml
new file mode 100644
index 00000000000..1a739b757db
--- /dev/null
+++ b/edje-data-collection/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Edje Data Collection Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:12Z
+ Monthly Trending of Edje Data Collection in GitHub
+
+
\ No newline at end of file
diff --git a/edje-data-collection/weekly/index.xml b/edje-data-collection/weekly/index.xml
new file mode 100644
index 00000000000..ec5b4e69957
--- /dev/null
+++ b/edje-data-collection/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Edje Data Collection Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:17Z
+ Weekly Trending of Edje Data Collection in GitHub
+
+
\ No newline at end of file
diff --git a/edn/daily/index.xml b/edn/daily/index.xml
index 404e333b107..b731082c6f0 100644
--- a/edn/daily/index.xml
+++ b/edn/daily/index.xml
@@ -1,7 +1,7 @@
GitHub edn Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:46Z
+ 2024-12-01T01:31:40Z
Daily Trending of edn in GitHub
\ No newline at end of file
diff --git a/edn/monthly/index.xml b/edn/monthly/index.xml
new file mode 100644
index 00000000000..1eab77eb73d
--- /dev/null
+++ b/edn/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub edn Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:12Z
+ Monthly Trending of edn in GitHub
+
+
\ No newline at end of file
diff --git a/edn/weekly/index.xml b/edn/weekly/index.xml
new file mode 100644
index 00000000000..7dc35bb60cd
--- /dev/null
+++ b/edn/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub edn Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:17Z
+ Weekly Trending of edn in GitHub
+
+
\ No newline at end of file
diff --git a/eiffel/daily/index.xml b/eiffel/daily/index.xml
index 1f20a92e8b1..85f9883c66f 100644
--- a/eiffel/daily/index.xml
+++ b/eiffel/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Eiffel Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:45Z
+ 2024-12-01T01:31:39Z
Daily Trending of Eiffel in GitHub
\ No newline at end of file
diff --git a/eiffel/monthly/index.xml b/eiffel/monthly/index.xml
new file mode 100644
index 00000000000..1007f76017b
--- /dev/null
+++ b/eiffel/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Eiffel Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:13Z
+ Monthly Trending of Eiffel in GitHub
+
+
\ No newline at end of file
diff --git a/eiffel/weekly/index.xml b/eiffel/weekly/index.xml
new file mode 100644
index 00000000000..ce2200b61fb
--- /dev/null
+++ b/eiffel/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Eiffel Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:18Z
+ Weekly Trending of Eiffel in GitHub
+
+
\ No newline at end of file
diff --git a/ejs/daily/index.xml b/ejs/daily/index.xml
index 561fc4bb1aa..c3b6d69b33b 100644
--- a/ejs/daily/index.xml
+++ b/ejs/daily/index.xml
@@ -1,7 +1,7 @@
GitHub EJS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:48Z
+ 2024-12-01T01:31:42Z
Daily Trending of EJS in GitHub
\ No newline at end of file
diff --git a/ejs/monthly/index.xml b/ejs/monthly/index.xml
new file mode 100644
index 00000000000..a1079eaae5d
--- /dev/null
+++ b/ejs/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub EJS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:14Z
+ Monthly Trending of EJS in GitHub
+
+
+ LondheShubham153/node-todo-cicd
+ 2024-12-01T01:53:14Z
+ tag:github.com,2024-12-01:/LondheShubham153/node-todo-cicd
+
+ <p></p><hr>
+
+
\ No newline at end of file
diff --git a/ejs/weekly/index.xml b/ejs/weekly/index.xml
new file mode 100644
index 00000000000..7383cb9e613
--- /dev/null
+++ b/ejs/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EJS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:19Z
+ Weekly Trending of EJS in GitHub
+
+
\ No newline at end of file
diff --git a/elixir/daily/index.xml b/elixir/daily/index.xml
index e342b4ffeca..1692175ab42 100644
--- a/elixir/daily/index.xml
+++ b/elixir/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Elixir Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:49Z
+ 2024-12-01T01:31:46Z
Daily Trending of Elixir in GitHub
\ No newline at end of file
diff --git a/elixir/monthly/index.xml b/elixir/monthly/index.xml
new file mode 100644
index 00000000000..7e87f183e58
--- /dev/null
+++ b/elixir/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Elixir Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:15Z
+ Monthly Trending of Elixir in GitHub
+
+
+ oban-bg/oban
+ 2024-12-01T01:53:15Z
+ tag:github.com,2024-12-01:/oban-bg/oban
+
+ <p>💎 Robust job processing in Elixir, backed by modern PostgreSQL and SQLite3</p><hr>
+
+
+ bluzky/salad_ui
+ 2024-12-01T01:53:15Z
+ tag:github.com,2024-12-01:/bluzky/salad_ui
+
+ <p>Phoenix Liveview component library inspired by shadcn UI</p><hr>
+
+
+ anoma/anoma
+ 2024-12-01T01:53:15Z
+ tag:github.com,2024-12-01:/anoma/anoma
+
+ <p>Reference implementation of Anoma</p><hr>
+
+
\ No newline at end of file
diff --git a/elixir/weekly/index.xml b/elixir/weekly/index.xml
new file mode 100644
index 00000000000..80a20d48733
--- /dev/null
+++ b/elixir/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Elixir Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:20Z
+ Weekly Trending of Elixir in GitHub
+
+
\ No newline at end of file
diff --git a/elm/daily/index.xml b/elm/daily/index.xml
index db8ce0ba7a1..84e08bfb678 100644
--- a/elm/daily/index.xml
+++ b/elm/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Elm Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:47Z
+ 2024-12-01T01:31:41Z
Daily Trending of Elm in GitHub
\ No newline at end of file
diff --git a/elm/monthly/index.xml b/elm/monthly/index.xml
new file mode 100644
index 00000000000..9d74b48fac3
--- /dev/null
+++ b/elm/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Elm Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:14Z
+ Monthly Trending of Elm in GitHub
+
+
\ No newline at end of file
diff --git a/elm/weekly/index.xml b/elm/weekly/index.xml
new file mode 100644
index 00000000000..60c83792c92
--- /dev/null
+++ b/elm/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Elm Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:19Z
+ Weekly Trending of Elm in GitHub
+
+
\ No newline at end of file
diff --git a/emacs-lisp/daily/index.xml b/emacs-lisp/daily/index.xml
index 5187ed4a6cf..09eabb68224 100644
--- a/emacs-lisp/daily/index.xml
+++ b/emacs-lisp/daily/index.xml
@@ -1,14 +1,7 @@
GitHub Emacs Lisp Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:51Z
+ 2024-12-01T01:31:48Z
Daily Trending of Emacs Lisp in GitHub
-
- dandavison/xenops
- 2024-11-30T01:30:51Z
- tag:github.com,2024-11-30:/dandavison/xenops
-
- <p>An editing environment for LaTeX mathematical documents</p><hr><p align="center"><a href="https://www.youtube.com/watch?v=GNS-ZFVaFM4">[6-minute video introduction]</a></p>
<table style="width:100%">
<tbody>
<tr>
<td> <img width="300px" src="https://raw.githubusercontent.com/dandavison/xenops/master/etc/img/demo-1.gif" alt="demo"> </td>
<td> <img width="512px" src="https://raw.githubusercontent.com/dandavison/xenops/master/etc/img/xenops.jpg" alt="Xenops rutilans"> </td>
</tr>
</tbody>
</table>
<p align="right"> <a href="https://travis-ci.com/dandavison/xenops"> <img src="https://travis-ci.com/dandavison/xenops.svg?token=CX7zhABhKYrVPxKn4rWz&branch=master" alt="Build Status"> </a> </p>
<ul>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#1-overview">1. Overview</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#2-getting-started">2. Getting started</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#3-how-to-use-xenops">3. How to use Xenops</a>
<ul>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#31-rendering-math-tables-and-tikz-content">3.1 Rendering math, tables and TikZ content</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#32-rendering-all-the-content-in-the-document">3.2 Rendering all the content in the document</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#33-executing-code">3.3 Executing code</a>
<ul>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#331-sympy-example">3.3.1 SymPy example</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#332-mathematica-example">3.3.2 Mathematica example</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#34-working-with-images">3.4 Working with images</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#35-xen-mode">3.5 Xen mode</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#4-command-and-variable-reference">4. Command and variable reference</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#5-tips">5. Tips</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#6-contributing">6. Contributing</a></li>
<li><a href="https://raw.githubusercontent.com/dandavison/xenops/master/#7-credit">7. Credit</a></li>
</ul>
<h1>1. Overview</h1>
<p>Xenops is a LaTeX editing environment for mathematical documents in Emacs.</p>
<p>Please see the <a href="https://www.youtube.com/watch?v=GNS-ZFVaFM4">6-minute video introduction</a>.</p>
<p>Installation instructions are below. To use Xenops, open a <code>.tex</code> file in Emacs as usual, and do <code>M-x xenops-mode</code>. The key features are:</p>
<ul>
<li> <p><strong>LaTeX math, tables, and TikZ diagrams are automatically displayed as SVG images in the Emacs buffer.</strong></p> <p>You don't need to do anything: rendering is triggered automatically. The result is that you can work on the document in Emacs without needing to frequently check the appearance of the PDF. Rendering is asynchronous, so it doesn't interrupt your writing.</p> </li>
<li> <p><strong>A LaTeX file edited with Xenops is just a normal <code>.tex</code> file.</strong></p> <p>Other people collaborating on the same document do not have to use Xenops (or Emacs), and using Xenops does not involve adding non-LaTeX content to your <code>.tex</code> files.</p> </li>
<li> <p><strong>Source code in <code>minted</code> blocks can be executed, and is syntax-highlighted.</strong></p> <p>Mathematica and SymPy are both capable of returning symbolic expressions as LaTeX code. This means that you can perform a symbolic calculation in a Mathematica or SymPy <code>minted</code> block, and Xenops will render the symbolic expression that results as an image of LaTeX-typeset traditional math notation.</p> </li>
<li> <p><strong>Xenops provides an optional decluttered view of your document.</strong></p> <p>This view can be toggled on/off with <code>M-x xenops-xen-mode</code>. It works by hiding common LaTeX markup, and restyling certain document elements.</p> </li>
<li> <p><strong>Images on disk are displayed in the Emacs buffer, and screenshots can be captured from the system clipboard.</strong></p> <p>So, for example, <code>\includegraphics{myfile.png}</code> will be displayed as an image, and if you capture a screenshot to the system clipboard, then paste (e.g. <code>C-y</code>) will prompt for a file name, save the image to disk, insert the <code>\includegraphics</code> element, and display the image.</p> </li>
</ul>
<p>When using Xenops, you can continue to use <a href="https://www.gnu.org/software/auctex/">auctex</a>: Xenops replaces the <code>preview-latex</code> functionality in auctex.</p>
<p>Xenops can also be used with <a href="https://orgmode.org">org-mode</a> documents that contain LaTeX fragments.</p>
<h1>2. Getting started</h1>
<ol>
<li> <p><strong>Ensure that you have <a href="https://www.latex-project.org/get">LaTeX</a> installed on your machine.</strong></p> <p>The commands <code>which latex</code> and <code>which dvisvgm</code> must both return paths to the executables. <code>dvisvgm</code> should be present as part of your LaTeX installation, but it's also available <a href="https://dvisvgm.de/Downloads">here</a>.</p> </li>
<li> <p><strong>Ensure that your Emacs version is at least Emacs 26.</strong></p> <p>This is necessary because Xenops uses <a href="https://github.com/skeeto/emacs-aio">emacs-aio</a>.</p> <p>If you are using MacOS, install emacs from homebrew using the <code>emacs-mac</code> package (aka Mitsuharu's Emacs build), since it uses WebKit to render SVG, resulting in beautifully crisp images.</p> </li>
<li> <p><strong>Install Xenops from <a href="https://github.com/melpa/melpa">MELPA</a>.</strong></p> <pre><code>M-x package-refresh-contents RET
M-x package-install RET xenops RET
</code></pre> <p>To activate Xenops, use <code>M-x xenops-mode</code> after opening a LaTeX file.</p> </li>
<li> <p><strong>Optional: activate xenops-mode automatically for LaTeX files.</strong></p> <pre><code class="language-emacs-lisp">(add-hook 'latex-mode-hook #'xenops-mode)
(add-hook 'LaTeX-mode-hook #'xenops-mode)
</code></pre> </li>
<li> <p><strong>Run <code>M-x xenops-doctor</code></strong></p> <p>You must run Emacs as a GUI application, not as a terminal application. This is because Xenops displays images in Emacs buffers.</p> <p><code>M-x xenops-doctor</code> will check all the requirements listed above and some others. You should see this: <img width="250px" src="https://user-images.githubusercontent.com/52205/76026875-3b1d5d00-5ef5-11ea-9eeb-9df0fcadf6ab.png" alt="image"><br> If so, move on to the next section, <code>"How to use Xenops"</code>. If not, the <code>xenops-doctor</code> output will explain what is wrong.</p> </li>
</ol>
<h1>3. How to use Xenops</h1>
<p>You don't need to learn any commands for Xenops to render your math: you just type, and Xenops will render it. The animation at the top of this README gives an idea of what this looks like (refresh the page to make it play again).</p>
<p>More explicitly, here are the basic steps for working with math in Xenops:</p>
<ol>
<li> <p><strong>Enter some LaTeX math code, using any of the standard delimiters:</strong><br><code>$...$</code>, <code>\(...\)</code>, <code>\[...\]</code>, <code>\tikz ...;</code>, <code>\begin{equation|align|table|tabular|tikzpicture}</code>.</p> </li>
<li> <p><strong>Move the cursor out of the block: an image of the math will appear.</strong></p> </li>
<li> <p><strong>Move the cursor over the image and hit Enter: the image will disappear and you can edit the LaTeX code.</strong></p>
<table style="width:100%">
<tbody>
<tr>
<td> <img width="400px" src="https://raw.githubusercontent.com/dandavison/xenops/master/etc/img/bayesian-network.gif" alt="bayesian-network"> </td>
</tr>
</tbody>
</table> </li>
</ol>
<p>If you want Xenops to reveal the LaTeX code for editing automatically when the cursor moves into the block, set the variable <code>xenops-reveal-on-entry</code>.</p>
<p>You may also want to create images for all math/table/TikZ elements in the document. To do that, position the cursor outside any element and issue <code>xenops-dwim</code>.</p>
<p>The other command to know from the start is <code>xenops-doctor</code>: run this if something is not working.</p>
<p>The following sections give more detailed instructions and examples.</p>
<h2>3.1 Rendering math, tables and TikZ content</h2>
<p>This section gives step-by-step instructions and shows what to do if it is not working.</p>
<ol>
<li> <p><strong>Open a file containing LaTeX math content:</strong></p> <pre><code class="language-latex">\documentclass{article}
\usepackage{amsmath}
\begin{document}
An example equation is
\begin{equation*}
\frac{\partial \mathcal{L}}{\partial q} - \frac{d}{dt}\frac{\partial \mathcal{L}}{\partial \dot{q}} = 0.
\end{equation*}
The document continues.
\end{document}
</code></pre> <p>Xenops recognizes the usual delimiters: <code>$...$</code>, <code>\(...\)</code>, <code>\[...\]</code>, <code>\tikz ...;</code>, <code>\begin{equation|align|table|tabular|tikzpicture}</code>.</p> </li>
<li> <p><strong>Move the cursor into a math element:</strong></p> <img width="800px" src="https://user-images.githubusercontent.com/52205/76102955-6c9a3500-5f96-11ea-9ef8-e6eae94b271a.png" alt="image"> </li>
<li> <p><strong>Move the cursor out of that element. The content in the block will shortly be replaced by an image:</strong></p> <img width="200px" src="https://user-images.githubusercontent.com/52205/76103007-8a679a00-5f96-11ea-8b31-56d1343b4477.png" alt="image"> </li>
<li> <p><strong>To remove the image and continue editing, click on it or move the cursor over the image and hit Enter.</strong></p> </li>
<li> <p><strong>What if something went wrong?</strong></p> <p>There are a few things that could go wrong. For example, Emacs might not be able to find the <code>latex</code> executable on your machine, or <code>latex</code> might fail due to errors in your code.</p> <p>If something went wrong, a yellow warning triangle will appear at the beginning of the math block: <img width="750px" src="https://user-images.githubusercontent.com/52205/76103232-f518d580-5f96-11ea-9626-b7d788032bb9.png" alt="image"></p> <p>To investigate what the problem is, you can hover the mouse over the triangle, or right-click on the triangle to bring up a menu. Here's what you might see if you hover the mouse over the warning triangle: <img width="750px" src="https://user-images.githubusercontent.com/52205/76103282-09f56900-5f97-11ea-8f3a-882ef6afb5e5.png" alt="image"></p> <p>So that's fairly clear: either <code>latex</code> is not installed, or Emacs is not finding the executable. Xenops has another troubleshooting tool which it would make sense to use at this point: <code>M-x xenops-doctor</code>. Here's what is displayed when we run that:</p> <img width="400px" src="https://user-images.githubusercontent.com/52205/76025786-3b1c5d80-5ef3-11ea-9739-17e7c3a15377.png" alt="image"> <p>Alternatively, right-click on the warning triangle brings up a menu: <img width="750px" src="https://user-images.githubusercontent.com/52205/76103900-1928e680-5f98-11ea-9b84-505e157f0481.png" alt="image"><br> Select <code>"View failing command output"</code> to see the errors from the <code>latex</code> process, or select <code>"Copy failing command"</code> in order to debug the problem from the command-line.</p> </li>
</ol>
<h2>3.2 Rendering all the content in the document</h2>
<p>Place the cursor anywhere in the document, but not in a math/table/TikZ element, and issue <code>M-x xenops-dwim</code>.</p>
<p>This will kick off one asynchronous processing task for every renderable element in the buffer whose image is not already cached. You can carry on editing the document while these are being processed. They will gradually complete, and the images will be inserted in the buffer.</p>
<p>Alternatively, you can select a region, and <code>xenops-dwim</code> will act on just the elements in that region.</p>
<h2>3.3 Executing code</h2>
<p>Emacs provides sophisticated facilities for executing blocks of code written in many different languages: see <a href="https://orgmode.org/manual/Working-with-source-code.html">org-babel</a>.</p>
<p>Xenops makes use of this to allow <a href="https://github.com/gpoore/minted">minted</a> blocks in LaTeX buffers to be executed. Place point in a minted code block and issue <code>M-x xenops-dwim</code>:<br> <img width="300px" src="https://user-images.githubusercontent.com/52205/76038047-3e711280-5f0e-11ea-8307-963341af1f35.png" alt="image"><br> (Use <code>(require 'ob-python)</code> to enable python execution.)</p>
<p>There are many possibilities with documents that are a hybrid of code, code results, and traditional content: please see the <a href="https://orgmode.org/manual/Working-with-source-code.html">org-babel</a> documentation. <br><br> With Xenops, we can use this to check calculations done by hand against the output of a symbolic algebra package.</p>
<p>Both <a href="https://www.sympy.org/en/index.html">SymPy</a> and <a href="https://www.wolfram.com/mathematica/">Mathematica</a> can return their results to the Emacs buffer as LaTeX code, and Xenops will render this immediately as an image. The result is that it feels as if Sympy/Mathematica are returning their results as an image, typeset in traditional mathematical notation, which can be helpful for a quick check of manually-obtained results:</p>
<h3>3.3.1 SymPy example</h3>
<pre><code class="language-latex">\begin{minted}{python3} :sympy t :results latex
from sympy import integrate, symbols
t, y, tau = symbols('t y tau')
def picard(f, y_prev, a, b):
return b + integrate(f.subs([(t, tau), (y, y_prev)]), (tau, a, t))
a, b = 0, 1
picard_iterates = []
y = b
for i in [1, 2, 3]:
f = (1 - 2*t) * y
y = picard(f, y, a, b)
picard_iterates.append(y)
return picard_iterates
\end{minted}
</code></pre>
<p>After <code>xenops-dwim</code> on the code block, the Xenops buffer looks like this:</p>
<table>
<tbody>
<tr>
<td> <img width="550px" src="https://user-images.githubusercontent.com/52205/77271553-63db7b80-6c85-11ea-85e5-8a31741569bb.png" alt="image"> </td>
</tr>
</tbody>
</table>
<h3>3.3.2 Mathematica example</h3>
<pre><code class="language-latex">The derivative is
\begin{align*}
\frac{\dif}{\dif x} \frac{y'}{\sqrt{1 + y'^2}}
&= \frac{y''\sqrt{1 + y'^2} - y'\frac{1}{2}\frac{1}{\sqrt{1 + y'^2}}2y'y''}{1 + y'^2} \\
&= \frac{y''}{\sqrt{1 + y'^2}} - \frac{y'^2y''}{(1 + y'^2)^{3/2}}.
\end{align*}
(Check this in Mathematica):
\begin{minted}{wolfram} :results latex
D[y'[x]/Sqrt[1 + y'[x]^2], x]
\end{minted}
</code></pre>
<p>After <code>xenops-dwim</code> on the math and code blocks, the Xenops buffer looks like this:</p>
<table>
<tbody>
<tr>
<td> <img width="700px" src="https://user-images.githubusercontent.com/52205/76138564-27feb000-600f-11ea-849c-bad5b79e77cd.png" alt="image"> </td>
</tr>
</tbody>
</table>
<p>Note that for SymPy, the header arguments <code>:sympy t :results latex</code> are necessary to tell Xenops that this is not a normal python code block and that it should insert SymPy code to automatically format the result as LaTeX. For Mathematica, <code>:results latex</code> suffices for this.</p>
<h2>3.4 Working with images</h2>
<p>The size of images displayed in the buffer can be changed with <code>xenops-increase-size</code> and <code>xenops-decrease-size</code>.</p>
<p>Xenops recognizes the <code>\includegraphics</code> command, and these images will be displayed by <code>xenops-render</code>. If you capture a screenshot to your system clipboard and then paste (e.g. <code>C-y</code>) into the LaTeX buffer, Xenops will notice that you're pasting image data, prompt for a file to save it in, and insert the <code>\includegraphics</code> link (implemented in MacOS only currently, see issue <a href="https://github.com/dandavison/xenops/issues/1">#1</a>):</p>
<pre><code class="language-latex">Some facts:
\begin{mdframed}
\includegraphics[width=400pt]{xenops.png}
\end{mdframed}
The document continues.
</code></pre>
<p><img width="300px" src="https://user-images.githubusercontent.com/52205/76043722-fbb73680-5f1d-11ea-85ad-8135f7cf8aed.png" alt="image"></p>
<h2>3.5 Xen mode</h2>
<p>The command <code>xenops-xen-mode</code> toggles an alternative cleaner view that hides common LaTeX markup and applies some visual styling. These are changes in appearance only -- the actual text content of the document is never changed and hitting save after turning on Xen mode will not cause any new changes to be written to disk.</p>
<p>In the example below, Xen-mode has made the following changes to the visual appearance of the document:</p>
<ul>
<li><code>\begin{align}</code>, <code>\end{align}</code>, <code>\begin{minted}</code>, <code>\end{minted}</code> have been replaced with a unicode character (⚡).</li>
<li><code>\section</code> markup has been hidden and the section heading has been styled and indented according to its level.</li>
<li>Some LaTeX mathematical syntax has been replaced by unicode characters.</li>
</ul>
<table>
<tbody>
<tr>
<td></td>
<td> <b>Math block in edit mode</b> </td>
<td> <b>Math block rendered</b> </td>
</tr>
<tr>
<td> <b>Default view</b> </td>
<td> <img width="500px" src="https://user-images.githubusercontent.com/52205/76045031-a67d2400-5f21-11ea-8a06-f4fa320c72a6.png" alt="image"> </td>
<td> <img width="360px" src="https://user-images.githubusercontent.com/52205/76056086-3b404b80-5f3b-11ea-86b4-91db7623b4d5.png" alt="image"> </td>
</tr>
<tr>
<td> <b>Xen mode</b> </td>
<td> <img width="480px" src="https://user-images.githubusercontent.com/52205/76044986-8e0d0980-5f21-11ea-9d3a-5def0804936a.png" alt="image"> </td>
<td> <img width="360px" src="https://user-images.githubusercontent.com/52205/76045199-04aa0700-5f22-11ea-8a09-245e8c07a0e3.png" alt="image"> </td>
</tr>
</tbody>
</table>
<h1>4. Command and variable reference</h1>
<p>For commands that operate on one or more elements the rule is:</p>
<ul>
<li>If there is an element at the current cursor position, operate on that element.</li>
<li>If there is an active selection, operate on elements in the selected region.</li>
<li>Otherwise, operate on all elements in the buffer.</li>
</ul>
<table>
<thead>
<tr>
<th>Command</th>
<th></th>
<th>Default<br>keybinding</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>xenops-dwim</code></td>
<td>Render, Reveal, Regenerate, or Execute element(s).<br>(<em>do-what-i-mean</em>)</td>
<td><code>C-c !</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-render</code></td>
<td>Render element(s) as an image.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-reveal</code></td>
<td>Remove image and reveal element(s) for editing.</td>
<td><code>RET</code> on an element,<br>click on an element</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-regenerate</code></td>
<td>Regenerate image for element(s),<br>refusing to use a cached version.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-execute</code></td>
<td>Execute code block.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-doctor</code></td>
<td>Check your Emacs environment for any problems<br>that will prevent Xenops from working correctly.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-goto-element</code></td>
<td>Use <a href="https://github.com/abo-abo/avy">avy</a> to jump to an element.</td>
<td><code>C-c , g</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-copy-and-paste-element</code></td>
<td>Use <a href="https://github.com/abo-abo/avy">avy</a> to copy an element from elsewhere<br>and paste it at point.</td>
<td><code>C-c , c</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code><copy></code></td>
<td>If the cursor is on a rendered element,<br>copy the entire element.</td>
<td><code>C-w</code> etc</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code><paste></code></td>
<td>If the clipboard contains an image, write the image<br>to disk and insert an <code>\includegraphics</code> link.</td>
<td><code>C-y</code> etc</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-show-waiting-tasks</code></td>
<td>Display a count of latex background processing tasks<br>that are waiting in the queue</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-cancel-waiting-tasks</code></td>
<td>Cancel all latex background processing tasks<br>that are waiting in the queue</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-increase-size</code></td>
<td>Increase size of image(s).</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-decrease-size</code></td>
<td>Decrease size of image(s).</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-xen-mode</code></td>
<td>Toggle Xen mode on/off.</td>
<td><code>C-c /</code></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-select-font-family</code></td>
<td>Select a font for the Xenops buffer.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-clear-latex-preamble-cache</code></td>
<td>Force Xenops to recreate the latex preamble for the<br>current document. This is necessary if you have added<br>e.g. a <code>\usepackage</code> line.</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-math-concatenate</code></td>
<td>Concatenate contiguous math blocks in the active region.</td>
<td></td>
</tr>
</tbody>
</table>
<p>In addition, the keybinding <code>C-c ,</code> is bound to a keymap behind which all Xenops commands are available.</p>
<br>
<br>
<table>
<thead>
<tr>
<th>Variable</th>
<th></th>
<th>Default value</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>xenops-cache-directory</code></td>
<td>The location of the directory in which<br>Xenops saves SVG images.</td>
<td>~/.emacs.d/xenops/cache</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-font-family</code></td>
<td>The font family to use in Xenops buffers.<br>(You can choose this interactively using<br><code>M-x xenops-select-font-family</code>.)</td>
<td>nil</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-font-height</code></td>
<td>The font height for the main font.</td>
<td>160</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-font-height-code</code></td>
<td>The font height for the font used for LaTeX code, and code in code blocks.</td>
<td>140</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-math-image-scale-factor</code></td>
<td>Scaling factor for SVG math images.<br>Determines image size in the image file that is cached on disk.</td>
<td>1.0</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-math-latex-max-tasks-in-flight</code></td>
<td>The maximum number of latex<br>processing tasks that are permitted<br>to be simultaneously active.</td>
<td>32</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-reveal-on-entry</code></td>
<td>Should a math block be revealed automatically when point moves inside it?</td>
<td>nil</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code>xenops-tooltip-delay</code></td>
<td>The time delay in seconds before<br>displaying a tooltip on mouseover.</td>
<td>0.2</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<br>
<br> When generating image previews, there are a few things one may want to configure. For example, the image type (SVG is the default, but PNG is an alternative), and details of the LaTeX document that is constructed when creating each image preview. Xenops shares these configuration mechanisms with org-mode, which also offers image preview functionality (and supports SVG). Here are the relevant org-mode variables:
<br>
<br>
<table>
<thead>
<tr>
<th>Variable</th>
<th></th>
<th>Default value</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>org-format-latex-header</code></td>
<td>The document header used when processing LaTeX fragments.<br>You will need to change this if you need to use <br>a different <code>documentclass</code>.</td>
<td>(a long string)</td>
</tr>
</tbody>
</table>
<h1>5. Tips</h1>
<ul>
<li> <p>Xenops cannot currently parse <code>$...$</code> when it is broken across lines. Please try to keep them on one line for now! <code>fill-paragraph</code> (<code>M-q</code>) helps with this.</p> </li>
<li> <p>The command <code>xenops-copy-and-paste-element</code> is very useful: when writing a mathematical document one very often wants to write an expression that is similar to something that already exists elsewhere in the document. The default binding is <code>C-c , c</code> but I recommend binding it to something more convenient: personally I am using <code>s-[</code>.</p> </li>
<li> <p>Use <code>fill-paragraph</code> (<code>M-q</code>) while writing. In xenops-mode, in addition to its normal behavior, it ensures that all content in the paragraph is rendered.</p> </li>
<li> <p>Xenops caches the SVG images. If it notices that it already has the image for some LaTeX math/table/TikZ content, then it will not re-run <code>latex</code>. The cache location on disk is determined by the variable <code>xenops-cache-directory</code>.</p> </li>
<li> <p>Xenops understands the auctex variable <a href="https://www.gnu.org/software/auctex/manual/auctex/Multifile.html"><code>TeX-master</code></a>. This means that you can work on multi-file LaTeX projects with Xenops: as long as <code>TeX-master</code> is set correctly, then Xenops will include the necessary LaTeX packages and preamble when it is generating images for math/table/TikZ fragments. Please see the <a href="https://www.gnu.org/software/auctex/manual/auctex/Multifile.html">auctex documentation</a>.</p> </li>
<li> <p>If you are encountering any problems, the first thing to try is <code>M-x xenops-doctor</code>. Beyond that, please don't hesitate to open Github issues!</p> </li>
</ul>
<h1>6. Contributing</h1>
<p>Xenops can already be used profitably for serious work. But there are also many areas for further work. Please don't hesitate to get in touch (<a href="mailto:dandavison7@gmail.com">dandavison7@gmail.com</a>), submit a PR, or open a Github issue.</p>
<h1>7. Credit</h1>
<ul>
<li><a href="https://www.gnu.org/software/auctex/">auctex</a></li>
<li><a href="https://github.com/skeeto/emacs-aio">emacs-aio</a></li>
<li><a href="https://orgmode.org/">org-mode</a></li>
</ul>
<p><sub>Streaked Xenops (<em>Xenops rutilans</em>) image by <a href="https://conservationtours.rockjumperbirding.com/dt_gallery/gallery-tours-brazils-atlantic-rainforest/streaked-xenops-by-dubi-shapiro-001">Dubi Shapiro</a>.</sub></p>
-
\ No newline at end of file
diff --git a/emacs-lisp/monthly/index.xml b/emacs-lisp/monthly/index.xml
new file mode 100644
index 00000000000..8e65561bac1
--- /dev/null
+++ b/emacs-lisp/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Emacs Lisp Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:19Z
+ Monthly Trending of Emacs Lisp in GitHub
+
+
+ purcell/emacs-reformatter
+ 2024-12-01T01:53:19Z
+ tag:github.com,2024-12-01:/purcell/emacs-reformatter
+
+ <p>Define commands which run reformatters on the current Emacs buffer</p><hr><p><a href="http://melpa.org/#/reformatter"><img src="http://melpa.org/packages/reformatter-badge.svg?sanitize=true" alt="Melpa Status"></a> <a href="http://stable.melpa.org/#/reformatter"><img src="http://stable.melpa.org/packages/reformatter-badge.svg?sanitize=true" alt="Melpa Stable Status"></a> <a href="https://elpa.nongnu.org/nongnu/reformatter.html"><img src="https://elpa.nongnu.org/nongnu/reformatter.svg?sanitize=true" alt="NonGNU ELPA"></a> <a href="https://github.com/purcell/emacs-reformatter/actions/workflows/test.yml"><img src="https://github.com/purcell/emacs-reformatter/actions/workflows/test.yml/badge.svg?sanitize=true" alt="Build Status"></a> <a href="https://www.patreon.com/sanityinc"><img alt="Support me" src="https://img.shields.io/badge/Support%20Me-%F0%9F%92%97-ff69b4.svg?sanitize=true"></a></p>
<h1>Define commands which run reformatters on the current Emacs buffer</h1>
<p>This library lets elisp authors easily define an idiomatic command to reformat the current buffer using a command-line program, together with an optional minor mode which can apply this command automatically on save.</p>
<p>By default, reformatter.el expects programs to read from stdin and write to stdout, and you should prefer this mode of operation where possible. If this isn't possible with your particular formatting program, refer to the options for <code>reformatter-define</code>, and see the examples in the package's tests.</p>
<p>In its initial release it supports only reformatters which can read from stdin and write to stdout, but a more versatile interface will be provided as development continues.</p>
<p>As an example, let's define a reformat command that applies the "dhall format" command. We'll assume here that we've already defined a variable <code>dhall-command</code> which holds the string name or path of the dhall executable:</p>
<pre><code class="language-el">(reformatter-define dhall-format
:program dhall-command
:args '("format")
:lighter " DF")
</code></pre>
<p>The <code>reformatter-define</code> macro expands to code which generates <code>dhall-format-buffer</code> and <code>dhall-format-region</code> interactive commands, and a local minor mode called <code>dhall-format-on-save-mode</code>. The <code>:args</code> and <code>:program</code> expressions will be evaluated at runtime, so they can refer to variables that may (later) have a buffer-local value. A custom variable will be generated for the mode lighter, with the supplied value becoming the default.</p>
<p>The generated minor mode allows idiomatic per-directory or per-file customisation, via the "modes" support baked into Emacs' file-local and directory-local variables mechanisms. For example, users of the above example might add the following to a project-specific <code>.dir-locals.el</code> file:</p>
<pre><code class="language-el">((dhall-mode
(mode . dhall-format-on-save)))
</code></pre>
<p>See the documentation for <code>reformatter-define</code>, which provides a number of options for customising the generated code.</p>
<p>Library authors might like to provide autoloads for the generated code, e.g.:</p>
<pre><code class="language-el">;;;###autoload (autoload 'dhall-format-buffer "current-file" nil t)
;;;###autoload (autoload 'dhall-format-region "current-file" nil t)
;;;###autoload (autoload 'dhall-format-on-save-mode "current-file" nil t)
</code></pre>
<h2>Examples of usage in the wild</h2>
<p>To find reverse dependencies, look for "Needed by" on the <a href="https://melpa.org/#/reformatter">MELPA page for reformatter</a>. Here are some specific examples:</p>
<ul>
<li><a href="https://github.com/psibi/dhall-mode/raw/master/dhall-mode.el">dhall-mode.el</a></li>
<li><a href="https://github.com/jcollard/elm-mode/raw/master/elm-format.el">elm-format.el</a>, in <code>elm-mode</code></li>
<li><a href="https://github.com/purcell/sqlformat/raw/master/sqlformat.el">sqlformat.el</a></li>
<li><a href="https://github.com/purcell/emacs.d/raw/14f645a9bde04498ce2b60de268c2cbafa13604a/lisp/init-purescript.el#L18-L19">Here</a> is the author defining a reformatter in his own configuration</li>
</ul>
<h2>Rationale</h2>
<p>I contribute to a number of Emacs programming language modes and tools, and increasingly use code reformatters in my daily work. It's surprisingly difficult to write robust, correct code to apply these reformatters, given that it must consider such issues as:</p>
<ul>
<li>Missing programs</li>
<li>Buffers not yet saved to a file</li>
<li>Displaying error output</li>
<li>Colorising ANSI escape sequences in any error output</li>
<li>Handling file encodings correctly</li>
</ul>
<p>With this library, I hope to help the community standardise on best practices, and make things easier for tool authors and end users alike.</p>
<h2>FAQ</h2>
<h3>How is this different from <a href="https://github.com/lassik/emacs-format-all-the-code">format-all.el</a>?</h3>
<p><code>format-all</code> is a very different approach: it aims to provide a single minor mode which you then enable and configure to do the right thing (including nothing) for all the languages you use. It even tries to tell you how to install missing programs. It's an interesting project, but IMO it's hard to design the configuration for such a grand unified approach, and it can get complex. For example, you'd have to be able to configure which of two possible reformatters you want to use for a specific language, and to be able to do that on a per-project basis.</p>
<p>In contrast reformatter produces small, self-contained and separate formatters and minor modes which all work consistently and are individually configured. It makes it possible to replace existing formatter code, and it's also very convenient for users to define their own ad-hoc reformatter wrappers</p>
<h2>Installation</h2>
<h3>Manual</h3>
<p>Ensure <code>reformatter.el</code> is in a directory on your load-path, and add the following to your <code>~/.emacs</code> or <code>~/.emacs.d/init.el</code>:</p>
<pre><code class="language-elisp">(require 'reformatter)
</code></pre>
<h3>MELPA</h3>
<p>If you're an Emacs 24 user or you have a recent version of <code>package.el</code> you can install <code>reformatter</code> from the <a href="http://melpa.org">MELPA</a> repository. The version of <code>reformatter</code> there will always be up-to-date.</p>
<h2>About</h2>
<p>Author: Steve Purcell
<steve at sanityinc dot com></steve></p>
<p>Homepage: <a href="https://github.com/purcell/emacs-reformatter">https://github.com/purcell/emacs-reformatter</a></p>
<hr>
<p><a href="https://www.patreon.com/sanityinc">💝 Support this project and my other Open Source work</a></p>
<p><a href="https://uk.linkedin.com/in/stevepurcell">💼 LinkedIn profile</a></p>
<p><a href="https://www.sanityinc.com/">✍ sanityinc.com</a></p>
+
+
+ clojure-emacs/clojure-mode
+ 2024-12-01T01:53:19Z
+ tag:github.com,2024-12-01:/clojure-emacs/clojure-mode
+
+ <p>Emacs support for the Clojure(Script) programming language</p><hr><p><a href="https://circleci.com/gh/clojure-emacs/clojure-mode"><img src="https://circleci.com/gh/clojure-emacs/clojure-mode.svg?style=svg" alt="circleci"></a> <a href="https://melpa.org/#/clojure-mode"><img src="https://melpa.org/packages/clojure-mode-badge.svg?sanitize=true" alt="MELPA"></a> <a href="https://stable.melpa.org/#/clojure-mode"><img src="https://stable.melpa.org/packages/clojure-mode-badge.svg?sanitize=true" alt="MELPA Stable"></a> <a href="https://elpa.nongnu.org/nongnu/clojure-mode.html"><img src="https://elpa.nongnu.org/nongnu/clojure-mode.svg?sanitize=true" alt="NonGNU ELPA"></a> <a href="https://discord.com/invite/nFPpynQPME"><img src="https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true" alt="Discord"></a> <a href="https://www.gnu.org/copyleft/gpl.html"><img src="https://img.shields.io/badge/license-GPL_3-green.svg?sanitize=true" alt="License GPL 3"></a></p>
<h1>Clojure Mode</h1>
<p><code>clojure-mode</code> is an Emacs major mode that provides font-lock (syntax highlighting), indentation, navigation and refactoring support for the <a href="https://clojure.org">Clojure(Script) programming language</a>.</p>
<hr>
<p><strong>This documentation tracks the <code>master</code> branch of <code>clojure-mode</code>. Some of the features and settings discussed here might not be available in older releases (including the current stable release). Please, consult the relevant git tag (e.g. <a href="https://github.com/clojure-emacs/clojure-mode/tree/v5.19.0">5.19.0</a>) if you need documentation for a specific <code>clojure-mode</code> release.</strong></p>
<h2>Installation</h2>
<p>Available on the major <code>package.el</code> community maintained repos - <a href="https://stable.melpa.org">MELPA Stable</a> and <a href="https://melpa.org">MELPA</a> repos.</p>
<p>MELPA Stable is the recommended repo as it has the latest stable version. MELPA has a development snapshot for users who don't mind (infrequent) breakage but don't want to run from a git checkout.</p>
<p>You can install <code>clojure-mode</code> using the following command:</p>
<p><kbd>M-x</kbd> <code>package-install</code> <kbd>[RET]</kbd> <code>clojure-mode</code> <kbd>[RET]</kbd></p>
<p>or if you'd rather keep it in your dotfiles:</p>
<pre><code class="language-el">(unless (package-installed-p 'clojure-mode)
(package-install 'clojure-mode))
</code></pre>
<p>If the installation doesn't work try refreshing the package list:</p>
<p><kbd>M-x</kbd> <code>package-refresh-contents</code></p>
<h2>Bundled major modes</h2>
<p>The <code>clojure-mode</code> package actually bundles together several major modes:</p>
<ul>
<li><code>clojure-mode</code> is a major mode for editing Clojure code</li>
<li><code>clojurescript-mode</code> is a major mode for editing ClojureScript code</li>
<li><code>clojurec-mode</code> is a major mode for editing <code>.cljc</code> source files</li>
</ul>
<p>All the major modes derive from <code>clojure-mode</code> and provide more or less the same functionality. Differences can be found mostly in the font-locking - e.g. ClojureScript has some built-in constructs that are not present in Clojure.</p>
<p>The proper major mode is selected automatically based on the extension of the file you're editing.</p>
<p>Having separate major modes gives you the flexibility to attach different hooks to them and to alter their behavior individually (e.g. add extra font-locking just to <code>clojurescript-mode</code>) .</p>
<p>Note that all modes derive from <code>clojure-mode</code>, so things you add to <code>clojure-mode-hook</code> and <code>clojure-mode-map</code> will affect all the derived modes as well.</p>
<h2>Configuration</h2>
<p>In the spirit of Emacs, pretty much everything you can think of in <code>clojure-mode</code> is configurable.</p>
<p>To see a list of available configuration options do <code>M-x customize-group RET clojure</code>.</p>
<h3>Indentation options</h3>
<p>The default indentation rules in <code>clojure-mode</code> are derived from the <a href="https://guide.clojure.style">community Clojure Style Guide</a>. Please, refer to the guide for the general Clojure indentation rules.</p>
<p>If you'd like to use the alternative "fixed/tonsky" indentation style you should update your configuration accordingly:</p>
<pre><code class="language-el">(setq clojure-indent-style 'always-indent
clojure-indent-keyword-style 'always-indent
clojure-enable-indent-specs nil)
</code></pre>
<p>Read on for more details on the available indentation-related configuration options.</p>
<h4>Indentation of docstrings</h4>
<p>By default multi-line docstrings are indented with 2 spaces, as this is a somewhat common standard in the Clojure community. You can however adjust this by modifying <code>clojure-docstring-fill-prefix-width</code>. Set it to 0 if you don't want multi-line docstrings to be indented at all (which is pretty common in most lisps).</p>
<h4>Indentation of function forms</h4>
<p>The indentation of function forms is configured by the variable <code>clojure-indent-style</code>. It takes three possible values:</p>
<ul>
<li><code>always-align</code> (the default)</li>
</ul>
<pre><code class="language-clj">(some-function
10
1
2)
(some-function 10
1
2)
</code></pre>
<ul>
<li><code>always-indent</code></li>
</ul>
<pre><code class="language-clj">(some-function
10
1
2)
(some-function 10
1
2)
</code></pre>
<ul>
<li><code>align-arguments</code></li>
</ul>
<pre><code class="language-clj">(some-function
10
1
2)
(some-function 10
1
2)
</code></pre>
<p><strong>Note:</strong> Prior to clojure-mode 5.10, the configuration options for <code>clojure-indent-style</code> used to be keywords, but now they are symbols. Keywords will still be supported at least until clojure-mode 6.</p>
<h4>Indentation of keywords</h4>
<p>Similarly we have the <code>clojure-indent-keyword-style</code>, which works in the following way:</p>
<ul>
<li><code>always-align</code> (default) - All args are vertically aligned with the first arg in case (A), and vertically aligned with the function name in case (B).</li>
</ul>
<pre><code class="language-clojure">(:require [foo.bar]
[bar.baz])
(:require
[foo.bar]
[bar.baz])
</code></pre>
<ul>
<li><code>always-indent</code> - All args are indented like a macro body.</li>
</ul>
<pre><code class="language-clojure">(:require [foo.bar]
[bar.baz])
(:x
location
0)
</code></pre>
<ul>
<li><code>align-arguments</code> - Case (A) is indented like <code>always-align</code>, and case (B) is indented like a macro body.</li>
</ul>
<pre><code class="language-clojure">(:require [foo.bar]
[bar.baz])
(:x
location
0)
</code></pre>
<h4>Indentation of macro forms</h4>
<p>The indentation of special forms and macros with bodies is controlled via <code>put-clojure-indent</code>, <code>define-clojure-indent</code> and <code>clojure-backtracking-indent</code>. Nearly all special forms and built-in macros with bodies have special indentation settings in <code>clojure-mode</code>. You can add/alter the indentation settings in your personal config. Let's assume you want to indent <code>->></code> and <code>-></code> like this:</p>
<pre><code class="language-clojure">(->> something
ala
bala
portokala)
</code></pre>
<p>You can do so by putting the following in your config:</p>
<pre><code class="language-el">(put-clojure-indent '-> 1)
(put-clojure-indent '->> 1)
</code></pre>
<p>This means that the body of the <code>->/->></code> is after the first argument.</p>
<p>A more compact way to do the same thing is:</p>
<pre><code class="language-el">(define-clojure-indent
(-> 1)
(->> 1))
</code></pre>
<p>To indent something like a definition (<code>defn</code>) you can do something like:</p>
<pre><code class="language-el">(put-clojure-indent '>defn :defn)
</code></pre>
<p>You can also specify different indentation settings for symbols prefixed with some ns (or ns alias):</p>
<pre><code class="language-el">(put-clojure-indent 'do 0)
(put-clojure-indent 'my-ns/do 1)
</code></pre>
<p>The bodies of certain more complicated macros and special forms (e.g. <code>letfn</code>, <code>deftype</code>, <code>extend-protocol</code>, etc) are indented using a contextual backtracking indentation method, require more sophisticated indent specifications. Here are a few examples:</p>
<pre><code class="language-el">(define-clojure-indent
(implement '(1 (1)))
(letfn '(1 ((:defn)) nil))
(proxy '(2 nil nil (1)))
(reify '(:defn (1)))
(deftype '(2 nil nil (1)))
(defrecord '(2 nil nil (1)))
(specify '(1 (1)))
(specify '(1 (1))))
</code></pre>
<p>These follow the same rules as the <code>:style/indent</code> metadata specified by <a href="https://github.com/clojure-emacs/cider-nrepl">cider-nrepl</a>. For instructions on how to write these specifications, see <a href="https://docs.cider.mx/cider/indent_spec.html">this document</a>. The only difference is that you're allowed to use lists instead of vectors.</p>
<p>The indentation of <a href="https://docs.cider.mx/cider/indent_spec.html#special-arguments">special arguments</a> is controlled by <code>clojure-special-arg-indent-factor</code>, which by default indents special arguments a further <code>lisp-body-indent</code> when compared to ordinary arguments.</p>
<p>An example of the default formatting is:</p>
<pre><code class="language-clojure">(defrecord MyRecord
[my-field])
</code></pre>
<p>Note that <code>defrecord</code> has two special arguments, followed by the form's body - namely the record's name and its fields vector.</p>
<p>Setting <code>clojure-special-arg-indent-factor</code> to 1, results in:</p>
<pre><code class="language-clojure">(defrecord MyRecord
[my-field])
</code></pre>
<p>You can completely disable the effect of indentation specs like this:</p>
<pre><code class="language-el">(setq clojure-enable-indent-specs nil)
</code></pre>
<h4>Indentation of Comments</h4>
<p><code>clojure-mode</code> differentiates between comments like <code>;</code>, <code>;;</code>, etc. By default <code>clojure-mode</code> treats <code>;</code> as inline comments and <em>always</em> indents those. You can change this behaviour like this:</p>
<pre><code class="language-emacs-lisp">(add-hook 'clojure-mode-hook (lambda () (setq-local comment-column 0)))
</code></pre>
<p>You might also want to change <code>comment-add</code> to 0 in that way, so that Emacs comment functions (e.g. <code>comment-region</code>) would use <code>;</code> by default instead of <code>;;</code>.</p>
<p><strong>Note:</strong> Check out <a href="https://guide.clojure.style/#comments">this section</a> of the Clojure style guide to understand better the semantics of the different comment levels and why <code>clojure-mode</code> treats them differently by default.</p>
<h3>Vertical alignment</h3>
<p>You can vertically align sexps with <code>C-c SPC</code>. For instance, typing this combo on the following form:</p>
<pre><code class="language-clj">(def my-map
{:a-key 1
:other-key 2})
</code></pre>
<p>Leads to the following:</p>
<pre><code class="language-clj">(def my-map
{:a-key 1
:other-key 2})
</code></pre>
<p>This can also be done automatically (as part of indentation) by turning on <code>clojure-align-forms-automatically</code>. This way it will happen whenever you select some code and hit <code>TAB</code>.</p>
<h3>Font-locking</h3>
<p><code>clojure-mode</code> features static font-locking (syntax highlighting) that you can extend yourself if needed. As typical for Emacs, it's based on regular expressions. You can find the default font-locking rules in <code>clojure-font-lock-keywords</code>. Here's how you can add font-locking for built-in Clojure functions and vars:</p>
<pre><code class="language-el">(defvar clojure-built-in-vars
'(;; clojure.core
"accessor" "aclone"
"agent" "agent-errors" "aget" "alength" "alias"
"all-ns" "alter" "alter-meta!" "alter-var-root" "amap"
;; omitted for brevity
))
(defvar clojure-built-in-dynamic-vars
'(;; clojure.test
"*initial-report-counters*" "*load-tests*" "*report-counters*"
"*stack-trace-depth*" "*test-out*" "*testing-contexts*" "*testing-vars*"
;; clojure.xml
"*current*" "*sb*" "*stack*" "*state*"
))
(font-lock-add-keywords 'clojure-mode
`((,(concat "(\\(?:\.*/\\)?"
(regexp-opt clojure-built-in-vars t)
"\\>")
1 font-lock-builtin-face)))
(font-lock-add-keywords 'clojure-mode
`((,(concat "\\<"
(regexp-opt clojure-built-in-dynamic-vars t)
"\\>")
0 font-lock-builtin-face)))
</code></pre>
<p><strong>Note:</strong> The package <code>clojure-mode-extra-font-locking</code> provides such additional font-locking for Clojure built-ins.</p>
<p>As you might imagine one problem with this font-locking approach is that because it's based on regular expressions you'll get some false positives here and there (there's no namespace information, and no way for <code>clojure-mode</code> to know what var a symbol resolves to). That's why <code>clojure-mode</code>'s font-locking defaults are conservative and minimalistic.</p>
<p>Precise font-locking requires additional data that can obtained from a running REPL (that's how CIDER's <a href="https://docs.cider.mx/cider/config/syntax_highlighting.html">dynamic font-locking</a> works) or from static code analysis.</p>
<p>When it comes to non built-in definitions, <code>clojure-mode</code> needs to be manually instructed how to handle the docstrings and highlighting. Here's an example:</p>
<pre><code class="language-emacs-lisp">(put '>defn 'clojure-doc-string-elt 2)
(font-lock-add-keywords 'clojure-mode
`((,(concat "(\\(?:" clojure--sym-regexp "/\\)?"
"\\(>defn\\)\\>")
1 font-lock-keyword-face)))
</code></pre>
<p><strong>Note:</strong> The <code>clojure-doc-string-elt</code> attribute is processed by the function <code>clojure-font-lock-syntactic-face-function</code>.</p>
<h2>Refactoring support</h2>
<p>The available refactorings were originally created and maintained by the <code>clj-refactor.el</code> team. The ones implemented in Elisp only are gradually migrated to <code>clojure-mode</code>.</p>
<h3>Threading macros related features</h3>
<p><code>clojure-thread</code>: Thread another form into the surrounding thread. Both <code>->></code> and <code>-></code> variants are supported.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-thread.gif">
<p><code>clojure-unwind</code>: Unwind a threaded expression. Supports both <code>->></code> and <code>-></code>.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-unwind.gif">
<p><code>clojure-thread-first-all</code>: Introduce the thread first macro (<code>-></code>) and rewrite the entire form. With a prefix argument do not thread the last form.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-thread-first-all.gif">
<p><code>clojure-thread-last-all</code>: Introduce the thread last macro and rewrite the entire form. With a prefix argument do not thread the last form.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-thread-last-all.gif">
<p><code>clojure-unwind-all</code>: Fully unwind a threaded expression removing the threading macro.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-unwind-all.gif">
<h3>Cycling things</h3>
<p><code>clojure-cycle-privacy</code>: Cycle privacy of <code>def</code>s or <code>defn</code>s. Use metadata explicitly with setting <code>clojure-use-metadata-for-privacy</code> to <code>t</code> for <code>defn</code>s too.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-cycle-privacy.gif">
<p><code>clojure-cycle-not</code>: Add or remove a <code>not</code> form around the current form.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-cycle-not.gif">
<p><code>clojure-cycle-when</code>: Find the closest <code>when</code> or <code>when-not</code> up the syntax tree and toggle it.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-cycle-when.gif">
<p><code>clojure-cycle-if</code>: Find the closest <code>if</code> or <code>if-not</code> up the syntax tree and toggle it. Also transpose the <code>else</code> and <code>then</code> branches, keeping the semantics the same as before.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-cycle-if.gif">
<h3>Convert collection</h3>
<p>Convert any given collection at point to list, quoted list, map, vector or set.</p>
<h3>Let expression</h3>
<p><code>clojure-introduce-let</code>: Introduce a new <code>let</code> form. Put the current form into its binding form with a name provided by the user as a bound name. If called with a numeric prefix put the let form Nth level up in the form hierarchy.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-introduce-let.gif">
<p><code>clojure-move-to-let</code>: Move the current form to the closest <code>let</code>'s binding form. Replace all occurrences of the form in the body of the let.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-move-to-let.gif">
<p><code>clojure-let-forward-slurp-sexp</code>: Slurp the next form after the <code>let</code> into the <code>let</code>. Replace all occurrences of the bound forms in the form added to the <code>let</code> form. If called with a prefix argument slurp the next n forms.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-let-forward-slurp-sexp.gif">
<p><code>clojure-let-backward-slurp-sexp</code>: Slurp the form before the <code>let</code> into the <code>let</code>. Replace all occurrences of the bound forms in the form added to the <code>let</code> form. If called with a prefix argument slurp the previous n forms.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-let-backward-slurp-sexp.gif">
<p><code>paredit-convolute-sexp</code> is advised to replace occurrences of bound forms with their bound names when convolute is used on a let form.</p>
<h3>Rename ns alias</h3>
<p><code>clojure-rename-ns-alias</code>: Rename an alias inside a namespace declaration, and all of its usages in the buffer</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-rename-ns-alias.gif">
<p>If there is an active selected region, only rename usages of aliases within the region, without affecting the namespace declaration.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-rename-ns-alias-region.gif">
<h3>Add arity to a function</h3>
<p><code>clojure-add-arity</code>: Add a new arity to an existing single-arity or multi-arity function.</p>
<img width="512" src="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/doc/clojure-add-arity.gif">
<h2>Related packages</h2>
<ul>
<li><a href="https://github.com/clojure-emacs/clojure-mode/raw/master/clojure-mode-extra-font-locking.el">clojure-mode-extra-font-locking</a> provides additional font-locking for built-in methods and macros. The font-locking is pretty imprecise, because it doesn't take namespaces into account and it won't font-lock a function at all possible positions in a sexp, but if you don't mind its imperfections you can easily enable it:</li>
</ul>
<pre><code class="language-el">(require 'clojure-mode-extra-font-locking)
</code></pre>
<p>The code in <code>clojure-mode-font-locking</code> used to be bundled with <code>clojure-mode</code> before version 3.0.</p>
<p>You can also use the code in this package as a basis for extending the font-locking further (e.g. functions/macros from more namespaces). Generally you should avoid adding special font-locking for things that don't have fairly unique names, as this will result in plenty of incorrect font-locking. CIDER users should avoid this package, as CIDER does its own dynamic font-locking, which is namespace-aware and doesn't produce almost any false positives.</p>
<ul>
<li> <p><a href="https://github.com/clojure-emacs/clj-refactor.el">clj-refactor</a> provides refactoring support.</p> </li>
<li> <p>Enabling <code>CamelCase</code> support for editing commands(like <code>forward-word</code>, <code>backward-word</code>, etc) in <code>clojure-mode</code> is quite useful since we often have to deal with Java class and method names. The built-in Emacs minor mode <code>subword-mode</code> provides such functionality:</p> </li>
</ul>
<pre><code class="language-el">(add-hook 'clojure-mode-hook #'subword-mode)
</code></pre>
<ul>
<li>The use of <a href="https://mumble.net/~campbell/emacs/paredit.html">paredit</a> when editing Clojure (or any other Lisp) code is highly recommended. It helps ensure the structure of your forms is not compromised and offers a number of operations that work on code structure at a higher level than just characters and words. To enable it for Clojure buffers:</li>
</ul>
<pre><code class="language-el">(add-hook 'clojure-mode-hook #'paredit-mode)
</code></pre>
<ul>
<li><a href="https://github.com/Fuco1/smartparens">smartparens</a> is an excellent (newer) alternative to paredit. Many Clojure hackers have adopted it recently and you might want to give it a try as well. To enable <code>smartparens</code> use the following code:</li>
</ul>
<pre><code class="language-el">(add-hook 'clojure-mode-hook #'smartparens-strict-mode)
</code></pre>
<ul>
<li><a href="https://github.com/Fanael/rainbow-delimiters">RainbowDelimiters</a> is a minor mode which highlights parentheses, brackets, and braces according to their depth. Each successive level is highlighted in a different color. This makes it easy to spot matching delimiters, orient yourself in the code, and tell which statements are at a given depth. Assuming you've already installed <code>RainbowDelimiters</code> you can enable it like this:</li>
</ul>
<pre><code class="language-el">(add-hook 'clojure-mode-hook #'rainbow-delimiters-mode)
</code></pre>
<ul>
<li><a href="https://github.com/Malabarba/aggressive-indent-mode">aggressive-indent-mode</a> automatically adjust the indentation of your code, while you're writing it. Using it together with <code>clojure-mode</code> is highly recommended. Provided you've already installed <code>aggressive-indent-mode</code> you can enable it like this:</li>
</ul>
<pre><code class="language-el">(add-hook 'clojure-mode-hook #'aggressive-indent-mode)
</code></pre>
<h2>REPL Interaction</h2>
<p>One of the fundamental aspects of Lisps in general, and Clojure in particular, is the notion of interactive programming - building your programs by continuously changing the state of the running Lisp program (as opposed to doing something more traditional like making a change and re-running the program afterwards to see the changes in action). To get the most of clojure-mode you'll have to combine it with some tool which will allow you to interact with your Clojure program (a.k.a. process/REPL).</p>
<p>A number of options exist for connecting to a running Clojure process and evaluating code interactively.</p>
<h3>Basic REPL</h3>
<p><a href="https://github.com/clojure-emacs/inf-clojure">inf-clojure</a> provides basic interaction with a Clojure REPL process. It's very similar in nature and supported functionality to <code>inferior-lisp-mode</code> for Common Lisp.</p>
<h3>CIDER</h3>
<p><a href="https://github.com/clojure-emacs/cider">CIDER</a> is a powerful Clojure interactive development environment, similar to SLIME for Common Lisp.</p>
<p>If you're into Clojure and Emacs you should definitely check it out.</p>
<h2>Tutorials</h2>
<p>Tutorials, targeting Emacs beginners, are available at <a href="https://clojure-doc.org/articles/tutorials/editors/">clojure-doc.org</a> and <a href="https://www.braveclojure.com/basic-emacs/">Clojure for the Brave and the True</a>. Keep in mind, however, that they might be out-of-date.</p>
<h2>Caveats</h2>
<p><code>clojure-mode</code> is a capable tool, but it's certainly not perfect. This section lists a couple of general design problems/limitations that might affect your experience negatively.</p>
<h3>General Issues</h3>
<p><code>clojure-mode</code> derives a lot of functionality directly from <code>lisp-mode</code> (an Emacs major mode for Common Lisp), which simplified the initial implementation, but also made it harder to implement certain functionality. Down the road it'd be nice to fully decouple <code>clojure-mode</code> from <code>lisp-mode</code>.</p>
<p>See <a href="https://github.com/clojure-emacs/clojure-mode/issues/270">this ticket</a> for a bit more details.</p>
<h3>Indentation Performance</h3>
<p><code>clojure-mode</code>'s indentation engine is a bit slow. You can speed things up significantly by disabling <code>clojure-use-backtracking-indent</code>, but this will break the indentation of complex forms like <code>deftype</code>, <code>defprotocol</code>, <code>reify</code>, <code>letfn</code>, etc.</p>
<p>We should look into ways to optimize the performance of the backtracking indentation logic. See <a href="https://github.com/clojure-emacs/clojure-mode/issues/606">this ticket</a> for more details.</p>
<h3>Font-locking Implementation</h3>
<p>As mentioned <a href="https://github.com/clojure-emacs/clojure-mode#font-locking">above</a>, the font-locking is implemented in terms of regular expressions which makes it both slow and inaccurate.</p>
<h2>Changelog</h2>
<p>An extensive changelog is available <a href="https://raw.githubusercontent.com/clojure-emacs/clojure-mode/master/CHANGELOG.md">here</a>.</p>
<h2>License</h2>
<p>Copyright © 2007-2024 Jeffrey Chu, Lennart Staflin, Phil Hagelberg, Bozhidar Batsov, Artur Malabarba, Magnar Sveen and <a href="https://github.com/clojure-emacs/clojure-mode/contributors">contributors</a>.</p>
<p>Distributed under the GNU General Public License; type <kbd>C-h C-c</kbd> to view it.</p>
+
+
+ tumashu/posframe
+ 2024-12-01T01:53:19Z
+ tag:github.com,2024-12-01:/tumashu/posframe
+
+ <p>Pop a posframe (just a child-frame) at point, posframe is a **GNU ELPA** package!</p><hr><h1>Created 2021-06-01 Tue 10:41</h1>
<p>#+TITLE: Pop a posframe (just a frame) at point #+AUTHOR: Feng Shu</p>
<p>#+html: <a href="http://elpa.gnu.org/packages/posframe.html"><img alt="GNU ELPA" src="https://elpa.gnu.org/packages/posframe.svg?sanitize=true"></a> #+html: <a href="http://elpa.gnu.org/devel/posframe.html"><img alt="GNU-devel ELPA" src="https://elpa.gnu.org/devel/posframe.svg?sanitize=true"></a> #+html: <a href="https://melpa.org/#/posframe"><img alt="MELPA" src="https://melpa.org/packages/posframe-badge.svg?sanitize=true"></a></p>
<ul>
<li>What is posframe? Posframe can pop up a frame at point, this <em>posframe</em> is a child-frame connected to its root window's buffer.</li>
</ul>
<p>The main advantages are:</p>
<ol>
<li>It is fast enough for daily usage :-)</li>
<li>It works well with CJK languages.</li>
</ol>
<p>NOTE:</p>
<ol>
<li> <p>For MacOS users, posframe needs Emacs version >= 26.0.91</p> </li>
<li> <p>GNOME users with GTK3 builds need Emacs 27 or later. See variable `posframe-gtk-resize-child-frames' which auto-detects this configuration.</p> <p>More details:</p>
<ol>
<li>[[https://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-27&id=c49d379f17bcb0ce82604def2eaa04bda00bd5ec][Fix some problems with moving and resizing child frames]]</li>
<li>[[https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html][Emacs's set-frame-size can not work well with gnome-shell?]]</li>
</ol> </li>
</ol>
<p>[[file:./snapshots/posframe-1.png]]</p>
<ul>
<li>Installation</li>
</ul>
<p>#+begin_example (require 'posframe) #+end_example</p>
<ul>
<li>Usage</li>
</ul>
<p>** Create a posframe</p>
<p>*** Simple way #+begin_example (when (posframe-workable-p) (posframe-show " <em>my-posframe-buffer</em>" :string "This is a test" :position (point))) #+end_example</p>
<p>*** Advanced way #+begin_example (defvar my-posframe-buffer " <em>my-posframe-buffer</em>")</p>
<p>(with-current-buffer (get-buffer-create my-posframe-buffer) (erase-buffer) (insert "Hello world"))</p>
<p>(when (posframe-workable-p) (posframe-show my-posframe-buffer :position (point))) #+end_example</p>
<p>*** Arguments</p>
<p>#+begin_example C-h f posframe-show #+end_example</p>
<p>** Hide a posframe #+begin_example (posframe-hide " <em>my-posframe-buffer</em>") #+end_example</p>
<p>** Hide all posframes #+begin_example M-x posframe-hide-all #+end_example</p>
<p>** Delete a posframe</p>
<ol>
<li>Delete posframe and its buffer #+begin_example (posframe-delete " <em>my-posframe-buffer</em>") #+end_example</li>
<li>Only delete the frame #+begin_example (posframe-delete-frame " <em>my-posframe-buffer</em>") #+end_example ** Delete all posframes #+begin_example M-x posframe-delete-all #+end_example</li>
</ol>
<p>Note: this command will delete all posframe buffers. You probably shouldn't use it if you are sharing a buffer between posframe and other packages.</p>
<p>** posframe-arghandler</p>
<p>posframe-arghandler feature has been removed from posframe-1.1, user can use advice feature instead.</p>
<p>** Mouse banish Default setting will work well in most case, but for EXWM user, suggest use the below config.</p>
<p>#+begin_src emacs-lisp (setq posframe-mouse-banish-function #'posframe-mouse-banish-simple) #+end_src</p>
+
+
\ No newline at end of file
diff --git a/emacs-lisp/weekly/index.xml b/emacs-lisp/weekly/index.xml
new file mode 100644
index 00000000000..0940392ce9c
--- /dev/null
+++ b/emacs-lisp/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Emacs Lisp Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:23Z
+ Weekly Trending of Emacs Lisp in GitHub
+
+
+ millejoh/emacs-ipython-notebook
+ 2024-12-01T01:42:23Z
+ tag:github.com,2024-12-01:/millejoh/emacs-ipython-notebook
+
+ <p>Jupyter notebook client in Emacs</p><hr><h1>========================================================== EIN -- Emacs IPython Notebook |build-status| |melpa-dev|</h1>
<p>.. image:: <a href="https://github.com/dickmao/emacs-ipython-notebook/raw/master/thumbnail.png">https://github.com/dickmao/emacs-ipython-notebook/blob/master/thumbnail.png</a> :target: <a href="https://youtu.be/8VzWc9QeOxE">https://youtu.be/8VzWc9QeOxE</a> :alt: Kaggle Notebooks in AWS</p>
<p>Emacs IPython Notebook (EIN), despite its name, is a jupyter client for all languages. It does not work under non-WSL Windows environments.</p>
<p>As of 2023, EIN has been sunset for a number of years having been unable to keep up with jupyter's web-first ecosystem. Even during its heyday EIN never fully reconciled emac's monolithic buffer architecture to the notebook's by-cell discretization, leaving gaping functional holes like crippled undo.</p>
<p>Certainly in 2012 when jupyter was much smaller, an emacs client made perfect sense. With many years of hindsight, it's now clear the json-driven, git-averse notebook format is anathema to emacs's plain text ethos.</p>
<p>.. |build-status| image:: <a href="https://github.com/millejoh/emacs-ipython-notebook/workflows/CI/badge.svg">https://github.com/millejoh/emacs-ipython-notebook/workflows/CI/badge.svg</a> :target: <a href="https://github.com/millejoh/emacs-ipython-notebook/actions">https://github.com/millejoh/emacs-ipython-notebook/actions</a> :alt: Build Status .. |melpa-dev| image:: <a href="https://melpa.org/packages/ein-badge.svg">https://melpa.org/packages/ein-badge.svg</a> :target: <a href="http://melpa.org/#/ein">http://melpa.org/#/ein</a> :alt: MELPA current version .. _Jupyter: <a href="http://jupyter.org">http://jupyter.org</a> .. _Babel: <a href="https://orgmode.org/worg/org-contrib/babel/intro.html">https://orgmode.org/worg/org-contrib/babel/intro.html</a> .. _Org: <a href="https://orgmode.org">https://orgmode.org</a> .. _[tkf]: <a href="http://tkf.github.io">http://tkf.github.io</a> .. _[gregsexton]: <a href="https://github.com/gregsexton/ob-ipython">https://github.com/gregsexton/ob-ipython</a></p>
<h1>Install</h1>
<p>As described in <code>Getting started</code>_, ensure melpa's whereabouts in <code>init.el</code> or <code>.emacs</code>::</p>
<p>(add-to-list 'package-archives '("melpa" . "<a href="https://melpa.org/packages/">https://melpa.org/packages/</a>"))</p>
<p>Then</p>
<p>::</p>
<p>M-x package-install RET ein RET</p>
<p>Alternatively, directly clone this repo and <code>make install</code>.</p>
<p>For jupyterlab 3.0+, reconfigure the subcommand from "notebook" to "server".</p>
<p>::</p>
<p>M-x customize-option RET ein:jupyter-server-use-subcommand RET</p>
<h1>Usage</h1>
<p>Start EIN using <strong>ONE</strong> of the following:</p>
<ul>
<li>Open an <code>.ipynb</code> file, press <code>C-c C-o</code>, or,</li>
<li><code>M-x ein:run</code> launches a jupyter process from emacs, or,</li>
<li><code>M-x ein:login</code> to a running jupyter server, or,</li>
</ul>
<p><code>M-x ein:stop</code> prompts to halt local and remote jupyter services.</p>
<p>Alternatively, ob-ein_.</p>
<p>.. _Cask: <a href="https://cask.readthedocs.io/en/latest/guide/installation.html">https://cask.readthedocs.io/en/latest/guide/installation.html</a> .. _Getting started: <a href="http://melpa.org/#/getting-started">http://melpa.org/#/getting-started</a></p>
<h1>FAQ</h1>
<h2>How do I...</h2>
<p>... report a bug? Note EIN is tested only for <em>released</em> GNU Emacs versions 26.3 and later. Pre-release versions will not work.</p>
<p>First try <code>emacs -Q -f package-initialize -f ein:dev-start-debug</code> and reproduce the bug. The <code>-Q</code> skips any user configuration that might interfere with EIN.</p>
<p>Then file an issue using <code>M-x ein:dev-bug-report-template</code>.</p>
<p>... display images inline? We find inserting images into emacs disruptive, and so default to spawning an external viewer. To override this, ::</p>
<pre><code> M-x customize-group RET ein
Ein:Output Area Inlined Images
</code></pre>
<p>... configure the external image viewer? ::</p>
<pre><code> M-x customize-group RET mailcap
Mailcap User Mime Data
</code></pre>
<p>On a typical Linux system, one might configure a viewer for MIME Type <code>image/png</code> as a shell command <code>convert %s -background white -alpha remove -alpha off - | display -immutable</code>.</p>
<p>... get IDE-like behavior? You can't. EIN's architecture is fundamentally incompatible with LSP.</p>
<p>.. _Issues: <a href="https://github.com/millejoh/emacs-ipython-notebook/issues">https://github.com/millejoh/emacs-ipython-notebook/issues</a> .. _prevailing documentation: <a href="http://millejoh.github.io/emacs-ipython-notebook">http://millejoh.github.io/emacs-ipython-notebook</a> .. _spacemacs layer: <a href="https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Blang/ipython-notebook">https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Blang/ipython-notebook</a> .. _company-mode: <a href="https://github.com/company-mode/company-mode">https://github.com/company-mode/company-mode</a> .. _jupyterhub: <a href="https://github.com/jupyterhub/jupyterhub">https://github.com/jupyterhub/jupyterhub</a> .. _elpy: <a href="https://melpa.org/#/elpy">https://melpa.org/#/elpy</a> .. _math-preview: <a href="https://gitlab.com/matsievskiysv/math-preview">https://gitlab.com/matsievskiysv/math-preview</a> .. _program modes: <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Program-Modes.html">https://www.gnu.org/software/emacs/manual/html_node/emacs/Program-Modes.html</a> .. _undo boundaries: <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Undo.html">https://www.gnu.org/software/emacs/manual/html_node/elisp/Undo.html</a></p>
<h1>ob-ein</h1>
<p>Configuration:</p>
<p>::</p>
<p>M-x customize-group RET org-babel Org Babel Load Languages: Insert (ein . t) For example, '((emacs-lisp . t) (ein . t))</p>
<p>Snippet:</p>
<p>::</p>
<p>#+BEGIN_SRC ein-python :session localhost import numpy, math, matplotlib.pyplot as plt %matplotlib inline x = numpy.linspace(0, 2*math.pi) plt.plot(x, numpy.sin(x)) #+END_SRC</p>
<p>The <code>:session</code> is the notebook url, e.g., <code>http://localhost:8888/my.ipynb</code>, or simply <code>localhost</code>, in which case org evaluates anonymously. A port may also be specified, e.g., <code>localhost:8889</code>.</p>
<p><em>Language</em> can be <code>ein-python</code>, <code>ein-r</code>, or <code>ein-julia</code>. <strong>The relevant</strong> <code>jupyter kernel</code>_ <strong>must be installed before use</strong>. Additional languages can be configured via::</p>
<p>M-x customize-group RET ein Ob Ein Languages</p>
<p>.. _polymode: <a href="https://github.com/polymode/polymode">https://github.com/polymode/polymode</a> .. _ob-ipython: <a href="https://github.com/gregsexton/ob-ipython">https://github.com/gregsexton/ob-ipython</a> .. _scimax: <a href="https://github.com/jkitchin/scimax">https://github.com/jkitchin/scimax</a> .. _jupyter kernel: <a href="https://github.com/jupyter/jupyter/wiki/Jupyter-kernels">https://github.com/jupyter/jupyter/wiki/Jupyter-kernels</a></p>
<p>.. _gat utility: <a href="https://dickmaogat.readthedocs.io/en/latest/install.html">https://dickmaogat.readthedocs.io/en/latest/install.html</a> .. _gat usage: <a href="https://dickmaogat.readthedocs.io/en/latest/usage.html">https://dickmaogat.readthedocs.io/en/latest/usage.html</a> .. _batch mode: <a href="https://nbconvert.readthedocs.io/en/latest/execute_api.html">https://nbconvert.readthedocs.io/en/latest/execute_api.html</a> .. _dickmao/Kaggler: <a href="https://github.com/dickmao/Kaggler/tree/gcspath#importing-datasets">https://github.com/dickmao/Kaggler/tree/gcspath#importing-datasets</a></p>
<h1>Keymap (C-h m)</h1>
<p>::</p>
<h2>Key Binding</h2>
<p>C-
<down>
ein:worksheet-goto-next-input-km C-
<up>
ein:worksheet-goto-prev-input-km M-S-
<return>
ein:worksheet-execute-cell-and-insert-below-km M-
<down>
ein:worksheet-not-move-cell-down-km M-
<up>
ein:worksheet-not-move-cell-up-km
</up>
</down>
</return>
</up>
</down></p>
<p>C-x C-s ein:notebook-save-notebook-command-km C-x C-w ein:notebook-rename-command-km</p>
<p>M-RET ein:worksheet-execute-cell-and-goto-next-km M-, ein:pytools-jump-back-command M-. ein:pytools-jump-to-source-command</p>
<p>C-c C-a ein:worksheet-insert-cell-above-km C-c C-b ein:worksheet-insert-cell-below-km C-c C-c ein:worksheet-execute-cell-km C-u C-c C-c ein:worksheet-execute-all-cells C-c C-e ein:worksheet-toggle-output-km C-c C-f ein:file-open-km C-c C-k ein:worksheet-kill-cell-km C-c C-l ein:worksheet-clear-output-km C-c RET ein:worksheet-merge-cell-km C-c C-n ein:worksheet-goto-next-input-km C-c C-o ein:notebook-open-km C-c C-p ein:worksheet-goto-prev-input-km C-c C-q ein:notebook-kill-kernel-then-close-command-km C-c C-r ein:notebook-reconnect-session-command-km C-c C-s ein:worksheet-split-cell-at-point-km C-c C-t ein:worksheet-toggle-cell-type-km C-c C-u ein:worksheet-change-cell-type-km C-c C-v ein:worksheet-set-output-visibility-all-km C-c C-w ein:worksheet-copy-cell-km C-c C-y ein:worksheet-yank-cell-km C-c C-z ein:notebook-kernel-interrupt-command-km C-c C-S-l ein:worksheet-clear-all-output-km C-c C-# ein:notebook-close-km C-c C-$ ein:tb-show-km C-c C-/ ein:notebook-scratchsheet-open-km C-c C-; ein:shared-output-show-code-cell-at-point-km C-c
<down>
ein:worksheet-move-cell-down-km C-c
<up>
ein:worksheet-move-cell-up-km
</up>
</down></p>
<p>C-c C-x C-r ein:notebook-restart-session-command-km</p>
<p>C-c M-w ein:worksheet-copy-cell-km</p>
<p>This is a minor mode. If called interactively, toggle the ‘Ein:Notebook mode’ mode. If the prefix argument is positive, enable the mode, and if it is zero or negative, disable the mode.</p>
<p>If called from Lisp, toggle the mode if ARG is ‘toggle’. Enable the mode if ARG is nil, omitted, or is a positive number. Disable the mode if ARG is a negative number.</p>
<p>To check whether the minor mode is enabled in the current buffer, evaluate ‘ein:notebook-mode’.</p>
<p>The mode’s hook is called both when the mode is enabled and when it is disabled.</p>
+
+
\ No newline at end of file
diff --git a/emberscript/daily/index.xml b/emberscript/daily/index.xml
index fb3b4897f06..94489023e39 100644
--- a/emberscript/daily/index.xml
+++ b/emberscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub EmberScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:49Z
+ 2024-12-01T01:31:47Z
Daily Trending of EmberScript in GitHub
\ No newline at end of file
diff --git a/emberscript/monthly/index.xml b/emberscript/monthly/index.xml
new file mode 100644
index 00000000000..ec1b874a651
--- /dev/null
+++ b/emberscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EmberScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:17Z
+ Monthly Trending of EmberScript in GitHub
+
+
\ No newline at end of file
diff --git a/emberscript/weekly/index.xml b/emberscript/weekly/index.xml
new file mode 100644
index 00000000000..2254cfcf143
--- /dev/null
+++ b/emberscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EmberScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:22Z
+ Weekly Trending of EmberScript in GitHub
+
+
\ No newline at end of file
diff --git a/eq/daily/index.xml b/eq/daily/index.xml
index d9eddfb86fb..954e537c561 100644
--- a/eq/daily/index.xml
+++ b/eq/daily/index.xml
@@ -1,7 +1,7 @@
GitHub EQ Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:50Z
+ 2024-12-01T01:31:46Z
Daily Trending of EQ in GitHub
\ No newline at end of file
diff --git a/eq/monthly/index.xml b/eq/monthly/index.xml
new file mode 100644
index 00000000000..f29f3770004
--- /dev/null
+++ b/eq/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EQ Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:16Z
+ Monthly Trending of EQ in GitHub
+
+
\ No newline at end of file
diff --git a/eq/weekly/index.xml b/eq/weekly/index.xml
new file mode 100644
index 00000000000..6bf80175372
--- /dev/null
+++ b/eq/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub EQ Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:21Z
+ Weekly Trending of EQ in GitHub
+
+
\ No newline at end of file
diff --git a/erlang/daily/index.xml b/erlang/daily/index.xml
index d4402b56e08..ccd755346f6 100644
--- a/erlang/daily/index.xml
+++ b/erlang/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Erlang Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:56Z
+ 2024-12-01T01:31:51Z
Daily Trending of Erlang in GitHub
\ No newline at end of file
diff --git a/erlang/monthly/index.xml b/erlang/monthly/index.xml
new file mode 100644
index 00000000000..48301103e1a
--- /dev/null
+++ b/erlang/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Erlang Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:25Z
+ Monthly Trending of Erlang in GitHub
+
+
+ epgsql/epgsql
+ 2024-12-01T01:53:25Z
+ tag:github.com,2024-12-01:/epgsql/epgsql
+
+ <p>Erlang PostgreSQL client library.</p><hr>
+
+
\ No newline at end of file
diff --git a/erlang/weekly/index.xml b/erlang/weekly/index.xml
new file mode 100644
index 00000000000..651cbe8a1f5
--- /dev/null
+++ b/erlang/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Erlang Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:27Z
+ Weekly Trending of Erlang in GitHub
+
+
\ No newline at end of file
diff --git a/euphoria/daily/index.xml b/euphoria/daily/index.xml
index bea1695d70d..a3ca3973677 100644
--- a/euphoria/daily/index.xml
+++ b/euphoria/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Euphoria Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:56Z
+ 2024-12-01T01:31:50Z
Daily Trending of Euphoria in GitHub
\ No newline at end of file
diff --git a/euphoria/monthly/index.xml b/euphoria/monthly/index.xml
new file mode 100644
index 00000000000..87d9b0aa976
--- /dev/null
+++ b/euphoria/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Euphoria Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:24Z
+ Monthly Trending of Euphoria in GitHub
+
+
\ No newline at end of file
diff --git a/euphoria/weekly/index.xml b/euphoria/weekly/index.xml
new file mode 100644
index 00000000000..6d7c23a9698
--- /dev/null
+++ b/euphoria/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Euphoria Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:26Z
+ Weekly Trending of Euphoria in GitHub
+
+
\ No newline at end of file
diff --git a/f%23/daily/index.xml b/f%23/daily/index.xml
index c5bf1b9a86a..d3c96909e97 100644
--- a/f%23/daily/index.xml
+++ b/f%23/daily/index.xml
@@ -1,7 +1,7 @@
GitHub F# Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:56Z
+ 2024-12-01T01:31:52Z
Daily Trending of F# in GitHub
\ No newline at end of file
diff --git a/f%23/monthly/index.xml b/f%23/monthly/index.xml
new file mode 100644
index 00000000000..75d129415a3
--- /dev/null
+++ b/f%23/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub F# Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:24Z
+ Monthly Trending of F# in GitHub
+
+
\ No newline at end of file
diff --git a/f%23/weekly/index.xml b/f%23/weekly/index.xml
new file mode 100644
index 00000000000..b804d63f302
--- /dev/null
+++ b/f%23/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub F# Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:26Z
+ Weekly Trending of F# in GitHub
+
+
\ No newline at end of file
diff --git a/f*/daily/index.xml b/f*/daily/index.xml
index cdbb99b7cf5..2604437f4ea 100644
--- a/f*/daily/index.xml
+++ b/f*/daily/index.xml
@@ -1,7 +1,7 @@
GitHub F* Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:55Z
+ 2024-12-01T01:31:50Z
Daily Trending of F* in GitHub
\ No newline at end of file
diff --git a/f*/monthly/index.xml b/f*/monthly/index.xml
new file mode 100644
index 00000000000..a70d1c5162b
--- /dev/null
+++ b/f*/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub F* Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:24Z
+ Monthly Trending of F* in GitHub
+
+
\ No newline at end of file
diff --git a/f*/weekly/index.xml b/f*/weekly/index.xml
new file mode 100644
index 00000000000..f58b2f4d402
--- /dev/null
+++ b/f*/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub F* Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:26Z
+ Weekly Trending of F* in GitHub
+
+
\ No newline at end of file
diff --git a/factor/daily/index.xml b/factor/daily/index.xml
index df17d34dbce..7ef37549c6e 100644
--- a/factor/daily/index.xml
+++ b/factor/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Factor Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:58Z
+ 2024-12-01T01:31:52Z
Daily Trending of Factor in GitHub
\ No newline at end of file
diff --git a/factor/monthly/index.xml b/factor/monthly/index.xml
new file mode 100644
index 00000000000..62752faac81
--- /dev/null
+++ b/factor/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Factor Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:26Z
+ Monthly Trending of Factor in GitHub
+
+
\ No newline at end of file
diff --git a/factor/weekly/index.xml b/factor/weekly/index.xml
new file mode 100644
index 00000000000..582561a95eb
--- /dev/null
+++ b/factor/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Factor Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:28Z
+ Weekly Trending of Factor in GitHub
+
+
\ No newline at end of file
diff --git a/fancy/daily/index.xml b/fancy/daily/index.xml
index e5808fe1857..e35d78aaaa0 100644
--- a/fancy/daily/index.xml
+++ b/fancy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fancy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:58Z
+ 2024-12-01T01:31:53Z
Daily Trending of Fancy in GitHub
\ No newline at end of file
diff --git a/fancy/monthly/index.xml b/fancy/monthly/index.xml
new file mode 100644
index 00000000000..d211e9c2998
--- /dev/null
+++ b/fancy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fancy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:26Z
+ Monthly Trending of Fancy in GitHub
+
+
\ No newline at end of file
diff --git a/fancy/weekly/index.xml b/fancy/weekly/index.xml
new file mode 100644
index 00000000000..aaaaa32c74c
--- /dev/null
+++ b/fancy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fancy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:29Z
+ Weekly Trending of Fancy in GitHub
+
+
\ No newline at end of file
diff --git a/fantom/daily/index.xml b/fantom/daily/index.xml
index 676604a1e76..96e907eda78 100644
--- a/fantom/daily/index.xml
+++ b/fantom/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fantom Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:58Z
+ 2024-12-01T01:31:53Z
Daily Trending of Fantom in GitHub
\ No newline at end of file
diff --git a/fantom/monthly/index.xml b/fantom/monthly/index.xml
new file mode 100644
index 00000000000..1c07d8e61dd
--- /dev/null
+++ b/fantom/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fantom Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:26Z
+ Monthly Trending of Fantom in GitHub
+
+
\ No newline at end of file
diff --git a/fantom/weekly/index.xml b/fantom/weekly/index.xml
new file mode 100644
index 00000000000..5aba119951e
--- /dev/null
+++ b/fantom/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fantom Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:28Z
+ Weekly Trending of Fantom in GitHub
+
+
\ No newline at end of file
diff --git a/faust/daily/index.xml b/faust/daily/index.xml
index 31e7964d18a..3aff7690ba7 100644
--- a/faust/daily/index.xml
+++ b/faust/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Faust Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:57Z
+ 2024-12-01T01:31:53Z
Daily Trending of Faust in GitHub
\ No newline at end of file
diff --git a/faust/monthly/index.xml b/faust/monthly/index.xml
new file mode 100644
index 00000000000..71f12dbeeaa
--- /dev/null
+++ b/faust/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Faust Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:27Z
+ Monthly Trending of Faust in GitHub
+
+
\ No newline at end of file
diff --git a/faust/weekly/index.xml b/faust/weekly/index.xml
new file mode 100644
index 00000000000..80fbc8b7c9a
--- /dev/null
+++ b/faust/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Faust Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:29Z
+ Weekly Trending of Faust in GitHub
+
+
\ No newline at end of file
diff --git a/fennel/daily/index.xml b/fennel/daily/index.xml
index c80552e6035..7a6654eae82 100644
--- a/fennel/daily/index.xml
+++ b/fennel/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fennel Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:00Z
+ 2024-12-01T01:31:54Z
Daily Trending of Fennel in GitHub
\ No newline at end of file
diff --git a/fennel/monthly/index.xml b/fennel/monthly/index.xml
new file mode 100644
index 00000000000..5ce1db932c9
--- /dev/null
+++ b/fennel/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fennel Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:28Z
+ Monthly Trending of Fennel in GitHub
+
+
\ No newline at end of file
diff --git a/fennel/weekly/index.xml b/fennel/weekly/index.xml
new file mode 100644
index 00000000000..09288e26219
--- /dev/null
+++ b/fennel/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fennel Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:31Z
+ Weekly Trending of Fennel in GitHub
+
+
\ No newline at end of file
diff --git a/figlet-font/daily/index.xml b/figlet-font/daily/index.xml
index b1dee40f3d9..ff3f6e7ac27 100644
--- a/figlet-font/daily/index.xml
+++ b/figlet-font/daily/index.xml
@@ -1,7 +1,7 @@
GitHub FIGlet Font Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:59Z
+ 2024-12-01T01:31:55Z
Daily Trending of FIGlet Font in GitHub
\ No newline at end of file
diff --git a/figlet-font/monthly/index.xml b/figlet-font/monthly/index.xml
new file mode 100644
index 00000000000..801407162ea
--- /dev/null
+++ b/figlet-font/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FIGlet Font Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:28Z
+ Monthly Trending of FIGlet Font in GitHub
+
+
\ No newline at end of file
diff --git a/figlet-font/weekly/index.xml b/figlet-font/weekly/index.xml
new file mode 100644
index 00000000000..d0d3ecbe3f5
--- /dev/null
+++ b/figlet-font/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FIGlet Font Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:30Z
+ Weekly Trending of FIGlet Font in GitHub
+
+
\ No newline at end of file
diff --git a/filebench-wml/daily/index.xml b/filebench-wml/daily/index.xml
index 8f9d49d4a43..75f8f8ed37f 100644
--- a/filebench-wml/daily/index.xml
+++ b/filebench-wml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Filebench WML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:30:59Z
+ 2024-12-01T01:31:54Z
Daily Trending of Filebench WML in GitHub
\ No newline at end of file
diff --git a/filebench-wml/monthly/index.xml b/filebench-wml/monthly/index.xml
new file mode 100644
index 00000000000..cdb889830c7
--- /dev/null
+++ b/filebench-wml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Filebench WML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:28Z
+ Monthly Trending of Filebench WML in GitHub
+
+
\ No newline at end of file
diff --git a/filebench-wml/weekly/index.xml b/filebench-wml/weekly/index.xml
new file mode 100644
index 00000000000..b693654a794
--- /dev/null
+++ b/filebench-wml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Filebench WML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:30Z
+ Weekly Trending of Filebench WML in GitHub
+
+
\ No newline at end of file
diff --git a/filterscript/daily/index.xml b/filterscript/daily/index.xml
index 235c247fd0f..cff71b03fe2 100644
--- a/filterscript/daily/index.xml
+++ b/filterscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Filterscript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:00Z
+ 2024-12-01T01:31:55Z
Daily Trending of Filterscript in GitHub
\ No newline at end of file
diff --git a/filterscript/monthly/index.xml b/filterscript/monthly/index.xml
new file mode 100644
index 00000000000..e14185a5448
--- /dev/null
+++ b/filterscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Filterscript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:27Z
+ Monthly Trending of Filterscript in GitHub
+
+
\ No newline at end of file
diff --git a/filterscript/weekly/index.xml b/filterscript/weekly/index.xml
new file mode 100644
index 00000000000..ab7b676d5e6
--- /dev/null
+++ b/filterscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Filterscript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:30Z
+ Weekly Trending of Filterscript in GitHub
+
+
\ No newline at end of file
diff --git a/fish/daily/index.xml b/fish/daily/index.xml
index 556fd8bf568..3d7a37fba25 100644
--- a/fish/daily/index.xml
+++ b/fish/daily/index.xml
@@ -1,7 +1,7 @@
GitHub fish Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:01Z
+ 2024-12-01T01:31:56Z
Daily Trending of fish in GitHub
\ No newline at end of file
diff --git a/fish/monthly/index.xml b/fish/monthly/index.xml
new file mode 100644
index 00000000000..1e7feb0ba4c
--- /dev/null
+++ b/fish/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub fish Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:29Z
+ Monthly Trending of fish in GitHub
+
+
\ No newline at end of file
diff --git a/fish/weekly/index.xml b/fish/weekly/index.xml
new file mode 100644
index 00000000000..cd0d2132872
--- /dev/null
+++ b/fish/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub fish Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:31Z
+ Weekly Trending of fish in GitHub
+
+
\ No newline at end of file
diff --git a/fluent/daily/index.xml b/fluent/daily/index.xml
index cc283b6b64e..bcdef0f08ee 100644
--- a/fluent/daily/index.xml
+++ b/fluent/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fluent Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:01Z
+ 2024-12-01T01:31:57Z
Daily Trending of Fluent in GitHub
\ No newline at end of file
diff --git a/fluent/monthly/index.xml b/fluent/monthly/index.xml
new file mode 100644
index 00000000000..cbb01eb6eec
--- /dev/null
+++ b/fluent/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fluent Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:30Z
+ Monthly Trending of Fluent in GitHub
+
+
\ No newline at end of file
diff --git a/fluent/weekly/index.xml b/fluent/weekly/index.xml
new file mode 100644
index 00000000000..cbb418f38f8
--- /dev/null
+++ b/fluent/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fluent Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:32Z
+ Weekly Trending of Fluent in GitHub
+
+
\ No newline at end of file
diff --git a/flux/daily/index.xml b/flux/daily/index.xml
index ad623eef9bc..3a564db9b40 100644
--- a/flux/daily/index.xml
+++ b/flux/daily/index.xml
@@ -1,7 +1,7 @@
GitHub FLUX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:01Z
+ 2024-12-01T01:31:56Z
Daily Trending of FLUX in GitHub
\ No newline at end of file
diff --git a/flux/monthly/index.xml b/flux/monthly/index.xml
new file mode 100644
index 00000000000..bfebd26ba91
--- /dev/null
+++ b/flux/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FLUX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:29Z
+ Monthly Trending of FLUX in GitHub
+
+
\ No newline at end of file
diff --git a/flux/weekly/index.xml b/flux/weekly/index.xml
new file mode 100644
index 00000000000..b3ed150afac
--- /dev/null
+++ b/flux/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FLUX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:33Z
+ Weekly Trending of FLUX in GitHub
+
+
\ No newline at end of file
diff --git a/formatted/daily/index.xml b/formatted/daily/index.xml
index 0c201b527e5..0b599b39490 100644
--- a/formatted/daily/index.xml
+++ b/formatted/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Formatted Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:02Z
+ 2024-12-01T01:31:57Z
Daily Trending of Formatted in GitHub
\ No newline at end of file
diff --git a/formatted/monthly/index.xml b/formatted/monthly/index.xml
new file mode 100644
index 00000000000..4758419d911
--- /dev/null
+++ b/formatted/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Formatted Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:31Z
+ Monthly Trending of Formatted in GitHub
+
+
\ No newline at end of file
diff --git a/formatted/weekly/index.xml b/formatted/weekly/index.xml
new file mode 100644
index 00000000000..85469a15484
--- /dev/null
+++ b/formatted/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Formatted Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:34Z
+ Weekly Trending of Formatted in GitHub
+
+
\ No newline at end of file
diff --git a/forth/daily/index.xml b/forth/daily/index.xml
index ad93d45fcb1..0ca08ee4209 100644
--- a/forth/daily/index.xml
+++ b/forth/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Forth Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:03Z
+ 2024-12-01T01:31:58Z
Daily Trending of Forth in GitHub
\ No newline at end of file
diff --git a/forth/monthly/index.xml b/forth/monthly/index.xml
new file mode 100644
index 00000000000..650835a3189
--- /dev/null
+++ b/forth/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Forth Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:31Z
+ Monthly Trending of Forth in GitHub
+
+
\ No newline at end of file
diff --git a/forth/weekly/index.xml b/forth/weekly/index.xml
new file mode 100644
index 00000000000..576e0181b14
--- /dev/null
+++ b/forth/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Forth Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:34Z
+ Weekly Trending of Forth in GitHub
+
+
\ No newline at end of file
diff --git a/fortran-free-form/daily/index.xml b/fortran-free-form/daily/index.xml
index 6d80085a484..9a28975f3a8 100644
--- a/fortran-free-form/daily/index.xml
+++ b/fortran-free-form/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fortran Free Form Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:02Z
+ 2024-12-01T01:31:58Z
Daily Trending of Fortran Free Form in GitHub
\ No newline at end of file
diff --git a/fortran-free-form/monthly/index.xml b/fortran-free-form/monthly/index.xml
new file mode 100644
index 00000000000..5a9b950d3bc
--- /dev/null
+++ b/fortran-free-form/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fortran Free Form Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:31Z
+ Monthly Trending of Fortran Free Form in GitHub
+
+
\ No newline at end of file
diff --git a/fortran-free-form/weekly/index.xml b/fortran-free-form/weekly/index.xml
new file mode 100644
index 00000000000..7eeb152721e
--- /dev/null
+++ b/fortran-free-form/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fortran Free Form Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:33Z
+ Weekly Trending of Fortran Free Form in GitHub
+
+
\ No newline at end of file
diff --git a/fortran/daily/index.xml b/fortran/daily/index.xml
index 0388f4b32a6..268a266e846 100644
--- a/fortran/daily/index.xml
+++ b/fortran/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Fortran Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:04Z
+ 2024-12-01T01:31:59Z
Daily Trending of Fortran in GitHub
\ No newline at end of file
diff --git a/fortran/monthly/index.xml b/fortran/monthly/index.xml
new file mode 100644
index 00000000000..12c8c05e07d
--- /dev/null
+++ b/fortran/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Fortran Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:32Z
+ Monthly Trending of Fortran in GitHub
+
+
+ esmf-org/esmf
+ 2024-12-01T01:53:32Z
+ tag:github.com,2024-12-01:/esmf-org/esmf
+
+ <p>The Earth System Modeling Framework (ESMF) is a suite of software tools for developing high-performance, multi-component Earth science modeling applications.</p><hr>
+
+
\ No newline at end of file
diff --git a/fortran/weekly/index.xml b/fortran/weekly/index.xml
new file mode 100644
index 00000000000..987d23fb0eb
--- /dev/null
+++ b/fortran/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Fortran Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:35Z
+ Weekly Trending of Fortran in GitHub
+
+
\ No newline at end of file
diff --git a/freebasic/daily/index.xml b/freebasic/daily/index.xml
index cdd52aaeed9..8adea60b52b 100644
--- a/freebasic/daily/index.xml
+++ b/freebasic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub FreeBasic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:04Z
+ 2024-12-01T01:31:59Z
Daily Trending of FreeBasic in GitHub
\ No newline at end of file
diff --git a/freebasic/monthly/index.xml b/freebasic/monthly/index.xml
new file mode 100644
index 00000000000..a2f2c20e25f
--- /dev/null
+++ b/freebasic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FreeBasic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:33Z
+ Monthly Trending of FreeBasic in GitHub
+
+
\ No newline at end of file
diff --git a/freebasic/weekly/index.xml b/freebasic/weekly/index.xml
new file mode 100644
index 00000000000..f84e728720b
--- /dev/null
+++ b/freebasic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FreeBasic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:36Z
+ Weekly Trending of FreeBasic in GitHub
+
+
\ No newline at end of file
diff --git a/freemarker/daily/index.xml b/freemarker/daily/index.xml
index 6ba00d41a11..d1a686678ab 100644
--- a/freemarker/daily/index.xml
+++ b/freemarker/daily/index.xml
@@ -1,7 +1,7 @@
GitHub FreeMarker Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:05Z
+ 2024-12-01T01:32:00Z
Daily Trending of FreeMarker in GitHub
\ No newline at end of file
diff --git a/freemarker/monthly/index.xml b/freemarker/monthly/index.xml
new file mode 100644
index 00000000000..7667c8e1d2f
--- /dev/null
+++ b/freemarker/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FreeMarker Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:33Z
+ Monthly Trending of FreeMarker in GitHub
+
+
\ No newline at end of file
diff --git a/freemarker/weekly/index.xml b/freemarker/weekly/index.xml
new file mode 100644
index 00000000000..3d70ce9a6ec
--- /dev/null
+++ b/freemarker/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub FreeMarker Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:36Z
+ Weekly Trending of FreeMarker in GitHub
+
+
\ No newline at end of file
diff --git a/frege/daily/index.xml b/frege/daily/index.xml
index ee1617192a6..c8a48eb8697 100644
--- a/frege/daily/index.xml
+++ b/frege/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Frege Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:05Z
+ 2024-12-01T01:31:59Z
Daily Trending of Frege in GitHub
\ No newline at end of file
diff --git a/frege/monthly/index.xml b/frege/monthly/index.xml
new file mode 100644
index 00000000000..318e354df09
--- /dev/null
+++ b/frege/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Frege Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:33Z
+ Monthly Trending of Frege in GitHub
+
+
\ No newline at end of file
diff --git a/frege/weekly/index.xml b/frege/weekly/index.xml
new file mode 100644
index 00000000000..4d48138b1ab
--- /dev/null
+++ b/frege/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Frege Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:36Z
+ Weekly Trending of Frege in GitHub
+
+
\ No newline at end of file
diff --git a/futhark/daily/index.xml b/futhark/daily/index.xml
index c688c89d638..d155bb5c290 100644
--- a/futhark/daily/index.xml
+++ b/futhark/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Futhark Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:05Z
+ 2024-12-01T01:32:00Z
Daily Trending of Futhark in GitHub
\ No newline at end of file
diff --git a/futhark/monthly/index.xml b/futhark/monthly/index.xml
new file mode 100644
index 00000000000..f4ece7f385c
--- /dev/null
+++ b/futhark/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Futhark Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:32Z
+ Monthly Trending of Futhark in GitHub
+
+
\ No newline at end of file
diff --git a/futhark/weekly/index.xml b/futhark/weekly/index.xml
new file mode 100644
index 00000000000..fa8cb1c255e
--- /dev/null
+++ b/futhark/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Futhark Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:37Z
+ Weekly Trending of Futhark in GitHub
+
+
\ No newline at end of file
diff --git a/g-code/daily/index.xml b/g-code/daily/index.xml
index 66e85c0370d..c23e2799e5b 100644
--- a/g-code/daily/index.xml
+++ b/g-code/daily/index.xml
@@ -1,7 +1,7 @@
GitHub G-code Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:07Z
+ 2024-12-01T01:32:02Z
Daily Trending of G-code in GitHub
\ No newline at end of file
diff --git a/g-code/monthly/index.xml b/g-code/monthly/index.xml
new file mode 100644
index 00000000000..666a503c517
--- /dev/null
+++ b/g-code/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub G-code Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:35Z
+ Monthly Trending of G-code in GitHub
+
+
\ No newline at end of file
diff --git a/g-code/weekly/index.xml b/g-code/weekly/index.xml
new file mode 100644
index 00000000000..4de0a8184cd
--- /dev/null
+++ b/g-code/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub G-code Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:38Z
+ Weekly Trending of G-code in GitHub
+
+
\ No newline at end of file
diff --git a/game-maker-language/daily/index.xml b/game-maker-language/daily/index.xml
index aa1c8e10a96..a93b494c940 100644
--- a/game-maker-language/daily/index.xml
+++ b/game-maker-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Game Maker Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:07Z
+ 2024-12-01T01:32:01Z
Daily Trending of Game Maker Language in GitHub
\ No newline at end of file
diff --git a/game-maker-language/monthly/index.xml b/game-maker-language/monthly/index.xml
new file mode 100644
index 00000000000..3f6f468f204
--- /dev/null
+++ b/game-maker-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Game Maker Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:34Z
+ Monthly Trending of Game Maker Language in GitHub
+
+
\ No newline at end of file
diff --git a/game-maker-language/weekly/index.xml b/game-maker-language/weekly/index.xml
new file mode 100644
index 00000000000..c4d9c54585c
--- /dev/null
+++ b/game-maker-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Game Maker Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:38Z
+ Weekly Trending of Game Maker Language in GitHub
+
+
\ No newline at end of file
diff --git a/gaml/daily/index.xml b/gaml/daily/index.xml
index 28ff4e0a0e4..e21ad121d08 100644
--- a/gaml/daily/index.xml
+++ b/gaml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GAML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:06Z
+ 2024-12-01T01:32:01Z
Daily Trending of GAML in GitHub
\ No newline at end of file
diff --git a/gaml/monthly/index.xml b/gaml/monthly/index.xml
new file mode 100644
index 00000000000..f3a73817d16
--- /dev/null
+++ b/gaml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:35Z
+ Monthly Trending of GAML in GitHub
+
+
\ No newline at end of file
diff --git a/gaml/weekly/index.xml b/gaml/weekly/index.xml
new file mode 100644
index 00000000000..c113d46605c
--- /dev/null
+++ b/gaml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:38Z
+ Weekly Trending of GAML in GitHub
+
+
\ No newline at end of file
diff --git a/gams/daily/index.xml b/gams/daily/index.xml
index fc616d95d7b..dde886c5739 100644
--- a/gams/daily/index.xml
+++ b/gams/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GAMS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:06Z
+ 2024-12-01T01:32:01Z
Daily Trending of GAMS in GitHub
\ No newline at end of file
diff --git a/gams/monthly/index.xml b/gams/monthly/index.xml
new file mode 100644
index 00000000000..3d4eaa9adad
--- /dev/null
+++ b/gams/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAMS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:34Z
+ Monthly Trending of GAMS in GitHub
+
+
\ No newline at end of file
diff --git a/gams/weekly/index.xml b/gams/weekly/index.xml
new file mode 100644
index 00000000000..758f53054db
--- /dev/null
+++ b/gams/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAMS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:37Z
+ Weekly Trending of GAMS in GitHub
+
+
\ No newline at end of file
diff --git a/gap/daily/index.xml b/gap/daily/index.xml
index 93c9247db69..367e677f809 100644
--- a/gap/daily/index.xml
+++ b/gap/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GAP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:08Z
+ 2024-12-01T01:32:03Z
Daily Trending of GAP in GitHub
\ No newline at end of file
diff --git a/gap/monthly/index.xml b/gap/monthly/index.xml
new file mode 100644
index 00000000000..3cfba83a73e
--- /dev/null
+++ b/gap/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:36Z
+ Monthly Trending of GAP in GitHub
+
+
\ No newline at end of file
diff --git a/gap/weekly/index.xml b/gap/weekly/index.xml
new file mode 100644
index 00000000000..3c1276fba7b
--- /dev/null
+++ b/gap/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GAP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:39Z
+ Weekly Trending of GAP in GitHub
+
+
\ No newline at end of file
diff --git a/gcc-machine-description/daily/index.xml b/gcc-machine-description/daily/index.xml
index 0fe70748b73..888d89561ae 100644
--- a/gcc-machine-description/daily/index.xml
+++ b/gcc-machine-description/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GCC Machine Description Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:08Z
+ 2024-12-01T01:32:03Z
Daily Trending of GCC Machine Description in GitHub
\ No newline at end of file
diff --git a/gcc-machine-description/monthly/index.xml b/gcc-machine-description/monthly/index.xml
new file mode 100644
index 00000000000..e6f8d7b929d
--- /dev/null
+++ b/gcc-machine-description/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GCC Machine Description Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:36Z
+ Monthly Trending of GCC Machine Description in GitHub
+
+
\ No newline at end of file
diff --git a/gcc-machine-description/weekly/index.xml b/gcc-machine-description/weekly/index.xml
new file mode 100644
index 00000000000..4995268c77b
--- /dev/null
+++ b/gcc-machine-description/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GCC Machine Description Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:39Z
+ Weekly Trending of GCC Machine Description in GitHub
+
+
\ No newline at end of file
diff --git a/gdb/daily/index.xml b/gdb/daily/index.xml
index 1d077c82d42..de1f5b3790c 100644
--- a/gdb/daily/index.xml
+++ b/gdb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GDB Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:07Z
+ 2024-12-01T01:32:04Z
Daily Trending of GDB in GitHub
\ No newline at end of file
diff --git a/gdb/monthly/index.xml b/gdb/monthly/index.xml
new file mode 100644
index 00000000000..3dbc96ff643
--- /dev/null
+++ b/gdb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GDB Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:36Z
+ Monthly Trending of GDB in GitHub
+
+
\ No newline at end of file
diff --git a/gdb/weekly/index.xml b/gdb/weekly/index.xml
new file mode 100644
index 00000000000..5c85797c80b
--- /dev/null
+++ b/gdb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GDB Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:40Z
+ Weekly Trending of GDB in GitHub
+
+
\ No newline at end of file
diff --git a/gdscript/daily/index.xml b/gdscript/daily/index.xml
index ff1006d490b..eba46bd9627 100644
--- a/gdscript/daily/index.xml
+++ b/gdscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GDScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:09Z
+ 2024-12-01T01:32:03Z
Daily Trending of GDScript in GitHub
\ No newline at end of file
diff --git a/gdscript/monthly/index.xml b/gdscript/monthly/index.xml
new file mode 100644
index 00000000000..a4a5f1fecff
--- /dev/null
+++ b/gdscript/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub GDScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:37Z
+ Monthly Trending of GDScript in GitHub
+
+
+ foxssake/netfox
+ 2024-12-01T01:53:37Z
+ tag:github.com,2024-12-01:/foxssake/netfox
+
+ <p>Addons for building multiplayer games with Godot</p><hr>
+
+
+ don-tnowe/godot-resources-as-sheets-plugin
+ 2024-12-01T01:53:37Z
+ tag:github.com,2024-12-01:/don-tnowe/godot-resources-as-sheets-plugin
+
+ <p>I needed to edit many Resource files, so figured someone would too.</p><hr>
+
+
\ No newline at end of file
diff --git a/gdscript/weekly/index.xml b/gdscript/weekly/index.xml
new file mode 100644
index 00000000000..30d6964ddbd
--- /dev/null
+++ b/gdscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GDScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:40Z
+ Weekly Trending of GDScript in GitHub
+
+
\ No newline at end of file
diff --git a/gedcom/daily/index.xml b/gedcom/daily/index.xml
index c6302829d78..575b359f768 100644
--- a/gedcom/daily/index.xml
+++ b/gedcom/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GEDCOM Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:10Z
+ 2024-12-01T01:32:05Z
Daily Trending of GEDCOM in GitHub
\ No newline at end of file
diff --git a/gedcom/monthly/index.xml b/gedcom/monthly/index.xml
new file mode 100644
index 00000000000..f006f5e084b
--- /dev/null
+++ b/gedcom/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GEDCOM Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:38Z
+ Monthly Trending of GEDCOM in GitHub
+
+
\ No newline at end of file
diff --git a/gedcom/weekly/index.xml b/gedcom/weekly/index.xml
new file mode 100644
index 00000000000..d5fc0fadd68
--- /dev/null
+++ b/gedcom/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GEDCOM Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:41Z
+ Weekly Trending of GEDCOM in GitHub
+
+
\ No newline at end of file
diff --git a/gemfile.lock/daily/index.xml b/gemfile.lock/daily/index.xml
index 6d2834e5a24..263345016ed 100644
--- a/gemfile.lock/daily/index.xml
+++ b/gemfile.lock/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gemfile.lock Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:09Z
+ 2024-12-01T01:32:04Z
Daily Trending of Gemfile.lock in GitHub
\ No newline at end of file
diff --git a/gemfile.lock/monthly/index.xml b/gemfile.lock/monthly/index.xml
new file mode 100644
index 00000000000..71a38958bd5
--- /dev/null
+++ b/gemfile.lock/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gemfile.lock Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:38Z
+ Monthly Trending of Gemfile.lock in GitHub
+
+
\ No newline at end of file
diff --git a/gemfile.lock/weekly/index.xml b/gemfile.lock/weekly/index.xml
new file mode 100644
index 00000000000..660e45d460b
--- /dev/null
+++ b/gemfile.lock/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gemfile.lock Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:42Z
+ Weekly Trending of Gemfile.lock in GitHub
+
+
\ No newline at end of file
diff --git a/genie/daily/index.xml b/genie/daily/index.xml
index ab00f6d6aee..5201e8ee0ce 100644
--- a/genie/daily/index.xml
+++ b/genie/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Genie Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:11Z
+ 2024-12-01T01:32:07Z
Daily Trending of Genie in GitHub
\ No newline at end of file
diff --git a/genie/monthly/index.xml b/genie/monthly/index.xml
new file mode 100644
index 00000000000..8e1f1a2e497
--- /dev/null
+++ b/genie/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Genie Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:39Z
+ Monthly Trending of Genie in GitHub
+
+
\ No newline at end of file
diff --git a/genie/weekly/index.xml b/genie/weekly/index.xml
new file mode 100644
index 00000000000..2332fa3b03c
--- /dev/null
+++ b/genie/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Genie Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:43Z
+ Weekly Trending of Genie in GitHub
+
+
\ No newline at end of file
diff --git a/genshi/daily/index.xml b/genshi/daily/index.xml
index 6082560cf71..dcc90cff420 100644
--- a/genshi/daily/index.xml
+++ b/genshi/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Genshi Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:11Z
+ 2024-12-01T01:32:07Z
Daily Trending of Genshi in GitHub
\ No newline at end of file
diff --git a/genshi/monthly/index.xml b/genshi/monthly/index.xml
new file mode 100644
index 00000000000..bd4a12740b7
--- /dev/null
+++ b/genshi/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Genshi Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:40Z
+ Monthly Trending of Genshi in GitHub
+
+
\ No newline at end of file
diff --git a/genshi/weekly/index.xml b/genshi/weekly/index.xml
new file mode 100644
index 00000000000..0fab98196b0
--- /dev/null
+++ b/genshi/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Genshi Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:43Z
+ Weekly Trending of Genshi in GitHub
+
+
\ No newline at end of file
diff --git a/gentoo-ebuild/daily/index.xml b/gentoo-ebuild/daily/index.xml
index a474be18a35..eabd4559df8 100644
--- a/gentoo-ebuild/daily/index.xml
+++ b/gentoo-ebuild/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gentoo Ebuild Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:11Z
+ 2024-12-01T01:32:07Z
Daily Trending of Gentoo Ebuild in GitHub
\ No newline at end of file
diff --git a/gentoo-ebuild/monthly/index.xml b/gentoo-ebuild/monthly/index.xml
new file mode 100644
index 00000000000..1e3fe88c2e5
--- /dev/null
+++ b/gentoo-ebuild/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gentoo Ebuild Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:40Z
+ Monthly Trending of Gentoo Ebuild in GitHub
+
+
\ No newline at end of file
diff --git a/gentoo-ebuild/weekly/index.xml b/gentoo-ebuild/weekly/index.xml
new file mode 100644
index 00000000000..cf25da8c58e
--- /dev/null
+++ b/gentoo-ebuild/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gentoo Ebuild Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:44Z
+ Weekly Trending of Gentoo Ebuild in GitHub
+
+
\ No newline at end of file
diff --git a/gentoo-eclass/daily/index.xml b/gentoo-eclass/daily/index.xml
index 05fe8090ff3..4610460575a 100644
--- a/gentoo-eclass/daily/index.xml
+++ b/gentoo-eclass/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gentoo Eclass Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:13Z
+ 2024-12-01T01:32:09Z
Daily Trending of Gentoo Eclass in GitHub
\ No newline at end of file
diff --git a/gentoo-eclass/monthly/index.xml b/gentoo-eclass/monthly/index.xml
new file mode 100644
index 00000000000..56945ea46e7
--- /dev/null
+++ b/gentoo-eclass/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gentoo Eclass Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:41Z
+ Monthly Trending of Gentoo Eclass in GitHub
+
+
\ No newline at end of file
diff --git a/gentoo-eclass/weekly/index.xml b/gentoo-eclass/weekly/index.xml
new file mode 100644
index 00000000000..8f72c7e4ced
--- /dev/null
+++ b/gentoo-eclass/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gentoo Eclass Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:44Z
+ Weekly Trending of Gentoo Eclass in GitHub
+
+
\ No newline at end of file
diff --git a/gerber-image/daily/index.xml b/gerber-image/daily/index.xml
index 3af766c77b1..c7af0086d40 100644
--- a/gerber-image/daily/index.xml
+++ b/gerber-image/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gerber Image Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:12Z
+ 2024-12-01T01:32:10Z
Daily Trending of Gerber Image in GitHub
\ No newline at end of file
diff --git a/gerber-image/monthly/index.xml b/gerber-image/monthly/index.xml
new file mode 100644
index 00000000000..030ac903628
--- /dev/null
+++ b/gerber-image/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gerber Image Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:41Z
+ Monthly Trending of Gerber Image in GitHub
+
+
\ No newline at end of file
diff --git a/gerber-image/weekly/index.xml b/gerber-image/weekly/index.xml
new file mode 100644
index 00000000000..f59014ae0a0
--- /dev/null
+++ b/gerber-image/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gerber Image Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:44Z
+ Weekly Trending of Gerber Image in GitHub
+
+
\ No newline at end of file
diff --git a/gettext-catalog/daily/index.xml b/gettext-catalog/daily/index.xml
index 89ff0325eff..34bf71cbb7c 100644
--- a/gettext-catalog/daily/index.xml
+++ b/gettext-catalog/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gettext Catalog Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:13Z
+ 2024-12-01T01:32:09Z
Daily Trending of Gettext Catalog in GitHub
\ No newline at end of file
diff --git a/gettext-catalog/monthly/index.xml b/gettext-catalog/monthly/index.xml
new file mode 100644
index 00000000000..17b609e9c70
--- /dev/null
+++ b/gettext-catalog/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gettext Catalog Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:41Z
+ Monthly Trending of Gettext Catalog in GitHub
+
+
\ No newline at end of file
diff --git a/gettext-catalog/weekly/index.xml b/gettext-catalog/weekly/index.xml
new file mode 100644
index 00000000000..d14393d2c78
--- /dev/null
+++ b/gettext-catalog/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gettext Catalog Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:45Z
+ Weekly Trending of Gettext Catalog in GitHub
+
+
\ No newline at end of file
diff --git a/gherkin/daily/index.xml b/gherkin/daily/index.xml
index d06d420132d..3ea0cba6c2a 100644
--- a/gherkin/daily/index.xml
+++ b/gherkin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gherkin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:13Z
+ 2024-12-01T01:32:09Z
Daily Trending of Gherkin in GitHub
\ No newline at end of file
diff --git a/gherkin/monthly/index.xml b/gherkin/monthly/index.xml
new file mode 100644
index 00000000000..1a3fbb37ea9
--- /dev/null
+++ b/gherkin/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gherkin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:42Z
+ Monthly Trending of Gherkin in GitHub
+
+
\ No newline at end of file
diff --git a/gherkin/weekly/index.xml b/gherkin/weekly/index.xml
new file mode 100644
index 00000000000..f7f476ec6a3
--- /dev/null
+++ b/gherkin/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gherkin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:45Z
+ Weekly Trending of Gherkin in GitHub
+
+
\ No newline at end of file
diff --git a/git-attributes/daily/index.xml b/git-attributes/daily/index.xml
index 8eee9b2563d..134a00d027a 100644
--- a/git-attributes/daily/index.xml
+++ b/git-attributes/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Git Attributes Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:14Z
+ 2024-12-01T01:32:10Z
Daily Trending of Git Attributes in GitHub
\ No newline at end of file
diff --git a/git-attributes/monthly/index.xml b/git-attributes/monthly/index.xml
new file mode 100644
index 00000000000..b7828e4753b
--- /dev/null
+++ b/git-attributes/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Git Attributes Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:43Z
+ Monthly Trending of Git Attributes in GitHub
+
+
\ No newline at end of file
diff --git a/git-attributes/weekly/index.xml b/git-attributes/weekly/index.xml
new file mode 100644
index 00000000000..517fcf27a28
--- /dev/null
+++ b/git-attributes/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Git Attributes Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:46Z
+ Weekly Trending of Git Attributes in GitHub
+
+
\ No newline at end of file
diff --git a/git-config/daily/index.xml b/git-config/daily/index.xml
index f82380ed034..044cf9905a0 100644
--- a/git-config/daily/index.xml
+++ b/git-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Git Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:14Z
+ 2024-12-01T01:32:11Z
Daily Trending of Git Config in GitHub
\ No newline at end of file
diff --git a/git-config/monthly/index.xml b/git-config/monthly/index.xml
new file mode 100644
index 00000000000..3979d27d954
--- /dev/null
+++ b/git-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Git Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:42Z
+ Monthly Trending of Git Config in GitHub
+
+
\ No newline at end of file
diff --git a/git-config/weekly/index.xml b/git-config/weekly/index.xml
new file mode 100644
index 00000000000..28b7f094789
--- /dev/null
+++ b/git-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Git Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:47Z
+ Weekly Trending of Git Config in GitHub
+
+
\ No newline at end of file
diff --git a/gleam/daily/index.xml b/gleam/daily/index.xml
index fbf949e2480..2e132de13ee 100644
--- a/gleam/daily/index.xml
+++ b/gleam/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gleam Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:15Z
+ 2024-12-01T01:32:11Z
Daily Trending of Gleam in GitHub
\ No newline at end of file
diff --git a/gleam/monthly/index.xml b/gleam/monthly/index.xml
new file mode 100644
index 00000000000..b0b2c574457
--- /dev/null
+++ b/gleam/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gleam Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:43Z
+ Monthly Trending of Gleam in GitHub
+
+
\ No newline at end of file
diff --git a/gleam/weekly/index.xml b/gleam/weekly/index.xml
new file mode 100644
index 00000000000..5c7ea10bbf3
--- /dev/null
+++ b/gleam/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gleam Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:47Z
+ Weekly Trending of Gleam in GitHub
+
+
\ No newline at end of file
diff --git a/glsl/daily/index.xml b/glsl/daily/index.xml
index 0e9c30d88e5..17323d834be 100644
--- a/glsl/daily/index.xml
+++ b/glsl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GLSL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:17Z
+ 2024-12-01T01:32:13Z
Daily Trending of GLSL in GitHub
\ No newline at end of file
diff --git a/glsl/monthly/index.xml b/glsl/monthly/index.xml
new file mode 100644
index 00000000000..05e1701bf3e
--- /dev/null
+++ b/glsl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GLSL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:45Z
+ Monthly Trending of GLSL in GitHub
+
+
\ No newline at end of file
diff --git a/glsl/weekly/index.xml b/glsl/weekly/index.xml
new file mode 100644
index 00000000000..9f6b1069f27
--- /dev/null
+++ b/glsl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GLSL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:49Z
+ Weekly Trending of GLSL in GitHub
+
+
\ No newline at end of file
diff --git a/glyph-bitmap-distribution-format/daily/index.xml b/glyph-bitmap-distribution-format/daily/index.xml
index 8a67517c4e9..c12167ebd91 100644
--- a/glyph-bitmap-distribution-format/daily/index.xml
+++ b/glyph-bitmap-distribution-format/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Glyph Bitmap Distribution Format Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:18Z
+ 2024-12-01T01:32:14Z
Daily Trending of Glyph Bitmap Distribution Format in GitHub
\ No newline at end of file
diff --git a/glyph-bitmap-distribution-format/monthly/index.xml b/glyph-bitmap-distribution-format/monthly/index.xml
new file mode 100644
index 00000000000..2e66491502c
--- /dev/null
+++ b/glyph-bitmap-distribution-format/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Glyph Bitmap Distribution Format Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:46Z
+ Monthly Trending of Glyph Bitmap Distribution Format in GitHub
+
+
\ No newline at end of file
diff --git a/glyph-bitmap-distribution-format/weekly/index.xml b/glyph-bitmap-distribution-format/weekly/index.xml
new file mode 100644
index 00000000000..370f99e7743
--- /dev/null
+++ b/glyph-bitmap-distribution-format/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Glyph Bitmap Distribution Format Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:50Z
+ Weekly Trending of Glyph Bitmap Distribution Format in GitHub
+
+
\ No newline at end of file
diff --git a/glyph/daily/index.xml b/glyph/daily/index.xml
index af603852aaf..46e15d8816a 100644
--- a/glyph/daily/index.xml
+++ b/glyph/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Glyph Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:16Z
+ 2024-12-01T01:32:12Z
Daily Trending of Glyph in GitHub
\ No newline at end of file
diff --git a/glyph/monthly/index.xml b/glyph/monthly/index.xml
new file mode 100644
index 00000000000..6f6fd18ea2f
--- /dev/null
+++ b/glyph/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Glyph Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:44Z
+ Monthly Trending of Glyph in GitHub
+
+
\ No newline at end of file
diff --git a/glyph/weekly/index.xml b/glyph/weekly/index.xml
new file mode 100644
index 00000000000..89f51cd3b63
--- /dev/null
+++ b/glyph/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Glyph Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:48Z
+ Weekly Trending of Glyph in GitHub
+
+
\ No newline at end of file
diff --git a/gn/daily/index.xml b/gn/daily/index.xml
index 02ab5ce8ced..39fc5b0afc4 100644
--- a/gn/daily/index.xml
+++ b/gn/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GN Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:17Z
+ 2024-12-01T01:32:14Z
Daily Trending of GN in GitHub
\ No newline at end of file
diff --git a/gn/monthly/index.xml b/gn/monthly/index.xml
new file mode 100644
index 00000000000..9638f94e2a5
--- /dev/null
+++ b/gn/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GN Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:46Z
+ Monthly Trending of GN in GitHub
+
+
\ No newline at end of file
diff --git a/gn/weekly/index.xml b/gn/weekly/index.xml
new file mode 100644
index 00000000000..3551afe0029
--- /dev/null
+++ b/gn/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GN Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:49Z
+ Weekly Trending of GN in GitHub
+
+
\ No newline at end of file
diff --git a/gnuplot/daily/index.xml b/gnuplot/daily/index.xml
index f1e50e2032f..f882450f251 100644
--- a/gnuplot/daily/index.xml
+++ b/gnuplot/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gnuplot Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:18Z
+ 2024-12-01T01:32:14Z
Daily Trending of Gnuplot in GitHub
\ No newline at end of file
diff --git a/gnuplot/monthly/index.xml b/gnuplot/monthly/index.xml
new file mode 100644
index 00000000000..60a7ccb1872
--- /dev/null
+++ b/gnuplot/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gnuplot Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:46Z
+ Monthly Trending of Gnuplot in GitHub
+
+
\ No newline at end of file
diff --git a/gnuplot/weekly/index.xml b/gnuplot/weekly/index.xml
new file mode 100644
index 00000000000..f35fcfbe3e0
--- /dev/null
+++ b/gnuplot/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gnuplot Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:50Z
+ Weekly Trending of Gnuplot in GitHub
+
+
\ No newline at end of file
diff --git a/go-checksums/daily/index.xml b/go-checksums/daily/index.xml
index e1426fff63f..41a967bdbfe 100644
--- a/go-checksums/daily/index.xml
+++ b/go-checksums/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Go Checksums Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:24Z
+ 2024-12-01T01:32:19Z
Daily Trending of Go Checksums in GitHub
\ No newline at end of file
diff --git a/go-checksums/monthly/index.xml b/go-checksums/monthly/index.xml
new file mode 100644
index 00000000000..3c8d6fa72b5
--- /dev/null
+++ b/go-checksums/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Go Checksums Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:56Z
+ Monthly Trending of Go Checksums in GitHub
+
+
\ No newline at end of file
diff --git a/go-checksums/weekly/index.xml b/go-checksums/weekly/index.xml
new file mode 100644
index 00000000000..8002bae4b61
--- /dev/null
+++ b/go-checksums/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Go Checksums Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:56Z
+ Weekly Trending of Go Checksums in GitHub
+
+
\ No newline at end of file
diff --git a/go-module/daily/index.xml b/go-module/daily/index.xml
index 7a523a5038f..23fcbda0e12 100644
--- a/go-module/daily/index.xml
+++ b/go-module/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Go Module Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:23Z
+ 2024-12-01T01:32:19Z
Daily Trending of Go Module in GitHub
\ No newline at end of file
diff --git a/go-module/monthly/index.xml b/go-module/monthly/index.xml
new file mode 100644
index 00000000000..08a7f637e0b
--- /dev/null
+++ b/go-module/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Go Module Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:57Z
+ Monthly Trending of Go Module in GitHub
+
+
\ No newline at end of file
diff --git a/go-module/weekly/index.xml b/go-module/weekly/index.xml
new file mode 100644
index 00000000000..b6c7ebd3111
--- /dev/null
+++ b/go-module/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Go Module Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:55Z
+ Weekly Trending of Go Module in GitHub
+
+
\ No newline at end of file
diff --git a/go/daily/index.xml b/go/daily/index.xml
index b8a62d7389d..46e23b5bd26 100644
--- a/go/daily/index.xml
+++ b/go/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Go Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:19Z
+ 2024-12-01T01:32:15Z
Daily Trending of Go in GitHub
+
+ nezhahq/nezha
+ 2024-12-01T01:32:15Z
+ tag:github.com,2024-12-01:/nezhahq/nezha
+
+ <p>Self-hosted, lightweight server and website monitoring and O&M tool</p><hr><div align="center">
<br>
<img width="360" style="max-width:80%" src="https://raw.githubusercontent.com/nezhahq/nezha/master/.github/brand.svg?sanitize=true" title="哪吒监控 Nezha Monitoring">
<br>
<small><i>LOGO designed by <a href="https://xio.ng" target="_blank">熊大</a> .</i></small>
<br>
<br>
<img alt="GitHub release (with filter)" src="https://img.shields.io/github/v/release/nezhahq/nezha?color=brightgreen&style=for-the-badge&logo=github&label=Dashboard">
<img src="https://img.shields.io/github/v/release/nezhahq/agent?color=brightgreen&label=Agent&style=for-the-badge&logo=github">
<img src="https://img.shields.io/github/actions/workflow/status/nezhahq/agent/agent.yml?label=Agent%20CI&logo=github&style=for-the-badge">
<img src="https://img.shields.io/badge/Installer-v0.20.2-brightgreen?style=for-the-badge&logo=linux">
<br>
<br>
<p><img alt="trollface" src="https://github.githubassets.com/images/icons/emoji/trollface.png?v8">) <b>Nezha Monitoring: Self-hostable, lightweight, servers and websites monitoring and O&M tool.</b></p>
<p>Supports <b>monitoring</b> system status, HTTP (SSL certificate change, upcoming expiration, expired), TCP, Ping and supports <b>push alerts</b>, run scheduled tasks and <b>web terminal</b>.</p>
</div>
<p>>> Telegram Channel: <a href="https://t.me/nezhanews">哪吒监控(中文通知频道)</a></p>
<p>>> Telegram Group: <a href="https://t.me/nezhamonitoring_global">Nezha Monitoring Global (English Only)</a>, <a href="https://t.me/nezhamonitoring">哪吒监控(中文群组)</a></p>
<p>>> <a href="https://www.google.com/search?q=%22powered+by+Nezha+Monitoring%22+OR+%22powered+by+%E5%93%AA%E5%90%92%E7%9B%91%E6%8E%A7%22">Use Cases | 我们的用户</a> (Google)</p>
<h2>User Guide</h2>
<ul>
<li><a href="https://nezhahq.github.io/en_US/index.html">English</a></li>
<li><a href="https://nezhahq.github.io/index.html">中文文档</a></li>
</ul>
<h2>Screenshots</h2>
<table>
<thead>
<tr>
<th>用户前台 <a href="https://github.com/hamster1963">@hamster1963</a></th>
<th>管理后台 <a href="https://github.com/uubulb">@uubulb</a></th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://raw.githubusercontent.com/nezhahq/nezha/master/.github/user-frontend.20241128.png" alt="user"></td>
<td><img src="https://raw.githubusercontent.com/nezhahq/nezha/master/.github/admin-frontend.20241128.png" alt="admin"></td>
</tr>
<tr>
<td><a href="https://github.com/hamster1963/nezha-dash-react">hamster1963/nezha-dash-react</a></td>
<td><a href="https://github.com/nezhahq/admin-frontend">nezhahq/admin-frontend</a></td>
</tr>
</tbody>
</table>
<h2>Supported Languages</h2>
<ul>
<li>English</li>
<li>中文</li>
<li>Español</li>
</ul>
<p>You can change the dashboard language in the settings page (<code>/setting</code>) after the dashboard is installed.</p>
<h2>Contributors</h2>
<!--GAMFC_DELIMITER-->
<a href="https://github.com/naiba" title="naiba"><img src="https://avatars.githubusercontent.com/u/29243953?v=4" width="50;" alt="naiba"></a>
<p><a href="https://github.com/uubulb" title="UUBulb"><img src="https://avatars.githubusercontent.com/u/35923940?v=4" width="50;" alt="UUBulb"></a> <a href="https://github.com/AkkiaS7" title="Akkia"><img src="https://avatars.githubusercontent.com/u/68485070?v=4" width="50;" alt="Akkia"></a> <a href="https://github.com/Erope" title="卖女孩的小火柴"><img src="https://avatars.githubusercontent.com/u/44471469?v=4" width="50;" alt="卖女孩的小火柴"></a> <a href="https://github.com/nap0o" title="nap0o"><img src="https://avatars.githubusercontent.com/u/144927971?v=4" width="50;" alt="nap0o"></a> <a href="https://github.com/dysf888" title="黑歌"><img src="https://avatars.githubusercontent.com/u/47450409?v=4" width="50;" alt="黑歌"></a> <a href="https://github.com/xykt" title="xykt"><img src="https://avatars.githubusercontent.com/u/152045469?v=4" width="50;" alt="xykt"></a> <a href="https://github.com/MikoyChinese" title="MikoyChinese"><img src="https://avatars.githubusercontent.com/u/22676744?v=4" width="50;" alt="MikoyChinese"></a> <a href="https://github.com/JackieSung4ev" title="JackieSung4ev"><img src="https://avatars.githubusercontent.com/u/24974735?v=4" width="50;" alt="JackieSung4ev"></a> <a href="https://github.com/cantoblanco" title="Kris"><img src="https://avatars.githubusercontent.com/u/116849421?v=4" width="50;" alt="Kris"></a> <a href="https://github.com/lemoeo" title="Lemoe"><img src="https://avatars.githubusercontent.com/u/18618627?v=4" width="50;" alt="Lemoe"></a> <a href="https://github.com/spiritLHLS" title="spiritlhl"><img src="https://avatars.githubusercontent.com/u/103393591?v=4" width="50;" alt="spiritlhl"></a> <a href="https://github.com/liuyanxi975" title="刘颜溪"><img src="https://avatars.githubusercontent.com/u/24417037?v=4" width="50;" alt="刘颜溪"></a> <a href="https://github.com/CosmosZ-code" title="CosmosZ-code"><img src="https://avatars.githubusercontent.com/u/81398224?v=4" width="50;" alt="CosmosZ-code"></a> <a href="https://github.com/lvgj-stack" title="Ko no dio"><img src="https://avatars.githubusercontent.com/u/38449861?v=4" width="50;" alt="Ko no dio"></a> <a href="https://github.com/hhhkkk520" title="Kris"><img src="https://avatars.githubusercontent.com/u/52115472?v=4" width="50;" alt="Kris"></a> <a href="https://github.com/1ridic" title="1ridic"><img src="https://avatars.githubusercontent.com/u/88495501?v=4" width="50;" alt="1ridic"></a> <a href="https://github.com/Mmx233" title="Mmx"><img src="https://avatars.githubusercontent.com/u/36563672?v=4" width="50;" alt="Mmx"></a> <a href="https://github.com/rootmelo92118" title="rootmelo92118"><img src="https://avatars.githubusercontent.com/u/32770959?v=4" width="50;" alt="rootmelo92118"></a> <a href="https://github.com/zhucaidan" title="zhucaidan"><img src="https://avatars.githubusercontent.com/u/47970938?v=4" width="50;" alt="zhucaidan"></a> <a href="https://github.com/iilemon" title="Sean"><img src="https://avatars.githubusercontent.com/u/33201711?v=4" width="50;" alt="Sean"></a> <a href="https://github.com/fscarmen" title="fscarmen"><img src="https://avatars.githubusercontent.com/u/62703343?v=4" width="50;" alt="fscarmen"></a> <a href="https://github.com/ch8o" title="no-name-now"><img src="https://avatars.githubusercontent.com/u/9103372?v=4" width="50;" alt="no-name-now"></a> <a href="https://github.com/HsukqiLee" title="HsukqiLee"><img src="https://avatars.githubusercontent.com/u/79034142?v=4" width="50;" alt="HsukqiLee"></a> <a href="https://github.com/DarcJC" title="Darc Z."><img src="https://avatars.githubusercontent.com/u/53445798?v=4" width="50;" alt="Darc Z."></a> <a href="https://github.com/Creling" title="Creling"><img src="https://avatars.githubusercontent.com/u/43109504?v=4" width="50;" alt="Creling"></a> <a href="https://github.com/coreff" title="Core F"><img src="https://avatars.githubusercontent.com/u/38347122?v=4" width="50;" alt="Core F"></a> <a href="https://github.com/nickfox-taterli" title="Tater Li"><img src="https://avatars.githubusercontent.com/u/19658596?v=4" width="50;" alt="Tater Li"></a> <a href="https://github.com/hmsjy2017" title="Tony"><img src="https://avatars.githubusercontent.com/u/42692274?v=4" width="50;" alt="Tony"></a> <a href="https://github.com/adminsama" title="adminsama"><img src="https://avatars.githubusercontent.com/u/60880076?v=4" width="50;" alt="adminsama"></a> <a href="https://github.com/acgpiano" title="Acgpiano"><img src="https://avatars.githubusercontent.com/u/15900800?v=4" width="50;" alt="Acgpiano"></a> <a href="https://github.com/eya46" title="eya46"><img src="https://avatars.githubusercontent.com/u/61458340?v=4" width="50;" alt="eya46"></a> <a href="https://github.com/guoyongchang" title="guoyongchang"><img src="https://avatars.githubusercontent.com/u/10484506?v=4" width="50;" alt="guoyongchang"></a> <a href="https://github.com/hiDandelion" title="hiDandelion"><img src="https://avatars.githubusercontent.com/u/77157418?v=4" width="50;" alt="hiDandelion"></a> <a href="https://github.com/yuanweize" title="I"><img src="https://avatars.githubusercontent.com/u/30067203?v=4" width="50;" alt="I"></a> <a href="https://github.com/lvyaoting" title="lvyaoting"><img src="https://avatars.githubusercontent.com/u/166296299?v=4" width="50;" alt="lvyaoting"></a> <a href="https://github.com/lyj0309" title="lyj"><img src="https://avatars.githubusercontent.com/u/50474995?v=4" width="50;" alt="lyj"></a> <a href="https://github.com/unclezs" title="unclezs"><img src="https://avatars.githubusercontent.com/u/42318775?v=4" width="50;" alt="unclezs"></a> <a href="https://github.com/ysicing" title="缘生"><img src="https://avatars.githubusercontent.com/u/8605565?v=4" width="50;" alt="缘生"></a> <a href="https://github.com/arkylin" title="凌"><img src="https://avatars.githubusercontent.com/u/35104502?v=4" width="50;" alt="凌"></a> <a href="https://github.com/colour93" title="玖叁"><img src="https://avatars.githubusercontent.com/u/64313711?v=4" width="50;" alt="玖叁"></a> <a href="https://github.com/IamTaoChen" title="Tao Chen"><img src="https://avatars.githubusercontent.com/u/42793494?v=4" width="50;" alt="Tao Chen"></a> <a href="https://github.com/Septrum101" title="Spetrum"><img src="https://avatars.githubusercontent.com/u/11692994?v=4" width="50;" alt="Spetrum"></a> <a href="https://github.com/dreamingsleeping" title="Nanjing Hopefun Network Technology Co. Ltd."><img src="https://avatars.githubusercontent.com/u/13828658?v=4" width="50;" alt="Nanjing Hopefun Network Technology Co. Ltd."></a> <a href="https://github.com/Moraxyc" title="Moraxyc"><img src="https://avatars.githubusercontent.com/u/69713071?v=4" width="50;" alt="Moraxyc"></a> <a href="https://github.com/silver-ymz" title="Mingzhuo Yin"><img src="https://avatars.githubusercontent.com/u/78400701?v=4" width="50;" alt="Mingzhuo Yin"></a> <a href="https://github.com/MartijnLindeman" title="Martijn Lindeman"><img src="https://avatars.githubusercontent.com/u/78365708?v=4" width="50;" alt="Martijn Lindeman"></a> <a href="https://github.com/funnyzak" title="Leon"><img src="https://avatars.githubusercontent.com/u/2562087?v=4" width="50;" alt="Leon"></a> <a href="https://github.com/KorenKrita" title="KorenKrita"><img src="https://avatars.githubusercontent.com/u/22239339?v=4" width="50;" alt="KorenKrita"></a> <a href="https://github.com/techotaku" title="Ian Li"><img src="https://avatars.githubusercontent.com/u/1948179?v=4" width="50;" alt="Ian Li"></a> <a href="https://github.com/GreenTeodoro839" title="GreenTeodoro839"><img src="https://avatars.githubusercontent.com/u/77104800?v=4" width="50;" alt="GreenTeodoro839"></a> <a href="https://github.com/Es-dese" title="Esdese"><img src="https://avatars.githubusercontent.com/u/71542548?v=4" width="50;" alt="Esdese"></a> <a href="https://github.com/wwng2333" title=":D"><img src="https://avatars.githubusercontent.com/u/17147265?v=4" width="50;" alt=":D"></a> <a href="https://github.com/wellcoming" title="Coming"><img src="https://avatars.githubusercontent.com/u/74850890?v=4" width="50;" alt="Coming"></a>
<!--GAMFC_DELIMITER_END--></p>
<h2>Special Thanks</h2>
<ul>
<li><a href="https://ipinfo.io/">IPInfo</a> for providing an accurate GeoIP Database.</li>
</ul>
<h2>Star History</h2>
<p><a href="https://star-history.com/#nezhahq/nezha&Timeline"><img src="https://api.star-history.com/svg?repos=nezhahq/nezha&type=Timeline" alt="Star History Chart"></a></p>
+
\ No newline at end of file
diff --git a/go/monthly/index.xml b/go/monthly/index.xml
new file mode 100644
index 00000000000..ade72574a80
--- /dev/null
+++ b/go/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Go Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:48Z
+ Monthly Trending of Go in GitHub
+
+
+ AlexxIT/go2rtc
+ 2024-12-01T01:53:48Z
+ tag:github.com,2024-12-01:/AlexxIT/go2rtc
+
+ <p>Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc.</p><hr><h1 align="center"> <p><img src="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/assets/logo.gif" alt="go2rtc"> <br> <a href="https://github.com/AlexxIT/go2rtc/stargazers"><img src="https://img.shields.io/github/stars/AlexxIT/go2rtc?style=flat-square&logo=github" alt="stars"></a> <a href="https://hub.docker.com/r/alexxit/go2rtc"><img src="https://img.shields.io/docker/pulls/alexxit/go2rtc?style=flat-square&logo=docker&logoColor=white&label=pulls" alt="docker pulls"></a> <a href="https://github.com/AlexxIT/go2rtc/releases"><img src="https://img.shields.io/github/downloads/AlexxIT/go2rtc/total?color=blue&style=flat-square&logo=github" alt="releases"></a> <a href="https://goreportcard.com/report/github.com/AlexxIT/go2rtc"><img src="https://goreportcard.com/badge/github.com/AlexxIT/go2rtc" alt="goreport"></a></p> </h1>
<p>Ultimate camera streaming application with support RTSP, WebRTC, HomeKit, FFmpeg, RTMP, etc.</p>
<p><img src="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/assets/go2rtc.png" alt=""></p>
<ul>
<li>zero-dependency and zero-config <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-binary">small app</a> for all OS (Windows, macOS, Linux, ARM)</li>
<li>zero-delay for many supported protocols (lowest possible streaming latency)</li>
<li>streaming from <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtsp">RTSP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtmp">RTMP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-dvrip">DVRIP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">HTTP</a> (FLV/MJPEG/JPEG/TS), <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg-device">USB Cameras</a> and <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">other sources</a></li>
<li>streaming from any sources, supported by <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg</a></li>
<li>streaming to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtsp">RTSP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">WebRTC</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">MSE/MP4</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-homekit">HomeKit</a> <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hls">HLS</a> or <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mjpeg">MJPEG</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#publish-stream">publish</a> any source to popular streaming services (YouTube, Telegram, etc.)</li>
<li>first project in the World with support streaming from <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-homekit">HomeKit Cameras</a></li>
<li>support H265 for WebRTC in browser (Safari only, <a href="https://github.com/AlexxIT/Blog/issues/5">read more</a>)</li>
<li>on the fly transcoding for unsupported codecs via <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg</a></li>
<li>play audio files and live streams on some cameras with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#stream-to-camera">speaker</a></li>
<li>multi-source 2-way <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-negotiation">codecs negotiation</a>
<ul>
<li>mixing tracks from different sources to single stream</li>
<li>auto match client supported codecs</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#two-way-audio">2-way audio</a> for some cameras</li>
</ul> </li>
<li>streaming from private networks via <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-ngrok">ngrok</a></li>
<li>can be <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-api">integrated to</a> any smart home platform or be used as <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-binary">standalone app</a></li>
</ul>
<p><strong>Inspired by:</strong></p>
<ul>
<li>series of streaming projects from <a href="https://github.com/deepch">@deepch</a></li>
<li><a href="https://github.com/pion/webrtc">webrtc</a> go library and whole <a href="https://github.com/pion">@pion</a> team</li>
<li><a href="https://github.com/aler9/rtsp-simple-server">rtsp-simple-server</a> idea from <a href="https://github.com/aler9">@aler9</a></li>
<li><a href="https://gstreamer.freedesktop.org/">GStreamer</a> framework pipeline idea</li>
<li><a href="https://mediasoup.org/">MediaSoup</a> framework routing idea</li>
<li>HomeKit Accessory Protocol from <a href="https://github.com/brutella/hap">@brutella</a></li>
<li>creator of the project's logo <a href="https://www.instagram.com/v_novoseltsev">@v_novoseltsev</a></li>
</ul>
<hr>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#fast-start">Fast start</a>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-binary">go2rtc: Binary</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-docker">go2rtc: Docker</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-add-on">go2rtc: Home Assistant Add-on</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-integration">go2rtc: Home Assistant Integration</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-dev-version">go2rtc: Dev version</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">Configuration</a>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">Module: Streams</a>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#two-way-audio">Two way audio</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtsp">Source: RTSP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtmp">Source: RTMP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">Source: HTTP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-onvif">Source: ONVIF</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">Source: FFmpeg</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg-device">Source: FFmpeg Device</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-exec">Source: Exec</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-echo">Source: Echo</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-expr">Source: Expr</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-homekit">Source: HomeKit</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-bubble">Source: Bubble</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-dvrip">Source: DVRIP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-tapo">Source: Tapo</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-kasa">Source: Kasa</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-gopro">Source: GoPro</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ivideon">Source: Ivideon</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-hass">Source: Hass</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-isapi">Source: ISAPI</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-nest">Source: Nest</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-roborock">Source: Roborock</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-webrtc">Source: WebRTC</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-webtorrent">Source: WebTorrent</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#incoming-sources">Incoming sources</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#stream-to-camera">Stream to camera</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#publish-stream">Publish stream</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-api">Module: API</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtsp">Module: RTSP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtmp">Module: RTMP</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">Module: WebRTC</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-homekit">Module: HomeKit</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webtorrent">Module: WebTorrent</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-ngrok">Module: ngrok</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hass">Module: Hass</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">Module: MP4</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hls">Module: HLS</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mjpeg">Module: MJPEG</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-log">Module: Log</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#security">Security</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-filters">Codecs filters</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-madness">Codecs madness</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-negotiation">Codecs negotiation</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#projects-using-go2rtc">Projects using go2rtc</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#cameras-experience">Camera experience</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#tips">TIPS</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#faq">FAQ</a></li>
</ul>
<h2>Fast start</h2>
<ol>
<li>Download <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-binary">binary</a> or use <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-docker">Docker</a> or Home Assistant <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-add-on">Add-on</a> or <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-integration">Integration</a></li>
<li>Open web interface: <code>http://localhost:1984/</code></li>
</ol>
<p><strong>Optionally:</strong></p>
<ul>
<li>add your <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">streams</a> to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">config</a> file</li>
<li>setup <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">external access</a> to webrtc</li>
</ul>
<p><strong>Developers:</strong></p>
<ul>
<li>write your own <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-api">web interface</a></li>
<li>integrate <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-api">web api</a> into your smart home platform</li>
</ul>
<h3>go2rtc: Binary</h3>
<p>Download binary for your OS from <a href="https://github.com/AlexxIT/go2rtc/releases/">latest release</a>:</p>
<ul>
<li><code>go2rtc_win64.zip</code> - Windows 10+ 64-bit</li>
<li><code>go2rtc_win32.zip</code> - Windows 7+ 32-bit</li>
<li><code>go2rtc_win_arm64.zip</code> - Windows ARM 64-bit</li>
<li><code>go2rtc_linux_amd64</code> - Linux 64-bit</li>
<li><code>go2rtc_linux_i386</code> - Linux 32-bit</li>
<li><code>go2rtc_linux_arm64</code> - Linux ARM 64-bit (ex. Raspberry 64-bit OS)</li>
<li><code>go2rtc_linux_arm</code> - Linux ARM 32-bit (ex. Raspberry 32-bit OS)</li>
<li><code>go2rtc_linux_armv6</code> - Linux ARMv6 (for old Raspberry 1 and Zero)</li>
<li><code>go2rtc_linux_mipsel</code> - Linux MIPS (ex. <a href="https://github.com/AlexxIT/XiaomiGateway3">Xiaomi Gateway 3</a>, <a href="https://github.com/gtxaspec/wz_mini_hacks">Wyze cameras</a>)</li>
<li><code>go2rtc_mac_amd64.zip</code> - macOS 10.13+ Intel 64-bit</li>
<li><code>go2rtc_mac_arm64.zip</code> - macOS ARM 64-bit</li>
</ul>
<p>Don't forget to fix the rights <code>chmod +x go2rtc_xxx_xxx</code> on Linux and Mac.</p>
<h3>go2rtc: Docker</h3>
<p>The Docker container <a href="https://hub.docker.com/r/alexxit/go2rtc"><code>alexxit/go2rtc</code></a> supports multiple architectures including <code>amd64</code>, <code>386</code>, <code>arm64</code>, and <code>arm</code>. This container offers the same functionality as the <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-add-on">Home Assistant Add-on</a> but is designed to operate independently of Home Assistant. It comes preinstalled with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-ngrok">ngrok</a>, and <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-echo">Python</a>.</p>
<h3>go2rtc: Home Assistant Add-on</h3>
<p><a href="https://my.home-assistant.io/redirect/supervisor_addon/?addon=a889bffc_go2rtc&repository_url=https%3A%2F%2Fgithub.com%2FAlexxIT%2Fhassio-addons"><img src="https://my.home-assistant.io/badges/supervisor_addon.svg?sanitize=true" alt=""></a></p>
<ol>
<li>Install Add-On:
<ul>
<li>Settings > Add-ons > Plus > Repositories > Add <code>https://github.com/AlexxIT/hassio-addons</code></li>
<li>go2rtc > Install > Start</li>
</ul> </li>
<li>Setup <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hass">Integration</a></li>
</ol>
<h3>go2rtc: Home Assistant Integration</h3>
<p><a href="https://github.com/AlexxIT/WebRTC">WebRTC Camera</a> custom component can be used on any <a href="https://www.home-assistant.io/installation/">Home Assistant installation</a>, including <a href="https://github.com/AlexxIT/HassWP">HassWP</a> on Windows. It can automatically download and use the latest version of go2rtc. Or it can connect to an existing version of go2rtc. Addon installation in this case is optional.</p>
<h3>go2rtc: Dev version</h3>
<p>Latest, but maybe unstable version:</p>
<ul>
<li>Binary: <a href="https://nightly.link/AlexxIT/go2rtc/workflows/build/master">latest nightly release</a></li>
<li>Docker: <code>alexxit/go2rtc:master</code> or <code>alexxit/go2rtc:master-hardware</code> versions</li>
<li>Hass Add-on: <code>go2rtc master</code> or <code>go2rtc master hardware</code> versions</li>
</ul>
<h2>Configuration</h2>
<ul>
<li>by default go2rtc will search <code>go2rtc.yaml</code> in the current work directory</li>
<li><code>api</code> server will start on default <strong>1984 port</strong> (TCP)</li>
<li><code>rtsp</code> server will start on default <strong>8554 port</strong> (TCP)</li>
<li><code>webrtc</code> will use port <strong>8555</strong> (TCP/UDP) for connections</li>
<li><code>ffmpeg</code> will use default transcoding options</li>
</ul>
<p>Configuration options and a complete list of settings can be found in <a href="https://github.com/AlexxIT/go2rtc/wiki/Configuration">the wiki</a>.</p>
<p>Available modules:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">streams</a></li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-api">api</a> - HTTP API (important for WebRTC support)</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtsp">rtsp</a> - RTSP Server (important for FFmpeg support)</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">webrtc</a> - WebRTC Server</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">mp4</a> - MSE, MP4 stream and MP4 snapshot Server</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hls">hls</a> - HLS TS or fMP4 stream Server</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mjpeg">mjpeg</a> - MJPEG Server</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">ffmpeg</a> - FFmpeg integration</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-ngrok">ngrok</a> - ngrok integration (external access for private network)</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hass">hass</a> - Home Assistant integration</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-log">log</a> - logs config</li>
</ul>
<h3>Module: Streams</h3>
<p><strong>go2rtc</strong> support different stream source types. You can config one or multiple links of any type as stream source.</p>
<p>Available source types:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtsp">rtsp</a> - <code>RTSP</code> and <code>RTSPS</code> cameras with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#two-way-audio">two way audio</a> support</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtmp">rtmp</a> - <code>RTMP</code> streams</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">http</a> - <code>HTTP-FLV</code>, <code>MPEG-TS</code>, <code>JPEG</code> (snapshots), <code>MJPEG</code> streams</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-onvif">onvif</a> - get camera <code>RTSP</code> link and snapshot link using <code>ONVIF</code> protocol</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">ffmpeg</a> - FFmpeg integration (<code>HLS</code>, <code>files</code> and many others)</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg-device">ffmpeg:device</a> - local USB Camera or Webcam</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-exec">exec</a> - get media from external app output</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-echo">echo</a> - get stream link from bash or python</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-expr">expr</a> - get stream link via built-in expression language</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-homekit">homekit</a> - streaming from HomeKit Camera</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-bubble">bubble</a> - streaming from ESeeCloud/dvr163 NVR</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-dvrip">dvrip</a> - streaming from DVR-IP NVR</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-tapo">tapo</a> - TP-Link Tapo cameras with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#two-way-audio">two way audio</a> support</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-tapo">kasa</a> - TP-Link Kasa cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-gopro">gopro</a> - GoPro cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ivideon">ivideon</a> - public cameras from <a href="https://tv.ivideon.com/">Ivideon</a> service</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-hass">hass</a> - Home Assistant integration</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-isapi">isapi</a> - two way audio for Hikvision (ISAPI) cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-roborock">roborock</a> - Roborock vacuums with cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-webrtc">webrtc</a> - WebRTC/WHEP sources</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-webtorrent">webtorrent</a> - WebTorrent source from another go2rtc</li>
</ul>
<p>Read more about <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#incoming-sources">incoming sources</a></p>
<h4>Two way audio</h4>
<p>Supported for sources:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtsp">RTSP cameras</a> with <a href="https://www.onvif.org/specs/stream/ONVIF-Streaming-Spec.pdf">ONVIF Profile T</a> (back channel connection)</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-dvrip">DVRIP</a> cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-tapo">TP-Link Tapo</a> cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-isapi">Hikvision ISAPI</a> cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-roborock">Roborock vacuums</a> models with cameras</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-exec">Exec</a> audio on server</li>
<li><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#incoming-browser">Any Browser</a> as IP-camera</li>
</ul>
<p>Two way audio can be used in browser with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">WebRTC</a> technology. The browser will give access to the microphone only for HTTPS sites (<a href="https://stackoverflow.com/questions/52759992/how-to-access-camera-and-microphone-in-chrome-without-https">read more</a>).</p>
<p>go2rtc also support <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#stream-to-camera">play audio</a> files and live streams on this cameras.</p>
<h4>Source: RTSP</h4>
<pre><code class="language-yaml">streams:
sonoff_camera: rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0
dahua_camera:
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=1
amcrest_doorbell:
- rtsp://username:password@192.168.1.123:554/cam/realmonitor?channel=1&subtype=0#backchannel=0
unifi_camera: rtspx://192.168.1.123:7441/fD6ouM72bWoFijxK
glichy_camera: ffmpeg:rtsp://username:password@192.168.1.123/live/ch00_1
</code></pre>
<p><strong>Recommendations</strong></p>
<ul>
<li><strong>Amcrest Doorbell</strong> users may want to disable two way audio, because with an active stream you won't have a call button working. You need to add <code>#backchannel=0</code> to the end of your RTSP link in YAML config file</li>
<li><strong>Dahua Doorbell</strong> users may want to change backchannel <a href="https://github.com/AlexxIT/go2rtc/issues/52">audio codec</a></li>
<li><strong>Reolink</strong> users may want NOT to use RTSP protocol at all, some camera models have a very awful unusable stream implementation</li>
<li><strong>Ubiquiti UniFi</strong> users may want to disable HTTPS verification. Use <code>rtspx://</code> prefix instead of <code>rtsps://</code>. And don't use <code>?enableSrtp</code> <a href="https://github.com/AlexxIT/go2rtc/issues/81">suffix</a></li>
<li><strong>TP-Link Tapo</strong> users may skip login and password, because go2rtc support login <a href="https://drmnsamoliu.github.io/video.html">without them</a></li>
<li>If your camera has two RTSP links - you can add both of them as sources. This is useful when streams has different codecs, as example AAC audio with main stream and PCMU/PCMA audio with second stream</li>
<li>If the stream from your camera is glitchy, try using <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">ffmpeg source</a>. It will not add CPU load if you won't use transcoding</li>
<li>If the stream from your camera is very glitchy, try to use transcoding with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">ffmpeg source</a></li>
</ul>
<p><strong>Other options</strong></p>
<p>Format: <code>rtsp...#{param1}#{param2}#{param3}</code></p>
<ul>
<li>Add custom timeout <code>#timeout=30</code> (in seconds)</li>
<li>Ignore audio - <code>#media=video</code> or ignore video - <code>#media=audio</code></li>
<li>Ignore two way audio API <code>#backchannel=0</code> - important for some glitchy cameras</li>
<li>Use WebSocket transport <code>#transport=ws...</code></li>
</ul>
<p><strong>RTSP over WebSocket</strong></p>
<pre><code class="language-yaml">streams:
# WebSocket with authorization, RTSP - without
axis-rtsp-ws: rtsp://192.168.1.123:4567/axis-media/media.amp?overview=0&camera=1&resolution=1280x720&videoframeskipmode=empty&Axis-Orig-Sw=true#transport=ws://user:pass@192.168.1.123:4567/rtsp-over-websocket
# WebSocket without authorization, RTSP - with
dahua-rtsp-ws: rtsp://user:pass@192.168.1.123/cam/realmonitor?channel=1&subtype=1&proto=Private3#transport=ws://192.168.1.123/rtspoverwebsocket
</code></pre>
<h4>Source: RTMP</h4>
<p>You can get stream from RTMP server, for example <a href="https://github.com/arut/nginx-rtmp-module">Nginx with nginx-rtmp-module</a>.</p>
<pre><code class="language-yaml">streams:
rtmp_stream: rtmp://192.168.1.123/live/camera1
</code></pre>
<h4>Source: HTTP</h4>
<p>Support Content-Type:</p>
<ul>
<li><strong>HTTP-FLV</strong> (<code>video/x-flv</code>) - same as RTMP, but over HTTP</li>
<li><strong>HTTP-JPEG</strong> (<code>image/jpeg</code>) - camera snapshot link, can be converted by go2rtc to MJPEG stream</li>
<li><strong>HTTP-MJPEG</strong> (<code>multipart/x</code>) - simple MJPEG stream over HTTP</li>
<li><strong>MPEG-TS</strong> (<code>video/mpeg</code>) - legacy <a href="https://en.wikipedia.org/wiki/MPEG_transport_stream">streaming format</a></li>
</ul>
<p>Source also support HTTP and TCP streams with autodetection for different formats: <strong>MJPEG</strong>, <strong>H.264/H.265 bitstream</strong>, <strong>MPEG-TS</strong>.</p>
<pre><code class="language-yaml">streams:
# [HTTP-FLV] stream in video/x-flv format
http_flv: http://192.168.1.123:20880/api/camera/stream/780900131155/657617
# [JPEG] snapshots from Dahua camera, will be converted to MJPEG stream
dahua_snap: http://admin:password@192.168.1.123/cgi-bin/snapshot.cgi?channel=1
# [MJPEG] stream will be proxied without modification
http_mjpeg: https://mjpeg.sanford.io/count.mjpeg
# [MJPEG or H.264/H.265 bitstream or MPEG-TS]
tcp_magic: tcp://192.168.1.123:12345
# Add custom header
custom_header: "https://mjpeg.sanford.io/count.mjpeg#header=Authorization: Bearer XXX"
</code></pre>
<p><strong>PS.</strong> Dahua camera has bug: if you select MJPEG codec for RTSP second stream - snapshot won't work.</p>
<h4>Source: ONVIF</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.5.0">New in v1.5.0</a></em></p>
<p>The source is not very useful if you already know RTSP and snapshot links for your camera. But it can be useful if you don't.</p>
<p><strong>WebUI > Add</strong> webpage support ONVIF autodiscovery. Your server must be on the same subnet as the camera. If you use docker, you must use "network host".</p>
<pre><code class="language-yaml">streams:
dahua1: onvif://admin:password@192.168.1.123
reolink1: onvif://admin:password@192.168.1.123:8000
tapo1: onvif://admin:password@192.168.1.123:2020
</code></pre>
<h4>Source: FFmpeg</h4>
<p>You can get any stream or file or device via FFmpeg and push it to go2rtc. The app will automatically start FFmpeg with the proper arguments when someone starts watching the stream.</p>
<ul>
<li>FFmpeg preistalled for <strong>Docker</strong> and <strong>Hass Add-on</strong> users</li>
<li><strong>Hass Add-on</strong> users can target files from <a href="https://www.home-assistant.io/more-info/local-media/setup-media/">/media</a> folder</li>
</ul>
<p>Format: <code>ffmpeg:{input}#{param1}#{param2}#{param3}</code>. Examples:</p>
<pre><code class="language-yaml">streams:
# [FILE] all tracks will be copied without transcoding codecs
file1: ffmpeg:/media/BigBuckBunny.mp4
# [FILE] video will be transcoded to H264, audio will be skipped
file2: ffmpeg:/media/BigBuckBunny.mp4#video=h264
# [FILE] video will be copied, audio will be transcoded to pcmu
file3: ffmpeg:/media/BigBuckBunny.mp4#video=copy#audio=pcmu
# [HLS] video will be copied, audio will be skipped
hls: ffmpeg:https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/gear5/prog_index.m3u8#video=copy
# [MJPEG] video will be transcoded to H264
mjpeg: ffmpeg:http://185.97.122.128/cgi-bin/faststream.jpg#video=h264
# [RTSP] video with rotation, should be transcoded, so select H264
rotate: ffmpeg:rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0#video=h264#rotate=90
</code></pre>
<p>All trascoding formats has <a href="https://github.com/AlexxIT/go2rtc/raw/master/internal/ffmpeg/ffmpeg.go">built-in templates</a>: <code>h264</code>, <code>h265</code>, <code>opus</code>, <code>pcmu</code>, <code>pcmu/16000</code>, <code>pcmu/48000</code>, <code>pcma</code>, <code>pcma/16000</code>, <code>pcma/48000</code>, <code>aac</code>, <code>aac/16000</code>.</p>
<p>But you can override them via YAML config. You can also add your own formats to config and use them with source params.</p>
<pre><code class="language-yaml">ffmpeg:
bin: ffmpeg # path to ffmpeg binary
h264: "-codec:v libx264 -g:v 30 -preset:v superfast -tune:v zerolatency -profile:v main -level:v 4.1"
mycodec: "-any args that supported by ffmpeg..."
myinput: "-fflags nobuffer -flags low_delay -timeout 5000000 -i {input}"
myraw: "-ss 00:00:20"
</code></pre>
<ul>
<li>You can use go2rtc stream name as ffmpeg input (ex. <code>ffmpeg:camera1#video=h264</code>)</li>
<li>You can use <code>video</code> and <code>audio</code> params multiple times (ex. <code>#video=copy#audio=copy#audio=pcmu</code>)</li>
<li>You can use <code>rotate</code> param with <code>90</code>, <code>180</code>, <code>270</code> or <code>-90</code> values, important with transcoding (ex. <code>#video=h264#rotate=90</code>)</li>
<li>You can use <code>width</code> and/or <code>height</code> params, important with transcoding (ex. <code>#video=h264#width=1280</code>)</li>
<li>You can use <code>drawtext</code> to add a timestamp (ex. <code>drawtext=x=2:y=2:fontsize=12:fontcolor=white:box=1:boxcolor=black</code>)
<ul>
<li>This will greatly increase the CPU of the server, even with hardware acceleration</li>
</ul> </li>
<li>You can use <code>raw</code> param for any additional FFmpeg arguments (ex. <code>#raw=-vf transpose=1</code>)</li>
<li>You can use <code>input</code> param to override default input template (ex. <code>#input=rtsp/udp</code> will change RTSP transport from TCP to UDP+TCP)
<ul>
<li>You can use raw input value (ex. <code>#input=-timeout 5000000 -i {input}</code>)</li>
<li>You can add your own input templates</li>
</ul> </li>
</ul>
<p>Read more about <a href="https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration">hardware acceleration</a>.</p>
<p><strong>PS.</strong> It is recommended to check the available hardware in the WebUI add page.</p>
<h4>Source: FFmpeg Device</h4>
<p>You can get video from any USB-camera or Webcam as RTSP or WebRTC stream. This is part of FFmpeg integration.</p>
<ul>
<li>check available devices in Web interface</li>
<li><code>video_size</code> and <code>framerate</code> must be supported by your camera!</li>
<li>for Linux supported only video for now</li>
<li>for macOS you can stream Facetime camera or whole Desktop!</li>
<li>for macOS important to set right framerate</li>
</ul>
<p>Format: <code>ffmpeg:device?{input-params}#{param1}#{param2}#{param3}</code></p>
<pre><code class="language-yaml">streams:
linux_usbcam: ffmpeg:device?video=0&video_size=1280x720#video=h264
windows_webcam: ffmpeg:device?video=0#video=h264
macos_facetime: ffmpeg:device?video=0&audio=1&video_size=1280x720&framerate=30#video=h264#audio=pcma
</code></pre>
<p><strong>PS.</strong> It is recommended to check the available devices in the WebUI add page.</p>
<h4>Source: Exec</h4>
<p>Exec source can run any external application and expect data from it. Two transports are supported - <strong>pipe</strong> (<em>from <a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.5.0">v1.5.0</a></em>) and <strong>RTSP</strong>.</p>
<p>If you want to use <strong>RTSP</strong> transport - the command must contain the <code>{output}</code> argument in any place. On launch, it will be replaced by the local address of the RTSP server.</p>
<p><strong>pipe</strong> reads data from app stdout in different formats: <strong>MJPEG</strong>, <strong>H.264/H.265 bitstream</strong>, <strong>MPEG-TS</strong>. Also pipe can write data to app stdin in two formats: <strong>PCMA</strong> and <strong>PCM/48000</strong>.</p>
<p>The source can be used with:</p>
<ul>
<li><a href="https://ffmpeg.org/">FFmpeg</a> - go2rtc ffmpeg source just a shortcut to exec source</li>
<li><a href="https://ffmpeg.org/ffplay.html">FFplay</a> - play audio on your server</li>
<li><a href="https://gstreamer.freedesktop.org/">GStreamer</a></li>
<li><a href="https://www.raspberrypi.com/documentation/computers/camera_software.html">Raspberry Pi Cameras</a></li>
<li>any your own software</li>
</ul>
<p>Pipe commands support parameters (format: <code>exec:{command}#{param1}#{param2}</code>):</p>
<ul>
<li><code>killsignal</code> - signal which will be send to stop the process (numeric form)</li>
<li><code>killtimeout</code> - time in seconds for forced termination with sigkill</li>
<li><code>backchannel</code> - enable backchannel for two-way audio</li>
</ul>
<pre><code class="language-yaml">streams:
stream: exec:ffmpeg -re -i /media/BigBuckBunny.mp4 -c copy -rtsp_transport tcp -f rtsp {output}
picam_h264: exec:libcamera-vid -t 0 --inline -o -
picam_mjpeg: exec:libcamera-vid -t 0 --codec mjpeg -o -
pi5cam_h264: exec:libcamera-vid -t 0 --libav-format h264 -o -
canon: exec:gphoto2 --capture-movie --stdout#killsignal=2#killtimeout=5
play_pcma: exec:ffplay -fflags nobuffer -f alaw -ar 8000 -i -#backchannel=1
play_pcm48k: exec:ffplay -fflags nobuffer -f s16be -ar 48000 -i -#backchannel=1
</code></pre>
<h4>Source: Echo</h4>
<p>Some sources may have a dynamic link. And you will need to get it using a bash or python script. Your script should echo a link to the source. RTSP, FFmpeg or any of the <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">supported sources</a>.</p>
<p><strong>Docker</strong> and <strong>Hass Add-on</strong> users has preinstalled <code>python3</code>, <code>curl</code>, <code>jq</code>.</p>
<p>Check examples in <a href="https://github.com/AlexxIT/go2rtc/wiki/Source-Echo-examples">wiki</a>.</p>
<pre><code class="language-yaml">streams:
apple_hls: echo:python3 hls.py https://developer.apple.com/streaming/examples/basic-stream-osx-ios5.html
</code></pre>
<h4>Source: Expr</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.8.2">New in v1.8.2</a></em></p>
<p>Like <code>echo</code> source, but uses the built-in <a href="https://github.com/antonmedv/expr">expr</a> expression language (<a href="https://github.com/AlexxIT/go2rtc/raw/master/internal/expr/README.md">read more</a>).</p>
<h4>Source: HomeKit</h4>
<p><strong>Important:</strong></p>
<ul>
<li>You can use HomeKit Cameras <strong>without Apple devices</strong> (iPhone, iPad, etc.), it's just a yet another protocol</li>
<li>HomeKit device can be paired with only one ecosystem. So, if you have paired it to an iPhone (Apple Home) - you can't pair it with Home Assistant or go2rtc. Or if you have paired it to go2rtc - you can't pair it with iPhone</li>
<li>HomeKit device should be in same network with working <a href="https://en.wikipedia.org/wiki/Multicast_DNS">mDNS</a> between device and go2rtc</li>
</ul>
<p>go2rtc support import paired HomeKit devices from <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-hass">Home Assistant</a>. So you can use HomeKit camera with Hass and go2rtc simultaneously. If you using Hass, I recommend pairing devices with it, it will give you more options.</p>
<p>You can pair device with go2rtc on the HomeKit page. If you can't see your devices - reload the page. Also try reboot your HomeKit device (power off). If you still can't see it - you have a problems with mDNS.</p>
<p>If you see a device but it does not have a pair button - it is paired to some ecosystem (Apple Home, Home Assistant, HomeBridge etc). You need to delete device from that ecosystem, and it will be available for pairing. If you cannot unpair device, you will have to reset it.</p>
<p><strong>Important:</strong></p>
<ul>
<li>HomeKit audio uses very non-standard <strong>AAC-ELD</strong> codec with very non-standard params and specification violation</li>
<li>Audio can't be played in <code>VLC</code> and probably any other player</li>
<li>Audio should be transcoded for using with MSE, WebRTC, etc.</li>
</ul>
<p>Recommended settings for using HomeKit Camera with WebRTC, MSE, MP4, RTSP:</p>
<pre><code>streams:
aqara_g3:
- hass:Camera-Hub-G3-AB12
- ffmpeg:aqara_g3#audio=aac#audio=opus
</code></pre>
<p>RTSP link with "normal" audio for any player: <code>rtsp://192.168.1.123:8554/aqara_g3?video&audio=aac</code></p>
<p><strong>This source is in active development!</strong> Tested only with <a href="https://www.aqara.com/eu/product/camera-hub-g3">Aqara Camera Hub G3</a> (both EU and CN versions).</p>
<h4>Source: Bubble</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.6.1">New in v1.6.1</a></em></p>
<p>Other names: <a href="http://www.eseecloud.com/">ESeeCloud</a>, <a href="http://help.dvr163.com/">dvr163</a>.</p>
<ul>
<li>you can skip <code>username</code>, <code>password</code>, <code>port</code>, <code>ch</code> and <code>stream</code> if they are default</li>
<li>setup separate streams for different channels and streams</li>
</ul>
<pre><code class="language-yaml">streams:
camera1: bubble://username:password@192.168.1.123:34567/bubble/live?ch=0&stream=0
</code></pre>
<h4>Source: DVRIP</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.2.0">New in v1.2.0</a></em></p>
<p>Other names: DVR-IP, NetSurveillance, Sofia protocol (NETsurveillance ActiveX plugin XMeye SDK).</p>
<ul>
<li>you can skip <code>username</code>, <code>password</code>, <code>port</code>, <code>channel</code> and <code>subtype</code> if they are default</li>
<li>setup separate streams for different channels</li>
<li>use <code>subtype=0</code> for Main stream, and <code>subtype=1</code> for Extra1 stream</li>
<li>only the TCP protocol is supported</li>
</ul>
<pre><code class="language-yaml">streams:
only_stream: dvrip://username:password@192.168.1.123:34567?channel=0&subtype=0
only_tts: dvrip://username:password@192.168.1.123:34567?backchannel=1
two_way_audio:
- dvrip://username:password@192.168.1.123:34567?channel=0&subtype=0
- dvrip://username:password@192.168.1.123:34567?backchannel=1
</code></pre>
<h4>Source: Tapo</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.2.0">New in v1.2.0</a></em></p>
<p><a href="https://www.tapo.com/">TP-Link Tapo</a> proprietary camera protocol with <strong>two way audio</strong> support.</p>
<ul>
<li>stream quality is the same as <a href="https://www.tapo.com/en/faq/34/">RTSP protocol</a></li>
<li>use the <strong>cloud password</strong>, this is not the RTSP password! you do not need to add a login!</li>
<li>you can also use UPPERCASE MD5 hash from your cloud password with <code>admin</code> username</li>
<li>some new camera firmwares requires SHA256 instead of MD5</li>
</ul>
<pre><code class="language-yaml">streams:
# cloud password without username
camera1: tapo://cloud-password@192.168.1.123
# admin username and UPPERCASE MD5 cloud-password hash
camera2: tapo://admin:UPPERCASE-MD5@192.168.1.123
# admin username and UPPERCASE SHA256 cloud-password hash
camera3: tapo://admin:UPPERCASE-SHA256@192.168.1.123
</code></pre>
<pre><code class="language-bash">echo -n "cloud password" | md5 | awk '{print toupper($0)}'
echo -n "cloud password" | shasum -a 256 | awk '{print toupper($0)}'
</code></pre>
<h4>Source: Kasa</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.7.0">New in v1.7.0</a></em></p>
<p><a href="https://www.kasasmart.com/">TP-Link Kasa</a> non-standard protocol <a href="https://medium.com/@hu3vjeen/reverse-engineering-tp-link-kc100-bac4641bf1cd">more info</a>.</p>
<ul>
<li><code>username</code> - urlsafe email, <code>alex@gmail.com</code> -> <code>alex%40gmail.com</code></li>
<li><code>password</code> - base64password, <code>secret1</code> -> <code>c2VjcmV0MQ==</code></li>
</ul>
<pre><code class="language-yaml">streams:
kc401: kasa://username:password@192.168.1.123:19443/https/stream/mixed
</code></pre>
<p>Tested: KD110, KC200, KC401, KC420WS, EC71.</p>
<h4>Source: GoPro</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.8.3">New in v1.8.3</a></em></p>
<p>Support streaming from <a href="https://gopro.com/">GoPro</a> cameras, connected via USB or Wi-Fi to Linux, Mac, Windows. <a href="https://github.com/AlexxIT/go2rtc/tree/master/internal/gopro">Read more</a>.</p>
<h4>Source: Ivideon</h4>
<p>Support public cameras from service <a href="https://tv.ivideon.com/">Ivideon</a>.</p>
<pre><code class="language-yaml">streams:
quailcam: ivideon:100-tu5dkUPct39cTp9oNEN2B6/0
</code></pre>
<h4>Source: Hass</h4>
<p>Support import camera links from <a href="https://www.home-assistant.io/">Home Assistant</a> config files:</p>
<ul>
<li><a href="https://www.home-assistant.io/integrations/generic/">Generic Camera</a>, setup via GUI</li>
<li><a href="https://www.home-assistant.io/integrations/homekit_controller/">HomeKit Camera</a></li>
<li><a href="https://www.home-assistant.io/integrations/onvif/">ONVIF</a></li>
<li><a href="https://github.com/humbertogontijo/homeassistant-roborock">Roborock</a> vacuums with camera</li>
</ul>
<pre><code class="language-yaml">hass:
config: "/config" # skip this setting if you Hass Add-on user
streams:
generic_camera: hass:Camera1 # Settings > Integrations > Integration Name
aqara_g3: hass:Camera-Hub-G3-AB12
</code></pre>
<p><strong>WebRTC Cameras</strong> (<em>from <a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.6.0">v1.6.0</a></em>)</p>
<p>Any cameras in WebRTC format are supported. But at the moment Home Assistant only supports some <a href="https://www.home-assistant.io/integrations/nest/">Nest</a> cameras in this fomat.</p>
<p><strong>Important.</strong> The Nest API only allows you to get a link to a stream for 5 minutes. Do not use this with Frigate! If the stream expires, Frigate will consume all available ram on your machine within seconds. It's recommended to use <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-nest">Nest source</a> - it supports extending the stream.</p>
<pre><code class="language-yaml">streams:
# link to Home Assistant Supervised
hass-webrtc1: hass://supervisor?entity_id=camera.nest_doorbell
# link to external Hass with Long-Lived Access Tokens
hass-webrtc2: hass://192.168.1.123:8123?entity_id=camera.nest_doorbell&token=eyXYZ...
</code></pre>
<p><strong>RTSP Cameras</strong></p>
<p>By default, the Home Assistant API does not allow you to get dynamic RTSP link to a camera stream. So more cameras, like <a href="https://www.home-assistant.io/integrations/tuya/">Tuya</a>, and possibly others can also be imported by using <a href="https://github.com/felipecrs/hass-expose-camera-stream-source#importing-home-assistant-cameras-to-go2rtc-andor-frigate">this method</a>.</p>
<h4>Source: ISAPI</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>This source type support only backchannel audio for Hikvision ISAPI protocol. So it should be used as second source in addition to the RTSP protocol.</p>
<pre><code class="language-yaml">streams:
hikvision1:
- rtsp://admin:password@192.168.1.123:554/Streaming/Channels/101
- isapi://admin:password@192.168.1.123:80/
</code></pre>
<h4>Source: Nest</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.6.0">New in v1.6.0</a></em></p>
<p>Currently only WebRTC cameras are supported.</p>
<p>For simplicity, it is recommended to connect the Nest/WebRTC camera to the <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-hass">Home Assistant</a>. But if you can somehow get the below parameters - Nest/WebRTC source will work without Hass.</p>
<pre><code class="language-yaml">streams:
nest-doorbell: nest:?client_id=***&client_secret=***&refresh_token=***&project_id=***&device_id=***
</code></pre>
<h4>Source: Roborock</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>This source type support Roborock vacuums with cameras. Known working models:</p>
<ul>
<li>Roborock S6 MaxV - only video (the vacuum has no microphone)</li>
<li>Roborock S7 MaxV - video and two way audio</li>
<li>Roborock Qrevo MaxV - video and two way audio</li>
</ul>
<p>Source support load Roborock credentials from Home Assistant <a href="https://github.com/humbertogontijo/homeassistant-roborock">custom integration</a> or the <a href="https://www.home-assistant.io/integrations/roborock">core integration</a>. Otherwise, you need to log in to your Roborock account (MiHome account is not supported). Go to: go2rtc WebUI > Add webpage. Copy <code>roborock://...</code> source for your vacuum and paste it to <code>go2rtc.yaml</code> config.</p>
<p>If you have graphic pin for your vacuum - add it as numeric pin (lines: 123, 456, 789) to the end of the roborock-link.</p>
<h4>Source: WebRTC</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>This source type support four connection formats.</p>
<p><strong>whep</strong></p>
<p><a href="https://datatracker.ietf.org/doc/draft-murillo-whep/">WebRTC/WHEP</a> - is replaced by <a href="https://datatracker.ietf.org/doc/charter-ietf-wish/02/">WebRTC/WISH</a> standard for WebRTC video/audio viewers. But it may already be supported in some third-party software. It is supported in go2rtc.</p>
<p><strong>go2rtc</strong></p>
<p>This format is only supported in go2rtc. Unlike WHEP it supports asynchronous WebRTC connection and two way audio.</p>
<p><strong>openipc</strong> (<em>from <a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.7.0">v1.7.0</a></em>)</p>
<p>Support connection to <a href="https://openipc.org/">OpenIPC</a> cameras.</p>
<p><strong>wyze</strong> (<em>from <a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.6.1">v1.6.1</a></em>)</p>
<p>Supports connection to <a href="https://www.wyze.com/">Wyze</a> cameras, using WebRTC protocol. You can use <a href="https://github.com/mrlt8/docker-wyze-bridge">docker-wyze-bridge</a> project to get connection credentials.</p>
<p><strong>kinesis</strong> (<em>from <a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.6.1">v1.6.1</a></em>)</p>
<p>Supports <a href="https://aws.amazon.com/kinesis/video-streams/">Amazon Kinesis Video Streams</a>, using WebRTC protocol. You need to specify signalling WebSocket URL with all credentials in query params, <code>client_id</code> and <code>ice_servers</code> list in <a href="https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer">JSON format</a>.</p>
<pre><code class="language-yaml">streams:
webrtc-whep: webrtc:http://192.168.1.123:1984/api/webrtc?src=camera1
webrtc-go2rtc: webrtc:ws://192.168.1.123:1984/api/ws?src=camera1
webrtc-openipc: webrtc:ws://192.168.1.123/webrtc_ws#format=openipc#ice_servers=[{"urls":"stun:stun.kinesisvideo.eu-north-1.amazonaws.com:443"}]
webrtc-wyze: webrtc:http://192.168.1.123:5000/signaling/camera1?kvs#format=wyze
webrtc-kinesis: webrtc:wss://...amazonaws.com/?...#format=kinesis#client_id=...#ice_servers=[{...},{...}]
</code></pre>
<p><strong>PS.</strong> For <code>kinesis</code> sources you can use <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-echo">echo</a> to get connection params using <code>bash</code>/<code>python</code> or any other script language.</p>
<h4>Source: WebTorrent</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>This source can get a stream from another go2rtc via <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webtorrent">WebTorrent</a> protocol.</p>
<pre><code class="language-yaml">streams:
webtorrent1: webtorrent:?share=huofssuxaty00izc&pwd=k3l2j9djeg8v8r7e
</code></pre>
<h4>Incoming sources</h4>
<p>By default, go2rtc establishes a connection to the source when any client requests it. Go2rtc drops the connection to the source when it has no clients left.</p>
<ul>
<li>Go2rtc also can accepts incoming sources in <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtsp">RTSP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtmp">RTMP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">HTTP</a> and <strong>WebRTC/WHIP</strong> formats</li>
<li>Go2rtc won't stop such a source if it has no clients</li>
<li>You can push data only to existing stream (create stream with empty source in config)</li>
<li>You can push multiple incoming sources to same stream</li>
<li>You can push data to non empty stream, so it will have additional codecs inside</li>
</ul>
<p><strong>Examples</strong></p>
<ul>
<li>RTSP with any codec <pre><code class="language-yaml">ffmpeg -re -i BigBuckBunny.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://localhost:8554/camera1
</code></pre> </li>
<li>HTTP-MJPEG with MJPEG codec <pre><code class="language-yaml">ffmpeg -re -i BigBuckBunny.mp4 -c mjpeg -f mpjpeg http://localhost:1984/api/stream.mjpeg?dst=camera1
</code></pre> </li>
<li>HTTP-FLV with H264, AAC codecs <pre><code class="language-yaml">ffmpeg -re -i BigBuckBunny.mp4 -c copy -f flv http://localhost:1984/api/stream.flv?dst=camera1
</code></pre> </li>
<li>MPEG-TS with H264 codec <pre><code class="language-yaml">ffmpeg -re -i BigBuckBunny.mp4 -c copy -f mpegts http://localhost:1984/api/stream.ts?dst=camera1
</code></pre> </li>
</ul>
<h4>Incoming: Browser</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>You can turn the browser of any PC or mobile into an IP-camera with support video and two way audio. Or even broadcast your PC screen:</p>
<ol>
<li>Create empty stream in the <code>go2rtc.yaml</code></li>
<li>Go to go2rtc WebUI</li>
<li>Open <code>links</code> page for you stream</li>
<li>Select <code>camera+microphone</code> or <code>display+speaker</code> option</li>
<li>Open <code>webrtc</code> local page (your go2rtc <strong>should work over HTTPS!</strong>) or <code>share link</code> via <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webtorrent">WebTorrent</a> technology (work over HTTPS by default)</li>
</ol>
<h4>Incoming: WebRTC/WHIP</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>You can use <strong>OBS Studio</strong> or any other broadcast software with <a href="https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html">WHIP</a> protocol support. This standard has not yet been approved. But you can download OBS Studio <a href="https://github.com/obsproject/obs-studio/actions/runs/3969201209">dev version</a>:</p>
<ul>
<li>Settings > Stream > Service: WHIP > <a href="http://192.168.1.123:1984/api/webrtc?dst=camera1">http://192.168.1.123:1984/api/webrtc?dst=camera1</a></li>
</ul>
<h4>Stream to camera</h4>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>go2rtc support play audio files (ex. music or <a href="https://www.home-assistant.io/integrations/#text-to-speech">TTS</a>) and live streams (ex. radio) on cameras with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#two-way-audio">two way audio</a> support (RTSP/ONVIF cameras, TP-Link Tapo, Hikvision ISAPI, Roborock vacuums, any Browser).</p>
<p>API example:</p>
<pre><code>POST http://localhost:1984/api/streams?dst=camera1&src=ffmpeg:http://example.com/song.mp3#audio=pcma#input=file
</code></pre>
<ul>
<li>you can stream: local files, web files, live streams or any format, supported by FFmpeg</li>
<li>you should use <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">ffmpeg source</a> for transcoding audio to codec, that your camera supports</li>
<li>you can check camera codecs on the go2rtc WebUI info page when the stream is active</li>
<li>some cameras support only low quality <code>PCMA/8000</code> codec (ex. <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-tapo">Tapo</a>)</li>
<li>it is recommended to choose higher quality formats if your camera supports them (ex. <code>PCMA/48000</code> for some Dahua cameras)</li>
<li>if you play files over http-link, you need to add <code>#input=file</code> params for transcoding, so file will be transcoded and played in real time</li>
<li>if you play live streams, you should skip <code>#input</code> param, because it is already in real time</li>
<li>you can stop active playback by calling the API with the empty <code>src</code> parameter</li>
<li>you will see one active producer and one active consumer in go2rtc WebUI info page during streaming</li>
</ul>
<h3>Publish stream</h3>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.8.0">New in v1.8.0</a></em></p>
<p>You can publish any stream to streaming services (YouTube, Telegram, etc.) via RTMP/RTMPS. Important:</p>
<ul>
<li>Supported codecs: H264 for video and AAC for audio</li>
<li>AAC audio is required for YouTube, videos without audio will not work</li>
<li>You don't need to enable <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtmp">RTMP module</a> listening for this task</li>
</ul>
<p>You can use API:</p>
<pre><code>POST http://localhost:1984/api/streams?src=camera1&dst=rtmps://...
</code></pre>
<p>Or config file:</p>
<pre><code class="language-yaml">publish:
# publish stream "video_audio_transcode" to Telegram
video_audio_transcode:
- rtmps://xxx-x.rtmp.t.me/s/xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxx
# publish stream "audio_transcode" to Telegram and YouTube
audio_transcode:
- rtmps://xxx-x.rtmp.t.me/s/xxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxx
- rtmp://xxx.rtmp.youtube.com/live2/xxxx-xxxx-xxxx-xxxx-xxxx
streams:
video_audio_transcode:
- ffmpeg:rtsp://user:pass@192.168.1.123/stream1#video=h264#hardware#audio=aac
audio_transcode:
- ffmpeg:rtsp://user:pass@192.168.1.123/stream1#video=copy#audio=aac
</code></pre>
<ul>
<li><strong>Telegram Desktop App</strong> > Any public or private channel or group (where you admin) > Live stream > Start with... > Start streaming.</li>
<li><strong>YouTube</strong> > Create > Go live > Stream latency: Ultra low-latency > Copy: Stream URL + Stream key.</li>
</ul>
<h3>Module: API</h3>
<p>The HTTP API is the main part for interacting with the application. Default address: <code>http://localhost:1984/</code>.</p>
<p><strong>Important!</strong> go2rtc passes requests from localhost and from unix socket without HTTP authorisation, even if you have it configured! It is your responsibility to set up secure external access to API. If not properly configured, an attacker can gain access to your cameras and even your server.</p>
<p><a href="https://github.com/AlexxIT/go2rtc/tree/master/api">API description</a>.</p>
<p><strong>Module config</strong></p>
<ul>
<li>you can disable HTTP API with <code>listen: ""</code> and use, for example, only RTSP client/server protocol</li>
<li>you can enable HTTP API only on localhost with <code>listen: "127.0.0.1:1984"</code> setting</li>
<li>you can change API <code>base_path</code> and host go2rtc on your main app webserver suburl</li>
<li>all files from <code>static_dir</code> hosted on root path: <code>/</code></li>
<li>you can use raw TLS cert/key content or path to files</li>
</ul>
<pre><code class="language-yaml">api:
listen: ":1984" # default ":1984", HTTP API port ("" - disabled)
username: "admin" # default "", Basic auth for WebUI
password: "pass" # default "", Basic auth for WebUI
base_path: "/rtc" # default "", API prefix for serve on suburl (/api => /rtc/api)
static_dir: "www" # default "", folder for static files (custom web interface)
origin: "*" # default "", allow CORS requests (only * supported)
tls_listen: ":443" # default "", enable HTTPS server
tls_cert: | # default "", PEM-encoded fullchain certificate for HTTPS
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
tls_key: | # default "", PEM-encoded private key for HTTPS
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
unix_listen: "/tmp/go2rtc.sock" # default "", unix socket listener for API
</code></pre>
<p><strong>PS:</strong></p>
<ul>
<li>MJPEG over WebSocket plays better than native MJPEG because Chrome <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=527446">bug</a></li>
<li>MP4 over WebSocket was created only for Apple iOS because it doesn't support MSE and native MP4</li>
</ul>
<h3>Module: RTSP</h3>
<p>You can get any stream as RTSP-stream: <code>rtsp://192.168.1.123:8554/{stream_name}</code></p>
<p>You can enable external password protection for your RTSP streams. Password protection always disabled for localhost calls (ex. FFmpeg or Hass on same server).</p>
<pre><code class="language-yaml">rtsp:
listen: ":8554" # RTSP Server TCP port, default - 8554
username: "admin" # optional, default - disabled
password: "pass" # optional, default - disabled
default_query: "video&audio" # optional, default codecs filters
</code></pre>
<p>By default go2rtc provide RTSP-stream with only one first video and only one first audio. You can change it with the <code>default_query</code> setting:</p>
<ul>
<li><code>default_query: "mp4"</code> - MP4 compatible codecs (H264, H265, AAC)</li>
<li><code>default_query: "video=all&audio=all"</code> - all tracks from all source (not all players can handle this)</li>
<li><code>default_query: "video=h264,h265"</code> - only one video track (H264 or H265)</li>
<li><code>default_query: "video&audio=all"</code> - only one first any video and all audio as separate tracks</li>
</ul>
<p>Read more about <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-filters">codecs filters</a>.</p>
<h3>Module: RTMP</h3>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.8.0">New in v1.8.0</a></em></p>
<p>You can get any stream as RTMP-stream: <code>rtmp://192.168.1.123/{stream_name}</code>. Only H264/AAC codecs supported right now.</p>
<p><a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#incoming-sources">Incoming stream</a> in RTMP-format tested only with <a href="https://obsproject.com/">OBS Studio</a> and Dahua camera. Different FFmpeg versions has differnt problems with this format.</p>
<pre><code class="language-yaml">rtmp:
listen: ":1935" # by default - disabled!
</code></pre>
<h3>Module: WebRTC</h3>
<p>In most cases <a href="https://en.wikipedia.org/wiki/WebRTC">WebRTC</a> uses direct peer-to-peer connection from your browser to go2rtc and sends media data via UDP. It <strong>can't pass</strong> media data through your Nginx or Cloudflare or <a href="https://www.nabucasa.com/">Nabu Casa</a> HTTP TCP connection! It can automatically detects your external IP via public <a href="https://en.wikipedia.org/wiki/STUN">STUN</a> server. It can establish a external direct connection via <a href="https://en.wikipedia.org/wiki/UDP_hole_punching">UDP hole punching</a> technology even if you not open your server to the World.</p>
<p>But about 10-20% of users may need to configure additional settings for external access if <strong>mobile phone</strong> or <strong>go2rtc server</strong> behing <a href="https://tomchen.github.io/symmetric-nat-test/">Symmetric NAT</a>.</p>
<ul>
<li>by default, WebRTC uses both TCP and UDP on port 8555 for connections</li>
<li>you can use this port for external access</li>
<li>you can change the port in YAML config:</li>
</ul>
<pre><code class="language-yaml">webrtc:
listen: ":8555" # address of your local server and port (TCP/UDP)
</code></pre>
<p><strong>Static public IP</strong></p>
<ul>
<li>forward the port 8555 on your router (you can use same 8555 port or any other as external port)</li>
<li>add your external IP-address and external port to YAML config</li>
</ul>
<pre><code class="language-yaml">webrtc:
candidates:
- 216.58.210.174:8555 # if you have static public IP-address
</code></pre>
<p><strong>Dynamic public IP</strong></p>
<ul>
<li>forward the port 8555 on your router (you can use same 8555 port or any other as the external port)</li>
<li>add <code>stun</code> word and external port to YAML config
<ul>
<li>go2rtc automatically detects your external address with STUN-server</li>
</ul> </li>
</ul>
<pre><code class="language-yaml">webrtc:
candidates:
- stun:8555 # if you have dynamic public IP-address
</code></pre>
<p><strong>Private IP</strong></p>
<ul>
<li>setup integration with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-ngrok">ngrok service</a></li>
</ul>
<pre><code class="language-yaml">ngrok:
command: ...
</code></pre>
<p><strong>Hard tech way 1. Own TCP-tunnel</strong></p>
<p>If you have personal <a href="https://en.wikipedia.org/wiki/Virtual_private_server">VPS</a>, you can create TCP-tunnel and setup in the same way as "Static public IP". But use your VPS IP-address in YAML config.</p>
<p><strong>Hard tech way 2. Using TURN-server</strong></p>
<p>If you have personal <a href="https://en.wikipedia.org/wiki/Virtual_private_server">VPS</a>, you can install TURN server (e.g. <a href="https://github.com/coturn/coturn">coturn</a>, config <a href="https://github.com/AlexxIT/WebRTC/wiki/Coturn-Example">example</a>).</p>
<pre><code class="language-yaml">webrtc:
ice_servers:
- urls: [stun:stun.l.google.com:19302]
- urls: [turn:123.123.123.123:3478]
username: your_user
credential: your_pass
</code></pre>
<h3>Module: HomeKit</h3>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.7.0">New in v1.7.0</a></em></p>
<p>HomeKit module can work in two modes:</p>
<ul>
<li>export any H264 camera to Apple HomeKit</li>
<li>transparent proxy any Apple HomeKit camera (Aqara, Eve, Eufy, etc.) back to Apple HomeKit, so you will have all camera features in Apple Home and also will have RTSP/WebRTC/MP4/etc. from your HomeKit camera</li>
</ul>
<p><strong>Important</strong></p>
<ul>
<li>HomeKit cameras supports only H264 video and OPUS audio</li>
</ul>
<p><strong>Minimal config</strong></p>
<pre><code class="language-yaml">streams:
dahua1: rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0
homekit:
dahua1: # same stream ID from streams list, default PIN - 19550224
</code></pre>
<p><strong>Full config</strong></p>
<pre><code class="language-yaml">streams:
dahua1:
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0
- ffmpeg:dahua1#video=h264#hardware # if your camera doesn't support H264, important for HomeKit
- ffmpeg:dahua1#audio=opus # only OPUS audio supported by HomeKit
homekit:
dahua1: # same stream ID from streams list
pin: 12345678 # custom PIN, default: 19550224
name: Dahua camera # custom camera name, default: generated from stream ID
device_id: dahua1 # custom ID, default: generated from stream ID
device_private: dahua1 # custom key, default: generated from stream ID
</code></pre>
<p><strong>Proxy HomeKit camera</strong></p>
<ul>
<li>Video stream from HomeKit camera to Apple device (iPhone, AppleTV) will be transmitted directly</li>
<li>Video stream from HomeKit camera to RTSP/WebRTC/MP4/etc. will be transmitted via go2rtc</li>
</ul>
<pre><code class="language-yaml">streams:
aqara1:
- homekit://...
- ffmpeg:aqara1#audio=aac#audio=opus # optional audio transcoding
homekit:
aqara1: # same stream ID from streams list
</code></pre>
<h3>Module: WebTorrent</h3>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.3.0">New in v1.3.0</a></em></p>
<p>This module support:</p>
<ul>
<li>Share any local stream via <a href="https://webtorrent.io/">WebTorrent</a> technology</li>
<li>Get any <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#incoming-browser">incoming stream</a> from PC or mobile via <a href="https://webtorrent.io/">WebTorrent</a> technology</li>
<li>Get any remote <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-webtorrent">go2rtc source</a> via <a href="https://webtorrent.io/">WebTorrent</a> technology</li>
</ul>
<p>Securely and free. You do not need to open a public access to the go2rtc server. But in some cases (Symmetric NAT) you may need to set up external access to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">WebRTC module</a>.</p>
<p>To generate sharing link or incoming link - goto go2rtc WebUI (stream links page). This link is <strong>temporary</strong> and will stop working after go2rtc is restarted!</p>
<p>You can create permanent external links in go2rtc config:</p>
<pre><code class="language-yaml">webtorrent:
shares:
super-secret-share: # share name, should be unique among all go2rtc users!
pwd: super-secret-password
src: rtsp-dahua1 # stream name from streams section
</code></pre>
<p>Link example: <a href="https://alexxit.github.io/go2rtc/#share=02SNtgjKXY&pwd=wznEQqznxW&media=video+audio">https://alexxit.github.io/go2rtc/#share=02SNtgjKXY&pwd=wznEQqznxW&media=video+audio</a></p>
<p>TODO: article how it works...</p>
<h3>Module: ngrok</h3>
<p>With ngrok integration you can get external access to your streams in situations when you have Internet with private IP-address.</p>
<ul>
<li>ngrok is pre-installed for <strong>Docker</strong> and <strong>Hass Add-on</strong> users</li>
<li>you may need external access for two different things:
<ul>
<li>WebRTC stream, so you need tunnel WebRTC TCP port (ex. 8555)</li>
<li>go2rtc web interface, so you need tunnel API HTTP port (ex. 1984)</li>
</ul> </li>
<li>ngrok support authorization for your web interface</li>
<li>ngrok automatically adds HTTPS to your web interface</li>
</ul>
<p>The ngrok free subscription has the following limitations:</p>
<ul>
<li>You can reserve a free domain for serving the web interface, but the TCP address you get will always be random and change with each restart of the ngrok agent (not a problem for webrtc stream)</li>
<li>You can forward multiple ports from a single agent, but you can only run one ngrok agent on the free plan</li>
</ul>
<p>go2rtc will automatically get your external TCP address (if you enable it in ngrok config) and use it with WebRTC connection (if you enable it in webrtc config).</p>
<p>You need to manually download the <a href="https://ngrok.com/download">ngrok agent app</a> for your OS and register with the <a href="https://ngrok.com/signup">ngrok service</a>.</p>
<p><strong>Tunnel for only WebRTC Stream</strong></p>
<p>You need to add your <a href="https://dashboard.ngrok.com/get-started/your-authtoken">ngrok authtoken</a> and WebRTC TCP port to YAML:</p>
<pre><code class="language-yaml">ngrok:
command: ngrok tcp 8555 --authtoken eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw
</code></pre>
<p><strong>Tunnel for WebRTC and Web interface</strong></p>
<p>You need to create <code>ngrok.yaml</code> config file and add it to go2rtc config:</p>
<pre><code class="language-yaml">ngrok:
command: ngrok start --all --config ngrok.yaml
</code></pre>
<p>ngrok config example:</p>
<pre><code class="language-yaml">version: "2"
authtoken: eW91IHNoYWxsIG5vdCBwYXNzCnlvdSBzaGFsbCBub3QgcGFzcw
tunnels:
api:
addr: 1984 # use the same port as in go2rtc config
proto: http
basic_auth:
- admin:password # you can set login/pass for your web interface
webrtc:
addr: 8555 # use the same port as in go2rtc config
proto: tcp
</code></pre>
<p>See the <a href="https://ngrok.com/docs/agent/config/">ngrok agent documentation</a> for more details on the ngrok configuration file.</p>
<h3>Module: Hass</h3>
<p>The best and easiest way to use go2rtc inside the Home Assistant is to install the custom integration <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-integration">WebRTC Camera</a> and custom lovelace card.</p>
<p>But go2rtc is also compatible and can be used with <a href="https://www.home-assistant.io/integrations/rtsp_to_webrtc/">RTSPtoWebRTC</a> built-in integration.</p>
<p>You have several options on how to add a camera to Home Assistant:</p>
<ol>
<li>Camera RTSP source => <a href="https://www.home-assistant.io/integrations/generic/">Generic Camera</a></li>
<li>Camera <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-streams">any source</a> => <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">go2rtc config</a> => <a href="https://www.home-assistant.io/integrations/generic/">Generic Camera</a>
<ul>
<li>Install any <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#fast-start">go2rtc</a></li>
<li>Add your stream to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">go2rtc config</a></li>
<li>Hass > Settings > Integrations > Add Integration > <a href="https://my.home-assistant.io/redirect/config_flow_start/?domain=onvif">ONVIF</a> > Host: <code>127.0.0.1</code>, Port: <code>1984</code></li>
<li>Hass > Settings > Integrations > Add Integration > <a href="https://my.home-assistant.io/redirect/config_flow_start/?domain=generic">Generic Camera</a> > Stream Source URL: <code>rtsp://127.0.0.1:8554/camera1</code> (change to your stream name, leave everything else as is)</li>
</ul> </li>
</ol>
<p>You have several options on how to watch the stream from the cameras in Home Assistant:</p>
<ol>
<li><code>Camera Entity</code> => <code>Picture Entity Card</code> => Technology <code>HLS</code>, codecs: <code>H264/H265/AAC</code>, poor latency.</li>
<li><code>Camera Entity</code> => <a href="https://www.home-assistant.io/integrations/rtsp_to_webrtc/">RTSPtoWebRTC</a> => <code>Picture Entity Card</code> => Technology <code>WebRTC</code>, codecs: <code>H264/PCMU/PCMA/OPUS</code>, best latency.
<ul>
<li>Install any <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#fast-start">go2rtc</a></li>
<li>Hass > Settings > Integrations > Add Integration > <a href="https://my.home-assistant.io/redirect/config_flow_start/?domain=rtsp_to_webrtc">RTSPtoWebRTC</a> > <code>http://127.0.0.1:1984/</code></li>
<li>RTSPtoWebRTC > Configure > STUN server: <code>stun.l.google.com:19302</code></li>
<li>Use Picture Entity or Picture Glance lovelace card</li>
</ul> </li>
<li><code>Camera Entity</code> or <code>Camera URL</code> => <a href="https://github.com/AlexxIT/WebRTC">WebRTC Camera</a> => Technology: <code>WebRTC/MSE/MP4/MJPEG</code>, codecs: <code>H264/H265/AAC/PCMU/PCMA/OPUS</code>, best latency, best compatibility.
<ul>
<li>Install and add <a href="https://github.com/AlexxIT/WebRTC">WebRTC Camera</a> custom integration</li>
<li>Use WebRTC Camera custom lovelace card</li>
</ul> </li>
</ol>
<p>You can add camera <code>entity_id</code> to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">go2rtc config</a> if you need transcoding:</p>
<pre><code class="language-yaml">streams:
"camera.hall": ffmpeg:{input}#video=copy#audio=opus
</code></pre>
<p><strong>PS.</strong> Default Home Assistant lovelace cards don't support 2-way audio. You can use 2-way audio from <a href="https://my.home-assistant.io/redirect/supervisor_addon/?addon=a889bffc_go2rtc&repository_url=https%3A%2F%2Fgithub.com%2FAlexxIT%2Fhassio-addons">Add-on Web UI</a>. But you need use HTTPS to access the microphone. This is a browser restriction and cannot be avoided.</p>
<p><strong>PS.</strong> There is also another nice card with go2rtc support - <a href="https://github.com/dermotduffy/frigate-hass-card">Frigate Lovelace Card</a>.</p>
<h3>Module: MP4</h3>
<p>Provides several features:</p>
<ol>
<li>MSE stream (fMP4 over WebSocket)</li>
<li>Camera snapshots in MP4 format (single frame), can be sent to <a href="https://github.com/AlexxIT/go2rtc/wiki/Snapshot-to-Telegram">Telegram</a></li>
<li>HTTP progressive streaming (MP4 file stream) - bad format for streaming because of high start delay. This format doesn't work in all Safari browsers, but go2rtc will automatically redirect it to HLS/fMP4 it this case.</li>
</ol>
<p>API examples:</p>
<ul>
<li>MP4 snapshot: <code>http://192.168.1.123:1984/api/frame.mp4?src=camera1</code> (H264, H265)</li>
<li>MP4 stream: <code>http://192.168.1.123:1984/api/stream.mp4?src=camera1</code> (H264, H265, AAC)</li>
<li>MP4 file: <code>http://192.168.1.123:1984/api/stream.mp4?src=camera1</code> (H264, H265*, AAC, OPUS, MP3, PCMA, PCMU, PCM)
<ul>
<li>You can use <code>mp4</code>, <code>mp4=flac</code> and <code>mp4=all</code> param for codec filters</li>
<li>You can use <code>duration</code> param in seconds (ex. <code>duration=15</code>)</li>
<li>You can use <code>filename</code> param (ex. <code>filename=record.mp4</code>)</li>
<li>You can use <code>rotate</code> param with <code>90</code>, <code>180</code> or <code>270</code> values</li>
<li>You can use <code>scale</code> param with positive integer values (ex. <code>scale=4:3</code>)</li>
</ul> </li>
</ul>
<p>Read more about <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-filters">codecs filters</a>.</p>
<p><strong>PS.</strong> Rotate and scale params don't use transcoding and change video using metadata.</p>
<h3>Module: HLS</h3>
<p><em><a href="https://github.com/AlexxIT/go2rtc/releases/tag/v1.1.0">New in v1.1.0</a></em></p>
<p><a href="https://en.wikipedia.org/wiki/HTTP_Live_Streaming">HLS</a> is the worst technology for real-time streaming. It can only be useful on devices that do not support more modern technology, like <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">WebRTC</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">MSE/MP4</a>.</p>
<p>The go2rtc implementation differs from the standards and may not work with all players.</p>
<p>API examples:</p>
<ul>
<li>HLS/TS stream: <code>http://192.168.1.123:1984/api/stream.m3u8?src=camera1</code> (H264)</li>
<li>HLS/fMP4 stream: <code>http://192.168.1.123:1984/api/stream.m3u8?src=camera1&mp4</code> (H264, H265, AAC)</li>
</ul>
<p>Read more about <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-filters">codecs filters</a>.</p>
<h3>Module: MJPEG</h3>
<p><strong>Important.</strong> For stream as MJPEG format, your source MUST contain the MJPEG codec. If your stream has a MJPEG codec - you can receive <strong>MJPEG stream</strong> or <strong>JPEG snapshots</strong> via API.</p>
<p>You can receive an MJPEG stream in several ways:</p>
<ul>
<li>some cameras support MJPEG codec inside <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-rtsp">RTSP stream</a> (ex. second stream for Dahua cameras)</li>
<li>some cameras has HTTP link with <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">MJPEG stream</a></li>
<li>some cameras has HTTP link with snapshots - go2rtc can convert them to <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-http">MJPEG stream</a></li>
<li>you can convert H264/H265 stream from your camera via <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg integraion</a></li>
</ul>
<p>With this example, your stream will have both H264 and MJPEG codecs:</p>
<pre><code class="language-yaml">streams:
camera1:
- rtsp://rtsp:12345678@192.168.1.123/av_stream/ch0
- ffmpeg:camera1#video=mjpeg
</code></pre>
<p>API examples:</p>
<ul>
<li>MJPEG stream: <code>http://192.168.1.123:1984/api/stream.mjpeg?src=camera1</code></li>
<li>JPEG snapshots: <code>http://192.168.1.123:1984/api/frame.jpeg?src=camera1</code>
<ul>
<li>You can use <code>width</code>/<code>w</code> and/or <code>height</code>/<code>h</code> params</li>
<li>You can use <code>rotate</code> param with <code>90</code>, <code>180</code>, <code>270</code> or <code>-90</code> values</li>
<li>You can use <code>hardware</code>/<code>hw</code> param <a href="https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration">read more</a></li>
</ul> </li>
</ul>
<p><strong>PS.</strong> This module also supports streaming to the server console (terminal) in the <strong>animated ASCII art</strong> format (<a href="https://github.com/AlexxIT/go2rtc/raw/master/internal/mjpeg/README.md">read more</a>):</p>
<p><a href="https://www.youtube.com/watch?v=sHj_3h_sX7M"><img src="https://img.youtube.com/vi/sHj_3h_sX7M/mqdefault.jpg" alt=""></a></p>
<h3>Module: Log</h3>
<p>You can set different log levels for different modules.</p>
<pre><code class="language-yaml">log:
level: info # default level
api: trace
exec: debug
ngrok: info
rtsp: warn
streams: error
webrtc: fatal
</code></pre>
<h2>Security</h2>
<p>By default <code>go2rtc</code> starts the Web interface on port <code>1984</code> and RTSP on port <code>8554</code>, as well as use port <code>8555</code> for WebRTC connections. The three ports are accessible from your local network. So anyone on your local network can watch video from your cameras without authorization. The same rule applies to the Home Assistant Add-on.</p>
<p>This is not a problem if you trust your local network as much as I do. But you can change this behaviour with a <code>go2rtc.yaml</code> config:</p>
<pre><code class="language-yaml">api:
listen: "127.0.0.1:1984" # localhost
rtsp:
listen: "127.0.0.1:8554" # localhost
webrtc:
listen: ":8555" # external TCP/UDP port
</code></pre>
<ul>
<li>local access to RTSP is not a problem for <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg</a> integration, because it runs locally on your server</li>
<li>local access to API is not a problem for <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#go2rtc-home-assistant-add-on">Home Assistant Add-on</a>, because Hass runs locally on same server and Add-on Web UI protected with Hass authorization (<a href="https://www.home-assistant.io/blog/2019/04/15/hassio-ingress/">Ingress feature</a>)</li>
<li>external access to WebRTC TCP port is not a problem, because it used only for transmit encrypted media data
<ul>
<li>anyway you need to open this port to your local network and to the Internet in order for WebRTC to work</li>
</ul> </li>
</ul>
<p>If you need Web interface protection without Home Assistant Add-on - you need to use reverse proxy, like <a href="https://nginx.org/">Nginx</a>, <a href="https://caddyserver.com/">Caddy</a>, <a href="https://ngrok.com/">ngrok</a>, etc.</p>
<p>PS. Additionally WebRTC will try to use the 8555 UDP port for transmit encrypted media. It works without problems on the local network. And sometimes also works for external access, even if you haven't opened this port on your router (<a href="https://en.wikipedia.org/wiki/UDP_hole_punching">read more</a>). But for stable external WebRTC access, you need to open the 8555 port on your router for both TCP and UDP.</p>
<h2>Codecs filters</h2>
<p>go2rtc can automatically detect which codecs your device supports for <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-webrtc">WebRTC</a> and <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">MSE</a> technologies.</p>
<p>But it cannot be done for <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-rtsp">RTSP</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-mp4">HTTP progressive streaming</a>, <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hls">HLS</a> technologies. You can manually add a codec filter when you create a link to a stream. The filters work the same for all three technologies. Filters do not create a new codec. They only select the suitable codec from existing sources. You can add new codecs to the stream using the <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg transcoding</a>.</p>
<p>Without filters:</p>
<ul>
<li>RTSP will provide only the first video and only the first audio (any codec)</li>
<li>MP4 will include only compatible codecs (H264, H265, AAC)</li>
<li>HLS will output in the legacy TS format (H264 without audio)</li>
</ul>
<p>Some examples:</p>
<ul>
<li><code>rtsp://192.168.1.123:8554/camera1?mp4</code> - useful for recording as MP4 files (e.g. Hass or Frigate)</li>
<li><code>rtsp://192.168.1.123:8554/camera1?video=h264,h265&audio=aac</code> - full version of the filter above</li>
<li><code>rtsp://192.168.1.123:8554/camera1?video=h264&audio=aac&audio=opus</code> - H264 video codec and two separate audio tracks</li>
<li><code>rtsp://192.168.1.123:8554/camera1?video&audio=all</code> - any video codec and all audio codecs as separate tracks</li>
<li><code>http://192.168.1.123:1984/api/stream.m3u8?src=camera1&mp4</code> - HLS stream with MP4 compatible codecs (HLS/fMP4)</li>
<li><code>http://192.168.1.123:1984/api/stream.m3u8?src=camera1&mp4=flac</code> - HLS stream with PCMA/PCMU/PCM audio support (HLS/fMP4), won't work on old devices</li>
<li><code>http://192.168.1.123:1984/api/stream.mp4?src=camera1&mp4=flac</code> - MP4 file with PCMA/PCMU/PCM audio support, won't work on old devices (ex. iOS 12)</li>
<li><code>http://192.168.1.123:1984/api/stream.mp4?src=camera1&mp4=all</code> - MP4 file with non standard audio codecs, won't work on some players</li>
</ul>
<h2>Codecs madness</h2>
<p><code>AVC/H.264</code> video can be played almost anywhere. But <code>HEVC/H.265</code> has a lot of limitations in supporting with different devices and browsers. It's all about patents and money, you can't do anything about it.</p>
<table>
<thead>
<tr>
<th>Device</th>
<th>WebRTC</th>
<th>MSE</th>
<th>HTTP*</th>
<th>HLS</th>
</tr>
</thead>
<tbody>
<tr>
<td><em>latency</em></td>
<td>best</td>
<td>medium</td>
<td>bad</td>
<td>bad</td>
</tr>
<tr>
<td>- Desktop Chrome 107+ <br> - Desktop Edge <br> - Android Chrome 107+</td>
<td>H264 <br> PCMU, PCMA <br> OPUS</td>
<td>H264, H265* <br> AAC, FLAC* <br> OPUS</td>
<td>H264, H265* <br> AAC, FLAC* <br> OPUS, MP3</td>
<td>no</td>
</tr>
<tr>
<td>Desktop Firefox</td>
<td>H264 <br> PCMU, PCMA <br> OPUS</td>
<td>H264 <br> AAC, FLAC* <br> OPUS</td>
<td>H264 <br> AAC, FLAC* <br> OPUS</td>
<td>no</td>
</tr>
<tr>
<td>- Desktop Safari 14+ <br> - iPad Safari 14+ <br> - iPhone Safari 17.1+</td>
<td>H264, H265* <br> PCMU, PCMA <br> OPUS</td>
<td>H264, H265 <br> AAC, FLAC*</td>
<td><strong>no!</strong></td>
<td>H264, H265 <br> AAC, FLAC*</td>
</tr>
<tr>
<td>iPhone Safari 14+</td>
<td>H264, H265* <br> PCMU, PCMA <br> OPUS</td>
<td><strong>no!</strong></td>
<td><strong>no!</strong></td>
<td>H264, H265 <br> AAC, FLAC*</td>
</tr>
<tr>
<td>macOS <a href="https://apps.apple.com/app/home-assistant/id1099568401">Hass App</a></td>
<td>no</td>
<td>no</td>
<td>no</td>
<td>H264, H265 <br> AAC, FLAC*</td>
</tr>
</tbody>
</table>
<p><code>HTTP*</code> - HTTP Progressive Streaming, not related with <a href="https://en.wikipedia.org/wiki/Progressive_download">Progressive download</a>, because the file has no size and no end</p>
<ul>
<li>Chrome H265: <a href="https://chromestatus.com/feature/5186511939567616">read this</a> and <a href="https://github.com/StaZhu/enable-chromium-hevc-hardware-decoding">read this</a></li>
<li>Edge H265: <a href="https://www.reddit.com/r/MicrosoftEdge/comments/v9iw8k/enable_hevc_support_in_edge/">read this</a></li>
<li>Desktop Safari H265: Menu > Develop > Experimental > WebRTC H265</li>
<li>iOS Safari H265: Settings > Safari > Advanced > Experimental > WebRTC H265</li>
</ul>
<p><strong>Audio</strong></p>
<ul>
<li>Go2rtc support <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#built-in-transcoding">automatic repack</a> <code>PCMA/PCMU/PCM</code> codecs to <code>FLAC</code> for MSE/MP4/HLS so they will work almost anywhere</li>
<li><strong>WebRTC</strong> audio codecs: <code>PCMU/8000</code>, <code>PCMA/8000</code>, <code>OPUS/48000/2</code></li>
<li><code>OPUS</code> and <code>MP3</code> inside <strong>MP4</strong> is part of the standard, but some players do not support them anyway (especially Apple)</li>
</ul>
<p><strong>Apple devices</strong></p>
<ul>
<li>all Apple devices don't support HTTP progressive streaming</li>
<li>iPhones don't support MSE technology because it competes with the HTTP Live Streaming (HLS) technology, invented by Apple</li>
<li>HLS is the worst technology for <strong>live</strong> streaming, it still exists only because of iPhones</li>
</ul>
<p><strong>Codec names</strong></p>
<ul>
<li>H264 = H.264 = AVC (Advanced Video Coding)</li>
<li>H265 = H.265 = HEVC (High Efficiency Video Coding)</li>
<li>PCMA = G.711 PCM (A-law) = PCM A-law (<code>alaw</code>)</li>
<li>PCMU = G.711 PCM (µ-law) = PCM mu-law (<code>mulaw</code>)</li>
<li>PCM = L16 = PCM signed 16-bit big-endian (<code>s16be</code>)</li>
<li>AAC = MPEG4-GENERIC</li>
<li>MP3 = MPEG-1 Audio Layer III or MPEG-2 Audio Layer III</li>
</ul>
<h2>Built-in transcoding</h2>
<p>There are no plans to embed complex transcoding algorithms inside go2rtc. <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">FFmpeg source</a> does a great job with this. Including <a href="https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration">hardware acceleration</a> support.</p>
<p>But go2rtc has some simple algorithms. They are turned on automatically, you do not need to set them up additionally.</p>
<p><strong>PCM for MSE/MP4/HLS</strong></p>
<p>Go2rtc can pack <code>PCMA</code>, <code>PCMU</code> and <code>PCM</code> codecs into an MP4 container so that they work in all browsers and all built-in players on modern devices. Including Apple QuickTime:</p>
<pre><code>PCMA/PCMU => PCM => FLAC => MSE/MP4/HLS
</code></pre>
<p><strong>Resample PCMA/PCMU for WebRTC</strong></p>
<p>By default WebRTC support only <code>PCMA/8000</code> and <code>PCMU/8000</code>. But go2rtc can automatically resample PCMA and PCMU codec with with a different sample rate. Also go2rtc can transcode <code>PCM</code> codec to <code>PCMA/8000</code>, so WebRTC can play it:</p>
<pre><code>PCM/xxx => PCMA/8000 => WebRTC
PCMA/xxx => PCMA/8000 => WebRTC
PCMU/xxx => PCMU/8000 => WebRTC
</code></pre>
<p><strong>Important</strong></p>
<ul>
<li>FLAC codec not supported in a RTSP stream. If you using Frigate or Hass for recording MP4 files with PCMA/PCMU/PCM audio - you should setup transcoding to AAC codec.</li>
<li>PCMA and PCMU are VERY low quality codecs. Them support only 256! different sounds. Use them only when you have no other options.</li>
</ul>
<h2>Codecs negotiation</h2>
<p>For example, you want to watch RTSP-stream from <a href="https://www.dahuasecurity.com/fr/products/All-Products/Network-Cameras/Wireless-Series/Wi-Fi-Series/4MP/IPC-K42">Dahua IPC-K42</a> camera in your Chrome browser.</p>
<ul>
<li>this camera support 2-way audio standard <strong>ONVIF Profile T</strong></li>
<li>this camera support codecs <strong>H264, H265</strong> for send video, and you select <code>H264</code> in camera settings</li>
<li>this camera support codecs <strong>AAC, PCMU, PCMA</strong> for send audio (from mic), and you select <code>AAC/16000</code> in camera settings</li>
<li>this camera support codecs <strong>AAC, PCMU, PCMA</strong> for receive audio (to speaker), you don't need to select them</li>
<li>your browser support codecs <strong>H264, VP8, VP9, AV1</strong> for receive video, you don't need to select them</li>
<li>your browser support codecs <strong>OPUS, PCMU, PCMA</strong> for send and receive audio, you don't need to select them</li>
<li>you can't get camera audio directly, because its audio codecs doesn't match with your browser codecs
<ul>
<li>so you decide to use transcoding via FFmpeg and add this setting to config YAML file</li>
<li>you have chosen <code>OPUS/48000/2</code> codec, because it is higher quality than the <code>PCMU/8000</code> or <code>PCMA/8000</code></li>
</ul> </li>
</ul>
<p>Now you have stream with two sources - <strong>RTSP and FFmpeg</strong>:</p>
<pre><code class="language-yaml">streams:
dahua:
- rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif
- ffmpeg:rtsp://admin:password@192.168.1.123/cam/realmonitor?channel=1&subtype=0#audio=opus
</code></pre>
<p><strong>go2rtc</strong> automatically match codecs for you browser and all your stream sources. This called <strong>multi-source 2-way codecs negotiation</strong>. And this is one of the main features of this app.</p>
<p><img src="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/assets/codecs.svg?sanitize=true" alt=""></p>
<p><strong>PS.</strong> You can select <code>PCMU</code> or <code>PCMA</code> codec in camera setting and don't use transcoding at all. Or you can select <code>AAC</code> codec for main stream and <code>PCMU</code> codec for second stream and add both RTSP to YAML config, this also will work fine.</p>
<h2>Projects using go2rtc</h2>
<ul>
<li><a href="https://frigate.video/">Frigate 12+</a> - open source NVR built around real-time AI object detection</li>
<li><a href="https://github.com/dermotduffy/frigate-hass-card">Frigate Lovelace Card</a> - custom card for Home Assistant</li>
<li><a href="https://github.com/OpenIPC/firmware/tree/master/general/package/go2rtc">OpenIPC</a> - Alternative IP Camera firmware from an open community</li>
<li><a href="https://github.com/gtxaspec/wz_mini_hacks">wz_mini_hacks</a> - Custom firmware for Wyze cameras</li>
<li><a href="https://github.com/oischinger/eufyp2pstream">EufyP2PStream</a> - A small project that provides a Video/Audio Stream from Eufy cameras that don't directly support RTSP</li>
<li><a href="https://github.com/bropat/ioBroker.eusec">ioBroker.euSec</a> - <a href="https://www.iobroker.net/">ioBroker</a> adapter for control Eufy security devices</li>
<li><a href="https://github.com/Anonym-tsk/MMM-go2rtc">MMM-go2rtc</a> - MagicMirror² Module</li>
<li><a href="https://github.com/tsightler/ring-mqtt">ring-mqtt</a> - Ring devices to MQTT Bridge</li>
</ul>
<p><strong>Distributions</strong></p>
<ul>
<li><a href="https://pkgs.alpinelinux.org/packages?name=go2rtc">Alpine Linux</a></li>
<li><a href="https://linux-packages.com/aur/package/go2rtc">Arch User Repository</a></li>
<li><a href="https://github.com/inode64/inode64-overlay/tree/main/media-video/go2rtc">Gentoo</a></li>
<li><a href="https://search.nixos.org/packages?query=go2rtc">NixOS</a></li>
<li><a href="https://tteck.github.io/Proxmox/">Proxmox Helper Scripts</a></li>
<li><a href="https://www.myqnap.org/product/go2rtc/">QNAP</a></li>
<li><a href="https://synocommunity.com/package/go2rtc">Synology NAS</a></li>
<li><a href="https://unraid.net/community/apps?q=go2rtc">Unraid</a></li>
</ul>
<h2>Cameras experience</h2>
<ul>
<li><a href="https://www.dahuasecurity.com/">Dahua</a> - reference implementation streaming protocols, a lot of settings, high stream quality, multiple streaming clients</li>
<li><a href="https://www.ezviz.com/">EZVIZ</a> - awful RTSP protocol realisation, many bugs in SDP</li>
<li><a href="https://www.hikvision.com/">Hikvision</a> - a lot of proprietary streaming technologies</li>
<li><a href="https://reolink.com/">Reolink</a> - some models has awful unusable RTSP realisation and not best RTMP alternative (I recommend that you contact Reolink support for new firmware), few settings</li>
<li><a href="https://sonoff.tech/">Sonoff</a> - very low stream quality, no settings, not best protocol implementation</li>
<li><a href="https://www.tp-link.com/">TP-Link</a> - few streaming clients, packet loss?</li>
<li>Chinese cheap noname cameras, Wyze Cams, Xiaomi cameras with hacks (usual has <code>/live/ch00_1</code> in RTSP URL) - awful but usable RTSP protocol realisation, low stream quality, few settings, packet loss?</li>
</ul>
<h2>TIPS</h2>
<p><strong>Using apps for low RTSP delay</strong></p>
<ul>
<li><code>ffplay -fflags nobuffer -flags low_delay "rtsp://192.168.1.123:8554/camera1"</code></li>
<li>VLC > Preferences > Input / Codecs > Default Caching Level: Lowest Latency</li>
</ul>
<p><strong>Snapshots to Telegram</strong></p>
<p><a href="https://github.com/AlexxIT/go2rtc/wiki/Snapshot-to-Telegram">read more</a></p>
<h2>FAQ</h2>
<p><strong>Q. What's the difference between go2rtc, WebRTC Camera and RTSPtoWebRTC?</strong></p>
<p><strong>go2rtc</strong> is a new version of the server-side <a href="https://github.com/AlexxIT/WebRTC">WebRTC Camera</a> integration, completely rewritten from scratch, with a number of fixes and a huge number of new features. It is compatible with native Home Assistant <a href="https://www.home-assistant.io/integrations/rtsp_to_webrtc/">RTSPtoWebRTC</a> integration. So you <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#module-hass">can use</a> default lovelace Picture Entity or Picture Glance.</p>
<p><strong>Q. Should I use go2rtc addon or WebRTC Camera integration?</strong></p>
<p><strong>go2rtc</strong> is more than just viewing your stream online with WebRTC/MSE/HLS/etc. You can use it all the time for your various tasks. But every time the Hass is rebooted - all integrations are also rebooted. So your streams may be interrupted if you use them in additional tasks.</p>
<p>Basic users can use <strong>WebRTC Camera</strong> integration. Advanced users can use go2rtc addon or Frigate 12+ addon.</p>
<p><strong>Q. Which RTSP link should I use inside Hass?</strong></p>
<p>You can use direct link to your cameras there (as you always do). <strong>go2rtc</strong> support zero-config feature. You may leave <code>streams</code> config section empty. And your streams will be created on the fly on first start from Hass. And your cameras will have multiple connections. Some from Hass directly and one from <strong>go2rtc</strong>.</p>
<p>Also you can specify your streams in <strong>go2rtc</strong> <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#configuration">config file</a> and use RTSP links to this addon. With additional features: multi-source <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#codecs-negotiation">codecs negotiation</a> or FFmpeg <a href="https://raw.githubusercontent.com/AlexxIT/go2rtc/master/#source-ffmpeg">transcoding</a> for unsupported codecs. Or use them as source for Frigate. And your cameras will have one connection from <strong>go2rtc</strong>. And <strong>go2rtc</strong> will have multiple connection - some from Hass via RTSP protocol, some from your browser via WebRTC/MSE/HLS protocols.</p>
<p>Use any config what you like.</p>
<p><strong>Q. What about lovelace card with support 2-way audio?</strong></p>
<p>At this moment I am focused on improving stability and adding new features to <strong>go2rtc</strong>. Maybe someone could write such a card themselves. It's not difficult, I have <a href="https://github.com/AlexxIT/go2rtc/raw/master/www/webrtc.html">some sketches</a>.</p>
+
+
+ TwiN/gatus
+ 2024-12-01T01:53:48Z
+ tag:github.com,2024-12-01:/TwiN/gatus
+
+ <p>⛑ Automated developer-oriented status page</p><hr><p><a href="https://gatus.io"><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/logo-with-dark-text.png" alt="Gatus"></a></p>
<p><img src="https://github.com/TwiN/gatus/workflows/test/badge.svg?branch=master" alt="test"> <a href="https://goreportcard.com/report/github.com/TwiN/gatus"><img src="https://goreportcard.com/badge/github.com/TwiN/gatus?" alt="Go Report Card"></a> <a href="https://codecov.io/gh/TwiN/gatus"><img src="https://codecov.io/gh/TwiN/gatus/branch/master/graph/badge.svg?sanitize=true" alt="codecov"></a> <a href="https://github.com/TwiN/gatus"><img src="https://img.shields.io/github/go-mod/go-version/TwiN/gatus.svg?sanitize=true" alt="Go version"></a> <a href="https://cloud.docker.com/repository/docker/twinproduction/gatus"><img src="https://img.shields.io/docker/pulls/twinproduction/gatus.svg?sanitize=true" alt="Docker pulls"></a> <a href="https://github.com/TwiN"><img src="https://img.shields.io/github/followers/TwiN?label=Follow&style=social" alt="Follow TwiN"></a></p>
<p>Gatus is a developer-oriented health dashboard that gives you the ability to monitor your services using HTTP, ICMP, TCP, and even DNS queries as well as evaluate the result of said queries by using a list of conditions on values like the status code, the response time, the certificate expiration, the body and many others. The icing on top is that each of these health checks can be paired with alerting via Slack, Teams, PagerDuty, Discord, Twilio and many more.</p>
<p>I personally deploy it in my Kubernetes cluster and let it monitor the status of my core applications: <a href="https://status.twin.sh/">https://status.twin.sh/</a></p>
<p><em>Looking for a managed solution? Check out <a href="https://gatus.io">Gatus.io</a>.</em></p>
<details>
<summary><b>Quick start</b></summary>
<pre><code class="language-console">docker run -p 8080:8080 --name gatus twinproduction/gatus
</code></pre>
<p>You can also use GitHub Container Registry if you prefer:</p>
<pre><code class="language-console">docker run -p 8080:8080 --name gatus ghcr.io/twin/gatus
</code></pre>
<p>For more details, see <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#usage">Usage</a></p>
</details>
<blockquote>
<p>❤ Like this project? Please consider <a href="https://github.com/sponsors/TwiN">sponsoring me</a>.</p>
</blockquote>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/dashboard-dark.png" alt="Gatus dashboard"></p>
<p>Have any feedback or questions? <a href="https://github.com/TwiN/gatus/discussions/new">Create a discussion</a>.</p>
<h2>Table of Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#table-of-contents">Table of Contents</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#why-gatus">Why Gatus?</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#features">Features</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#usage">Usage</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuration">Configuration</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#endpoints">Endpoints</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#external-endpoints">External Endpoints</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#conditions">Conditions</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#placeholders">Placeholders</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#functions">Functions</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#storage">Storage</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#alerting">Alerting</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-discord-alerts">Configuring Discord alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-email-alerts">Configuring Email alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-gitea-alerts">Configuring Gitea alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-github-alerts">Configuring GitHub alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-gitlab-alerts">Configuring GitLab alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-google-chat-alerts">Configuring Google Chat alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-gotify-alerts">Configuring Gotify alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-jetbrains-space-alerts">Configuring JetBrains Space alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-matrix-alerts">Configuring Matrix alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-mattermost-alerts">Configuring Mattermost alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-messagebird-alerts">Configuring Messagebird alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-ntfy-alerts">Configuring Ntfy alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-opsgenie-alerts">Configuring Opsgenie alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-pagerduty-alerts">Configuring PagerDuty alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-pushover-alerts">Configuring Pushover alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-slack-alerts">Configuring Slack alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-teams-alerts-deprecated">Configuring Teams alerts <em>(Deprecated)</em></a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-teams-workflow-alerts">Configuring Teams Workflow alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-telegram-alerts">Configuring Telegram alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-twilio-alerts">Configuring Twilio alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-aws-ses-alerts">Configuring AWS SES alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-custom-alerts">Configuring custom alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-zulip-alerts">Configuring Zulip alerts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#maintenance">Maintenance</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#security">Security</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#basic-authentication">Basic Authentication</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#oidc">OIDC</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#tls-encryption">TLS Encryption</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#metrics">Metrics</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#connectivity">Connectivity</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#remote-instances-experimental">Remote instances (EXPERIMENTAL)</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#deployment">Deployment</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#docker">Docker</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#helm-chart">Helm Chart</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#terraform">Terraform</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#running-the-tests">Running the tests</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#using-in-production">Using in Production</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#faq">FAQ</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#sending-a-graphql-request">Sending a GraphQL request</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#recommended-interval">Recommended interval</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#default-timeouts">Default timeouts</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-a-tcp-endpoint">Monitoring a TCP endpoint</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-a-udp-endpoint">Monitoring a UDP endpoint</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-a-sctp-endpoint">Monitoring a SCTP endpoint</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-a-websocket-endpoint">Monitoring a WebSocket endpoint</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-icmp">Monitoring an endpoint using ICMP</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-dns-queries">Monitoring an endpoint using DNS queries</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-ssh">Monitoring an endpoint using SSH</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-starttls">Monitoring an endpoint using STARTTLS</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-tls">Monitoring an endpoint using TLS</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-domain-expiration">Monitoring domain expiration</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#disable-monitoring-lock">disable-monitoring-lock</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#reloading-configuration-on-the-fly">Reloading configuration on the fly</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#endpoint-groups">Endpoint groups</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#exposing-gatus-on-a-custom-path">Exposing Gatus on a custom path</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#exposing-gatus-on-a-custom-port">Exposing Gatus on a custom port</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-a-startup-delay">Configuring a startup delay</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#keeping-your-configuration-small">Keeping your configuration small</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#proxy-client-configuration">Proxy client configuration</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#how-to-fix-431-request-header-fields-too-large-error">How to fix 431 Request Header Fields Too Large error</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#badges">Badges</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#uptime">Uptime</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#health">Health</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#health-shieldsio">Health (Shields.io)</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#response-time">Response time</a>
<ul>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#how-to-change-the-color-thresholds-of-the-response-time-badge">How to change the color thresholds of the response time badge</a></li>
</ul> </li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#api">API</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#installing-as-binary">Installing as binary</a></li>
<li><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#high-level-design-overview">High level design overview</a></li>
</ul> </li>
</ul>
<h2>Why Gatus?</h2>
<p>Before getting into the specifics, I want to address the most common question:</p>
<blockquote>
<p>Why would I use Gatus when I can just use Prometheus’ Alertmanager, Cloudwatch or even Splunk?</p>
</blockquote>
<p>Neither of these can tell you that there’s a problem if there are no clients actively calling the endpoint. In other words, it's because monitoring metrics mostly rely on existing traffic, which effectively means that unless your clients are already experiencing a problem, you won't be notified.</p>
<p>Gatus, on the other hand, allows you to configure health checks for each of your features, which in turn allows it to monitor these features and potentially alert you before any clients are impacted.</p>
<p>A sign you may want to look into Gatus is by simply asking yourself whether you'd receive an alert if your load balancer was to go down right now. Will any of your existing alerts be triggered? Your metrics won’t report an increase in errors if no traffic makes it to your applications. This puts you in a situation where your clients are the ones that will notify you about the degradation of your services rather than you reassuring them that you're working on fixing the issue before they even know about it.</p>
<h2>Features</h2>
<p>The main features of Gatus are:</p>
<ul>
<li><strong>Highly flexible health check conditions</strong>: While checking the response status may be enough for some use cases, Gatus goes much further and allows you to add conditions on the response time, the response body and even the IP address.</li>
<li><strong>Ability to use Gatus for user acceptance tests</strong>: Thanks to the point above, you can leverage this application to create automated user acceptance tests.</li>
<li><strong>Very easy to configure</strong>: Not only is the configuration designed to be as readable as possible, it's also extremely easy to add a new service or a new endpoint to monitor.</li>
<li><strong>Alerting</strong>: While having a pretty visual dashboard is useful to keep track of the state of your application(s), you probably don't want to stare at it all day. Thus, notifications via Slack, Mattermost, Messagebird, PagerDuty, Twilio, Google chat and Teams are supported out of the box with the ability to configure a custom alerting provider for any needs you might have, whether it be a different provider or a custom application that manages automated rollbacks.</li>
<li><strong>Metrics</strong></li>
<li><strong>Low resource consumption</strong>: As with most Go applications, the resource footprint that this application requires is negligibly small.</li>
<li><strong><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#badges">Badges</a></strong>: <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/uptimes/7d/badge.svg?sanitize=true" alt="Uptime 7d"> <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/response-times/24h/badge.svg?sanitize=true" alt="Response time 24h"></li>
<li><strong>Dark mode</strong></li>
</ul>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/dashboard-conditions.png" alt="Gatus dashboard conditions"></p>
<h2>Usage</h2>
<details>
<summary><b>Quick start</b></summary>
<pre><code class="language-console">docker run -p 8080:8080 --name gatus twinproduction/gatus
</code></pre>
<p>You can also use GitHub Container Registry if you prefer:</p>
<pre><code class="language-console">docker run -p 8080:8080 --name gatus ghcr.io/twin/gatus
</code></pre>
<p>If you want to create your own configuration, see <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#docker">Docker</a> for information on how to mount a configuration file.</p>
</details>
<p>Here's a simple example:</p>
<pre><code class="language-yaml">endpoints:
- name: website # Name of your endpoint, can be anything
url: "https://twin.sh/health"
interval: 5m # Duration to wait between every status check (default: 60s)
conditions:
- "[STATUS] == 200" # Status must be 200
- "[BODY].status == UP" # The json path "$.status" must be equal to UP
- "[RESPONSE_TIME] < 300" # Response time must be under 300ms
- name: make-sure-header-is-rendered
url: "https://example.org/"
interval: 60s
conditions:
- "[STATUS] == 200" # Status must be 200
- "[BODY] == pat(*<h1>Example Domain</h1>*)" # Body must contain the specified header
</code></pre>
<p>This example would look similar to this:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/example.png" alt="Simple example"></p>
<p>By default, the configuration file is expected to be at <code>config/config.yaml</code>.</p>
<p>You can specify a custom path by setting the <code>GATUS_CONFIG_PATH</code> environment variable.</p>
<p>If <code>GATUS_CONFIG_PATH</code> points to a directory, all <code>*.yaml</code> and <code>*.yml</code> files inside said directory and its subdirectories are merged like so:</p>
<ul>
<li>All maps/objects are deep merged (i.e. you could define <code>alerting.slack</code> in one file and <code>alerting.pagerduty</code> in another file)</li>
<li>All slices/arrays are appended (i.e. you can define <code>endpoints</code> in multiple files and each endpoint will be added to the final list of endpoints)</li>
<li>Parameters with a primitive value (e.g. <code>metrics</code>, <code>alerting.slack.webhook-url</code>, etc.) may only be defined once to forcefully avoid any ambiguity
<ul>
<li>To clarify, this also means that you could not define <code>alerting.slack.webhook-url</code> in two files with different values. All files are merged into one before they are processed. This is by design.</li>
</ul> </li>
</ul>
<blockquote>
<p>💡 You can also use environment variables in the configuration file (e.g. <code>$DOMAIN</code>, <code>${DOMAIN}</code>)</p>
<p>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples/docker-compose-postgres-storage/config/config.yaml">examples/docker-compose-postgres-storage/config/config.yaml</a> for an example.</p>
</blockquote>
<p>If you want to test it locally, see <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#docker">Docker</a>.</p>
<h2>Configuration</h2>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>metrics</code></td>
<td align="left">Whether to expose metrics at <code>/metrics</code>.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>storage</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#storage">Storage configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#alerting">Alerting configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>endpoints</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#endpoints">Endpoints configuration</a>.</td>
<td align="left">Required <code>[]</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#external-endpoints">External Endpoints configuration</a>.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>security</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#security">Security configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>disable-monitoring-lock</code></td>
<td align="left">Whether to <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#disable-monitoring-lock">disable the monitoring lock</a>.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>skip-invalid-config-update</code></td>
<td align="left">Whether to ignore invalid configuration update. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#reloading-configuration-on-the-fly">Reloading configuration on the fly</a>.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>web</code></td>
<td align="left">Web configuration.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>web.address</code></td>
<td align="left">Address to listen on.</td>
<td align="left"><code>0.0.0.0</code></td>
</tr>
<tr>
<td align="left"><code>web.port</code></td>
<td align="left">Port to listen on.</td>
<td align="left"><code>8080</code></td>
</tr>
<tr>
<td align="left"><code>web.read-buffer-size</code></td>
<td align="left">Buffer size for reading requests from a connection. Also limit for the maximum header size.</td>
<td align="left"><code>8192</code></td>
</tr>
<tr>
<td align="left"><code>web.tls.certificate-file</code></td>
<td align="left">Optional public certificate file for TLS in PEM format.</td>
<td align="left">``</td>
</tr>
<tr>
<td align="left"><code>web.tls.private-key-file</code></td>
<td align="left">Optional private key file for TLS in PEM format.</td>
<td align="left">``</td>
</tr>
<tr>
<td align="left"><code>ui</code></td>
<td align="left">UI configuration.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>ui.title</code></td>
<td align="left"><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title">Title of the document</a>.</td>
<td align="left"><code>Health Dashboard ǀ Gatus</code></td>
</tr>
<tr>
<td align="left"><code>ui.description</code></td>
<td align="left">Meta description for the page.</td>
<td align="left"><code>Gatus is an advanced...</code>.</td>
</tr>
<tr>
<td align="left"><code>ui.header</code></td>
<td align="left">Header at the top of the dashboard.</td>
<td align="left"><code>Health Status</code></td>
</tr>
<tr>
<td align="left"><code>ui.logo</code></td>
<td align="left">URL to the logo to display.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>ui.link</code></td>
<td align="left">Link to open when the logo is clicked.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>ui.buttons</code></td>
<td align="left">List of buttons to display below the header.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>ui.buttons[].name</code></td>
<td align="left">Text to display on the button.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>ui.buttons[].link</code></td>
<td align="left">Link to open when the button is clicked.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>maintenance</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#maintenance">Maintenance configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
</tbody>
</table>
<p>If you want more verbose logging, you may set the <code>GATUS_LOG_LEVEL</code> environment variable to <code>DEBUG</code>. Conversely, if you want less verbose logging, you can set the aforementioned environment variable to <code>WARN</code>, <code>ERROR</code> or <code>FATAL</code>. The default value for <code>GATUS_LOG_LEVEL</code> is <code>INFO</code>.</p>
<h3>Endpoints</h3>
<p>Endpoints are URLs, applications, or services that you want to monitor. Each endpoint has a list of conditions that are evaluated on an interval that you define. If any condition fails, the endpoint is considered as unhealthy. You can then configure alerts to be triggered when an endpoint is unhealthy once a certain threshold is reached.</p>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>endpoints</code></td>
<td align="left">List of endpoints to monitor.</td>
<td align="left">Required <code>[]</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].enabled</code></td>
<td align="left">Whether to monitor the endpoint.</td>
<td align="left"><code>true</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].name</code></td>
<td align="left">Name of the endpoint. Can be anything.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].group</code></td>
<td align="left">Group name. Used to group multiple endpoints together on the dashboard. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#endpoint-groups">Endpoint groups</a>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].url</code></td>
<td align="left">URL to send the request to.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].method</code></td>
<td align="left">Request method.</td>
<td align="left"><code>GET</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].conditions</code></td>
<td align="left">Conditions used to determine the health of the endpoint. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#conditions">Conditions</a>.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].interval</code></td>
<td align="left">Duration to wait between every status check.</td>
<td align="left"><code>60s</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].graphql</code></td>
<td align="left">Whether to wrap the body in a query param (<code>{"query":"$body"}</code>).</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].body</code></td>
<td align="left">Request body.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].headers</code></td>
<td align="left">Request headers.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].dns</code></td>
<td align="left">Configuration for an endpoint of type DNS. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-dns-queries">Monitoring an endpoint using DNS queries</a>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].dns.query-type</code></td>
<td align="left">Query type (e.g. MX).</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].dns.query-name</code></td>
<td align="left">Query name (e.g. example.com).</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ssh</code></td>
<td align="left">Configuration for an endpoint of type SSH. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#monitoring-an-endpoint-using-ssh">Monitoring an endpoint using SSH</a>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ssh.username</code></td>
<td align="left">SSH username (e.g. example).</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ssh.password</code></td>
<td align="left">SSH password (e.g. password).</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].alerts</code></td>
<td align="left">List of all alerts for a given endpoint. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#alerting">Alerting</a>.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].client</code></td>
<td align="left"><a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui</code></td>
<td align="left">UI configuration at the endpoint level.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui.hide-conditions</code></td>
<td align="left">Whether to hide conditions from the results. Note that this only hides conditions from results evaluated from the moment this was enabled.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui.hide-hostname</code></td>
<td align="left">Whether to hide the hostname in the result.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui.hide-url</code></td>
<td align="left">Whether to ensure the URL is not displayed in the results. Useful if the URL contains a token.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui.dont-resolve-failed-conditions</code></td>
<td align="left">Whether to resolve failed conditions for the UI.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>endpoints[].ui.badge.reponse-time</code></td>
<td align="left">List of response time thresholds. Each time a threshold is reached, the badge has a different color.</td>
<td align="left"><code>[50, 200, 300, 500, 750]</code></td>
</tr>
</tbody>
</table>
<h3>External Endpoints</h3>
<p>Unlike regular endpoints, external endpoints are not monitored by Gatus, but they are instead pushed programmatically. This allows you to monitor anything you want, even when what you want to check lives in an environment that would not normally be accessible by Gatus.</p>
<p>For instance:</p>
<ul>
<li>You can create your own agent that lives in a private network and pushes the status of your services to a publicly-exposed Gatus instance</li>
<li>You can monitor services that are not supported by Gatus</li>
<li>You can implement your own monitoring system while using Gatus as the dashboard</li>
</ul>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>external-endpoints</code></td>
<td align="left">List of endpoints to monitor.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints[].enabled</code></td>
<td align="left">Whether to monitor the endpoint.</td>
<td align="left"><code>true</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints[].name</code></td>
<td align="left">Name of the endpoint. Can be anything.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints[].group</code></td>
<td align="left">Group name. Used to group multiple endpoints together on the dashboard. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#endpoint-groups">Endpoint groups</a>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints[].token</code></td>
<td align="left">Bearer token required to push status to.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>external-endpoints[].alerts</code></td>
<td align="left">List of all alerts for a given endpoint. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#alerting">Alerting</a>.</td>
<td align="left"><code>[]</code></td>
</tr>
</tbody>
</table>
<p>Example:</p>
<pre><code class="language-yaml">external-endpoints:
- name: ext-ep-test
group: core
token: "potato"
alerts:
- type: discord
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>To push the status of an external endpoint, the request would have to look like this:</p>
<pre><code>POST /api/v1/endpoints/{key}/external?success={success}&error={error}
</code></pre>
<p>Where:</p>
<ul>
<li><code>{key}</code> has the pattern <code><GROUP_NAME>_<ENDPOINT_NAME></code> in which both variables have <code> </code>, <code>/</code>, <code>_</code>, <code>,</code> and <code>.</code> replaced by <code>-</code>.
<ul>
<li>Using the example configuration above, the key would be <code>core_ext-ep-test</code>.</li>
</ul> </li>
<li><code>{success}</code> is a boolean (<code>true</code> or <code>false</code>) value indicating whether the health check was successful or not.</li>
<li><code>{error}</code>: a string describing the reason for a failed health check. If {success} is false, this should contain the error message; if the check is successful, it can be omitted or left empty.</li>
</ul>
<p>You must also pass the token as a <code>Bearer</code> token in the <code>Authorization</code> header.</p>
<h3>Conditions</h3>
<p>Here are some examples of conditions you can use:</p>
<table>
<thead>
<tr>
<th align="left">Condition</th>
<th align="left">Description</th>
<th align="left">Passing values</th>
<th>Failing values</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>[STATUS] == 200</code></td>
<td align="left">Status must be equal to 200</td>
<td align="left">200</td>
<td>201, 404, ...</td>
</tr>
<tr>
<td align="left"><code>[STATUS] < 300</code></td>
<td align="left">Status must lower than 300</td>
<td align="left">200, 201, 299</td>
<td>301, 302, ...</td>
</tr>
<tr>
<td align="left"><code>[STATUS] <= 299</code></td>
<td align="left">Status must be less than or equal to 299</td>
<td align="left">200, 201, 299</td>
<td>301, 302, ...</td>
</tr>
<tr>
<td align="left"><code>[STATUS] > 400</code></td>
<td align="left">Status must be greater than 400</td>
<td align="left">401, 402, 403, 404</td>
<td>400, 200, ...</td>
</tr>
<tr>
<td align="left"><code>[STATUS] == any(200, 429)</code></td>
<td align="left">Status must be either 200 or 429</td>
<td align="left">200, 429</td>
<td>201, 400, ...</td>
</tr>
<tr>
<td align="left"><code>[CONNECTED] == true</code></td>
<td align="left">Connection to host must've been successful</td>
<td align="left">true</td>
<td>false</td>
</tr>
<tr>
<td align="left"><code>[RESPONSE_TIME] < 500</code></td>
<td align="left">Response time must be below 500ms</td>
<td align="left">100ms, 200ms, 300ms</td>
<td>500ms, 501ms</td>
</tr>
<tr>
<td align="left"><code>[IP] == 127.0.0.1</code></td>
<td align="left">Target IP must be 127.0.0.1</td>
<td align="left">127.0.0.1</td>
<td>0.0.0.0</td>
</tr>
<tr>
<td align="left"><code>[BODY] == 1</code></td>
<td align="left">The body must be equal to 1</td>
<td align="left">1</td>
<td><code>{}</code>, <code>2</code>, ...</td>
</tr>
<tr>
<td align="left"><code>[BODY].user.name == john</code></td>
<td align="left">JSONPath value of <code>$.user.name</code> is equal to <code>john</code></td>
<td align="left"><code>{"user":{"name":"john"}}</code></td>
<td></td>
</tr>
<tr>
<td align="left"><code>[BODY].data[0].id == 1</code></td>
<td align="left">JSONPath value of <code>$.data[0].id</code> is equal to 1</td>
<td align="left"><code>{"data":[{"id":1}]}</code></td>
<td></td>
</tr>
<tr>
<td align="left"><code>[BODY].age == [BODY].id</code></td>
<td align="left">JSONPath value of <code>$.age</code> is equal JSONPath <code>$.id</code></td>
<td align="left"><code>{"age":1,"id":1}</code></td>
<td></td>
</tr>
<tr>
<td align="left"><code>len([BODY].data) < 5</code></td>
<td align="left">Array at JSONPath <code>$.data</code> has less than 5 elements</td>
<td align="left"><code>{"data":[{"id":1}]}</code></td>
<td></td>
</tr>
<tr>
<td align="left"><code>len([BODY].name) == 8</code></td>
<td align="left">String at JSONPath <code>$.name</code> has a length of 8</td>
<td align="left"><code>{"name":"john.doe"}</code></td>
<td><code>{"name":"bob"}</code></td>
</tr>
<tr>
<td align="left"><code>has([BODY].errors) == false</code></td>
<td align="left">JSONPath <code>$.errors</code> does not exist</td>
<td align="left"><code>{"name":"john.doe"}</code></td>
<td><code>{"errors":[]}</code></td>
</tr>
<tr>
<td align="left"><code>has([BODY].users) == true</code></td>
<td align="left">JSONPath <code>$.users</code> exists</td>
<td align="left"><code>{"users":[]}</code></td>
<td><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>[BODY].name == pat(john*)</code></td>
<td align="left">String at JSONPath <code>$.name</code> matches pattern <code>john*</code></td>
<td align="left"><code>{"name":"john.doe"}</code></td>
<td><code>{"name":"bob"}</code></td>
</tr>
<tr>
<td align="left"><code>[BODY].id == any(1, 2)</code></td>
<td align="left">Value at JSONPath <code>$.id</code> is equal to <code>1</code> or <code>2</code></td>
<td align="left">1, 2</td>
<td>3, 4, 5</td>
</tr>
<tr>
<td align="left"><code>[CERTIFICATE_EXPIRATION] > 48h</code></td>
<td align="left">Certificate expiration is more than 48h away</td>
<td align="left">49h, 50h, 123h</td>
<td>1h, 24h, ...</td>
</tr>
<tr>
<td align="left"><code>[DOMAIN_EXPIRATION] > 720h</code></td>
<td align="left">The domain must expire in more than 720h</td>
<td align="left">4000h</td>
<td>1h, 24h, ...</td>
</tr>
</tbody>
</table>
<h4>Placeholders</h4>
<table>
<thead>
<tr>
<th align="left">Placeholder</th>
<th align="left">Description</th>
<th align="left">Example of resolved value</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>[STATUS]</code></td>
<td align="left">Resolves into the HTTP status of the request</td>
<td align="left"><code>404</code></td>
</tr>
<tr>
<td align="left"><code>[RESPONSE_TIME]</code></td>
<td align="left">Resolves into the response time the request took, in ms</td>
<td align="left"><code>10</code></td>
</tr>
<tr>
<td align="left"><code>[IP]</code></td>
<td align="left">Resolves into the IP of the target host</td>
<td align="left"><code>192.168.0.232</code></td>
</tr>
<tr>
<td align="left"><code>[BODY]</code></td>
<td align="left">Resolves into the response body. Supports JSONPath.</td>
<td align="left"><code>{"name":"john.doe"}</code></td>
</tr>
<tr>
<td align="left"><code>[CONNECTED]</code></td>
<td align="left">Resolves into whether a connection could be established</td>
<td align="left"><code>true</code></td>
</tr>
<tr>
<td align="left"><code>[CERTIFICATE_EXPIRATION]</code></td>
<td align="left">Resolves into the duration before certificate expiration (valid units are "s", "m", "h".)</td>
<td align="left"><code>24h</code>, <code>48h</code>, 0 (if not protocol with certs)</td>
</tr>
<tr>
<td align="left"><code>[DOMAIN_EXPIRATION]</code></td>
<td align="left">Resolves into the duration before the domain expires (valid units are "s", "m", "h".)</td>
<td align="left"><code>24h</code>, <code>48h</code>, <code>1234h56m78s</code></td>
</tr>
<tr>
<td align="left"><code>[DNS_RCODE]</code></td>
<td align="left">Resolves into the DNS status of the response</td>
<td align="left"><code>NOERROR</code></td>
</tr>
</tbody>
</table>
<h4>Functions</h4>
<table>
<thead>
<tr>
<th align="left">Function</th>
<th align="left">Description</th>
<th align="left">Example</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>len</code></td>
<td align="left">If the given path leads to an array, returns its length. Otherwise, the JSON at the given path is minified and converted to a string, and the resulting number of characters is returned. Works only with the <code>[BODY]</code> placeholder.</td>
<td align="left"><code>len([BODY].username) > 8</code></td>
</tr>
<tr>
<td align="left"><code>has</code></td>
<td align="left">Returns <code>true</code> or <code>false</code> based on whether a given path is valid. Works only with the <code>[BODY]</code> placeholder.</td>
<td align="left"><code>has([BODY].errors) == false</code></td>
</tr>
<tr>
<td align="left"><code>pat</code></td>
<td align="left">Specifies that the string passed as parameter should be evaluated as a pattern. Works only with <code>==</code> and <code>!=</code>.</td>
<td align="left"><code>[IP] == pat(192.168.*)</code></td>
</tr>
<tr>
<td align="left"><code>any</code></td>
<td align="left">Specifies that any one of the values passed as parameters is a valid value. Works only with <code>==</code> and <code>!=</code>.</td>
<td align="left"><code>[BODY].ip == any(127.0.0.1, ::1)</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p>💡 Use <code>pat</code> only when you need to. <code>[STATUS] == pat(2*)</code> is a lot more expensive than <code>[STATUS] < 300</code>.</p>
</blockquote>
<h3>Storage</h3>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>storage</code></td>
<td align="left">Storage configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>storage.path</code></td>
<td align="left">Path to persist the data in. Only supported for types <code>sqlite</code> and <code>postgres</code>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>storage.type</code></td>
<td align="left">Type of storage. Valid types: <code>memory</code>, <code>sqlite</code>, <code>postgres</code>.</td>
<td align="left"><code>"memory"</code></td>
</tr>
<tr>
<td align="left"><code>storage.caching</code></td>
<td align="left">Whether to use write-through caching. Improves loading time for large dashboards. <br>Only supported if <code>storage.type</code> is <code>sqlite</code> or <code>postgres</code></td>
<td align="left"><code>false</code></td>
</tr>
</tbody>
</table>
<p>The results for each endpoint health check as well as the data for uptime and the past events must be persisted so that they can be displayed on the dashboard. These parameters allow you to configure the storage in question.</p>
<ul>
<li>If <code>storage.type</code> is <code>memory</code> (default):</li>
</ul>
<pre><code class="language-yaml"># Note that this is the default value, and you can omit the storage configuration altogether to achieve the same result.
# Because the data is stored in memory, the data will not survive a restart.
storage:
type: memory
</code></pre>
<ul>
<li>If <code>storage.type</code> is <code>sqlite</code>, <code>storage.path</code> must not be blank:</li>
</ul>
<pre><code class="language-yaml">storage:
type: sqlite
path: data.db
</code></pre>
<p>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples/docker-compose-sqlite-storage">examples/docker-compose-sqlite-storage</a> for an example.</p>
<ul>
<li>If <code>storage.type</code> is <code>postgres</code>, <code>storage.path</code> must be the connection URL:</li>
</ul>
<pre><code class="language-yaml">storage:
type: postgres
path: "postgres://user:password@127.0.0.1:5432/gatus?sslmode=disable"
</code></pre>
<p>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples/docker-compose-postgres-storage">examples/docker-compose-postgres-storage</a> for an example.</p>
<h3>Client configuration</h3>
<p>In order to support a wide range of environments, each monitored endpoint has a unique configuration for the client used to send the request.</p>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>client.insecure</code></td>
<td align="left">Whether to skip verifying the server's certificate chain and host name.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>client.ignore-redirect</code></td>
<td align="left">Whether to ignore redirects (true) or follow them (false, default).</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>client.timeout</code></td>
<td align="left">Duration before timing out.</td>
<td align="left"><code>10s</code></td>
</tr>
<tr>
<td align="left"><code>client.dns-resolver</code></td>
<td align="left">Override the DNS resolver using the format <code>{proto}://{host}:{port}</code>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.oauth2</code></td>
<td align="left">OAuth2 client configuration.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>client.oauth2.token-url</code></td>
<td align="left">The token endpoint URL</td>
<td align="left">required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.oauth2.client-id</code></td>
<td align="left">The client id which should be used for the <code>Client credentials flow</code></td>
<td align="left">required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.oauth2.client-secret</code></td>
<td align="left">The client secret which should be used for the <code>Client credentials flow</code></td>
<td align="left">required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.oauth2.scopes[]</code></td>
<td align="left">A list of <code>scopes</code> which should be used for the <code>Client credentials flow</code>.</td>
<td align="left">required <code>[""]</code></td>
</tr>
<tr>
<td align="left"><code>client.proxy-url</code></td>
<td align="left">The URL of the proxy to use for the client</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.identity-aware-proxy</code></td>
<td align="left">Google Identity-Aware-Proxy client configuration.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>client.identity-aware-proxy.audience</code></td>
<td align="left">The Identity-Aware-Proxy audience. (client-id of the IAP oauth2 credential)</td>
<td align="left">required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.tls.certificate-file</code></td>
<td align="left">Path to a client certificate (in PEM format) for mTLS configurations.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.tls.private-key-file</code></td>
<td align="left">Path to a client private key (in PEM format) for mTLS configurations.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>client.tls.renegotiation</code></td>
<td align="left">Type of renegotiation support to provide. (<code>never</code>, <code>freely</code>, <code>once</code>).</td>
<td align="left"><code>"never"</code></td>
</tr>
<tr>
<td align="left"><code>client.network</code></td>
<td align="left">The network to use for ICMP endpoint client (<code>ip</code>, <code>ip4</code> or <code>ip6</code>).</td>
<td align="left"><code>"ip"</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p>📝 Some of these parameters are ignored based on the type of endpoint. For instance, there's no certificate involved in ICMP requests (ping), therefore, setting <code>client.insecure</code> to <code>true</code> for an endpoint of that type will not do anything.</p>
</blockquote>
<p>This default configuration is as follows:</p>
<pre><code class="language-yaml">client:
insecure: false
ignore-redirect: false
timeout: 10s
</code></pre>
<p>Note that this configuration is only available under <code>endpoints[]</code>, <code>alerting.mattermost</code> and <code>alerting.custom</code>.</p>
<p>Here's an example with the client configuration under <code>endpoints[]</code>:</p>
<pre><code class="language-yaml">endpoints:
- name: website
url: "https://twin.sh/health"
client:
insecure: false
ignore-redirect: false
timeout: 10s
conditions:
- "[STATUS] == 200"
</code></pre>
<p>This example shows how you can specify a custom DNS resolver:</p>
<pre><code class="language-yaml">endpoints:
- name: with-custom-dns-resolver
url: "https://your.health.api/health"
client:
dns-resolver: "tcp://8.8.8.8:53"
conditions:
- "[STATUS] == 200"
</code></pre>
<p>This example shows how you can use the <code>client.oauth2</code> configuration to query a backend API with <code>Bearer token</code>:</p>
<pre><code class="language-yaml">endpoints:
- name: with-custom-oauth2
url: "https://your.health.api/health"
client:
oauth2:
token-url: https://your-token-server/token
client-id: 00000000-0000-0000-0000-000000000000
client-secret: your-client-secret
scopes: ['https://your.health.api/.default']
conditions:
- "[STATUS] == 200"
</code></pre>
<p>This example shows how you can use the <code>client.identity-aware-proxy</code> configuration to query a backend API with <code>Bearer token</code> using Google Identity-Aware-Proxy:</p>
<pre><code class="language-yaml">endpoints:
- name: with-custom-iap
url: "https://my.iap.protected.app/health"
client:
identity-aware-proxy:
audience: "XXXXXXXX-XXXXXXXXXXXX.apps.googleusercontent.com"
conditions:
- "[STATUS] == 200"
</code></pre>
<blockquote>
<p>📝 Note that Gatus will use the <a href="https://cloud.google.com/docs/authentication/application-default-credentials">gcloud default credentials</a> within its environment to generate the token.</p>
</blockquote>
<p>This example shows you how you can use the <code>client.tls</code> configuration to perform an mTLS query to a backend API:</p>
<pre><code class="language-yaml">endpoints:
- name: website
url: "https://your.mtls.protected.app/health"
client:
tls:
certificate-file: /path/to/user_cert.pem
private-key-file: /path/to/user_key.pem
renegotiation: once
conditions:
- "[STATUS] == 200"
</code></pre>
<blockquote>
<p>📝 Note that if running in a container, you must volume mount the certificate and key into the container.</p>
</blockquote>
<h3>Alerting</h3>
<p>Gatus supports multiple alerting providers, such as Slack and PagerDuty, and supports different alerts for each individual endpoints with configurable descriptions and thresholds.</p>
<p>Alerts are configured at the endpoint level like so:</p>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerts</code></td>
<td align="left">List of all alerts for a given endpoint.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].type</code></td>
<td align="left">Type of alert. <br>See table below for all valid types.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].enabled</code></td>
<td align="left">Whether to enable the alert.</td>
<td align="left"><code>true</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].failure-threshold</code></td>
<td align="left">Number of failures in a row needed before triggering the alert.</td>
<td align="left"><code>3</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].success-threshold</code></td>
<td align="left">Number of successes in a row before an ongoing incident is marked as resolved.</td>
<td align="left"><code>2</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].send-on-resolved</code></td>
<td align="left">Whether to send a notification once a triggered alert is marked as resolved.</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>alerts[].description</code></td>
<td align="left">Description of the alert. Will be included in the alert sent.</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<p>Here's an example of what an alert configuration might look like at the endpoint level:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "https://example.org"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<blockquote>
<p>📝 If an alerting provider is not properly configured, all alerts configured with the provider's type will be ignored.</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.custom</code></td>
<td align="left">Configuration for custom actions on failure or alerts. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-custom-alerts">Configuring Custom alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord</code></td>
<td align="left">Configuration for alerts of type <code>discord</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-discord-alerts">Configuring Discord alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email</code></td>
<td align="left">Configuration for alerts of type <code>email</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-email-alerts">Configuring Email alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.github</code></td>
<td align="left">Configuration for alerts of type <code>github</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-github-alerts">Configuring GitHub alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab</code></td>
<td align="left">Configuration for alerts of type <code>gitlab</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-gitlab-alerts">Configuring GitLab alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat</code></td>
<td align="left">Configuration for alerts of type <code>googlechat</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-google-chat-alerts">Configuring Google Chat alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify</code></td>
<td align="left">Configuration for alerts of type <code>gotify</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-gotify-alerts">Configuring Gotify alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace</code></td>
<td align="left">Configuration for alerts of type <code>jetbrainsspace</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-jetbrains-space-alerts">Configuring JetBrains Space alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.matrix</code></td>
<td align="left">Configuration for alerts of type <code>matrix</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-matrix-alerts">Configuring Matrix alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost</code></td>
<td align="left">Configuration for alerts of type <code>mattermost</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-mattermost-alerts">Configuring Mattermost alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.messagebird</code></td>
<td align="left">Configuration for alerts of type <code>messagebird</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-messagebird-alerts">Configuring Messagebird alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy</code></td>
<td align="left">Configuration for alerts of type <code>ntfy</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-ntfy-alerts">Configuring Ntfy alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie</code></td>
<td align="left">Configuration for alerts of type <code>opsgenie</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-opsgenie-alerts">Configuring Opsgenie alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty</code></td>
<td align="left">Configuration for alerts of type <code>pagerduty</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-pagerduty-alerts">Configuring PagerDuty alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover</code></td>
<td align="left">Configuration for alerts of type <code>pushover</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-pushover-alerts">Configuring Pushover alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.slack</code></td>
<td align="left">Configuration for alerts of type <code>slack</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-slack-alerts">Configuring Slack alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams</code></td>
<td align="left">Configuration for alerts of type <code>teams</code>. <em>(Deprecated)</em> <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-teams-alerts-deprecated">Configuring Teams alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows</code></td>
<td align="left">Configuration for alerts of type <code>teams-workflows</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-teams-workflow-alerts">Configuring Teams Workflow alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram</code></td>
<td align="left">Configuration for alerts of type <code>telegram</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-telegram-alerts">Configuring Telegram alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio</code></td>
<td align="left">Settings for alerts of type <code>twilio</code>. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-twilio-alerts">Configuring Twilio alerts</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
</tbody>
</table>
<h4>Configuring Discord alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.discord</code></td>
<td align="left">Configuration for alerts of type <code>discord</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord.webhook-url</code></td>
<td align="left">Discord Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord.title</code></td>
<td align="left">Title of the notification</td>
<td align="left"><code>":helmet_with_white_cross: Gatus"</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.discord.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.discord.overrides[].webhook-url</code></td>
<td align="left">Discord Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
discord:
webhook-url: "https://discord.com/api/webhooks/**********/**********"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: discord
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<h4>Configuring Email alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.email</code></td>
<td align="left">Configuration for alerts of type <code>email</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.from</code></td>
<td align="left">Email used to send the alert</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.username</code></td>
<td align="left">Username of the SMTP server used to send the alert. If empty, uses <code>alerting.email.from</code>.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.password</code></td>
<td align="left">Password of the SMTP server used to send the alert. If empty, no authentication is performed.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.host</code></td>
<td align="left">Host of the mail server (e.g. <code>smtp.gmail.com</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.port</code></td>
<td align="left">Port the mail server is listening to (e.g. <code>587</code>)</td>
<td align="left">Required <code>0</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.to</code></td>
<td align="left">Email(s) to send the alerts to</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.email.client.insecure</code></td>
<td align="left">Whether to skip TLS verification</td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.email.overrides[].to</code></td>
<td align="left">Email(s) to send the alerts to</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
email:
from: "from@example.com"
username: "from@example.com"
password: "hunter2"
host: "mail.example.com"
port: 587
to: "recipient1@example.com,recipient2@example.com"
client:
insecure: false
# You can also add group-specific to keys, which will
# override the to key above for the specified groups
overrides:
- group: "core"
to: "recipient3@example.com,recipient4@example.com"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: email
description: "healthcheck failed"
send-on-resolved: true
- name: back-end
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h"
alerts:
- type: email
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<blockquote>
<p>⚠ Some mail servers are painfully slow.</p>
</blockquote>
<h4>Configuring Gitea alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.gitea</code></td>
<td align="left">Configuration for alerts of type <code>gitea</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitea.repository-url</code></td>
<td align="left">Gitea repository URL (e.g. <code>https://gitea.com/TwiN/example</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitea.token</code></td>
<td align="left">Personal access token to use for authentication. <br>Must have at least RW on issues and RO on metadata.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.github.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>The Gitea alerting provider creates an issue prefixed with <code>alert(gatus):</code> and suffixed with the endpoint's display name for each alert. If <code>send-on-resolved</code> is set to <code>true</code> on the endpoint alert, the issue will be automatically closed when the alert is resolved.</p>
<pre><code class="language-yaml">alerting:
gitea:
repository-url: "https://gitea.com/TwiN/test"
token: "349d63f16......"
endpoints:
- name: example
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 75"
alerts:
- type: gitea
failure-threshold: 2
success-threshold: 3
send-on-resolved: true
description: "Everything's burning AAAAAHHHHHHHHHHHHHHH"
</code></pre>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/gitea-alerts.png" alt="Gitea alert"></p>
<h4>Configuring GitHub alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.github</code></td>
<td align="left">Configuration for alerts of type <code>github</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.github.repository-url</code></td>
<td align="left">GitHub repository URL (e.g. <code>https://github.com/TwiN/example</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.github.token</code></td>
<td align="left">Personal access token to use for authentication. <br>Must have at least RW on issues and RO on metadata.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.github.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>The GitHub alerting provider creates an issue prefixed with <code>alert(gatus):</code> and suffixed with the endpoint's display name for each alert. If <code>send-on-resolved</code> is set to <code>true</code> on the endpoint alert, the issue will be automatically closed when the alert is resolved.</p>
<pre><code class="language-yaml">alerting:
github:
repository-url: "https://github.com/TwiN/test"
token: "github_pat_12345..."
endpoints:
- name: example
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 75"
alerts:
- type: github
failure-threshold: 2
success-threshold: 3
send-on-resolved: true
description: "Everything's burning AAAAAHHHHHHHHHHHHHHH"
</code></pre>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/github-alerts.png" alt="GitHub alert"></p>
<h4>Configuring GitLab alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.gitlab</code></td>
<td align="left">Configuration for alerts of type <code>gitlab</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.webhook-url</code></td>
<td align="left">GitLab alert webhook URL (e.g. <code>https://gitlab.com/yourusername/example/alerts/notify/gatus/xxxxxxxxxxxxxxxx.json</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.authorization-key</code></td>
<td align="left">GitLab alert authorization key.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.severity</code></td>
<td align="left">Override default severity (critical), can be one of <code>critical, high, medium, low, info, unknown</code></td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.monitoring-tool</code></td>
<td align="left">Override the monitoring tool name (gatus)</td>
<td align="left"><code>"gatus"</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.environment-name</code></td>
<td align="left">Set gitlab environment's name. Required to display alerts on a dashboard.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.service</code></td>
<td align="left">Override endpoint display name</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gitlab.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>The GitLab alerting provider creates an alert prefixed with <code>alert(gatus):</code> and suffixed with the endpoint's display name for each alert. If <code>send-on-resolved</code> is set to <code>true</code> on the endpoint alert, the alert will be automatically closed when the alert is resolved. See <a href="https://docs.gitlab.com/ee/operations/incident_management/integrations.html#configuration">https://docs.gitlab.com/ee/operations/incident_management/integrations.html#configuration</a> to configure the endpoint.</p>
<pre><code class="language-yaml">alerting:
gitlab:
webhook-url: "https://gitlab.com/hlidotbe/example/alerts/notify/gatus/xxxxxxxxxxxxxxxx.json"
authorization-key: "12345"
endpoints:
- name: example
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 75"
alerts:
- type: gitlab
failure-threshold: 2
success-threshold: 3
send-on-resolved: true
description: "Everything's burning AAAAAHHHHHHHHHHHHHHH"
</code></pre>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/gitlab-alerts.png" alt="GitLab alert"></p>
<h4>Configuring Google Chat alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.googlechat</code></td>
<td align="left">Configuration for alerts of type <code>googlechat</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.webhook-url</code></td>
<td align="left">Google Chat Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.client</code></td>
<td align="left">Client configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.googlechat.overrides[].webhook-url</code></td>
<td align="left">Google Chat Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
googlechat:
webhook-url: "https://chat.googleapis.com/v1/spaces/*******/messages?key=**********&token=********"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: googlechat
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<h4>Configuring Gotify alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.gotify</code></td>
<td align="left">Configuration for alerts of type <code>gotify</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify.server-url</code></td>
<td align="left">Gotify server URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify.token</code></td>
<td align="left">Token that is used for authentication.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify.priority</code></td>
<td align="left">Priority of the alert according to Gotify standards.</td>
<td align="left"><code>5</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify.title</code></td>
<td align="left">Title of the notification</td>
<td align="left"><code>"Gatus: <endpoint>"</code></td>
</tr>
<tr>
<td align="left"><code>alerting.gotify.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
gotify:
server-url: "https://gotify.example"
token: "**************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: gotify
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/gotify-alerts.png" alt="Gotify notifications"></p>
<h4>Configuring JetBrains Space alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.jetbrainsspace</code></td>
<td align="left">Configuration for alerts of type <code>jetbrainsspace</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.project</code></td>
<td align="left">JetBrains Space project name</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.channel-id</code></td>
<td align="left">JetBrains Space Chat Channel ID</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.token</code></td>
<td align="left">Token that is used for authentication.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.jetbrainsspace.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
jetbrainsspace:
project: myproject
channel-id: ABCDE12345
token: "**************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
alerts:
- type: jetbrainsspace
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/jetbrains-space-alerts.png" alt="JetBrains Space notifications"></p>
<h4>Configuring Matrix alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.matrix</code></td>
<td align="left">Configuration for alerts of type <code>matrix</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.matrix.server-url</code></td>
<td align="left">Homeserver URL</td>
<td align="left"><code>https://matrix-client.matrix.org</code></td>
</tr>
<tr>
<td align="left"><code>alerting.matrix.access-token</code></td>
<td align="left">Bot user access token (see <a href="https://webapps.stackexchange.com/q/131056">https://webapps.stackexchange.com/q/131056</a>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.matrix.internal-room-id</code></td>
<td align="left">Internal room ID of room to send alerts to (can be found in Room Settings > Advanced)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.matrix.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
matrix:
server-url: "https://matrix-client.matrix.org"
access-token: "123456"
internal-room-id: "!example:matrix.org"
endpoints:
- name: website
interval: 5m
url: "https://twin.sh/health"
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: matrix
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<h4>Configuring Mattermost alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.mattermost</code></td>
<td align="left">Configuration for alerts of type <code>mattermost</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.webhook-url</code></td>
<td align="left">Mattermost Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.channel</code></td>
<td align="left">Mattermost channel name override (optional)</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.client</code></td>
<td align="left">Client configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a>.</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermost.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.mattermist.overrides[].webhook-url</code></td>
<td align="left">Mattermost Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
mattermost:
webhook-url: "http://**********/hooks/**********"
client:
insecure: true
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: mattermost
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/mattermost-alerts.png" alt="Mattermost notifications"></p>
<h4>Configuring Messagebird alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.messagebird</code></td>
<td align="left">Configuration for alerts of type <code>messagebird</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.messagebird.access-key</code></td>
<td align="left">Messagebird access key</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.messagebird.originator</code></td>
<td align="left">The sender of the message</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.messagebird.recipients</code></td>
<td align="left">The recipients of the message</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.messagebird.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>Example of sending <strong>SMS</strong> text message alert using Messagebird:</p>
<pre><code class="language-yaml">alerting:
messagebird:
access-key: "..."
originator: "31619191918"
recipients: "31619191919,31619191920"
endpoints:
- name: website
interval: 5m
url: "https://twin.sh/health"
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: messagebird
failure-threshold: 3
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<h4>Configuring Ntfy alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.ntfy</code></td>
<td align="left">Configuration for alerts of type <code>ntfy</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.topic</code></td>
<td align="left">Topic at which the alert will be sent</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.url</code></td>
<td align="left">The URL of the target server</td>
<td align="left"><code>https://ntfy.sh</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.token</code></td>
<td align="left"><a href="https://docs.ntfy.sh/publish/#access-tokens">Access token</a> for restricted topics</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.email</code></td>
<td align="left">E-mail address for additional e-mail notifications</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.click</code></td>
<td align="left">Website opened when notification is clicked</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.priority</code></td>
<td align="left">The priority of the alert</td>
<td align="left"><code>3</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.disable-firebase</code></td>
<td align="left">Whether message push delivery via firebase should be disabled. <a href="https://docs.ntfy.sh/publish/#disable-firebase">ntfy.sh defaults to enabled</a></td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.disable-cache</code></td>
<td align="left">Whether server side message caching should be disabled. <a href="https://docs.ntfy.sh/publish/#message-caching">ntfy.sh defaults to enabled</a></td>
<td align="left"><code>false</code></td>
</tr>
<tr>
<td align="left"><code>alerting.ntfy.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p><a href="https://github.com/binwiederhier/ntfy">ntfy</a> is an amazing project that allows you to subscribe to desktop and mobile notifications, making it an awesome addition to Gatus.</p>
<p>Example:</p>
<pre><code class="language-yaml">alerting:
ntfy:
topic: "gatus-test-topic"
priority: 2
token: faketoken
default-alert:
failure-threshold: 3
send-on-resolved: true
endpoints:
- name: website
interval: 5m
url: "https://twin.sh/health"
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: ntfy
</code></pre>
<h4>Configuring Opsgenie alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.opsgenie</code></td>
<td align="left">Configuration for alerts of type <code>opsgenie</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.api-key</code></td>
<td align="left">Opsgenie API Key</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.priority</code></td>
<td align="left">Priority level of the alert.</td>
<td align="left"><code>P1</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.source</code></td>
<td align="left">Source field of the alert.</td>
<td align="left"><code>gatus</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.entity-prefix</code></td>
<td align="left">Entity field prefix.</td>
<td align="left"><code>gatus-</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.alias-prefix</code></td>
<td align="left">Alias field prefix.</td>
<td align="left"><code>gatus-healthcheck-</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.tags</code></td>
<td align="left">Tags of alert.</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.opsgenie.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>Opsgenie provider will automatically open and close alerts.</p>
<pre><code class="language-yaml">alerting:
opsgenie:
api-key: "00000000-0000-0000-0000-000000000000"
</code></pre>
<h4>Configuring PagerDuty alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.pagerduty</code></td>
<td align="left">Configuration for alerts of type <code>pagerduty</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty.integration-key</code></td>
<td align="left">PagerDuty Events API v2 integration key</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty.overrides[].integration-key</code></td>
<td align="left">PagerDuty Events API v2 integration key</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pagerduty.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>It is highly recommended to set <code>endpoints[].alerts[].send-on-resolved</code> to <code>true</code> for alerts of type <code>pagerduty</code>, because unlike other alerts, the operation resulting from setting said parameter to <code>true</code> will not create another incident but mark the incident as resolved on PagerDuty instead.</p>
<p>Behavior:</p>
<ul>
<li>By default, <code>alerting.pagerduty.integration-key</code> is used as the integration key</li>
<li>If the endpoint being evaluated belongs to a group (<code>endpoints[].group</code>) matching the value of <code>alerting.pagerduty.overrides[].group</code>, the provider will use that override's integration key instead of <code>alerting.pagerduty.integration-key</code>'s</li>
</ul>
<pre><code class="language-yaml">alerting:
pagerduty:
integration-key: "********************************"
# You can also add group-specific integration keys, which will
# override the integration key above for the specified groups
overrides:
- group: "core"
integration-key: "********************************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: pagerduty
failure-threshold: 3
success-threshold: 5
send-on-resolved: true
description: "healthcheck failed"
- name: back-end
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h"
alerts:
- type: pagerduty
failure-threshold: 3
success-threshold: 5
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<h4>Configuring Pushover alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.pushover</code></td>
<td align="left">Configuration for alerts of type <code>pushover</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.application-token</code></td>
<td align="left">Pushover application token</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.user-key</code></td>
<td align="left">User or group key</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.title</code></td>
<td align="left">Fixed title for all messages sent via Pushover</td>
<td align="left">Name of your App in Pushover</td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.priority</code></td>
<td align="left">Priority of all messages, ranging from -2 (very low) to 2 (emergency)</td>
<td align="left"><code>0</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.resolved-priority</code></td>
<td align="left">Override the priority of messages on resolved, ranging from -2 (very low) to 2 (emergency)</td>
<td align="left"><code>0</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.sound</code></td>
<td align="left">Sound of all messages<br>See <a href="https://pushover.net/api#sounds">sounds</a> for all valid choices.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.pushover.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
pushover:
application-token: "******************************"
user-key: "******************************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: pushover
failure-threshold: 3
success-threshold: 5
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<h4>Configuring Slack alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.slack</code></td>
<td align="left">Configuration for alerts of type <code>slack</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.slack.webhook-url</code></td>
<td align="left">Slack Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.slack.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.slack.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.slack.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.slack.overrides[].webhook-url</code></td>
<td align="left">Slack Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
slack:
webhook-url: "https://hooks.slack.com/services/**********/**********/**********"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: slack
description: "healthcheck failed 3 times in a row"
send-on-resolved: true
- type: slack
failure-threshold: 5
description: "healthcheck failed 5 times in a row"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/slack-alerts.png" alt="Slack notifications"></p>
<h4>Configuring Teams alerts <em>(Deprecated)</em></h4>
<blockquote>
<p>[!CAUTION] <strong>Deprecated:</strong> Office 365 Connectors within Microsoft Teams are being retired (<a href="https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/">Source: Microsoft DevBlog</a>). Existing connectors will continue to work until December 2025. The new <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#configuring-teams-workflow-alerts">Teams Workflow Alerts</a> should be used with Microsoft Workflows instead of this legacy configuration.</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.teams</code></td>
<td align="left">Configuration for alerts of type <code>teams</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.webhook-url</code></td>
<td align="left">Teams Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.teams.title</code></td>
<td align="left">Title of the notification</td>
<td align="left"><code>"&#x1F6A8; Gatus"</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.overrides[].webhook-url</code></td>
<td align="left">Teams Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams.client.insecure</code></td>
<td align="left">Whether to skip TLS verification</td>
<td align="left"><code>false</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
teams:
webhook-url: "https://********.webhook.office.com/webhookb2/************"
client:
insecure: false
# You can also add group-specific to keys, which will
# override the to key above for the specified groups
overrides:
- group: "core"
webhook-url: "https://********.webhook.office.com/webhookb3/************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: teams
description: "healthcheck failed"
send-on-resolved: true
- name: back-end
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h"
alerts:
- type: teams
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/teams-alerts.png" alt="Teams notifications"></p>
<h4>Configuring Teams Workflow alerts</h4>
<blockquote>
<p>[!NOTE] This alert is compatible with Workflows for Microsoft Teams. To setup the workflow and get the webhook URL, follow the <a href="https://support.microsoft.com/en-us/office/create-incoming-webhooks-with-workflows-for-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498">Microsoft Documentation</a>.</p>
</blockquote>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.teams-workflows</code></td>
<td align="left">Configuration for alerts of type <code>teams</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.webhook-url</code></td>
<td align="left">Teams Webhook URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.title</code></td>
<td align="left">Title of the notification</td>
<td align="left"><code>"&#x26D1; Gatus"</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.teams-workflows.overrides[].webhook-url</code></td>
<td align="left">Teams WorkFlow Webhook URL</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
teams-workflows:
webhook-url: "https://********.webhook.office.com/webhookb2/************"
# You can also add group-specific to keys, which will
# override the to key above for the specified groups
overrides:
- group: "core"
webhook-url: "https://********.webhook.office.com/webhookb3/************"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: teams-workflows
description: "healthcheck failed"
send-on-resolved: true
- name: back-end
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[CERTIFICATE_EXPIRATION] > 48h"
alerts:
- type: teams-workflows
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/teams-workflows-alerts.png" alt="Teams Workflow notifications"></p>
<h4>Configuring Telegram alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.telegram</code></td>
<td align="left">Configuration for alerts of type <code>telegram</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.token</code></td>
<td align="left">Telegram Bot Token</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.id</code></td>
<td align="left">Telegram User ID</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.api-url</code></td>
<td align="left">Telegram API URL</td>
<td align="left"><code>https://api.telegram.org</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.client</code></td>
<td align="left">Client configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.overrides</code></td>
<td align="left">List of overrides that may be prioritized over the default configuration</td>
<td align="left"><code>[]</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.overrides[].token</code></td>
<td align="left">Telegram Bot Token for override default value</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.telegram.overrides[].id</code></td>
<td align="left">Telegram User ID for override default value</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
telegram:
token: "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
id: "0123456789"
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
alerts:
- type: telegram
send-on-resolved: true
</code></pre>
<p>Here's an example of what the notifications look like:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/telegram-alerts.png" alt="Telegram notifications"></p>
<h4>Configuring Twilio alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.twilio</code></td>
<td align="left">Settings for alerts of type <code>twilio</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio.sid</code></td>
<td align="left">Twilio account SID</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio.token</code></td>
<td align="left">Twilio auth token</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio.from</code></td>
<td align="left">Number to send Twilio alerts from</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio.to</code></td>
<td align="left">Number to send twilio alerts to</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.twilio.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
twilio:
sid: "..."
token: "..."
from: "+1-234-567-8901"
to: "+1-234-567-8901"
endpoints:
- name: website
interval: 30s
url: "https://twin.sh/health"
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: twilio
failure-threshold: 5
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<h4>Configuring AWS SES alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.aws-ses</code></td>
<td align="left">Settings for alerts of type <code>aws-ses</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.access-key-id</code></td>
<td align="left">AWS Access Key ID</td>
<td align="left">Optional <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.secret-access-key</code></td>
<td align="left">AWS Secret Access Key</td>
<td align="left">Optional <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.region</code></td>
<td align="left">AWS Region</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.from</code></td>
<td align="left">The Email address to send the emails from (should be registered in SES)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.to</code></td>
<td align="left">Comma separated list of email address to notify</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.aws-ses.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
aws-ses:
access-key-id: "..."
secret-access-key: "..."
region: "us-east-1"
from: "status@example.com"
to: "user@example.com"
endpoints:
- name: website
interval: 30s
url: "https://twin.sh/health"
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: aws-ses
failure-threshold: 5
send-on-resolved: true
description: "healthcheck failed"
</code></pre>
<p>If the <code>access-key-id</code> and <code>secret-access-key</code> are not defined Gatus will fall back to IAM authentication.</p>
<p>Make sure you have the ability to use <code>ses:SendEmail</code>.</p>
<h4>Configuring custom alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.custom</code></td>
<td align="left">Configuration for custom actions on failure or alerts</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.url</code></td>
<td align="left">Custom alerting request url</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.method</code></td>
<td align="left">Request method</td>
<td align="left"><code>GET</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.body</code></td>
<td align="left">Custom alerting request body.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.headers</code></td>
<td align="left">Custom alerting request headers</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.client</code></td>
<td align="left">Client configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.custom.default-alert</code></td>
<td align="left">Default alert configuration. <br>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#setting-a-default-alert">Setting a default alert</a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<p>While they're called alerts, you can use this feature to call anything.</p>
<p>For instance, you could automate rollbacks by having an application that keeps tracks of new deployments, and by leveraging Gatus, you could have Gatus call that application endpoint when an endpoint starts failing. Your application would then check if the endpoint that started failing was part of the recently deployed application, and if it was, then automatically roll it back.</p>
<p>Furthermore, you may use the following placeholders in the body (<code>alerting.custom.body</code>) and in the url (<code>alerting.custom.url</code>):</p>
<ul>
<li><code>[ALERT_DESCRIPTION]</code> (resolved from <code>endpoints[].alerts[].description</code>)</li>
<li><code>[ENDPOINT_NAME]</code> (resolved from <code>endpoints[].name</code>)</li>
<li><code>[ENDPOINT_GROUP]</code> (resolved from <code>endpoints[].group</code>)</li>
<li><code>[ENDPOINT_URL]</code> (resolved from <code>endpoints[].url</code>)</li>
<li><code>[RESULT_ERRORS]</code> (resolved from the health evaluation of a given health check)</li>
</ul>
<p>If you have an alert using the <code>custom</code> provider with <code>send-on-resolved</code> set to <code>true</code>, you can use the <code>[ALERT_TRIGGERED_OR_RESOLVED]</code> placeholder to differentiate the notifications. The aforementioned placeholder will be replaced by <code>TRIGGERED</code> or <code>RESOLVED</code> accordingly, though it can be modified (details at the end of this section).</p>
<p>For all intents and purposes, we'll configure the custom alert with a Slack webhook, but you can call anything you want.</p>
<pre><code class="language-yaml">alerting:
custom:
url: "https://hooks.slack.com/services/**********/**********/**********"
method: "POST"
body: |
{
"text": "[ALERT_TRIGGERED_OR_RESOLVED]: [ENDPOINT_GROUP] - [ENDPOINT_NAME] - [ALERT_DESCRIPTION] - [RESULT_ERRORS]"
}
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: custom
failure-threshold: 10
success-threshold: 3
send-on-resolved: true
description: "health check failed"
</code></pre>
<p>Note that you can customize the resolved values for the <code>[ALERT_TRIGGERED_OR_RESOLVED]</code> placeholder like so:</p>
<pre><code class="language-yaml">alerting:
custom:
placeholders:
ALERT_TRIGGERED_OR_RESOLVED:
TRIGGERED: "partial_outage"
RESOLVED: "operational"
</code></pre>
<p>As a result, the <code>[ALERT_TRIGGERED_OR_RESOLVED]</code> in the body of first example of this section would be replaced by <code>partial_outage</code> when an alert is triggered and <code>operational</code> when an alert is resolved.</p>
<h4>Setting a default alert</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.*.default-alert.enabled</code></td>
<td align="left">Whether to enable the alert</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.*.default-alert.failure-threshold</code></td>
<td align="left">Number of failures in a row needed before triggering the alert</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.*.default-alert.success-threshold</code></td>
<td align="left">Number of successes in a row before an ongoing incident is marked as resolved</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.*.default-alert.send-on-resolved</code></td>
<td align="left">Whether to send a notification once a triggered alert is marked as resolved</td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>alerting.*.default-alert.description</code></td>
<td align="left">Description of the alert. Will be included in the alert sent</td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<blockquote>
<p>⚠ You must still specify the <code>type</code> of the alert in the endpoint configuration even if you set the default alert of a provider.</p>
</blockquote>
<p>While you can specify the alert configuration directly in the endpoint definition, it's tedious and may lead to a very long configuration file.</p>
<p>To avoid such problem, you can use the <code>default-alert</code> parameter present in each provider configuration:</p>
<pre><code class="language-yaml">alerting:
slack:
webhook-url: "https://hooks.slack.com/services/**********/**********/**********"
default-alert:
description: "health check failed"
send-on-resolved: true
failure-threshold: 5
success-threshold: 5
</code></pre>
<p>As a result, your Gatus configuration looks a lot tidier:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "https://example.org"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
- name: other-example
url: "https://example.com"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
</code></pre>
<p>It also allows you to do things like this:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "https://example.org"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
failure-threshold: 5
- type: slack
failure-threshold: 10
- type: slack
failure-threshold: 15
</code></pre>
<p>Of course, you can also mix alert types:</p>
<pre><code class="language-yaml">alerting:
slack:
webhook-url: "https://hooks.slack.com/services/**********/**********/**********"
default-alert:
failure-threshold: 3
pagerduty:
integration-key: "********************************"
default-alert:
failure-threshold: 5
endpoints:
- name: endpoint-1
url: "https://example.org"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
- type: pagerduty
- name: endpoint-2
url: "https://example.org"
conditions:
- "[STATUS] == 200"
alerts:
- type: slack
- type: pagerduty
</code></pre>
<h4>Configuring Zulip alerts</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>alerting.zulip</code></td>
<td align="left">Configuration for alerts of type <code>discord</code></td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.bot-email</code></td>
<td align="left">Bot Email</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.bot-api-key</code></td>
<td align="left">Bot API key</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.domain</code></td>
<td align="left">Full organization domain (e.g.: yourZulipDomain.zulipchat.com)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.channel-id</code></td>
<td align="left">The channel ID where Gatus will send the alerts</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.overrides[].group</code></td>
<td align="left">Endpoint group for which the configuration will be overridden by this configuration</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.overrides[].bot-email</code></td>
<td align="left">.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.overrides[].bot-api-key</code></td>
<td align="left">.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.overrides[].domain</code></td>
<td align="left">.</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>alerting.zulip.overrides[].channel-id</code></td>
<td align="left">.</td>
<td align="left"><code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">alerting:
zulip:
bot-email: gatus-bot@some.zulip.org
bot-api-key: "********************************"
domain: some.zulip.org
channel-id: 123456
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
alerts:
- type: zulip
description: "healthcheck failed"
send-on-resolved: true
</code></pre>
<h3>Maintenance</h3>
<p>If you have maintenance windows, you may not want to be annoyed by alerts. To do that, you'll have to use the maintenance configuration:</p>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>maintenance.enabled</code></td>
<td align="left">Whether the maintenance period is enabled</td>
<td align="left"><code>true</code></td>
</tr>
<tr>
<td align="left"><code>maintenance.start</code></td>
<td align="left">Time at which the maintenance window starts in <code>hh:mm</code> format (e.g. <code>23:00</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>maintenance.duration</code></td>
<td align="left">Duration of the maintenance window (e.g. <code>1h</code>, <code>30m</code>)</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>maintenance.timezone</code></td>
<td align="left">Timezone of the maintenance window format (e.g. <code>Europe/Amsterdam</code>).<br>See <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">List of tz database time zones</a> for more info</td>
<td align="left"><code>UTC</code></td>
</tr>
<tr>
<td align="left"><code>maintenance.every</code></td>
<td align="left">Days on which the maintenance period applies (e.g. <code>[Monday, Thursday]</code>).<br>If left empty, the maintenance window applies every day</td>
<td align="left"><code>[]</code></td>
</tr>
</tbody>
</table>
<p>Here's an example:</p>
<pre><code class="language-yaml">maintenance:
start: 23:00
duration: 1h
timezone: "Europe/Amsterdam"
every: [Monday, Thursday]
</code></pre>
<p>Note that you can also specify each day on separate lines:</p>
<pre><code class="language-yaml">maintenance:
start: 23:00
duration: 1h
timezone: "Europe/Amsterdam"
every:
- Monday
- Thursday
</code></pre>
<h3>Security</h3>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>security</code></td>
<td align="left">Security configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>security.basic</code></td>
<td align="left">HTTP Basic configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc</code></td>
<td align="left">OpenID Connect configuration</td>
<td align="left"><code>{}</code></td>
</tr>
</tbody>
</table>
<h4>Basic Authentication</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>security.basic</code></td>
<td align="left">HTTP Basic configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>security.basic.username</code></td>
<td align="left">Username for Basic authentication.</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>security.basic.password-bcrypt-base64</code></td>
<td align="left">Password hashed with Bcrypt and then encoded with base64 for Basic authentication.</td>
<td align="left">Required <code>""</code></td>
</tr>
</tbody>
</table>
<p>The example below will require that you authenticate with the username <code>john.doe</code> and the password <code>hunter2</code>:</p>
<pre><code class="language-yaml">security:
basic:
username: "john.doe"
password-bcrypt-base64: "JDJhJDEwJHRiMnRFakxWazZLdXBzRERQazB1TE8vckRLY05Yb1hSdnoxWU0yQ1FaYXZRSW1McmladDYu"
</code></pre>
<blockquote>
<p>⚠ Make sure to carefully select to cost of the bcrypt hash. The higher the cost, the longer it takes to compute the hash, and basic auth verifies the password against the hash on every request. As of 2023-01-06, I suggest a cost of 9.</p>
</blockquote>
<h4>OIDC</h4>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>security.oidc</code></td>
<td align="left">OpenID Connect configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.issuer-url</code></td>
<td align="left">Issuer URL</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.redirect-url</code></td>
<td align="left">Redirect URL. Must end with <code>/authorization-code/callback</code></td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.client-id</code></td>
<td align="left">Client id</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.client-secret</code></td>
<td align="left">Client secret</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.scopes</code></td>
<td align="left">Scopes to request. The only scope you need is <code>openid</code>.</td>
<td align="left">Required <code>[]</code></td>
</tr>
<tr>
<td align="left"><code>security.oidc.allowed-subjects</code></td>
<td align="left">List of subjects to allow. If empty, all subjects are allowed.</td>
<td align="left"><code>[]</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">security:
oidc:
issuer-url: "https://example.okta.com"
redirect-url: "https://status.example.com/authorization-code/callback"
client-id: "123456789"
client-secret: "abcdefghijk"
scopes: ["openid"]
# You may optionally specify a list of allowed subjects. If this is not specified, all subjects will be allowed.
#allowed-subjects: ["johndoe@example.com"]
</code></pre>
<p>Confused? Read <a href="https://twin.sh/articles/56/securing-gatus-with-oidc-using-auth0">Securing Gatus with OIDC using Auth0</a>.</p>
<h3>TLS Encryption</h3>
<p>Gatus supports basic encryption with TLS. To enable this, certificate files in PEM format have to be provided.</p>
<p>The example below shows an example configuration which makes gatus respond on port 4443 to HTTPS requests:</p>
<pre><code class="language-yaml">web:
port: 4443
tls:
certificate-file: "certificate.crt"
private-key-file: "private.key"
</code></pre>
<h3>Metrics</h3>
<p>To enable metrics, you must set <code>metrics</code> to <code>true</code>. Doing so will expose Prometheus-friendly metrics at the <code>/metrics</code> endpoint on the same port your application is configured to run on (<code>web.port</code>).</p>
<table>
<thead>
<tr>
<th align="left">Metric name</th>
<th align="left">Type</th>
<th align="left">Description</th>
<th align="left">Labels</th>
<th align="left">Relevant endpoint types</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">gatus_results_total</td>
<td align="left">counter</td>
<td align="left">Number of results per endpoint</td>
<td align="left">key, group, name, type, success</td>
<td align="left">All</td>
</tr>
<tr>
<td align="left">gatus_results_code_total</td>
<td align="left">counter</td>
<td align="left">Total number of results by code</td>
<td align="left">key, group, name, type, code</td>
<td align="left">DNS, HTTP</td>
</tr>
<tr>
<td align="left">gatus_results_connected_total</td>
<td align="left">counter</td>
<td align="left">Total number of results in which a connection was successfully established</td>
<td align="left">key, group, name, type</td>
<td align="left">All</td>
</tr>
<tr>
<td align="left">gatus_results_duration_seconds</td>
<td align="left">gauge</td>
<td align="left">Duration of the request in seconds</td>
<td align="left">key, group, name, type</td>
<td align="left">All</td>
</tr>
<tr>
<td align="left">gatus_results_certificate_expiration_seconds</td>
<td align="left">gauge</td>
<td align="left">Number of seconds until the certificate expires</td>
<td align="left">key, group, name, type</td>
<td align="left">HTTP, STARTTLS</td>
</tr>
</tbody>
</table>
<p>See <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples/docker-compose-grafana-prometheus">examples/docker-compose-grafana-prometheus</a> for further documentation as well as an example.</p>
<h3>Connectivity</h3>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>connectivity</code></td>
<td align="left">Connectivity configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>connectivity.checker</code></td>
<td align="left">Connectivity checker configuration</td>
<td align="left">Required <code>{}</code></td>
</tr>
<tr>
<td align="left"><code>connectivity.checker.target</code></td>
<td align="left">Host to use for validating connectivity</td>
<td align="left">Required <code>""</code></td>
</tr>
<tr>
<td align="left"><code>connectivity.checker.interval</code></td>
<td align="left">Interval at which to validate connectivity</td>
<td align="left"><code>1m</code></td>
</tr>
</tbody>
</table>
<p>While Gatus is used to monitor other services, it is possible for Gatus itself to lose connectivity to the internet. In order to prevent Gatus from reporting endpoints as unhealthy when Gatus itself is unhealthy, you may configure Gatus to periodically check for internet connectivity.</p>
<p>All endpoint executions are skipped while the connectivity checker deems connectivity to be down.</p>
<pre><code class="language-yaml">connectivity:
checker:
target: 1.1.1.1:53
interval: 60s
</code></pre>
<h3>Remote instances (EXPERIMENTAL)</h3>
<p>This feature allows you to retrieve endpoint statuses from a remote Gatus instance.</p>
<p>There are two main use cases for this:</p>
<ul>
<li>You have multiple Gatus instances running on different machines, and you wish to visually expose the statuses through a single dashboard</li>
<li>You have one or more Gatus instances that are not publicly accessible (e.g. behind a firewall), and you wish to retrieve</li>
</ul>
<p>This is an experimental feature. It may be removed or updated in a breaking manner at any time. Furthermore, there are known issues with this feature. If you'd like to provide some feedback, please write a comment in <a href="https://github.com/TwiN/gatus/issues/64">#64</a>. Use at your own risk.</p>
<table>
<thead>
<tr>
<th align="left">Parameter</th>
<th align="left">Description</th>
<th align="left">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>remote</code></td>
<td align="left">Remote configuration</td>
<td align="left"><code>{}</code></td>
</tr>
<tr>
<td align="left"><code>remote.instances</code></td>
<td align="left">List of remote instances</td>
<td align="left">Required <code>[]</code></td>
</tr>
<tr>
<td align="left"><code>remote.instances.endpoint-prefix</code></td>
<td align="left">String to prefix all endpoint names with</td>
<td align="left"><code>""</code></td>
</tr>
<tr>
<td align="left"><code>remote.instances.url</code></td>
<td align="left">URL from which to retrieve endpoint statuses</td>
<td align="left">Required <code>""</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-yaml">remote:
instances:
- endpoint-prefix: "status.example.org-"
url: "https://status.example.org/api/v1/endpoints/statuses"
</code></pre>
<h2>Deployment</h2>
<p>Many examples can be found in the <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples">.examples</a> folder, but this section will focus on the most popular ways of deploying Gatus.</p>
<h3>Docker</h3>
<p>To run Gatus locally with Docker:</p>
<pre><code class="language-console">docker run -p 8080:8080 --name gatus twinproduction/gatus
</code></pre>
<p>Other than using one of the examples provided in the <a href="https://raw.githubusercontent.com/TwiN/gatus/master/.examples">.examples</a> folder, you can also try it out locally by creating a configuration file, we'll call it <code>config.yaml</code> for this example, and running the following command:</p>
<pre><code class="language-console">docker run -p 8080:8080 --mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml --name gatus twinproduction/gatus
</code></pre>
<p>If you're on Windows, replace <code>"$(pwd)"</code> by the absolute path to your current directory, e.g.:</p>
<pre><code class="language-console">docker run -p 8080:8080 --mount type=bind,source=C:/Users/Chris/Desktop/config.yaml,target=/config/config.yaml --name gatus twinproduction/gatus
</code></pre>
<p>To build the image locally:</p>
<pre><code class="language-console">docker build . -t twinproduction/gatus
</code></pre>
<h3>Helm Chart</h3>
<p><a href="https://helm.sh">Helm</a> must be installed to use the chart. Please refer to Helm's <a href="https://helm.sh/docs/">documentation</a> to get started.</p>
<p>Once Helm is set up properly, add the repository as follows:</p>
<pre><code class="language-console">helm repo add twin https://twin.github.io/helm-charts
helm repo update
helm install gatus twin/gatus
</code></pre>
<p>To get more details, please check <a href="https://github.com/TwiN/helm-charts/raw/master/charts/gatus/README.md">chart's configuration</a>.</p>
<h3>Terraform</h3>
<p>Gatus can be deployed on Terraform by using the following module: <a href="https://github.com/TwiN/terraform-kubernetes-gatus">terraform-kubernetes-gatus</a>.</p>
<h2>Running the tests</h2>
<pre><code class="language-console">go test -v ./...
</code></pre>
<h2>Using in Production</h2>
<p>See the <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#deployment">Deployment</a> section.</p>
<h2>FAQ</h2>
<h3>Sending a GraphQL request</h3>
<p>By setting <code>endpoints[].graphql</code> to true, the body will automatically be wrapped by the standard GraphQL <code>query</code> parameter.</p>
<p>For instance, the following configuration:</p>
<pre><code class="language-yaml">endpoints:
- name: filter-users-by-gender
url: http://localhost:8080/playground
method: POST
graphql: true
body: |
{
users(gender: "female") {
id
name
gender
avatar
}
}
conditions:
- "[STATUS] == 200"
- "[BODY].data.users[0].gender == female"
</code></pre>
<p>will send a <code>POST</code> request to <code>http://localhost:8080/playground</code> with the following body:</p>
<pre><code class="language-json">{"query":" {\n users(gender: \"female\") {\n id\n name\n gender\n avatar\n }\n }"}
</code></pre>
<h3>Recommended interval</h3>
<blockquote>
<p>📝 This does not apply if <code>disable-monitoring-lock</code> is set to <code>true</code>, as the monitoring lock is what tells Gatus to only evaluate one endpoint at a time.</p>
</blockquote>
<p>To ensure that Gatus provides reliable and accurate results (i.e. response time), Gatus only evaluates one endpoint at a time In other words, even if you have multiple endpoints with the same interval, they will not execute at the same time.</p>
<p>You can test this yourself by running Gatus with several endpoints configured with a very short, unrealistic interval, such as 1ms. You'll notice that the response time does not fluctuate - that is because while endpoints are evaluated on different goroutines, there's a global lock that prevents multiple endpoints from running at the same time.</p>
<p>Unfortunately, there is a drawback. If you have a lot of endpoints, including some that are very slow or prone to timing out (the default timeout is 10s), then it means that for the entire duration of the request, no other endpoint can be evaluated.</p>
<p>The interval does not include the duration of the request itself, which means that if an endpoint has an interval of 30s and the request takes 2s to complete, the timestamp between two evaluations will be 32s, not 30s.</p>
<p>While this does not prevent Gatus' from performing health checks on all other endpoints, it may cause Gatus to be unable to respect the configured interval, for instance:</p>
<ul>
<li>Endpoint A has an interval of 5s, and times out after 10s to complete</li>
<li>Endpoint B has an interval of 5s, and takes 1ms to complete</li>
<li>Endpoint B will be unable to run every 5s, because endpoint A's health evaluation takes longer than its interval</li>
</ul>
<p>To sum it up, while Gatus can handle any interval you throw at it, you're better off having slow requests with higher interval.</p>
<p>As a rule of thumb, I personally set the interval for more complex health checks to <code>5m</code> (5 minutes) and simple health checks used for alerting (PagerDuty/Twilio) to <code>30s</code>.</p>
<h3>Default timeouts</h3>
<table>
<thead>
<tr>
<th align="left">Endpoint type</th>
<th align="left">Timeout</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">HTTP</td>
<td align="left">10s</td>
</tr>
<tr>
<td align="left">TCP</td>
<td align="left">10s</td>
</tr>
<tr>
<td align="left">ICMP</td>
<td align="left">10s</td>
</tr>
</tbody>
</table>
<p>To modify the timeout, see <a href="https://raw.githubusercontent.com/TwiN/gatus/master/#client-configuration">Client configuration</a>.</p>
<h3>Monitoring a TCP endpoint</h3>
<p>By prefixing <code>endpoints[].url</code> with <code>tcp:\\</code>, you can monitor TCP endpoints at a very basic level:</p>
<pre><code class="language-yaml">endpoints:
- name: redis
url: "tcp://127.0.0.1:6379"
interval: 30s
conditions:
- "[CONNECTED] == true"
</code></pre>
<p>Placeholders <code>[STATUS]</code> and <code>[BODY]</code> as well as the fields <code>endpoints[].body</code>, <code>endpoints[].headers</code>, <code>endpoints[].method</code> and <code>endpoints[].graphql</code> are not supported for TCP endpoints.</p>
<p>This works for applications such as databases (Postgres, MySQL, etc.) and caches (Redis, Memcached, etc.).</p>
<blockquote>
<p>📝 <code>[CONNECTED] == true</code> does not guarantee that the endpoint itself is healthy - it only guarantees that there's something at the given address listening to the given port, and that a connection to that address was successfully established.</p>
</blockquote>
<h3>Monitoring a UDP endpoint</h3>
<p>By prefixing <code>endpoints[].url</code> with <code>udp:\\</code>, you can monitor UDP endpoints at a very basic level:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "udp://example.org:80"
conditions:
- "[CONNECTED] == true"
</code></pre>
<p>Placeholders <code>[STATUS]</code> and <code>[BODY]</code> as well as the fields <code>endpoints[].body</code>, <code>endpoints[].headers</code>, <code>endpoints[].method</code> and <code>endpoints[].graphql</code> are not supported for UDP endpoints.</p>
<p>This works for UDP based application.</p>
<h3>Monitoring a SCTP endpoint</h3>
<p>By prefixing <code>endpoints[].url</code> with <code>sctp:\\</code>, you can monitor Stream Control Transmission Protocol (SCTP) endpoints at a very basic level:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "sctp://127.0.0.1:38412"
conditions:
- "[CONNECTED] == true"
</code></pre>
<p>Placeholders <code>[STATUS]</code> and <code>[BODY]</code> as well as the fields <code>endpoints[].body</code>, <code>endpoints[].headers</code>, <code>endpoints[].method</code> and <code>endpoints[].graphql</code> are not supported for SCTP endpoints.</p>
<p>This works for SCTP based application.</p>
<h3>Monitoring a WebSocket endpoint</h3>
<p>By prefixing <code>endpoints[].url</code> with <code>ws://</code> or <code>wss://</code>, you can monitor WebSocket endpoints at a very basic level:</p>
<pre><code class="language-yaml">endpoints:
- name: example
url: "wss://example.com/"
body: "status"
conditions:
- "[CONNECTED] == true"
- "[BODY].result >= 0"
</code></pre>
<p>The <code>[BODY]</code> placeholder contains the output of the query, and <code>[CONNECTED]</code> shows whether the connection was successfully established.</p>
<h3>Monitoring an endpoint using ICMP</h3>
<p>By prefixing <code>endpoints[].url</code> with <code>icmp:\\</code>, you can monitor endpoints at a very basic level using ICMP, or more commonly known as "ping" or "echo":</p>
<pre><code class="language-yaml">endpoints:
- name: ping-example
url: "icmp://example.com"
conditions:
- "[CONNECTED] == true"
</code></pre>
<p>Only the placeholders <code>[CONNECTED]</code>, <code>[IP]</code> and <code>[RESPONSE_TIME]</code> are supported for endpoints of type ICMP. You can specify a domain prefixed by <code>icmp://</code>, or an IP address prefixed by <code>icmp://</code>.</p>
<p>If you run Gatus on Linux, please read the Linux section on <a href="https://github.com/prometheus-community/pro-bing#linux">https://github.com/prometheus-community/pro-bing#linux</a> if you encounter any problems.</p>
<h3>Monitoring an endpoint using DNS queries</h3>
<p>Defining a <code>dns</code> configuration in an endpoint will automatically mark said endpoint as an endpoint of type DNS:</p>
<pre><code class="language-yaml">endpoints:
- name: example-dns-query
url: "8.8.8.8" # Address of the DNS server to use
dns:
query-name: "example.com"
query-type: "A"
conditions:
- "[BODY] == 93.184.215.14"
- "[DNS_RCODE] == NOERROR"
</code></pre>
<p>There are two placeholders that can be used in the conditions for endpoints of type DNS:</p>
<ul>
<li>The placeholder <code>[BODY]</code> resolves to the output of the query. For instance, a query of type <code>A</code> would return an IPv4.</li>
<li>The placeholder <code>[DNS_RCODE]</code> resolves to the name associated to the response code returned by the query, such as <code>NOERROR</code>, <code>FORMERR</code>, <code>SERVFAIL</code>, <code>NXDOMAIN</code>, etc.</li>
</ul>
<h3>Monitoring an endpoint using SSH</h3>
<p>You can monitor endpoints using SSH by prefixing <code>endpoints[].url</code> with <code>ssh:\\</code>:</p>
<pre><code class="language-yaml">endpoints:
- name: ssh-example
url: "ssh://example.com:22" # port is optional. Default is 22.
ssh:
username: "username"
password: "password"
body: |
{
"command": "uptime"
}
interval: 1m
conditions:
- "[CONNECTED] == true"
- "[STATUS] == 0"
</code></pre>
<p>The following placeholders are supported for endpoints of type SSH:</p>
<ul>
<li><code>[CONNECTED]</code> resolves to <code>true</code> if the SSH connection was successful, <code>false</code> otherwise</li>
<li><code>[STATUS]</code> resolves the exit code of the command executed on the remote server (e.g. <code>0</code> for success)</li>
</ul>
<h3>Monitoring an endpoint using STARTTLS</h3>
<p>If you have an email server that you want to ensure there are no problems with, monitoring it through STARTTLS will serve as a good initial indicator:</p>
<pre><code class="language-yaml">endpoints:
- name: starttls-smtp-example
url: "starttls://smtp.gmail.com:587"
interval: 30m
client:
timeout: 5s
conditions:
- "[CONNECTED] == true"
- "[CERTIFICATE_EXPIRATION] > 48h"
</code></pre>
<h3>Monitoring an endpoint using TLS</h3>
<p>Monitoring endpoints using SSL/TLS encryption, such as LDAP over TLS, can help detect certificate expiration:</p>
<pre><code class="language-yaml">endpoints:
- name: tls-ldaps-example
url: "tls://ldap.example.com:636"
interval: 30m
client:
timeout: 5s
conditions:
- "[CONNECTED] == true"
- "[CERTIFICATE_EXPIRATION] > 48h"
</code></pre>
<h3>Monitoring domain expiration</h3>
<p>You can monitor the expiration of a domain with all endpoint types except for DNS by using the <code>[DOMAIN_EXPIRATION]</code> placeholder:</p>
<pre><code class="language-yaml">endpoints:
- name: check-domain-and-certificate-expiration
url: "https://example.org"
interval: 1h
conditions:
- "[DOMAIN_EXPIRATION] > 720h"
- "[CERTIFICATE_EXPIRATION] > 240h"
</code></pre>
<blockquote>
<p>⚠ The usage of the <code>[DOMAIN_EXPIRATION]</code> placeholder requires Gatus to send a request to the official IANA WHOIS service <a href="https://github.com/TwiN/whois">through a library</a> and in some cases, a secondary request to a TLD-specific WHOIS server (e.g. <code>whois.nic.sh</code>). To prevent the WHOIS service from throttling your IP address if you send too many requests, Gatus will prevent you from using the <code>[DOMAIN_EXPIRATION]</code> placeholder on an endpoint with an interval of less than <code>5m</code>.</p>
</blockquote>
<h3>disable-monitoring-lock</h3>
<p>Setting <code>disable-monitoring-lock</code> to <code>true</code> means that multiple endpoints could be monitored at the same time.</p>
<p>While this behavior wouldn't generally be harmful, conditions using the <code>[RESPONSE_TIME]</code> placeholder could be impacted by the evaluation of multiple endpoints at the same time, therefore, the default value for this parameter is <code>false</code>.</p>
<p>There are three main reasons why you might want to disable the monitoring lock:</p>
<ul>
<li>You're using Gatus for load testing (each endpoint are periodically evaluated on a different goroutine, so technically, if you create 100 endpoints with a 1 seconds interval, Gatus will send 100 requests per second)</li>
<li>You have a <em>lot</em> of endpoints to monitor</li>
<li>You want to test multiple endpoints at very short intervals (< 5s)</li>
</ul>
<h3>Reloading configuration on the fly</h3>
<p>For the sake of convenience, Gatus automatically reloads the configuration on the fly if the loaded configuration file is updated while Gatus is running.</p>
<p>By default, the application will exit if the updating configuration is invalid, but you can configure Gatus to continue running if the configuration file is updated with an invalid configuration by setting <code>skip-invalid-config-update</code> to <code>true</code>.</p>
<p>Keep in mind that it is in your best interest to ensure the validity of the configuration file after each update you apply to the configuration file while Gatus is running by looking at the log and making sure that you do not see the following message:</p>
<pre><code>The configuration file was updated, but it is not valid. The old configuration will continue being used.
</code></pre>
<p>Failure to do so may result in Gatus being unable to start if the application is restarted for whatever reason.</p>
<p>I recommend not setting <code>skip-invalid-config-update</code> to <code>true</code> to avoid a situation like this, but the choice is yours to make.</p>
<p><strong>If you are not using a file storage</strong>, updating the configuration while Gatus is running is effectively the same as restarting the application.</p>
<blockquote>
<p>📝 Updates may not be detected if the config file is bound instead of the config folder. See <a href="https://github.com/TwiN/gatus/issues/151">#151</a>.</p>
</blockquote>
<h3>Endpoint groups</h3>
<p>Endpoint groups are used for grouping multiple endpoints together on the dashboard.</p>
<pre><code class="language-yaml">endpoints:
- name: frontend
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- name: backend
group: core
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- name: monitoring
group: internal
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- name: nas
group: internal
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
- name: random endpoint that is not part of a group
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
</code></pre>
<p>The configuration above will result in a dashboard that looks like this:</p>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/endpoint-groups.png" alt="Gatus Endpoint Groups"></p>
<h3>Exposing Gatus on a custom path</h3>
<p>Currently, you can expose the Gatus UI using a fully qualified domain name (FQDN) such as <code>status.example.org</code>. However, it does not support path-based routing, which means you cannot expose it through a URL like <code>example.org/status/</code>.</p>
<p>For more information, see <a href="https://github.com/TwiN/gatus/issues/88">https://github.com/TwiN/gatus/issues/88</a>.</p>
<h3>Exposing Gatus on a custom port</h3>
<p>By default, Gatus is exposed on port <code>8080</code>, but you may specify a different port by setting the <code>web.port</code> parameter:</p>
<pre><code class="language-yaml">web:
port: 8081
</code></pre>
<p>If you're using a PaaS like Heroku that doesn't let you set a custom port and exposes it through an environment variable instead, you can use that environment variable directly in the configuration file:</p>
<pre><code class="language-yaml">web:
port: ${PORT}
</code></pre>
<h3>Configuring a startup delay</h3>
<p>If, for any reason, you need Gatus to wait for a given amount of time before monitoring the endpoints on application start, you can use the <code>GATUS_DELAY_START_SECONDS</code> environment variable to make Gatus sleep on startup.</p>
<h3>Keeping your configuration small</h3>
<p>While not specific to Gatus, you can leverage YAML anchors to create a default configuration. If you have a large configuration file, this should help you keep things clean.</p>
<details>
<summary>Example</summary>
<pre><code class="language-yaml">default-endpoint: &defaults
group: core
interval: 5m
client:
insecure: true
timeout: 30s
conditions:
- "[STATUS] == 200"
endpoints:
- name: anchor-example-1
<<: *defaults # This will merge the configuration under &defaults with this endpoint
url: "https://example.org"
- name: anchor-example-2
<<: *defaults
group: example # This will override the group defined in &defaults
url: "https://example.com"
- name: anchor-example-3
<<: *defaults
url: "https://twin.sh/health"
conditions: # This will override the conditions defined in &defaults
- "[STATUS] == 200"
- "[BODY].status == UP"
</code></pre>
</details>
<h3>Proxy client configuration</h3>
<p>You can configure a proxy for the client to use by setting the <code>proxy-url</code> parameter in the client configuration.</p>
<pre><code class="language-yaml">endpoints:
- name: website
url: "https://twin.sh/health"
client:
proxy-url: http://proxy.example.com:8080
conditions:
- "[STATUS] == 200"
</code></pre>
<h3>How to fix 431 Request Header Fields Too Large error</h3>
<p>Depending on where your environment is deployed and what kind of middleware or reverse proxy sits in front of Gatus, you may run into this issue. This could be because the request headers are too large, e.g. big cookies.</p>
<p>By default, <code>web.read-buffer-size</code> is set to <code>8192</code>, but increasing this value like so will increase the read buffer size:</p>
<pre><code class="language-yaml">web:
read-buffer-size: 32768
</code></pre>
<h3>Badges</h3>
<h4>Uptime</h4>
<p><img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/uptimes/1h/badge.svg?sanitize=true" alt="Uptime 1h"> <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/uptimes/24h/badge.svg?sanitize=true" alt="Uptime 24h"> <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/uptimes/7d/badge.svg?sanitize=true" alt="Uptime 7d"></p>
<p>Gatus can automatically generate an SVG badge for one of your monitored endpoints. This allows you to put badges in your individual applications' README or even create your own status page if you desire.</p>
<p>The path to generate a badge is the following:</p>
<pre><code>/api/v1/endpoints/{key}/uptimes/{duration}/badge.svg
</code></pre>
<p>Where:</p>
<ul>
<li><code>{duration}</code> is <code>30d</code> (alpha), <code>7d</code>, <code>24h</code> or <code>1h</code></li>
<li><code>{key}</code> has the pattern <code><GROUP_NAME>_<ENDPOINT_NAME></code> in which both variables have <code> </code>, <code>/</code>, <code>_</code>, <code>,</code> and <code>.</code> replaced by <code>-</code>.</li>
</ul>
<p>For instance, if you want the uptime during the last 24 hours from the endpoint <code>frontend</code> in the group <code>core</code>, the URL would look like this:</p>
<pre><code>https://example.com/api/v1/endpoints/core_frontend/uptimes/7d/badge.svg
</code></pre>
<p>If you want to display an endpoint that is not part of a group, you must leave the group value empty:</p>
<pre><code>https://example.com/api/v1/endpoints/_frontend/uptimes/7d/badge.svg
</code></pre>
<p>Example:</p>
<pre><code>![Uptime 24h](https://status.twin.sh/api/v1/endpoints/core_blog-external/uptimes/24h/badge.svg)
</code></pre>
<p>If you'd like to see a visual example of each badge available, you can simply navigate to the endpoint's detail page.</p>
<h4>Health</h4>
<p><img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/health/badge.svg?sanitize=true" alt="Health"></p>
<p>The path to generate a badge is the following:</p>
<pre><code>/api/v1/endpoints/{key}/health/badge.svg
</code></pre>
<p>Where:</p>
<ul>
<li><code>{key}</code> has the pattern <code><GROUP_NAME>_<ENDPOINT_NAME></code> in which both variables have <code> </code>, <code>/</code>, <code>_</code>, <code>,</code> and <code>.</code> replaced by <code>-</code>.</li>
</ul>
<p>For instance, if you want the current status of the endpoint <code>frontend</code> in the group <code>core</code>, the URL would look like this:</p>
<pre><code>https://example.com/api/v1/endpoints/core_frontend/health/badge.svg
</code></pre>
<h4>Health (Shields.io)</h4>
<p><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fstatus.twin.sh%2Fapi%2Fv1%2Fendpoints%2Fcore_blog-external%2Fhealth%2Fbadge.shields" alt="Health"></p>
<p>The path to generate a badge is the following:</p>
<pre><code>/api/v1/endpoints/{key}/health/badge.shields
</code></pre>
<p>Where:</p>
<ul>
<li><code>{key}</code> has the pattern <code><GROUP_NAME>_<ENDPOINT_NAME></code> in which both variables have <code> </code>, <code>/</code>, <code>_</code>, <code>,</code> and <code>.</code> replaced by <code>-</code>.</li>
</ul>
<p>For instance, if you want the current status of the endpoint <code>frontend</code> in the group <code>core</code>, the URL would look like this:</p>
<pre><code>https://example.com/api/v1/endpoints/core_frontend/health/badge.shields
</code></pre>
<p>See more information about the Shields.io badge endpoint <a href="https://shields.io/badges/endpoint-badge">here</a>.</p>
<h4>Response time</h4>
<p><img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/response-times/1h/badge.svg?sanitize=true" alt="Response time 1h"> <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/response-times/24h/badge.svg?sanitize=true" alt="Response time 24h"> <img src="https://status.twin.sh/api/v1/endpoints/core_blog-external/response-times/7d/badge.svg?sanitize=true" alt="Response time 7d"></p>
<p>The endpoint to generate a badge is the following:</p>
<pre><code>/api/v1/endpoints/{key}/response-times/{duration}/badge.svg
</code></pre>
<p>Where:</p>
<ul>
<li><code>{duration}</code> is <code>30d</code> (alpha), <code>7d</code>, <code>24h</code> or <code>1h</code></li>
<li><code>{key}</code> has the pattern <code><GROUP_NAME>_<ENDPOINT_NAME></code> in which both variables have <code> </code>, <code>/</code>, <code>_</code>, <code>,</code> and <code>.</code> replaced by <code>-</code>.</li>
</ul>
<h5>How to change the color thresholds of the response time badge</h5>
<p>To change the response time badges' threshold, a corresponding configuration can be added to an endpoint. The values in the array correspond to the levels [Awesome, Great, Good, Passable, Bad] All five values must be given in milliseconds (ms).</p>
<pre><code>endpoints:
- name: nas
group: internal
url: "https://example.org/"
interval: 5m
conditions:
- "[STATUS] == 200"
ui:
badge:
response-time:
thresholds: [550, 850, 1350, 1650, 1750]
</code></pre>
<h3>API</h3>
<p>Gatus provides a simple read-only API that can be queried in order to programmatically determine endpoint status and history.</p>
<p>All endpoints are available via a GET request to the following endpoint:</p>
<pre><code>/api/v1/endpoints/statuses
</code></pre>
<p>Example: <a href="https://status.twin.sh/api/v1/endpoints/statuses">https://status.twin.sh/api/v1/endpoints/statuses</a></p>
<p>Specific endpoints can also be queried by using the following pattern:</p>
<pre><code>/api/v1/endpoints/{group}_{endpoint}/statuses
</code></pre>
<p>Example: <a href="https://status.twin.sh/api/v1/endpoints/core_blog-home/statuses">https://status.twin.sh/api/v1/endpoints/core_blog-home/statuses</a></p>
<p>Gzip compression will be used if the <code>Accept-Encoding</code> HTTP header contains <code>gzip</code>.</p>
<p>The API will return a JSON payload with the <code>Content-Type</code> response header set to <code>application/json</code>. No such header is required to query the API.</p>
<h3>Installing as binary</h3>
<p>You can download Gatus as a binary using the following command:</p>
<pre><code>go install github.com/TwiN/gatus/v5@latest
</code></pre>
<h3>High level design overview</h3>
<p><img src="https://raw.githubusercontent.com/TwiN/gatus/master/.github/assets/gatus-diagram.jpg" alt="Gatus diagram"></p>
+
+
+ aceberg/WatchYourLAN
+ 2024-12-01T01:53:48Z
+ tag:github.com,2024-12-01:/aceberg/WatchYourLAN
+
+ <p>Lightweight network IP scanner. Can be used to notify about new hosts and monitor host online/offline history</p><hr><h1><a href="https://github.com/aceberg/WatchYourLAN"> <img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/logo.png" width="20"> </a>WatchYourLAN</h1>
<br>
<p><a href="https://github.com/aceberg/WatchYourLAN/actions/workflows/main-docker-all.yml"><img src="https://github.com/aceberg/WatchYourLAN/actions/workflows/main-docker-all.yml/badge.svg?sanitize=true" alt="Docker"></a> <a href="https://goreportcard.com/report/github.com/aceberg/WatchYourLAN"><img src="https://goreportcard.com/badge/github.com/aceberg/WatchYourLAN" alt="Go Report Card"></a> <a href="https://codeclimate.com/github/aceberg/WatchYourLAN/maintainability"><img src="https://api.codeclimate.com/v1/badges/46b17f99edc1726b5d7d/maintainability" alt="Maintainability"></a> <a href="https://hub.docker.com/r/aceberg/watchyourlan"><img src="https://img.shields.io/docker/image-size/aceberg/watchyourlan" alt="Docker Image Size (latest semver)"></a> <a href="https://github.com/aceberg/WatchYourLAN/discussions"><img src="https://img.shields.io/github/discussions/aceberg/WatchYourLAN" alt="GitHub Discussions"></a></p>
<p>Lightweight network IP scanner with web GUI. Features:</p>
<ul>
<li>Send notification when new host is found</li>
<li>Monitor hosts online/offline history</li>
<li>Keep a list of all hosts in the network</li>
<li>Send data to <code>InfluxDB2</code> to make a <code>Grafana</code> dashboard</li>
</ul>
<p><img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_1.png" alt="Screenshot_1"></p>
<h2>More screenshots</h2>
<details>
<summary>Expand</summary>
<p><img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_5.png" alt="Screenshot_5"><br> <img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_2.png" alt="Screenshot_2"><br> <img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_3.png" alt="Screenshot_3"><br> <img src="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/assets/Screenshot_4.png" alt="Screenshot_4"></p>
</details>
<h2>Quick start</h2>
<details>
<summary>Expand</summary>
<p>Replace <code>$YOURTIMEZONE</code> with correct time zone and <code>$YOURIFACE</code> with network interface you want to scan. Network mode must be <code>host</code>. Set <code>$DOCKERDATAPATH</code> for container to save data:</p>
<pre><code class="language-sh">docker run --name wyl \
-e "IFACES=$YOURIFACE" \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan
</code></pre>
<p>Web GUI should be at <a href="http://localhost:8840">http://localhost:8840</a></p>
</details>
<h2>Auth</h2>
<details>
<summary>Expand</summary>
<p><strong>WatchYourLAN</strong> does not have built-in auth option. But you can use it with SSO tools like Authelia, or my simple auth app <a href="https://github.com/aceberg/ForAuth">ForAuth</a>.<br> Here is an example <a href="https://github.com/aceberg/WatchYourLAN/raw/main/docker-compose-auth.yml">docker-compose-auth.yml</a>.</p>
<blockquote>
<p><span>⚠</span> <strong>WARNING!</strong><br> Please, don't forget that WYL needs <code>host</code> network mode to work. So, WYL port will be exposed in this setup. You need to limit access to it with firewall or other measures.</p>
</blockquote>
</details>
<h2>Install on Linux</h2>
<details>
<summary>Expand</summary>
<p>All binary packages can be found in <a href="https://github.com/aceberg/WatchYourLAN/releases/latest">latest</a> release. There are <code>.deb</code>, <code>.rpm</code>, <code>.apk</code> (Alpine Linux) and <code>.tar.gz</code> files.</p>
<p>Supported architectures: <code>amd64</code>, <code>i386</code>, <code>arm_v5</code>, <code>arm_v6</code>, <code>arm_v7</code>, <code>arm64</code>.<br> Dependencies: <code>arp-scan</code>, <code>tzdata</code>.</p>
<p>For <code>amd64</code> there is a <code>deb</code> repo <a href="https://github.com/aceberg/ppa">available</a></p>
</details>
<h2>Config</h2>
<details>
<summary>Expand</summary>
<p>Configuration can be done through config file, GUI or environment variables. Variable names is <code>config_v2.yaml</code> file are the same, but in lowcase.</p>
<h3>Basic config</h3>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>TZ</td>
<td>Set your timezone for correct time</td>
<td></td>
</tr>
<tr>
<td>HOST</td>
<td>Listen address</td>
<td>0.0.0.0</td>
</tr>
<tr>
<td>PORT</td>
<td>Port for web GUI</td>
<td>8840</td>
</tr>
<tr>
<td>THEME</td>
<td>Any theme name from <a href="https://bootswatch.com">https://bootswatch.com</a> in lowcase or <a href="https://github.com/aceberg/aceberg-bootswatch-fork">additional</a></td>
<td>sand</td>
</tr>
<tr>
<td>COLOR</td>
<td>Background color: light or dark</td>
<td>dark</td>
</tr>
<tr>
<td>NODEPATH</td>
<td>Path to local node modules</td>
<td></td>
</tr>
<tr>
<td>SHOUTRRR_URL</td>
<td>WatchYourLAN uses <a href="https://github.com/containrrr/shoutrrr">Shoutrrr</a> to send notifications. It is already integrated, just needs a correct URL. Examples for Discord, Email, Gotify, Matrix, Ntfy, Pushover, Slack, Telegram, Generic Webhook and etc are <a href="https://containrrr.dev/shoutrrr/v0.8/services/gotify/">here</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3>Scan settings</h3>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>IFACES</td>
<td>Interfaces to scan. Could be one or more, separated by space. See <a href="https://github.com/aceberg/WatchYourLAN/raw/main/docs/VLAN_ARP_SCAN.md">docs/VLAN_ARP_SCAN.md</a>.</td>
<td></td>
</tr>
<tr>
<td>TIMEOUT</td>
<td>Time between scans (seconds)</td>
<td>120</td>
</tr>
<tr>
<td>ARP_ARGS</td>
<td>Arguments for <code>arp-scan</code>. Enable <code>debug</code> log level to see resulting command. (Example: <code>-r 1</code>). See <a href="https://github.com/aceberg/WatchYourLAN/raw/main/docs/VLAN_ARP_SCAN.md">docs/VLAN_ARP_SCAN.md</a>.</td>
<td></td>
</tr>
<tr>
<td>ARP_STRS ARP_STRS_JOINED</td>
<td>See <a href="https://github.com/aceberg/WatchYourLAN/raw/main/docs/VLAN_ARP_SCAN.md">docs/VLAN_ARP_SCAN.md</a>.</td>
<td></td>
</tr>
<tr>
<td>LOG_LEVEL</td>
<td>Log level: <code>debug</code>, <code>info</code>, <code>warn</code> or <code>error</code></td>
<td>info</td>
</tr>
<tr>
<td>TRIM_HIST</td>
<td>Remove history after (hours)</td>
<td>48</td>
</tr>
<tr>
<td>HIST_IN_DB</td>
<td>Store History in DB - if <code>false</code>, the History will be stored only in memory and will be lost on app restart. Though, it will keep the app DB smaller (and InfluxDB is recommended for long term History storage)</td>
<td>false</td>
</tr>
<tr>
<td>USE_DB</td>
<td>Either <code>sqlite</code> or <code>postgres</code></td>
<td>sqlite</td>
</tr>
<tr>
<td>PG_CONNECT</td>
<td>Address to connect to PostgreSQL. (Example: <code>postgres://username:password@192.168.0.1:5432/dbname?sslmode=disable</code>). Full list of URL parameters <a href="https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters">here</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3>InfluxDB2 config</h3>
<p>This config matches Grafana's config for InfluxDB data source</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>Default</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td>INFLUX_ENABLE</td>
<td>Enable export to InfluxDB2</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>INFLUX_SKIP_TLS</td>
<td>Skip TLS Verify</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>INFLUX_ADDR</td>
<td>Address:port of InfluxDB2 server</td>
<td></td>
<td><a href="https://192.168.2.3:8086/">https://192.168.2.3:8086/</a></td>
</tr>
<tr>
<td>INFLUX_BUCKET</td>
<td>InfluxDB2 bucket</td>
<td></td>
<td>test</td>
</tr>
<tr>
<td>INFLUX_ORG</td>
<td>InfluxDB2 org</td>
<td></td>
<td>home</td>
</tr>
<tr>
<td>INFLUX_TOKEN</td>
<td>Secret token, generated by InfluxDB2</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</details>
<h2>Config file</h2>
<details>
<summary>Expand</summary>
<p>Config file name is <code>config_v2.yaml</code>. Example:</p>
<pre><code class="language-yaml">arp_args: ""
color: dark
hist_in_db: false
host: 0.0.0.0
ifaces: enp4s0
influx_addr: ""
influx_bucket: ""
influx_enable: false
influx_org: ""
influx_skip_tls: false
influx_token: ""
log_level: info
nodepath: ""
pg_connect: ""
port: "8840"
shoutrrr_url: "gotify://192.168.0.1:8083/AwQqpAae.rrl5Ob/?title=Unknown host detected&DisableTLS=yes"
theme: sand
timeout: 60
trim_hist: 48
use_db: sqlite
</code></pre>
</details>
<h2>Options</h2>
<details>
<summary>Expand</summary>
<table>
<thead>
<tr>
<th>Key</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>-d</td>
<td>Path to config dir</td>
<td>/data/WatchYourLAN</td>
</tr>
<tr>
<td>-n</td>
<td>Path to node modules (see below)</td>
<td></td>
</tr>
</tbody>
</table>
</details>
<h2>Local network only</h2>
<details>
<summary>Expand</summary>
<p>By default, this app pulls themes, icons and fonts from the internet. But, in some cases, it may be useful to have an independent from global network setup. I created a separate <a href="https://github.com/aceberg/my-dockerfiles/tree/main/node-bootstrap">image</a> with all necessary modules and fonts. Run with Docker:</p>
<pre><code class="language-sh">docker run --name node-bootstrap \
-p 8850:8850 \
aceberg/node-bootstrap
</code></pre>
<pre><code class="language-sh">docker run --name wyl \
-e "IFACES=$YOURIFACE" \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan -n "http://$YOUR_IP:8850"
</code></pre>
<p>Or use <a href="https://raw.githubusercontent.com/aceberg/WatchYourLAN/main/docker-compose-local.yml">docker-compose</a></p>
</details>
<h2>API & Integrations</h2>
<details>
<summary>Expand</summary>
<h3>API</h3>
<p>Moved to <a href="https://github.com/aceberg/WatchYourLAN/raw/main/docs/API.md">docs/API.md</a></p>
<h3>Integrations</h3>
<ul>
<li><a href="https://github.com/drwahl/py-watchyourlanclient">Python API client</a> by <a href="https://github.com/drwahl">drwahl</a></li>
</ul>
</details>
<h2>Thanks</h2>
<details>
<summary>Expand</summary>
<ul>
<li>All go packages listed in <a href="https://github.com/aceberg/WatchYourLAN/network/dependencies">dependencies</a></li>
<li>Favicon and logo: <a href="https://www.flaticon.com/free-icons/access-point">Access point icons created by Freepik - Flaticon</a></li>
<li><a href="https://getbootstrap.com/">Bootstrap</a></li>
<li>Themes: <a href="https://bootswatch.com">Free themes for Bootstrap</a></li>
</ul>
</details>
+
+
\ No newline at end of file
diff --git a/go/weekly/index.xml b/go/weekly/index.xml
new file mode 100644
index 00000000000..acdcf76f949
--- /dev/null
+++ b/go/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Go Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:51Z
+ Weekly Trending of Go in GitHub
+
+
+ sirupsen/logrus
+ 2024-12-01T01:42:51Z
+ tag:github.com,2024-12-01:/sirupsen/logrus
+
+ <p>Structured, pluggable logging for Go.</p><hr><h1>Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"> <a href="https://github.com/sirupsen/logrus/actions?query=workflow%3ACI"><img src="https://github.com/sirupsen/logrus/workflows/CI/badge.svg?sanitize=true" alt="Build Status"></a> <a href="https://travis-ci.org/sirupsen/logrus"><img src="https://travis-ci.org/sirupsen/logrus.svg?branch=master" alt="Build Status"></a> <a href="https://pkg.go.dev/github.com/sirupsen/logrus"><img src="https://pkg.go.dev/badge/github.com/sirupsen/logrus.svg?sanitize=true" alt="Go Reference"></a></h1>
<p>Logrus is a structured logger for Go (golang), completely API compatible with the standard library logger.</p>
<p><strong>Logrus is in maintenance-mode.</strong> We will not be introducing new features. It's simply too hard to do in a way that won't break many people's projects, which is the last thing you want from your Logging library (again...).</p>
<p>This does not mean Logrus is dead. Logrus will continue to be maintained for security, (backwards compatible) bug fixes, and performance (where we are limited by the interface).</p>
<p>I believe Logrus' biggest contribution is to have played a part in today's widespread use of structured logging in Golang. There doesn't seem to be a reason to do a major, breaking iteration into Logrus V2, since the fantastic Go community has built those independently. Many fantastic alternatives have sprung up. Logrus would look like those, had it been re-designed with what we know about structured logging in Go today. Check out, for example, <a href="https://github.com/rs/zerolog">Zerolog</a>, <a href="https://github.com/uber-go/zap">Zap</a>, and <a href="https://github.com/apex/log">Apex</a>.</p>
<p><strong>Seeing weird case-sensitive problems?</strong> It's in the past been possible to import Logrus as both upper- and lower-case. Due to the Go package environment, this caused issues in the community and we needed a standard. Some environments experienced problems with the upper-case variant, so the lower-case was decided. Everything using <code>logrus</code> will need to use the lower-case: <code>github.com/sirupsen/logrus</code>. Any package that isn't, should be changed.</p>
<p>To fix Glide, see <a href="https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437">these comments</a>. For an in-depth explanation of the casing issue, see <a href="https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276">this comment</a>.</p>
<p>Nicely color-coded in development (when a TTY is attached, otherwise just plain text):</p>
<p><img src="http://i.imgur.com/PY7qMwd.png" alt="Colored"></p>
<p>With <code>log.SetFormatter(&log.JSONFormatter{})</code>, for easy parsing by logstash or Splunk:</p>
<pre><code class="language-text">{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}
{"level":"warning","msg":"The group's number increased tremendously!",
"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}
{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}
{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}
{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
</code></pre>
<p>With the default <code>log.SetFormatter(&log.TextFormatter{})</code> when a TTY is not attached, the output is compatible with the <a href="http://godoc.org/github.com/kr/logfmt">logfmt</a> format:</p>
<pre><code class="language-text">time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
</code></pre>
<p>To ensure this behaviour even if a TTY is attached, set your formatter as follows:</p>
<pre><code class="language-go"> log.SetFormatter(&log.TextFormatter{
DisableColors: true,
FullTimestamp: true,
})
</code></pre>
<h4>Logging Method Name</h4>
<p>If you wish to add the calling method as a field, instruct the logger via:</p>
<pre><code class="language-go">log.SetReportCaller(true)
</code></pre>
<p>This adds the caller as 'method' like so:</p>
<pre><code class="language-json">{"animal":"penguin","level":"fatal","method":"github.com/sirupsen/arcticcreatures.migrate","msg":"a penguin swims by",
"time":"2014-03-10 19:57:38.562543129 -0400 EDT"}
</code></pre>
<pre><code class="language-text">time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="a penguin swims by" animal=penguin
</code></pre>
<p>Note that this does add measurable overhead - the cost will depend on the version of Go, but is between 20 and 40% in recent tests with 1.6 and 1.7. You can validate this in your environment via benchmarks:</p>
<pre><code>go test -bench=.*CallerTracing
</code></pre>
<h4>Case-sensitivity</h4>
<p>The organization's name was changed to lower-case--and this will not be changed back. If you are getting import conflicts due to case sensitivity, please use the lower-case import: <code>github.com/sirupsen/logrus</code>.</p>
<h4>Example</h4>
<p>The simplest way to use Logrus is simply the package-level exported logger:</p>
<pre><code class="language-go">package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
}).Info("A walrus appears")
}
</code></pre>
<p>Note that it's completely api-compatible with the stdlib logger, so you can replace your <code>log</code> imports everywhere with <code>log "github.com/sirupsen/logrus"</code> and you'll now have the flexibility of Logrus. You can customize it all you want:</p>
<pre><code class="language-go">package main
import (
"os"
log "github.com/sirupsen/logrus"
)
func init() {
// Log as JSON instead of the default ASCII formatter.
log.SetFormatter(&log.JSONFormatter{})
// Output to stdout instead of the default stderr
// Can be any io.Writer, see below for File example
log.SetOutput(os.Stdout)
// Only log the warning severity or above.
log.SetLevel(log.WarnLevel)
}
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean")
log.WithFields(log.Fields{
"omg": true,
"number": 122,
}).Warn("The group's number increased tremendously!")
log.WithFields(log.Fields{
"omg": true,
"number": 100,
}).Fatal("The ice breaks!")
// A common pattern is to re-use fields between logging statements by re-using
// the logrus.Entry returned from WithFields()
contextLogger := log.WithFields(log.Fields{
"common": "this is a common field",
"other": "I also should be logged always",
})
contextLogger.Info("I'll be logged with common and other field")
contextLogger.Info("Me too")
}
</code></pre>
<p>For more advanced usage such as logging to multiple locations from the same application, you can also create an instance of the <code>logrus</code> Logger:</p>
<pre><code class="language-go">package main
import (
"os"
"github.com/sirupsen/logrus"
)
// Create a new instance of the logger. You can have any number of instances.
var log = logrus.New()
func main() {
// The API for setting attributes is a little different than the package level
// exported logger. See Godoc.
log.Out = os.Stdout
// You could set this to any `io.Writer` such as a file
// file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
// if err == nil {
// log.Out = file
// } else {
// log.Info("Failed to log to file, using default stderr")
// }
log.WithFields(logrus.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean")
}
</code></pre>
<h4>Fields</h4>
<p>Logrus encourages careful, structured logging through logging fields instead of long, unparseable error messages. For example, instead of: <code>log.Fatalf("Failed to send event %s to topic %s with key %d")</code>, you should log the much more discoverable:</p>
<pre><code class="language-go">log.WithFields(log.Fields{
"event": event,
"topic": topic,
"key": key,
}).Fatal("Failed to send event")
</code></pre>
<p>We've found this API forces you to think about logging in a way that produces much more useful logging messages. We've been in countless situations where just a single added field to a log statement that was already there would've saved us hours. The <code>WithFields</code> call is optional.</p>
<p>In general, with Logrus using any of the <code>printf</code>-family functions should be seen as a hint you should add a field, however, you can still use the <code>printf</code>-family functions with Logrus.</p>
<h4>Default Fields</h4>
<p>Often it's helpful to have fields <em>always</em> attached to log statements in an application or parts of one. For example, you may want to always log the <code>request_id</code> and <code>user_ip</code> in the context of a request. Instead of writing <code>log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})</code> on every line, you can create a <code>logrus.Entry</code> to pass around instead:</p>
<pre><code class="language-go">requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
requestLogger.Info("something happened on that request") # will log request_id and user_ip
requestLogger.Warn("something not great happened")
</code></pre>
<h4>Hooks</h4>
<p>You can add hooks for logging levels. For example to send errors to an exception tracking service on <code>Error</code>, <code>Fatal</code> and <code>Panic</code>, info to StatsD or log to multiple places simultaneously, e.g. syslog.</p>
<p>Logrus comes with <a href="https://raw.githubusercontent.com/sirupsen/logrus/master/hooks/">built-in hooks</a>. Add those, or your custom hook, in <code>init</code>:</p>
<pre><code class="language-go">import (
log "github.com/sirupsen/logrus"
"gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
"log/syslog"
)
func init() {
// Use the Airbrake hook to report errors that have Error severity or above to
// an exception tracker. You can create custom hooks, see the Hooks section.
log.AddHook(airbrake.NewHook(123, "xyz", "production"))
hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
if err != nil {
log.Error("Unable to connect to local syslog daemon")
} else {
log.AddHook(hook)
}
}
</code></pre>
<p>Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the <a href="https://raw.githubusercontent.com/sirupsen/logrus/master/hooks/syslog/README.md">syslog hook README</a>.</p>
<p>A list of currently known service hooks can be found in this wiki <a href="https://github.com/sirupsen/logrus/wiki/Hooks">page</a></p>
<h4>Level logging</h4>
<p>Logrus has seven logging levels: Trace, Debug, Info, Warning, Error, Fatal and Panic.</p>
<pre><code class="language-go">log.Trace("Something very low level.")
log.Debug("Useful debugging information.")
log.Info("Something noteworthy happened!")
log.Warn("You should probably take a look at this.")
log.Error("Something failed but I'm not quitting.")
// Calls os.Exit(1) after logging
log.Fatal("Bye.")
// Calls panic() after logging
log.Panic("I'm bailing.")
</code></pre>
<p>You can set the logging level on a <code>Logger</code>, then it will only log entries with that severity or anything above it:</p>
<pre><code class="language-go">// Will log anything that is info or above (warn, error, fatal, panic). Default.
log.SetLevel(log.InfoLevel)
</code></pre>
<p>It may be useful to set <code>log.Level = logrus.DebugLevel</code> in a debug or verbose environment if your application has that.</p>
<p>Note: If you want different log levels for global (<code>log.SetLevel(...)</code>) and syslog logging, please check the <a href="https://raw.githubusercontent.com/sirupsen/logrus/master/hooks/syslog/README.md#different-log-levels-for-local-and-remote-logging">syslog hook README</a>.</p>
<h4>Entries</h4>
<p>Besides the fields added with <code>WithField</code> or <code>WithFields</code> some fields are automatically added to all logging events:</p>
<ol>
<li><code>time</code>. The timestamp when the entry was created.</li>
<li><code>msg</code>. The logging message passed to <code>{Info,Warn,Error,Fatal,Panic}</code> after the <code>AddFields</code> call. E.g. <code>Failed to send event.</code></li>
<li><code>level</code>. The logging level. E.g. <code>info</code>.</li>
</ol>
<h4>Environments</h4>
<p>Logrus has no notion of environment.</p>
<p>If you wish for hooks and formatters to only be used in specific environments, you should handle that yourself. For example, if your application has a global variable <code>Environment</code>, which is a string representation of the environment you could do:</p>
<pre><code class="language-go">import (
log "github.com/sirupsen/logrus"
)
func init() {
// do something here to set environment depending on an environment variable
// or command-line flag
if Environment == "production" {
log.SetFormatter(&log.JSONFormatter{})
} else {
// The TextFormatter is default, you don't actually have to do this.
log.SetFormatter(&log.TextFormatter{})
}
}
</code></pre>
<p>This configuration is how <code>logrus</code> was intended to be used, but JSON in production is mostly only useful if you do log aggregation with tools like Splunk or Logstash.</p>
<h4>Formatters</h4>
<p>The built-in logging formatters are:</p>
<ul>
<li><code>logrus.TextFormatter</code>. Logs the event in colors if stdout is a tty, otherwise without colors.
<ul>
<li><em>Note:</em> to force colored output when there is no TTY, set the <code>ForceColors</code> field to <code>true</code>. To force no colored output even if there is a TTY set the <code>DisableColors</code> field to <code>true</code>. For Windows, see <a href="https://github.com/mattn/go-colorable">github.com/mattn/go-colorable</a>.</li>
<li>When colors are enabled, levels are truncated to 4 characters by default. To disable truncation set the <code>DisableLevelTruncation</code> field to <code>true</code>.</li>
<li>When outputting to a TTY, it's often helpful to visually scan down a column where all the levels are the same width. Setting the <code>PadLevelText</code> field to <code>true</code> enables this behavior, by adding padding to the level text.</li>
<li>All options are listed in the <a href="https://godoc.org/github.com/sirupsen/logrus#TextFormatter">generated docs</a>.</li>
</ul> </li>
<li><code>logrus.JSONFormatter</code>. Logs fields as JSON.
<ul>
<li>All options are listed in the <a href="https://godoc.org/github.com/sirupsen/logrus#JSONFormatter">generated docs</a>.</li>
</ul> </li>
</ul>
<p>Third party logging formatters:</p>
<ul>
<li><a href="https://github.com/joonix/log"><code>FluentdFormatter</code></a>. Formats entries that can be parsed by Kubernetes and Google Container Engine.</li>
<li><a href="https://github.com/fabienm/go-logrus-formatters"><code>GELF</code></a>. Formats entries so they comply to Graylog's <a href="http://docs.graylog.org/en/2.4/pages/gelf.html">GELF 1.1 specification</a>.</li>
<li><a href="https://github.com/bshuster-repo/logrus-logstash-hook"><code>logstash</code></a>. Logs fields as <a href="http://logstash.net">Logstash</a> Events.</li>
<li><a href="https://github.com/x-cray/logrus-prefixed-formatter"><code>prefixed</code></a>. Displays log entry source along with alternative layout.</li>
<li><a href="https://github.com/aybabtme/logzalgo"><code>zalgo</code></a>. Invoking the Power of Zalgo.</li>
<li><a href="https://github.com/antonfisher/nested-logrus-formatter"><code>nested-logrus-formatter</code></a>. Converts logrus fields to a nested structure.</li>
<li><a href="https://github.com/zput/zxcTool"><code>powerful-logrus-formatter</code></a>. get fileName, log's line number and the latest function's name when print log; Save log to files.</li>
<li><a href="https://github.com/nolleh/caption_json_formatter"><code>caption-json-formatter</code></a>. logrus's message json formatter with human-readable caption added.</li>
</ul>
<p>You can define your formatter by implementing the <code>Formatter</code> interface, requiring a <code>Format</code> method. <code>Format</code> takes an <code>*Entry</code>. <code>entry.Data</code> is a <code>Fields</code> type (<code>map[string]interface{}</code>) with all your fields as well as the default ones (see Entries section above):</p>
<pre><code class="language-go">type MyJSONFormatter struct {
}
log.SetFormatter(new(MyJSONFormatter))
func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
// Note this doesn't include Time, Level and Message which are available on
// the Entry. Consult `godoc` on information about those fields or read the
// source of the official loggers.
serialized, err := json.Marshal(entry.Data)
if err != nil {
return nil, fmt.Errorf("Failed to marshal fields to JSON, %w", err)
}
return append(serialized, '\n'), nil
}
</code></pre>
<h4>Logger as an <code>io.Writer</code></h4>
<p>Logrus can be transformed into an <code>io.Writer</code>. That writer is the end of an <code>io.Pipe</code> and it is your responsibility to close it.</p>
<pre><code class="language-go">w := logger.Writer()
defer w.Close()
srv := http.Server{
// create a stdlib log.Logger that writes to
// logrus.Logger.
ErrorLog: log.New(w, "", 0),
}
</code></pre>
<p>Each line written to that writer will be printed the usual way, using formatters and hooks. The level for those entries is <code>info</code>.</p>
<p>This means that we can override the standard library logger easily:</p>
<pre><code class="language-go">logger := logrus.New()
logger.Formatter = &logrus.JSONFormatter{}
// Use logrus for standard log output
// Note that `log` here references stdlib's log
// Not logrus imported under the name `log`.
log.SetOutput(logger.Writer())
</code></pre>
<h4>Rotation</h4>
<p>Log rotation is not provided with Logrus. Log rotation should be done by an external program (like <code>logrotate(8)</code>) that can compress and delete old log entries. It should not be a feature of the application-level logger.</p>
<h4>Tools</h4>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/gogap/logrus_mate">Logrus Mate</a></td>
<td>Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will be generated with different configs in different environments.</td>
</tr>
<tr>
<td><a href="https://github.com/heirko/go-contrib/tree/master/logrusHelper">Logrus Viper Helper</a></td>
<td>An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of <a href="https://github.com/gogap/logrus_mate">Logrus Mate</a>. <a href="https://github.com/heirko/iris-contrib/raw/master/middleware/logrus-logger/example">sample</a></td>
</tr>
</tbody>
</table>
<h4>Testing</h4>
<p>Logrus has a built in facility for asserting the presence of log messages. This is implemented through the <code>test</code> hook and provides:</p>
<ul>
<li>decorators for existing logger (<code>test.NewLocal</code> and <code>test.NewGlobal</code>) which basically just adds the <code>test</code> hook</li>
<li>a test logger (<code>test.NewNullLogger</code>) that just records log messages (and does not output any):</li>
</ul>
<pre><code class="language-go">import(
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/assert"
"testing"
)
func TestSomething(t*testing.T){
logger, hook := test.NewNullLogger()
logger.Error("Helloerror")
assert.Equal(t, 1, len(hook.Entries))
assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
assert.Equal(t, "Helloerror", hook.LastEntry().Message)
hook.Reset()
assert.Nil(t, hook.LastEntry())
}
</code></pre>
<h4>Fatal handlers</h4>
<p>Logrus can register one or more functions that will be called when any <code>fatal</code> level message is logged. The registered handlers will be executed before logrus performs an <code>os.Exit(1)</code>. This behavior may be helpful if callers need to gracefully shutdown. Unlike a <code>panic("Something went wrong...")</code> call which can be intercepted with a deferred <code>recover</code> a call to <code>os.Exit(1)</code> can not be intercepted.</p>
<pre><code>...
handler := func() {
// gracefully shutdown something...
}
logrus.RegisterExitHandler(handler)
...
</code></pre>
<h4>Thread safety</h4>
<p>By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs. If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.</p>
<p>Situation when locking is not needed includes:</p>
<ul>
<li> <p>You have no hooks registered, or hooks calling is already thread-safe.</p> </li>
<li> <p>Writing to logger.Out is already thread-safe, for example:</p>
<ol>
<li> <p>logger.Out is protected by locks.</p> </li>
<li> <p>logger.Out is an os.File handler opened with <code>O_APPEND</code> flag, and every write is smaller than 4k. (This allows multi-thread/multi-process writing)</p> <p>(Refer to <a href="http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/">http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/</a>)</p> </li>
</ol> </li>
</ul>
+
+
+ VictoriaMetrics/VictoriaMetrics
+ 2024-12-01T01:42:51Z
+ tag:github.com,2024-12-01:/VictoriaMetrics/VictoriaMetrics
+
+ <p>VictoriaMetrics: fast, cost-effective monitoring solution and time series database</p><hr><h1>VictoriaMetrics</h1>
<p><a href="https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest"><img src="https://img.shields.io/github/release/VictoriaMetrics/VictoriaMetrics.svg?style=flat-square" alt="Latest Release"></a> <a href="https://hub.docker.com/r/victoriametrics/victoria-metrics"><img src="https://img.shields.io/docker/pulls/victoriametrics/victoria-metrics.svg?maxAge=604800" alt="Docker Pulls"></a> <a href="https://slack.victoriametrics.com/"><img src="https://img.shields.io/badge/join%20slack-%23victoriametrics-brightgreen.svg?sanitize=true" alt="Slack"></a> <a href="https://github.com/VictoriaMetrics/VictoriaMetrics/raw/master/LICENSE"><img src="https://img.shields.io/github/license/VictoriaMetrics/VictoriaMetrics.svg?sanitize=true" alt="GitHub license"></a> <a href="https://goreportcard.com/report/github.com/VictoriaMetrics/VictoriaMetrics"><img src="https://goreportcard.com/badge/github.com/VictoriaMetrics/VictoriaMetrics" alt="Go Report"></a> <a href="https://github.com/VictoriaMetrics/VictoriaMetrics/actions"><img src="https://github.com/VictoriaMetrics/VictoriaMetrics/workflows/main/badge.svg?sanitize=true" alt="Build Status"></a> <a href="https://codecov.io/gh/VictoriaMetrics/VictoriaMetrics"><img src="https://codecov.io/gh/VictoriaMetrics/VictoriaMetrics/branch/master/graph/badge.svg?sanitize=true" alt="codecov"></a></p>
<picture>
<source srcset="docs/logo_white.webp" media="(prefers-color-scheme: dark)">
<source srcset="docs/logo.webp" media="(prefers-color-scheme: light)">
<img src="https://raw.githubusercontent.com/VictoriaMetrics/VictoriaMetrics/master/docs/logo.webp" width="300" alt="VictoriaMetrics logo">
</picture>
<p>VictoriaMetrics is a fast, cost-saving, and scalable solution for monitoring and managing time series data. It delivers high performance and reliability, making it an ideal choice for businesses of all sizes.</p>
<p>Here are some resources and information about VictoriaMetrics:</p>
<ul>
<li>Documentation: <a href="https://docs.victoriametrics.com">docs.victoriametrics.com</a></li>
<li>Case studies: <a href="https://docs.victoriametrics.com/casestudies/">Grammarly, Roblox, Wix,...</a>.</li>
<li>Available: <a href="https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest">Binary releases</a>, <a href="https://hub.docker.com/r/victoriametrics/victoria-metrics/">Docker images</a>, <a href="https://github.com/VictoriaMetrics/VictoriaMetrics">Source code</a></li>
<li>Deployment types: <a href="https://docs.victoriametrics.com/">Single-node version</a>, <a href="https://docs.victoriametrics.com/cluster-victoriametrics/">Cluster version</a>, and <a href="https://docs.victoriametrics.com/enterprise/">Enterprise version</a></li>
<li>Changelog: <a href="https://docs.victoriametrics.com/changelog/">CHANGELOG</a>, and <a href="https://docs.victoriametrics.com/#how-to-upgrade-victoriametrics">How to upgrade</a></li>
<li>Community: <a href="https://slack.victoriametrics.com/">Slack</a>, <a href="https://x.com/VictoriaMetrics">X (Twitter)</a>, <a href="https://www.linkedin.com/company/victoriametrics/">LinkedIn</a>, <a href="https://www.youtube.com/@VictoriaMetrics">YouTube</a></li>
</ul>
<p>Yes, we open-source both the single-node VictoriaMetrics and the cluster version.</p>
<h2>Prominent features</h2>
<p>VictoriaMetrics is optimized for timeseries data, even when old time series are constantly replaced by new ones at a high rate, it offers a lot of features:</p>
<ul>
<li><strong>Long-term storage for Prometheus</strong> or as a drop-in replacement for Prometheus and Graphite in Grafana.</li>
<li><strong>Powerful stream aggregation</strong>: Can be used as a StatsD alternative.</li>
<li><strong>Ideal for big data</strong>: Works well with large amounts of time series data from APM, Kubernetes, IoT sensors, connected cars, industrial telemetry, financial data and various <a href="https://docs.victoriametrics.com/enterprise/">Enterprise workloads</a>.</li>
<li><strong>Query language</strong>: Supports both PromQL and the more performant MetricsQL.</li>
<li><strong>Easy to setup</strong>: No dependencies, single <a href="https://medium.com/@valyala/stripping-dependency-bloat-in-victoriametrics-docker-image-983fb5912b0d">small binary</a>, configuration through command-line flags, but the default is also fine-tuned; backup and restore with <a href="https://medium.com/@valyala/how-victoriametrics-makes-instant-snapshots-for-multi-terabyte-time-series-data-e1f3fb0e0282">instant snapshots</a>.</li>
<li><strong>Global query view</strong>: Multiple Prometheus instances or any other data sources may ingest data into VictoriaMetrics and queried via a single query.</li>
<li><strong>Various Protocols</strong>: Support metric scraping, ingestion and backfilling in various protocol.
<ul>
<li><a href="https://docs.victoriametrics.com/#how-to-scrape-prometheus-exporters-such-as-node-exporter">Prometheus exporters</a>, <a href="https://docs.victoriametrics.com/#prometheus-setup">Prometheus remote write API</a>, <a href="https://docs.victoriametrics.com/#how-to-import-data-in-prometheus-exposition-format">Prometheus exposition format</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-send-data-from-influxdb-compatible-agents-such-as-telegraf">InfluxDB line protocol</a> over HTTP, TCP and UDP.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-send-data-from-graphite-compatible-agents-such-as-statsd">Graphite plaintext protocol</a> with <a href="https://graphite.readthedocs.io/en/latest/tags.html#carbon">tags</a>.</li>
<li><a href="https://docs.victoriametrics.com/#sending-data-via-telnet-put-protocol">OpenTSDB put message</a>.</li>
<li><a href="https://docs.victoriametrics.com/#sending-opentsdb-data-via-http-apiput-requests">HTTP OpenTSDB /api/put requests</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-import-data-in-json-line-format">JSON line format</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-import-csv-data">Arbitrary CSV data</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-import-data-in-native-format">Native binary format</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-send-data-from-datadog-agent">DataDog agent or DogStatsD</a>.</li>
<li><a href="https://docs.victoriametrics.com/#how-to-send-data-from-newrelic-agent">NewRelic infrastructure agent</a>.</li>
<li><a href="https://docs.victoriametrics.com/#sending-data-via-opentelemetry">OpenTelemetry metrics format</a>.</li>
</ul> </li>
<li><strong>NFS-based storages</strong>: Supports storing data on NFS-based storages such as Amazon EFS, Google Filestore.</li>
<li>And many other features such as metrics relabeling, cardinality limiter, etc.</li>
</ul>
<h2>Enterprise version</h2>
<p>In addition, the Enterprise version includes extra features:</p>
<ul>
<li><strong>Anomaly detection</strong>: Automation and simplification of your alerting rules, covering complex anomalies found in metrics data.</li>
<li><strong>Backup automation</strong>: Automates regular backup procedures.</li>
<li><strong>Multiple retentions</strong>: Reducing storage costs by specifying different retentions for different datasets.</li>
<li><strong>Downsampling</strong>: Reducing storage costs and increasing performance for queries over historical data.</li>
<li><strong>Stable releases</strong> with long-term support lines (<a href="https://docs.victoriametrics.com/lts-releases/">LTS</a>).</li>
<li><strong>Comprehensive support</strong>: First-class consulting, feature requests and technical support provided by the core VictoriaMetrics dev team.</li>
<li>Many other features, which you can read about on <a href="https://docs.victoriametrics.com/enterprise/">the Enterprise page</a>.</li>
</ul>
<p><a href="mailto:info@victoriametrics.com">Contact us</a> if you need enterprise support for VictoriaMetrics. Or you can request a free trial license <a href="https://victoriametrics.com/products/enterprise/trial/">here</a>, downloaded Enterprise binaries are available at <a href="https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest">Github Releases</a>.</p>
<p>We strictly apply security measures in everything we do. VictoriaMetrics has achieved security certifications for Database Software Development and Software-Based Monitoring Services. See <a href="https://victoriametrics.com/security/">Security page</a> for more details.</p>
<h2>Benchmarks</h2>
<p>Some good benchmarks VictoriaMetrics achieved:</p>
<ul>
<li><strong>Minimal memory footprint</strong>: handling millions of unique timeseries with <a href="https://medium.com/@valyala/insert-benchmarks-with-inch-influxdb-vs-victoriametrics-e31a41ae2893">10x less RAM</a> than InfluxDB, up to <a href="https://valyala.medium.com/prometheus-vs-victoriametrics-benchmark-on-node-exporter-metrics-4ca29c75590f">7x less RAM</a> than Prometheus, Thanos or Cortex.</li>
<li><strong>Highly scalable and performance</strong> for <a href="https://medium.com/@valyala/high-cardinality-tsdb-benchmarks-victoriametrics-vs-timescaledb-vs-influxdb-13e6ee64dd6b">data ingestion</a> and <a href="https://medium.com/@valyala/when-size-matters-benchmarking-victoriametrics-vs-timescale-and-influxdb-6035811952d4">querying</a>, <a href="https://medium.com/@valyala/insert-benchmarks-with-inch-influxdb-vs-victoriametrics-e31a41ae2893">20x outperforms</a> InfluxDB and TimescaleDB.</li>
<li><strong>High data compression</strong>: <a href="https://medium.com/@valyala/when-size-matters-benchmarking-victoriametrics-vs-timescale-and-influxdb-6035811952d4">70x more data points</a> may be stored into limited storage than TimescaleDB, <a href="https://valyala.medium.com/prometheus-vs-victoriametrics-benchmark-on-node-exporter-metrics-4ca29c75590f">7x less storage</a> space is required than Prometheus, Thanos or Cortex.</li>
<li><strong>Reducing storage costs</strong>: <a href="https://docs.victoriametrics.com/casestudies/#grammarly">10x more effective</a> than Graphite according to the Grammarly case study.</li>
<li><strong>A single-node VictoriaMetrics</strong> can replace medium-sized clusters built with competing solutions such as Thanos, M3DB, Cortex, InfluxDB or TimescaleDB. See <a href="https://medium.com/@valyala/comparing-thanos-to-victoriametrics-cluster-b193bea1683">VictoriaMetrics vs Thanos</a>, <a href="https://medium.com/@valyala/measuring-vertical-scalability-for-time-series-databases-in-google-cloud-92550d78d8ae">Measuring vertical scalability</a>, <a href="https://promcon.io/2019-munich/talks/remote-write-storage-wars/">Remote write storage wars - PromCon 2019</a>.</li>
<li><strong>Optimized for storage</strong>: <a href="https://medium.com/@valyala/high-cardinality-tsdb-benchmarks-victoriametrics-vs-timescaledb-vs-influxdb-13e6ee64dd6b">Works well with high-latency IO</a> and low IOPS (HDD and network storage in AWS, Google Cloud, Microsoft Azure, etc.).</li>
</ul>
<h2>Community and contributions</h2>
<p>Feel free asking any questions regarding VictoriaMetrics:</p>
<ul>
<li><a href="https://slack.victoriametrics.com/">Slack Inviter</a> and <a href="https://victoriametrics.slack.com/">Slack channel</a></li>
<li><a href="https://x.com/VictoriaMetrics/">X (Twitter)</a></li>
<li><a href="https://www.linkedin.com/company/victoriametrics/">Linkedin</a></li>
<li><a href="https://www.reddit.com/r/VictoriaMetrics/">Reddit</a></li>
<li><a href="https://t.me/VictoriaMetrics_en">Telegram-en</a></li>
<li><a href="https://t.me/VictoriaMetrics_ru1">Telegram-ru</a></li>
<li><a href="https://mastodon.social/@victoriametrics/">Mastodon</a></li>
</ul>
<p>If you like VictoriaMetrics and want to contribute, then please <a href="https://docs.victoriametrics.com/contributing/">read these docs</a>.</p>
<h2>VictoriaMetrics Logo</h2>
<p>The provided <a href="https://github.com/VictoriaMetrics/VictoriaMetrics/raw/master/VM_logo.zip">ZIP file</a> contains three folders with different logo orientations. Each folder includes the following file types:</p>
<ul>
<li>JPEG: Preview files</li>
<li>PNG: Preview files with transparent background</li>
<li>AI: Adobe Illustrator files</li>
</ul>
<h3>VictoriaMetrics Logo Usage Guidelines</h3>
<h4>Font</h4>
<ul>
<li>Font Used: Lato Black</li>
<li>Download here: <a href="https://fonts.google.com/specimen/Lato">Lato Font</a></li>
</ul>
<h4>Color Palette</h4>
<ul>
<li>Black <a href="https://www.color-hex.com/color/000000">#000000</a></li>
<li>Purple <a href="https://www.color-hex.com/color/4d0e82">#4d0e82</a></li>
<li>Orange <a href="https://www.color-hex.com/color/ff2e00">#ff2e00</a></li>
<li>White <a href="https://www.color-hex.com/color/ffffff">#ffffff</a></li>
</ul>
<h3>Logo Usage Rules</h3>
<ul>
<li>Only use the Lato Black font as specified.</li>
<li>Maintain sufficient clear space around the logo for visibility.</li>
<li>Do not modify the spacing, alignment, or positioning of design elements.</li>
<li>You may resize the logo as needed, but ensure all proportions remain intact.</li>
</ul>
<p>Thank you for your cooperation!</p>
+
+
+ semaphoreui/semaphore
+ 2024-12-01T01:42:51Z
+ tag:github.com,2024-12-01:/semaphoreui/semaphore
+
+ <p>Modern UI and powerful API for Ansible, Terraform, OpenTofu, PowerShell and other DevOps tools.</p><hr><h1>Semaphore UI</h1>
<p>Modern UI for Ansible, Terraform, OpenTofu, PowerShell and other DevOps tools.</p>
<p><a href="https://discord.gg/5R6k7hNGcH"><img src="https://img.shields.io/badge/discord_community-510b80?style=for-the-badge&logo=discord" alt="telegram"></a> <a href="https://www.youtube.com/@semaphoreui"><img src="https://img.shields.io/badge/youtube_channel-red?style=for-the-badge&logo=youtube" alt="youtube"></a></p>
<!-- [![devcontainer](https://img.shields.io/badge/dev_container-gray?style=for-the-badge&logo=github)](https://codespaces.new/semaphoreui/semaphore) -->
<!-- [![docker](https://img.shields.io/badge/container_configurator-white?style=for-the-badge&logo=docker)](https://semaphoreui.com/install/docker/) -->
<p><img src="https://user-images.githubusercontent.com/914224/134777345-8789d9e4-ff0d-439c-b80e-ddc56b74fcee.png" alt="responsive-ui-phone1"></p>
<p>If your project has grown and deploying from the terminal is no longer feasible, then Semaphore UI is the tool you need.</p>
<h2>Live Demo</h2>
<p>Try the latest version of Semaphore at <a href="https://cloud.semaphoreui.com">https://cloud.semaphoreui.com</a>.</p>
<h2>What is Semaphore UI?</h2>
<p>Semaphore UI is a modern web interface for managing popular DevOps tools.</p>
<p>Semaphore UI allows you to:</p>
<ul>
<li>Easily run Ansible playbooks, Terraform and OpenTofu code, as well as Bash and PowerShell scripts.</li>
<li>Receive notifications about failed tasks.</li>
<li>Control access to your deployment system.</li>
</ul>
<h2>Key Concepts</h2>
<ol>
<li><strong>Projects</strong> is a collection of related resources, configurations, and tasks. Each project allows you to organize and manage your automation efforts in one place, defining the scope of tasks such as deploying applications, running scripts, or orchestrating cloud resources. Projects help group resources, inventories, task templates, and environments for streamlined automation workflows.</li>
<li><strong>Task Templates</strong> are reusable definitions of tasks that can be executed on demand or scheduled. A template specifies what actions should be performed, such as running Ansible playbooks, Terraform configurations, or other automation tasks. By using templates, you can standardize tasks and easily re-execute them with minimal effort, ensuring consistent results across different environments.</li>
<li><strong>Task</strong> is a specific instance of a job or operation executed by Semaphore. It refers to running a predefined action (like an Ansible playbook or a script) using a task template. Tasks can be initiated manually or automatically through schedules and are tracked to give you detailed feedback on the execution, including success, failure, and logs.</li>
<li><strong>Schedules</strong> allow you to automate task execution at specified times or intervals. This feature is useful for running periodic maintenance tasks, backups, or deployments without manual intervention. You can configure recurring schedules to ensure important automation tasks are performed regularly and on time.</li>
<li><strong>Inventory</strong> is a collection of target hosts (servers, virtual machines, containers, etc.) on which tasks will be executed. The inventory includes details about the managed nodes such as IP addresses, SSH credentials, and grouping information. It allows for dynamic control over which environments and hosts your automation will interact with.</li>
<li><strong>Environment</strong> refers to a configuration context that holds sensitive information such as environment variables and secrets used by tasks during execution. It separates sensitive data from task templates and allows you to switch between different setups while running the same task template across different environments securely.</li>
</ol>
<h2>Getting Started</h2>
<p>You can install Semaphore using the following methods:</p>
<ul>
<li>Docker</li>
<li>SaaS (<a href="https://cloud.semaphoreui.com">Semaphore Cloud</a>)</li>
<li>Deploy a VM from a marketplace (AWS, DigitalOcean, etc.)</li>
<li>Snap</li>
<li>Binary file</li>
<li>Debian or RPM package</li>
</ul>
<h3>Docker</h3>
<p>The most popular way to install Semaphore is via Docker.</p>
<pre><code>docker run -p 3000:3000 --name semaphore \
-e SEMAPHORE_DB_DIALECT=bolt \
-e SEMAPHORE_ADMIN=admin \
-e SEMAPHORE_ADMIN_PASSWORD=changeme \
-e SEMAPHORE_ADMIN_NAME=Admin \
-e SEMAPHORE_ADMIN_EMAIL=admin@localhost \
-d semaphoreui/semaphore:latest
</code></pre>
<p>We recommend using the <a href="https://semaphoreui.com/install/docker/">Container Configurator</a> to get the ideal Docker configuration for Semaphore.</p>
<h3>SaaS</h3>
<p>We offer a SaaS solution for using Semaphore UI without installation. Check it out at <a href="https://cloud.semaphoreui.com">Semaphore Cloud</a>.</p>
<h3>Deploy VM from Marketplace</h3>
<p>Supported cloud providers:</p>
<ul>
<li><a href="https://cloud.semaphore.run/servers/new/semaphore">Semaphore Run</a></li>
<li><a href="https://aws.amazon.com/marketplace/pp/prodview-5noeat2jipwca">AWS</a></li>
<li><a href="https://yandex.cloud/en-ru/marketplace/products/fastlix/semaphore">Yandex Cloud</a></li>
<li>DigitalOcean (coming soon)</li>
</ul>
<h3>Other Installation Methods</h3>
<p>For more installation options, visit our <a href="https://semaphoreui.com/install">Installation page</a>.</p>
<h2>Documentation</h2>
<ul>
<li><a href="https://docs.semaphoreui.com">User Guide</a></li>
<li><a href="https://semaphoreui.com/api-docs">API Reference</a></li>
</ul>
<h2>Contribution</h2>
<ul>
<li><a href="https://github.com/semaphoreui/semaphore/raw/develop/CONTRIBUTING.md">Contribution Guide</a></li>
<li><a href="https://codespaces.new/semaphoreui/semaphore">Dev Container</a> (default user <code>admin</code> / <code>changeme</code>)</li>
</ul>
<h2>License</h2>
<p>MIT © <a href="https://github.com/fiftin">Denis Gukov</a></p>
<p><a href="https://github.com/sponsors/semaphoreui"><img src="https://img.shields.io/badge/become_a_sponsor-d9c7ff?style=for-the-badge&logo=github-sponsors" alt="sponsor"></a> <a href="https://ko-fi.com/fiftin"><img src="https://img.shields.io/badge/buy_me_a_coffee-0ba0e0?style=for-the-badge&logo=kofi" alt="ko-fi"></a> <a href="https://www.patreon.com/semaphoreui"><img src="https://img.shields.io/badge/become_a_patreon-teal?style=for-the-badge&logo=patreon" alt="patreon"></a></p>
+
+
\ No newline at end of file
diff --git a/golo/daily/index.xml b/golo/daily/index.xml
index b3a41915179..88897f04213 100644
--- a/golo/daily/index.xml
+++ b/golo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Golo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:25Z
+ 2024-12-01T01:32:20Z
Daily Trending of Golo in GitHub
\ No newline at end of file
diff --git a/golo/monthly/index.xml b/golo/monthly/index.xml
new file mode 100644
index 00000000000..8be6f511866
--- /dev/null
+++ b/golo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Golo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:58Z
+ Monthly Trending of Golo in GitHub
+
+
\ No newline at end of file
diff --git a/golo/weekly/index.xml b/golo/weekly/index.xml
new file mode 100644
index 00000000000..428990db38e
--- /dev/null
+++ b/golo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Golo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:57Z
+ Weekly Trending of Golo in GitHub
+
+
\ No newline at end of file
diff --git a/gosu/daily/index.xml b/gosu/daily/index.xml
index ad78231d312..147c5157f01 100644
--- a/gosu/daily/index.xml
+++ b/gosu/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gosu Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:25Z
+ 2024-12-01T01:32:21Z
Daily Trending of Gosu in GitHub
\ No newline at end of file
diff --git a/gosu/monthly/index.xml b/gosu/monthly/index.xml
new file mode 100644
index 00000000000..5a26952e060
--- /dev/null
+++ b/gosu/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gosu Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:58Z
+ Monthly Trending of Gosu in GitHub
+
+
\ No newline at end of file
diff --git a/gosu/weekly/index.xml b/gosu/weekly/index.xml
new file mode 100644
index 00000000000..54932a5ee81
--- /dev/null
+++ b/gosu/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gosu Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:57Z
+ Weekly Trending of Gosu in GitHub
+
+
\ No newline at end of file
diff --git a/grace/daily/index.xml b/grace/daily/index.xml
index 56f6b202816..fe45304ee04 100644
--- a/grace/daily/index.xml
+++ b/grace/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Grace Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:25Z
+ 2024-12-01T01:32:21Z
Daily Trending of Grace in GitHub
\ No newline at end of file
diff --git a/grace/monthly/index.xml b/grace/monthly/index.xml
new file mode 100644
index 00000000000..0586d9b199a
--- /dev/null
+++ b/grace/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Grace Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:59Z
+ Monthly Trending of Grace in GitHub
+
+
\ No newline at end of file
diff --git a/grace/weekly/index.xml b/grace/weekly/index.xml
new file mode 100644
index 00000000000..290184411e0
--- /dev/null
+++ b/grace/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Grace Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:58Z
+ Weekly Trending of Grace in GitHub
+
+
\ No newline at end of file
diff --git a/gradle/daily/index.xml b/gradle/daily/index.xml
index 8bcabf4d46f..60ce3f513a8 100644
--- a/gradle/daily/index.xml
+++ b/gradle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Gradle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:26Z
+ 2024-12-01T01:32:20Z
Daily Trending of Gradle in GitHub
\ No newline at end of file
diff --git a/gradle/monthly/index.xml b/gradle/monthly/index.xml
new file mode 100644
index 00000000000..07c1ba873f0
--- /dev/null
+++ b/gradle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gradle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:58Z
+ Monthly Trending of Gradle in GitHub
+
+
\ No newline at end of file
diff --git a/gradle/weekly/index.xml b/gradle/weekly/index.xml
new file mode 100644
index 00000000000..05bdb5dc1f9
--- /dev/null
+++ b/gradle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Gradle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:58Z
+ Weekly Trending of Gradle in GitHub
+
+
\ No newline at end of file
diff --git a/grammatical-framework/daily/index.xml b/grammatical-framework/daily/index.xml
index 503c1f887de..68fc9c734e4 100644
--- a/grammatical-framework/daily/index.xml
+++ b/grammatical-framework/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Grammatical Framework Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:27Z
+ 2024-12-01T01:32:22Z
Daily Trending of Grammatical Framework in GitHub
\ No newline at end of file
diff --git a/grammatical-framework/monthly/index.xml b/grammatical-framework/monthly/index.xml
new file mode 100644
index 00000000000..6b744380130
--- /dev/null
+++ b/grammatical-framework/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Grammatical Framework Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:00Z
+ Monthly Trending of Grammatical Framework in GitHub
+
+
\ No newline at end of file
diff --git a/grammatical-framework/weekly/index.xml b/grammatical-framework/weekly/index.xml
new file mode 100644
index 00000000000..ddd07e28b71
--- /dev/null
+++ b/grammatical-framework/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Grammatical Framework Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:59Z
+ Weekly Trending of Grammatical Framework in GitHub
+
+
\ No newline at end of file
diff --git a/graph-modeling-language/daily/index.xml b/graph-modeling-language/daily/index.xml
index 9c4aa902ccd..65d8da23d4f 100644
--- a/graph-modeling-language/daily/index.xml
+++ b/graph-modeling-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Graph Modeling Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:26Z
+ 2024-12-01T01:32:22Z
Daily Trending of Graph Modeling Language in GitHub
\ No newline at end of file
diff --git a/graph-modeling-language/monthly/index.xml b/graph-modeling-language/monthly/index.xml
new file mode 100644
index 00000000000..8f1c6ea7cc0
--- /dev/null
+++ b/graph-modeling-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Graph Modeling Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:53:59Z
+ Monthly Trending of Graph Modeling Language in GitHub
+
+
\ No newline at end of file
diff --git a/graph-modeling-language/weekly/index.xml b/graph-modeling-language/weekly/index.xml
new file mode 100644
index 00000000000..8992d8f6797
--- /dev/null
+++ b/graph-modeling-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Graph Modeling Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:00Z
+ Weekly Trending of Graph Modeling Language in GitHub
+
+
\ No newline at end of file
diff --git a/graphql/daily/index.xml b/graphql/daily/index.xml
index 86a73c29296..c2d1652c010 100644
--- a/graphql/daily/index.xml
+++ b/graphql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GraphQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:26Z
+ 2024-12-01T01:32:23Z
Daily Trending of GraphQL in GitHub
\ No newline at end of file
diff --git a/graphql/monthly/index.xml b/graphql/monthly/index.xml
new file mode 100644
index 00000000000..bee86a85b8b
--- /dev/null
+++ b/graphql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GraphQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:00Z
+ Monthly Trending of GraphQL in GitHub
+
+
\ No newline at end of file
diff --git a/graphql/weekly/index.xml b/graphql/weekly/index.xml
new file mode 100644
index 00000000000..c97c02aed09
--- /dev/null
+++ b/graphql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GraphQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:42:59Z
+ Weekly Trending of GraphQL in GitHub
+
+
\ No newline at end of file
diff --git a/graphviz-(dot)/daily/index.xml b/graphviz-(dot)/daily/index.xml
index 1e222e19434..286ace0b22c 100644
--- a/graphviz-(dot)/daily/index.xml
+++ b/graphviz-(dot)/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Graphviz (DOT) Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:28Z
+ 2024-12-01T01:32:24Z
Daily Trending of Graphviz (DOT) in GitHub
\ No newline at end of file
diff --git a/graphviz-(dot)/monthly/index.xml b/graphviz-(dot)/monthly/index.xml
new file mode 100644
index 00000000000..f5289cce32a
--- /dev/null
+++ b/graphviz-(dot)/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Graphviz (DOT) Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:02Z
+ Monthly Trending of Graphviz (DOT) in GitHub
+
+
\ No newline at end of file
diff --git a/graphviz-(dot)/weekly/index.xml b/graphviz-(dot)/weekly/index.xml
new file mode 100644
index 00000000000..83b2eb70a64
--- /dev/null
+++ b/graphviz-(dot)/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Graphviz (DOT) Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:01Z
+ Weekly Trending of Graphviz (DOT) in GitHub
+
+
\ No newline at end of file
diff --git a/groovy-server-pages/daily/index.xml b/groovy-server-pages/daily/index.xml
index d2fcbda74c8..97d8353f601 100644
--- a/groovy-server-pages/daily/index.xml
+++ b/groovy-server-pages/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Groovy Server Pages Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:28Z
+ 2024-12-01T01:32:23Z
Daily Trending of Groovy Server Pages in GitHub
\ No newline at end of file
diff --git a/groovy-server-pages/monthly/index.xml b/groovy-server-pages/monthly/index.xml
new file mode 100644
index 00000000000..4913803b844
--- /dev/null
+++ b/groovy-server-pages/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Groovy Server Pages Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:01Z
+ Monthly Trending of Groovy Server Pages in GitHub
+
+
\ No newline at end of file
diff --git a/groovy-server-pages/weekly/index.xml b/groovy-server-pages/weekly/index.xml
new file mode 100644
index 00000000000..a5ca3d07975
--- /dev/null
+++ b/groovy-server-pages/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Groovy Server Pages Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:00Z
+ Weekly Trending of Groovy Server Pages in GitHub
+
+
\ No newline at end of file
diff --git a/groovy/daily/index.xml b/groovy/daily/index.xml
index 702293160d1..4efd12aca18 100644
--- a/groovy/daily/index.xml
+++ b/groovy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Groovy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:29Z
+ 2024-12-01T01:32:25Z
Daily Trending of Groovy in GitHub
\ No newline at end of file
diff --git a/groovy/monthly/index.xml b/groovy/monthly/index.xml
new file mode 100644
index 00000000000..b16926d52a7
--- /dev/null
+++ b/groovy/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Groovy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:02Z
+ Monthly Trending of Groovy in GitHub
+
+
+ palantir/gradle-git-version
+ 2024-12-01T01:54:02Z
+ tag:github.com,2024-12-01:/palantir/gradle-git-version
+
+ <p>a Gradle plugin that uses `git describe` to produce a version string.</p><hr>
+
+
\ No newline at end of file
diff --git a/groovy/weekly/index.xml b/groovy/weekly/index.xml
new file mode 100644
index 00000000000..4f390d6b0c6
--- /dev/null
+++ b/groovy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Groovy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:02Z
+ Weekly Trending of Groovy in GitHub
+
+
\ No newline at end of file
diff --git a/gsc/daily/index.xml b/gsc/daily/index.xml
index c95049daab3..fdbfbc8366e 100644
--- a/gsc/daily/index.xml
+++ b/gsc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub GSC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:29Z
+ 2024-12-01T01:32:24Z
Daily Trending of GSC in GitHub
\ No newline at end of file
diff --git a/gsc/monthly/index.xml b/gsc/monthly/index.xml
new file mode 100644
index 00000000000..676ed40efa9
--- /dev/null
+++ b/gsc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GSC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:01Z
+ Monthly Trending of GSC in GitHub
+
+
\ No newline at end of file
diff --git a/gsc/weekly/index.xml b/gsc/weekly/index.xml
new file mode 100644
index 00000000000..698e5a28593
--- /dev/null
+++ b/gsc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub GSC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:01Z
+ Weekly Trending of GSC in GitHub
+
+
\ No newline at end of file
diff --git a/hack/daily/index.xml b/hack/daily/index.xml
index b77ae08ebb0..06dcfd4e76c 100644
--- a/hack/daily/index.xml
+++ b/hack/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Hack Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:30Z
+ 2024-12-01T01:32:27Z
Daily Trending of Hack in GitHub
\ No newline at end of file
diff --git a/hack/monthly/index.xml b/hack/monthly/index.xml
new file mode 100644
index 00000000000..e92477855fe
--- /dev/null
+++ b/hack/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Hack Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:04Z
+ Monthly Trending of Hack in GitHub
+
+
\ No newline at end of file
diff --git a/hack/weekly/index.xml b/hack/weekly/index.xml
new file mode 100644
index 00000000000..a7ea34f6163
--- /dev/null
+++ b/hack/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Hack Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:03Z
+ Weekly Trending of Hack in GitHub
+
+
\ No newline at end of file
diff --git a/haml/daily/index.xml b/haml/daily/index.xml
index 356bf926b5e..5f8776b8f0a 100644
--- a/haml/daily/index.xml
+++ b/haml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Haml Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:30Z
+ 2024-12-01T01:32:27Z
Daily Trending of Haml in GitHub
\ No newline at end of file
diff --git a/haml/monthly/index.xml b/haml/monthly/index.xml
new file mode 100644
index 00000000000..906b0af845e
--- /dev/null
+++ b/haml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haml Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:03Z
+ Monthly Trending of Haml in GitHub
+
+
\ No newline at end of file
diff --git a/haml/weekly/index.xml b/haml/weekly/index.xml
new file mode 100644
index 00000000000..c5955b4e894
--- /dev/null
+++ b/haml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haml Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:02Z
+ Weekly Trending of Haml in GitHub
+
+
\ No newline at end of file
diff --git a/handlebars/daily/index.xml b/handlebars/daily/index.xml
index a4cc1431adc..a8eba223e13 100644
--- a/handlebars/daily/index.xml
+++ b/handlebars/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Handlebars Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:31Z
+ 2024-12-01T01:32:27Z
Daily Trending of Handlebars in GitHub
\ No newline at end of file
diff --git a/handlebars/monthly/index.xml b/handlebars/monthly/index.xml
new file mode 100644
index 00000000000..bfd38d2e31b
--- /dev/null
+++ b/handlebars/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Handlebars Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:04Z
+ Monthly Trending of Handlebars in GitHub
+
+
\ No newline at end of file
diff --git a/handlebars/weekly/index.xml b/handlebars/weekly/index.xml
new file mode 100644
index 00000000000..f2c89438c1e
--- /dev/null
+++ b/handlebars/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Handlebars Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:03Z
+ Weekly Trending of Handlebars in GitHub
+
+
\ No newline at end of file
diff --git a/haproxy/daily/index.xml b/haproxy/daily/index.xml
index 2d4923ab23e..8d9fb2884a4 100644
--- a/haproxy/daily/index.xml
+++ b/haproxy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HAProxy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:30Z
+ 2024-12-01T01:32:26Z
Daily Trending of HAProxy in GitHub
\ No newline at end of file
diff --git a/haproxy/monthly/index.xml b/haproxy/monthly/index.xml
new file mode 100644
index 00000000000..d3391739f78
--- /dev/null
+++ b/haproxy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HAProxy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:03Z
+ Monthly Trending of HAProxy in GitHub
+
+
\ No newline at end of file
diff --git a/haproxy/weekly/index.xml b/haproxy/weekly/index.xml
new file mode 100644
index 00000000000..009d5d25f9c
--- /dev/null
+++ b/haproxy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HAProxy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:03Z
+ Weekly Trending of HAProxy in GitHub
+
+
\ No newline at end of file
diff --git a/harbour/daily/index.xml b/harbour/daily/index.xml
index a7e97915ff0..99246e8b734 100644
--- a/harbour/daily/index.xml
+++ b/harbour/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Harbour Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:31Z
+ 2024-12-01T01:32:28Z
Daily Trending of Harbour in GitHub
\ No newline at end of file
diff --git a/harbour/monthly/index.xml b/harbour/monthly/index.xml
new file mode 100644
index 00000000000..213a740a307
--- /dev/null
+++ b/harbour/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Harbour Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:05Z
+ Monthly Trending of Harbour in GitHub
+
+
\ No newline at end of file
diff --git a/harbour/weekly/index.xml b/harbour/weekly/index.xml
new file mode 100644
index 00000000000..b030a7829fc
--- /dev/null
+++ b/harbour/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Harbour Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:04Z
+ Weekly Trending of Harbour in GitHub
+
+
\ No newline at end of file
diff --git a/haskell/daily/index.xml b/haskell/daily/index.xml
index 818af401b7d..f12dae372f4 100644
--- a/haskell/daily/index.xml
+++ b/haskell/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Haskell Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:33Z
+ 2024-12-01T01:32:30Z
Daily Trending of Haskell in GitHub
\ No newline at end of file
diff --git a/haskell/monthly/index.xml b/haskell/monthly/index.xml
new file mode 100644
index 00000000000..14e8d180f0a
--- /dev/null
+++ b/haskell/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haskell Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:07Z
+ Monthly Trending of Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/haskell/weekly/index.xml b/haskell/weekly/index.xml
new file mode 100644
index 00000000000..6405fd83d53
--- /dev/null
+++ b/haskell/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haskell Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:06Z
+ Weekly Trending of Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/haxe/daily/index.xml b/haxe/daily/index.xml
index 18fd91fc5b5..132f2ed374c 100644
--- a/haxe/daily/index.xml
+++ b/haxe/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Haxe Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:33Z
+ 2024-12-01T01:32:29Z
Daily Trending of Haxe in GitHub
\ No newline at end of file
diff --git a/haxe/monthly/index.xml b/haxe/monthly/index.xml
new file mode 100644
index 00000000000..354eae26d3a
--- /dev/null
+++ b/haxe/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haxe Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:06Z
+ Monthly Trending of Haxe in GitHub
+
+
\ No newline at end of file
diff --git a/haxe/weekly/index.xml b/haxe/weekly/index.xml
new file mode 100644
index 00000000000..21613bad69d
--- /dev/null
+++ b/haxe/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Haxe Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:06Z
+ Weekly Trending of Haxe in GitHub
+
+
\ No newline at end of file
diff --git a/hcl/daily/index.xml b/hcl/daily/index.xml
index d21347f7798..eba4c56e6ed 100644
--- a/hcl/daily/index.xml
+++ b/hcl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HCL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:33Z
+ 2024-12-01T01:32:29Z
Daily Trending of HCL in GitHub
\ No newline at end of file
diff --git a/hcl/monthly/index.xml b/hcl/monthly/index.xml
new file mode 100644
index 00000000000..cfdcb07d8ce
--- /dev/null
+++ b/hcl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HCL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:06Z
+ Monthly Trending of HCL in GitHub
+
+
\ No newline at end of file
diff --git a/hcl/weekly/index.xml b/hcl/weekly/index.xml
new file mode 100644
index 00000000000..57cabc73adb
--- /dev/null
+++ b/hcl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HCL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:05Z
+ Weekly Trending of HCL in GitHub
+
+
\ No newline at end of file
diff --git a/hiveql/daily/index.xml b/hiveql/daily/index.xml
index d6ad5868e39..f150dd9f304 100644
--- a/hiveql/daily/index.xml
+++ b/hiveql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HiveQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:36Z
+ 2024-12-01T01:32:32Z
Daily Trending of HiveQL in GitHub
\ No newline at end of file
diff --git a/hiveql/monthly/index.xml b/hiveql/monthly/index.xml
new file mode 100644
index 00000000000..688ebfb7b25
--- /dev/null
+++ b/hiveql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HiveQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:11Z
+ Monthly Trending of HiveQL in GitHub
+
+
\ No newline at end of file
diff --git a/hiveql/weekly/index.xml b/hiveql/weekly/index.xml
new file mode 100644
index 00000000000..d7b4e300322
--- /dev/null
+++ b/hiveql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HiveQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:10Z
+ Weekly Trending of HiveQL in GitHub
+
+
\ No newline at end of file
diff --git a/hlsl/daily/index.xml b/hlsl/daily/index.xml
index f2c81c696ec..a864c90057b 100644
--- a/hlsl/daily/index.xml
+++ b/hlsl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HLSL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:37Z
+ 2024-12-01T01:32:31Z
Daily Trending of HLSL in GitHub
\ No newline at end of file
diff --git a/hlsl/monthly/index.xml b/hlsl/monthly/index.xml
new file mode 100644
index 00000000000..0a36d6ce5fc
--- /dev/null
+++ b/hlsl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HLSL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:11Z
+ Monthly Trending of HLSL in GitHub
+
+
\ No newline at end of file
diff --git a/hlsl/weekly/index.xml b/hlsl/weekly/index.xml
new file mode 100644
index 00000000000..dc7e8a1417a
--- /dev/null
+++ b/hlsl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HLSL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:10Z
+ Weekly Trending of HLSL in GitHub
+
+
\ No newline at end of file
diff --git a/holyc/daily/index.xml b/holyc/daily/index.xml
index ad9615660d5..b3d28bfe9f5 100644
--- a/holyc/daily/index.xml
+++ b/holyc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HolyC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:36Z
+ 2024-12-01T01:32:32Z
Daily Trending of HolyC in GitHub
\ No newline at end of file
diff --git a/holyc/monthly/index.xml b/holyc/monthly/index.xml
new file mode 100644
index 00000000000..4ff6ca8ca18
--- /dev/null
+++ b/holyc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HolyC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:11Z
+ Monthly Trending of HolyC in GitHub
+
+
\ No newline at end of file
diff --git a/holyc/weekly/index.xml b/holyc/weekly/index.xml
new file mode 100644
index 00000000000..3b9ebbdcac5
--- /dev/null
+++ b/holyc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HolyC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:10Z
+ Weekly Trending of HolyC in GitHub
+
+
\ No newline at end of file
diff --git a/hoon/daily/index.xml b/hoon/daily/index.xml
index 13213eda8e8..e8186385c19 100644
--- a/hoon/daily/index.xml
+++ b/hoon/daily/index.xml
@@ -1,7 +1,7 @@
GitHub hoon Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:38Z
+ 2024-12-01T01:32:33Z
Daily Trending of hoon in GitHub
\ No newline at end of file
diff --git a/hoon/monthly/index.xml b/hoon/monthly/index.xml
new file mode 100644
index 00000000000..508b24162da
--- /dev/null
+++ b/hoon/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub hoon Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:12Z
+ Monthly Trending of hoon in GitHub
+
+
\ No newline at end of file
diff --git a/hoon/weekly/index.xml b/hoon/weekly/index.xml
new file mode 100644
index 00000000000..c98c5c52126
--- /dev/null
+++ b/hoon/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub hoon Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:11Z
+ Weekly Trending of hoon in GitHub
+
+
\ No newline at end of file
diff --git a/html+ecr/daily/index.xml b/html+ecr/daily/index.xml
index bb5a9f9a3a6..f1dea2c0e79 100644
--- a/html+ecr/daily/index.xml
+++ b/html+ecr/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTML+ECR Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:45Z
+ 2024-12-01T01:32:43Z
Daily Trending of HTML+ECR in GitHub
\ No newline at end of file
diff --git a/html+ecr/monthly/index.xml b/html+ecr/monthly/index.xml
new file mode 100644
index 00000000000..d758e552572
--- /dev/null
+++ b/html+ecr/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+ECR Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:19Z
+ Monthly Trending of HTML+ECR in GitHub
+
+
\ No newline at end of file
diff --git a/html+ecr/weekly/index.xml b/html+ecr/weekly/index.xml
new file mode 100644
index 00000000000..98f90cf7fb4
--- /dev/null
+++ b/html+ecr/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+ECR Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:24Z
+ Weekly Trending of HTML+ECR in GitHub
+
+
\ No newline at end of file
diff --git a/html+eex/daily/index.xml b/html+eex/daily/index.xml
index 3f1f5cc2b39..520b819bbf5 100644
--- a/html+eex/daily/index.xml
+++ b/html+eex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTML+EEX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:45Z
+ 2024-12-01T01:32:43Z
Daily Trending of HTML+EEX in GitHub
\ No newline at end of file
diff --git a/html+eex/monthly/index.xml b/html+eex/monthly/index.xml
new file mode 100644
index 00000000000..266df2e10db
--- /dev/null
+++ b/html+eex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+EEX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:20Z
+ Monthly Trending of HTML+EEX in GitHub
+
+
\ No newline at end of file
diff --git a/html+eex/weekly/index.xml b/html+eex/weekly/index.xml
new file mode 100644
index 00000000000..8e237914c59
--- /dev/null
+++ b/html+eex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+EEX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:23Z
+ Weekly Trending of HTML+EEX in GitHub
+
+
\ No newline at end of file
diff --git a/html+erb/daily/index.xml b/html+erb/daily/index.xml
index 05ca16adf63..f133b99d662 100644
--- a/html+erb/daily/index.xml
+++ b/html+erb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTML+ERB Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:46Z
+ 2024-12-01T01:32:42Z
Daily Trending of HTML+ERB in GitHub
\ No newline at end of file
diff --git a/html+erb/monthly/index.xml b/html+erb/monthly/index.xml
new file mode 100644
index 00000000000..371a415bccf
--- /dev/null
+++ b/html+erb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+ERB Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:19Z
+ Monthly Trending of HTML+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/html+erb/weekly/index.xml b/html+erb/weekly/index.xml
new file mode 100644
index 00000000000..d93a4755b5d
--- /dev/null
+++ b/html+erb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+ERB Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:23Z
+ Weekly Trending of HTML+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/html+php/daily/index.xml b/html+php/daily/index.xml
index 51e912a2391..bffd91625d4 100644
--- a/html+php/daily/index.xml
+++ b/html+php/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTML+PHP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:45Z
+ 2024-12-01T01:32:42Z
Daily Trending of HTML+PHP in GitHub
\ No newline at end of file
diff --git a/html+php/monthly/index.xml b/html+php/monthly/index.xml
new file mode 100644
index 00000000000..ed6b12f4e68
--- /dev/null
+++ b/html+php/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+PHP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:19Z
+ Monthly Trending of HTML+PHP in GitHub
+
+
\ No newline at end of file
diff --git a/html+php/weekly/index.xml b/html+php/weekly/index.xml
new file mode 100644
index 00000000000..2868b56a1ee
--- /dev/null
+++ b/html+php/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+PHP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:24Z
+ Weekly Trending of HTML+PHP in GitHub
+
+
\ No newline at end of file
diff --git a/html+razor/daily/index.xml b/html+razor/daily/index.xml
index c44e8f6df17..e746cfab22e 100644
--- a/html+razor/daily/index.xml
+++ b/html+razor/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTML+Razor Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:47Z
+ 2024-12-01T01:32:45Z
Daily Trending of HTML+Razor in GitHub
\ No newline at end of file
diff --git a/html+razor/monthly/index.xml b/html+razor/monthly/index.xml
new file mode 100644
index 00000000000..b8ba92d2e59
--- /dev/null
+++ b/html+razor/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+Razor Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:21Z
+ Monthly Trending of HTML+Razor in GitHub
+
+
\ No newline at end of file
diff --git a/html+razor/weekly/index.xml b/html+razor/weekly/index.xml
new file mode 100644
index 00000000000..75a48aecaed
--- /dev/null
+++ b/html+razor/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTML+Razor Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:26Z
+ Weekly Trending of HTML+Razor in GitHub
+
+
\ No newline at end of file
diff --git a/html/daily/index.xml b/html/daily/index.xml
index a868f35d9e5..484907299ff 100644
--- a/html/daily/index.xml
+++ b/html/daily/index.xml
@@ -1,7 +1,14 @@
GitHub HTML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:42Z
+ 2024-12-01T01:32:35Z
Daily Trending of HTML in GitHub
+
+ webcrumbs-community/webcrumbs
+ 2024-12-01T01:32:35Z
+ tag:github.com,2024-12-01:/webcrumbs-community/webcrumbs
+
+ <p>Build, re(use) and share your own JavaScript plugins that effortlessly match your website's style. 🌟 Star to support our work!</p><hr><p align="center"> <strong>Looking for Hacktoberfest? Check out the rules here! <a href="https://dev.to/buildwebcrumbs/a-new-way-to-contribute-in-hacktoberfest-directly-at-frontend-ai-3e00">Hacktoberfest at Webcrumbs</a></strong><br> 🌟 Star the repository and sign up at <a href="https://webcrumbs.org">webcrumbs.org</a> to know about our launches! <br><br><br><br> <a href="https://webcrumbs.org/"> <img src="https://cdn.webcrumbs.org/assets/images/brand/logo_red.svg?sanitize=true" alt="Webcrumbs Logo" height="48px"> </a> <br><br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/subtitle.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/subtitle.svg">
<img alt="Build, (re)use and share your own JavaScript plugins" src="https://cdn.webcrumbs.org/assets/images/readme/subtitle.svg?sanitize=true">
</picture> <br><br> <a href="https://webcrumbs.org/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/button_newsletter.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/button_newsletter.svg">
<img alt="Sign our newsletter" src="https://cdn.webcrumbs.org/assets/images/readme/button_newsletter.svg?sanitize=true">
</picture> </a> <a href="https://discord.com/invite/ZCj5hFv8xV">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/button_discord.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/button_discord.svg">
<img alt="Join our Discord" src="https://cdn.webcrumbs.org/assets/images/readme/button_discord.svg?sanitize=true">
</picture> </a> <br><br> <img src="https://cdn.webcrumbs.org/assets/images/readme/screen.svg?sanitize=true" alt="Webcrumbs Screen"> </p>
<br>
<br>
<br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h2_vision.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h2_vision.svg">
<img alt="Vision" src="https://cdn.webcrumbs.org/assets/images/readme/h2_vision.svg?sanitize=true">
</picture>
<br>
<br>
<p>WebCrumbs aspires to be an industry-standard solution for modern web development, creating the first open ecosystem of plugins for the JavaScript community and related frameworks (like React, Nextjs, Vue, Svelte, and others). Whether you're a developer or not, you'll find it easy to create, manage, and extend your own websites with our intuitive admin panel and a rich ecosystem of plugins developed by the community.</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/diagram.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/diagram.svg">
<img alt="Diagram" src="https://cdn.webcrumbs.org/assets/images/readme/diagram.svg?sanitize=true">
</picture> </p>
<br>
<br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h2_support.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h2_support.svg">
<img alt="Your Support Matters" src="https://cdn.webcrumbs.org/assets/images/readme/h2_support.svg?sanitize=true">
</picture>
<br>
<br>
<p>If you love what WebCrumbs is doing, consider starring us on GitHub. Your support is key to refining our product and growing our community. Star WebCrumbs on GitHub.</p>
<a href="https://github.com/webcrumbs-community/webcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/button_star_repo.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/button_star_repo.svg">
<img alt="Star our repository" src="https://cdn.webcrumbs.org/assets/images/readme/button_star_repo.svg?sanitize=true">
</picture> </a>
<br>
<br>
<br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h3_growing.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h3_growing.svg">
<img alt="Help Us Grow" src="https://cdn.webcrumbs.org/assets/images/readme/h3_growing.svg?sanitize=true">
</picture>
<br>
<br>
<ul>
<li><strong>Star the repository</strong>: If you haven't yet (yes, you!), give us a star. It's free and means a lot to us. Your support helps increase our visibility and keeps us motivated.</li>
<br>
<li><strong>Write about us</strong>: If you believe in what WebCrumbs is building, share it with your network and help us grow the community. Write about us on your favorite blog, like DEV.to, Medium, Substack, and more.</li>
<br>
<li><strong>Join our discord community</strong>: It's where the real-time chats happen. Join us through <a href="https://discord.com/invite/ZCj5hFv8xV">this link</a>.</li>
<br>
<li><strong>Share your opinion</strong>: We want to hear your feedback and ideas! Every opinion counts, and we're excited to hear from you. <a href="mailto:community@webcrumbs.org">Share your opinion</a>.</li>
<br>
<li><strong>Share with friends</strong>: We're looking for passionate, creative minds to join our mission. So, share with the kind of brilliant developers we know you are.</li>
<br>
</ul>
<blockquote>
<p>"Check out Webcrumbs! <br> It's open source and lets you build, reuse, and share JavaScript plugins. <br> Perfect for starting your own collection."</p>
</blockquote>
<p> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A//github.com/webcrumbs-community/webcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_facebook.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_facebook.svg">
<img alt="Share on Facebook" src="https://cdn.webcrumbs.org/assets/images/readme/socials_facebook.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://twitter.com/intent/tweet?text=Just%20starred%20this%20Open%20Source%20repo%20where%20you%20can%20build,%20reuse,%20and%20share%20JavaScript%20plugins.%20Perfect%20for%20creating%20your%20own%20collection.%20Check%20it%20out%20https%3A//github.com/webcrumbs-community/webcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_x.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_x.svg">
<img alt="Share on X" src="https://cdn.webcrumbs.org/assets/images/readme/socials_x.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A//github.com/webcrumbs-community/webcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_linkedin.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_linkedin.svg">
<img alt="Share on Linkedin" src="https://cdn.webcrumbs.org/assets/images/readme/socials_linkedin.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://www.reddit.com/submit?url=https%3A//github.com/webcrumbs-community/webcrumbs&title=Create%20and%20modify%20React%20websites%20and%20applications%20with%20a%20no-code%20interface%20and%20powerful%20plugins,%20enriched%20by%20the%20community.%20%F0%9F%8C%9F%20Star%20to%20support%20our%20work!">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_reddit.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_reddit.svg">
<img alt="Share on Reddit" src="https://cdn.webcrumbs.org/assets/images/readme/socials_reddit.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://news.ycombinator.com/submitlink?u=https%3A//github.com/webcrumbs-community/webcrumbs&t=Create%20and%20modify%20React%20websites%20and%20applications%20with%20a%20no-code%20interface%20and%20powerful%20plugins,%20enriched%20by%20the%20community.">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_hackernews.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_hackernews.svg">
<img alt="Share on HackerNews" src="https://cdn.webcrumbs.org/assets/images/readme/socials_hackernews.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://pinterest.com/pin/create/button/?url=https%3A//github.com/webcrumbs-community/webcrumbs&media=&description=Check%20out%20this%20open%20source%20where%20you%20can%20build,%20reuse,%20and%20share%20JavaScript%20plugins.%20Perfect%20for%20creating%20your%20own%20collection.">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_pinterest.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_pinterest.svg">
<img alt="Share on Pinterest" src="https://cdn.webcrumbs.org/assets/images/readme/socials_pinterest.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://t.me/share/url?url=https%3A//github.com/webcrumbs-community/webcrumbs&text=Just%20starred%20this%20Open%20Source%20repo%20where%20you%20can%20build,%20reuse,%20and%20share%20JavaScript%20plugins.%20Perfect%20for%20creating%20your%20own%20collection.%20Check%20it%20out%20https%3A//github.com/webcrumbs-community/webcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_telegram.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_telegram.svg">
<img alt="Send on Telegram" src="https://cdn.webcrumbs.org/assets/images/readme/socials_telegram.svg?sanitize=true" height="24px">
</picture> </a> <a href="https://api.whatsapp.com/send?text=Just%20starred%20this%20repo%20and%20it%20sounds%20promising.%20It's%20an%20open%20source%20where%20you%20can%20build,%20reuse,%20and%20share%20JavaScript%20plugins.%20Perfect%20for%20creating%20your%20own%20collection.%20Check%20it%20here%3A%20https%3A%2F%2Fgithub.com%2Fwebcrumbs-community%2Fwebcrumbs">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/socials_whatsapp.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/socials_whatsapp.svg">
<img alt="Send on WhatsApp" src="https://cdn.webcrumbs.org/assets/images/readme/socials_whatsapp.svg?sanitize=true" height="24px">
</picture> </a> </p>
<br>
<br>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h3_people_making.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h3_people_making.svg">
<img alt="People Making WebCrumbs" src="https://cdn.webcrumbs.org/assets/images/readme/h3_people_making.svg?sanitize=true">
</picture> <br><br> <a href="https://raw.githubusercontent.com/webcrumbs-community/webcrumbs/main/#top"> <img src="https://img.shields.io/github/stars/webcrumbs-community/webcrumbs?style=social" alt="Stars" height="36px"> </a> </p>
<br>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h3_contributors.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h3_contributors.svg">
<img alt="With Amazing Contributors" src="https://cdn.webcrumbs.org/assets/images/readme/h3_contributors.svg?sanitize=true">
</picture> <br><br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/contributors.png">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/contributors.png">
<img alt="Contributors" src="https://cdn.webcrumbs.org/assets/images/readme/contributors.png">
</picture> </p>
<br>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h3_world.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h3_world.svg">
<img alt="We Have People From All Over The World" src="https://cdn.webcrumbs.org/assets/images/readme/h3_world.svg?sanitize=true">
</picture> <br><br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/world.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/world.svg">
<img alt="World Map" src="https://cdn.webcrumbs.org/assets/images/readme/world.svg?sanitize=true">
</picture> </p>
<p align="center"> <br><br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.webcrumbs.org/assets/images/readme/dark/h3_growing.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cdn.webcrumbs.org/assets/images/readme/h3_growing.svg">
<img alt="We Are Growing Fast!" src="https://cdn.webcrumbs.org/assets/images/readme/h3_growing.svg?sanitize=true">
</picture> <br><br> <a href="https://star-history.com/#webcrumbs-community/webcrumbs&Timeline">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=webcrumbs-community/webcrumbs&type=Timeline&theme=dark">
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=webcrumbs-community/webcrumbs&type=Timeline">
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=webcrumbs-community/webcrumbs&type=Timeline">
</picture> </a> </p>
<br>
<br>
<br>
<br>
<p> This project operates under the AGPL Open Source License and is a community-driven endeavor. </p>
<p> <b>Credits</b> <br> Spearheaded and maintained by Webcrumbs Team. </p>
+
\ No newline at end of file
diff --git a/html/monthly/index.xml b/html/monthly/index.xml
new file mode 100644
index 00000000000..e8636e73feb
--- /dev/null
+++ b/html/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub HTML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:15Z
+ Monthly Trending of HTML in GitHub
+
+
+ tpn/pdfs
+ 2024-12-01T01:54:15Z
+ tag:github.com,2024-12-01:/tpn/pdfs
+
+ <p>Technically-oriented PDF Collection (Papers, Specs, Decks, Manuals, etc)</p><hr>
+
+
+ EbookFoundation/free-programming-books
+ 2024-12-01T01:54:15Z
+ tag:github.com,2024-12-01:/EbookFoundation/free-programming-books
+
+ <p>📚 Freely available programming books</p><hr><h1>List of Free Learning Resources In Many Languages</h1>
<div align="center" markdown="1">
<p><a href="https://github.com/sindresorhus/awesome"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg?sanitize=true" alt="Awesome"></a> <a href="https://creativecommons.org/licenses/by/4.0/"><img src="https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg?sanitize=true" alt="License: CC BY 4.0"></a> <a href="https://github.com/EbookFoundation/free-programming-books/pulls?q=is%3Apr+is%3Amerged+created%3A2023-10-01..2023-10-31"><img src="https://img.shields.io/github/hacktoberfest/2023/EbookFoundation/free-programming-books?label=Hacktoberfest+2023" alt="Hacktoberfest 2023 stats"></a></p>
</div>
<p>Search the list at <a href="https://ebookfoundation.github.io/free-programming-books-search/">https://ebookfoundation.github.io/free-programming-books-search/</a> <a href="https://ebookfoundation.github.io/free-programming-books-search/"><img src="https://img.shields.io/website?style=flat&logo=www&logoColor=whitesmoke&label=Dynamic%20search%20site&down_color=red&down_message=down&up_color=green&up_message=up&url=https%3A%2F%2Febookfoundation.github.io%2Ffree-programming-books-search%2F" alt="https://ebookfoundation.github.io/free-programming-books-search/"></a>.</p>
<p>This page is available as an easy-to-read website. Access it by clicking on <a href="https://ebookfoundation.github.io/free-programming-books/"><img src="https://img.shields.io/website?style=flat&logo=www&logoColor=whitesmoke&label=Static%20site&down_color=red&down_message=down&up_color=green&up_message=up&url=https%3A%2F%2Febookfoundation.github.io%2Ffree-programming-books%2F" alt="https://ebookfoundation.github.io/free-programming-books/"></a>.</p>
<div align="center">
<form action="https://ebookfoundation.github.io/free-programming-books-search">
<input type="text" id="fpbSearch" name="search" required placeholder="Search Book or Author">
<label for="submit"> </label>
<input type="submit" id="submit" name="submit" value="Search">
</form>
</div>
<h2>Intro</h2>
<p>This list was originally a clone of <a href="https://web.archive.org/web/20140606191453/http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books/392926">StackOverflow - List of Freely Available Programming Books</a> with contributions from Karan Bhangui and George Stocker.</p>
<p>The list was moved to GitHub by Victor Felder for collaborative updating and maintenance. It has grown to become one of <a href="https://octoverse.github.com/">GitHub's most popular repositories</a>.</p>
<div align="center" markdown="1">
<p><a href="https://github.com/EbookFoundation/free-programming-books/network"><img src="https://img.shields.io/github/forks/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=whitesmoke&label=Forks" alt="GitHub repo forks"></a> <a href="https://github.com/EbookFoundation/free-programming-books/stargazers"><img src="https://img.shields.io/github/stars/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=whitesmoke&label=Stars" alt="GitHub repo stars"></a> <a href="https://github.com/EbookFoundation/free-programming-books/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=whitesmoke&label=Contributors" alt="GitHub repo contributors"></a><br> <a href="https://github.com/sponsors/EbookFoundation"><img src="https://img.shields.io/github/sponsors/EbookFoundation?style=flat&logo=github&logoColor=whitesmoke&label=Sponsors" alt="GitHub org sponsors"></a> <a href="https://github.com/EbookFoundation/free-programming-books/watchers"><img src="https://img.shields.io/github/watchers/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=whitesmoke&label=Watchers" alt="GitHub repo watchers"></a> <a href="https://github.com/EbookFoundation/free-programming-books/archive/refs/heads/main.zip"><img src="https://img.shields.io/github/repo-size/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=whitesmoke&label=Repo%20Size" alt="GitHub repo size"></a></p>
</div>
<p>The <a href="https://ebookfoundation.org">Free Ebook Foundation</a> now administers the repo, a not-for-profit organization devoted to promoting the creation, distribution, archiving, and sustainability of free ebooks. <a href="https://ebookfoundation.org/contributions.html">Donations</a> to the Free Ebook Foundation are tax-deductible in the US.</p>
<h2>How To Contribute</h2>
<p>Please read <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/CONTRIBUTING.md">CONTRIBUTING</a>. If you're new to GitHub, <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/HOWTO.md">welcome</a>! Remember to abide by our adapted from <img src="https://img.shields.io/badge/Contributor%20Covenant-1.3-4baaaa.svg?sanitize=true" alt="Contributor Covenant 1.3"> <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/CODE_OF_CONDUCT.md">Code of Conduct</a> too (<a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/#translations">translations</a> also available).</p>
<p>Click on these badges to see how you might be able to help:</p>
<div align="center" markdown="1">
<p><a href="https://github.com/EbookFoundation/free-programming-books/issues"><img src="https://img.shields.io/github/issues/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=red&label=Issues" alt="GitHub repo Issues"></a> <a href="https://github.com/EbookFoundation/free-programming-books/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22"><img src="https://img.shields.io/github/issues/EbookFoundation/free-programming-books/good%20first%20issue?style=flat&logo=github&logoColor=green&label=Good%20First%20issues" alt="GitHub repo Good Issues for newbies"></a> <a href="https://github.com/EbookFoundation/free-programming-books/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22"><img src="https://img.shields.io/github/issues/EbookFoundation/free-programming-books/help%20wanted?style=flat&logo=github&logoColor=b545d1&label=%22Help%20Wanted%22%20issues" alt="GitHub Help Wanted issues"></a><br> <a href="https://github.com/EbookFoundation/free-programming-books/pulls"><img src="https://img.shields.io/github/issues-pr/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=orange&label=PRs" alt="GitHub repo PRs"></a> <a href="https://github.com/EbookFoundation/free-programming-books/pulls?q=is%3Apr+is%3Amerged"><img src="https://img.shields.io/github/issues-search/EbookFoundation/free-programming-books?style=flat&logo=github&logoColor=green&label=Merged%20PRs&query=is%3Amerged" alt="GitHub repo Merged PRs"></a> <a href="https://github.com/EbookFoundation/free-programming-books/pulls?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22"><img src="https://img.shields.io/github/issues-pr/EbookFoundation/free-programming-books/help%20wanted?style=flat&logo=github&logoColor=b545d1&label=%22Help%20Wanted%22%20PRs" alt="GitHub Help Wanted PRs"></a></p>
</div>
<h2>How To Share</h2>
<div align="left" markdown="1">
<a href="https://www.facebook.com/share.php?u=https%253A%252F%252Fgithub.com%252FEbookFoundation%252Ffree-programming-books&p%5Bimages%5D%5B0%5D=&p%5Btitle%5D=Free%2520Programming%2520Books&p%5Bsummary%5D=">Share on Facebook</a>
<br>
<a href="http://www.linkedin.com/shareArticle?mini=true&url=https://github.com/EbookFoundation/free-programming-books&title=Free%20Programming%20Books&summary=&source=">Share on LinkedIn</a>
<br>
<a href="https://toot.kytta.dev/?mini=true&url=https://github.com/EbookFoundation/free-programming-books&title=Free%20Programming%20Books&summary=&source=">Share on Mastodon/Fediverse</a>
<br>
<a href="https://t.me/share/url?url=https://github.com/EbookFoundation/free-programming-books">Share on Telegram</a>
<br>
<a href="https://twitter.com/intent/tweet?text=https://github.com/EbookFoundation/free-programming-books%0AFree%20Programming%20Books">Share on 𝕏 (Twitter)</a>
<br>
</div>
<h2>Resources</h2>
<p>This project lists books and other resources grouped by genres:</p>
<h3>Books</h3>
<p><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-langs.md">English, By Programming Language</a></p>
<p><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-subjects.md">English, By Subject</a></p>
<h4>Other Languages</h4>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ar.md">Arabic / al arabiya / العربية</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-hy.md">Armenian / Հայերեն</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-az.md">Azerbaijani / Азәрбајҹан дили / آذربايجانجا ديلي</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-bn.md">Bengali / বাংলা</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-bg.md">Bulgarian / български</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-my.md">Burmese / မြန်မာဘာသာ</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-zh.md">Chinese / 中文</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-cs.md">Czech / čeština / český jazyk</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ca.md">Catalan / catalan/ català</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-da.md">Danish / dansk</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-nl.md">Dutch / Nederlands</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-et.md">Estonian / eesti keel</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-fi.md">Finnish / suomi / suomen kieli</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-fr.md">French / français</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-de.md">German / Deutsch</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-el.md">Greek / ελληνικά</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-he.md">Hebrew / עברית</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-hi.md">Hindi / हिन्दी</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-hu.md">Hungarian / magyar / magyar nyelv</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-id.md">Indonesian / Bahasa Indonesia</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-it.md">Italian / italiano</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ja.md">Japanese / 日本語</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ko.md">Korean / 한국어</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-lv.md">Latvian / Latviešu</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ml.md">Malayalam / മലയാളം</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-no.md">Norwegian / Norsk</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-fa_IR.md">Persian / Farsi (Iran) / فارسى</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-pl.md">Polish / polski / język polski / polszczyzna</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-pt_BR.md">Portuguese (Brazil)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-pt_PT.md">Portuguese (Portugal)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ro.md">Romanian (Romania) / limba română / român</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ru.md">Russian / Русский язык</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-sr.md">Serbian / српски језик / srpski jezik</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-sk.md">Slovak / slovenčina</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-es.md">Spanish / español / castellano</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-sv.md">Swedish / Svenska</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-ta.md">Tamil / தமிழ்</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-te.md">Telugu / తెలుగు</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-th.md">Thai / ไทย</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-tr.md">Turkish / Türkçe</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-uk.md">Ukrainian / Українська</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/books/free-programming-books-vi.md">Vietnamese / Tiếng Việt</a></li>
</ul>
<h3>Cheat Sheets</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-cheatsheets.md">All Languages</a></li>
</ul>
<h3>Free Online Courses</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ar.md">Arabic / al arabiya / العربية</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-bn.md">Bengali / বাংলা</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-bg.md">Bulgarian / български</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-my.md">Burmese / မြန်မာဘာသာ</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-zh.md">Chinese / 中文</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-en.md">English</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-fi.md">Finnish / suomi / suomen kieli</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-fr.md">French / français</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-de.md">German / Deutsch</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-el.md">Greek / ελληνικά</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-he.md">Hebrew / עברית</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-hi.md">Hindi / हिंदी</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-id.md">Indonesian / Bahasa Indonesia</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-it.md">Italian / italiano</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ja.md">Japanese / 日本語</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-kn.md">Kannada/ಕನ್ನಡ</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-kk.md">Kazakh / қазақша</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-km.md">Khmer / ភាសាខ្មែរ</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ko.md">Korean / 한국어</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ml.md">Malayalam / മലയാളം</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-mr.md">Marathi / मराठी</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ne.md">Nepali / नेपाली</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-no.md">Norwegian / Norsk</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-fa_IR.md">Persian / Farsi (Iran) / فارسى</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-pl.md">Polish / polski / język polski / polszczyzna</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-pt_BR.md">Portuguese (Brazil)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-pt_PT.md">Portuguese (Portugal)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ru.md">Russian / Русский язык</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-si.md">Sinhala / සිංහල</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-es.md">Spanish / español / castellano</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-sv.md">Swedish / svenska</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ta.md">Tamil / தமிழ்</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-te.md">Telugu / తెలుగు</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-th.md">Thai / ภาษาไทย</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-tr.md">Turkish / Türkçe</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-uk.md">Ukrainian / Українська</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-ur.md">Urdu / اردو</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/courses/free-courses-vi.md">Vietnamese / Tiếng Việt</a></li>
</ul>
<h3>Interactive Programming Resources</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-interactive-tutorials-zh.md">Chinese / 中文</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-interactive-tutorials-en.md">English</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-interactive-tutorials-de.md">German / Deutsch</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-interactive-tutorials-ja.md">Japanese / 日本語</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-interactive-tutorials-ru.md">Russian / Русский язык</a></li>
</ul>
<h3>Problem Sets and Competitive Programming</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/problem-sets-competitive-programming.md">Problem Sets</a></li>
</ul>
<h3>Podcast - Screencast</h3>
<p>Free Podcasts and Screencasts:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-ar.md">Arabic / al Arabiya / العربية</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-my.md">Burmese / မြန်မာဘာသာ</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-zh.md">Chinese / 中文</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-cs.md">Czech / čeština / český jazyk</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-nl.md">Dutch / Nederlands</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-en.md">English</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-fi.md">Finnish / Suomi</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-fr.md">French / français</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-de.md">German / Deutsch</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-he.md">Hebrew / עברית</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-id.md">Indonesian / Bahasa Indonesia</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-fa_IR.md">Persian / Farsi (Iran) / فارسى</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-pl.md">Polish / polski / język polski / polszczyzna</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-pt_BR.md">Portuguese (Brazil)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-pt_PT.md">Portuguese (Portugal)</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-ru.md">Russian / Русский язык</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-si.md">Sinhala / සිංහල</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-es.md">Spanish / español / castellano</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-sv.md">Swedish / Svenska</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-tr.md">Turkish / Türkçe</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/casts/free-podcasts-screencasts-uk.md">Ukrainian / Українська</a></li>
</ul>
<h3>Programming Playgrounds</h3>
<p>Write, compile, and run your code within a browser. Try it out!</p>
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-playgrounds-zh.md">Chinese / 中文</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-playgrounds.md">English</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/more/free-programming-playgrounds-de.md">German / Deutsch</a></li>
</ul>
<h2>Translations</h2>
<p>Volunteers have translated many of our Contributing, How-to, and Code of Conduct documents into languages covered by our lists.</p>
<ul>
<li>English
<ul>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/CODE_OF_CONDUCT.md">Code of Conduct</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/CONTRIBUTING.md">Contributing</a></li>
<li><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/HOWTO.md">How-to</a></li>
</ul> </li>
<li>... <em><a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/README.md#translations">More languages</a></em> ...</li>
</ul>
<p>You might notice that there are <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/README.md#translations">some missing translations here</a> - perhaps you would like to help out by <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/docs/CONTRIBUTING.md#help-out-by-contributing-a-translation">contributing a translation</a>?</p>
<h2>License</h2>
<p>Each file included in this repository is licensed under the <a href="https://raw.githubusercontent.com/EbookFoundation/free-programming-books/main/LICENSE">CC BY License</a>.</p>
+
+
+ techchipnet/CamPhish
+ 2024-12-01T01:54:15Z
+ tag:github.com,2024-12-01:/techchipnet/CamPhish
+
+ <p>Grab cam shots from target's phone front camera or PC webcam just sending a link.</p><hr><h1>CamPhish</h1>
<p>Grab cam shots from target's phone front camera or PC webcam just sending a link. <img src="https://techchip.net/wp-content/uploads/2020/04/camphish.jpg" alt="CamPhish"></p>
<h1>What is CamPhish?</h1>
<p>CamPhish is techniques to take cam shots of target's phone front camera or PC webcam. CamPhish Hosts a fake website on in built PHP server and uses ngrok & serveo to generate a link which we will forward to the target, which can be used on over internet. website asks for camera permission and if the target allows it, this tool grab camshots of target's device</p>
<h2>Features</h2>
<p>In this tool I added two automatic webpage templates for engaged target on webpage to get more picture of cam</p>
<ul>
<li>Festival Wishing</li>
<li>Live YouTube TV</li>
<li>Online Meeting [Beta]</li>
</ul>
<p>simply enter festival name or youtube's video ID</p>
<h2>This Tool Tested On :</h2>
<ul>
<li>Kali Linux</li>
<li>Termux</li>
<li>MacOS</li>
<li>Ubuntu</li>
<li>Parrot Sec OS</li>
</ul>
<h1>Installing and requirements</h1>
<p>This tool require PHP for webserver, SSH or serveo link. First run following command on your terminal</p>
<pre><code>apt-get -y install php openssh git wget
</code></pre>
<h2>Installing (Kali Linux/Termux):</h2>
<pre><code>git clone https://github.com/techchipnet/CamPhish
cd CamPhish
bash camphish.sh
</code></pre>
<h2>Change Log:</h2>
<p><b>Version: 1.7:</b> Fix and add support</p>
<ul>
<li>fixed: termux failed to get home directory</li>
<li>Add support for Apple sillicon (M1/M2/M3 ARM64)</li>
<li>Add support for arm64 like Raspberry Pi</li>
</ul>
<p><b>Version: 1.6:</b> Fix ngrok direct link generate</p>
<p><b>Version: 1.5:</b> Add new online meeting template</p>
<p><b>Version: 1.4:</b> Ngrok authtoken update</p>
<p><b>Version: 1.3:</b> Fix ngrok direct link</p>
<h4>For More Video subcribe <a href="http://youtube.com/techchipnet">TechChip YouTube Channel</a></h4>
<p>CamPhish is created to help in penetration testing and it's not responsible for any misuse or illegal purposes.</p>
<p>CamPhish is inspired by https://github.com/thelinuxchoice/ Big thanks to @thelinuxchoice</p>
+
+
\ No newline at end of file
diff --git a/html/weekly/index.xml b/html/weekly/index.xml
new file mode 100644
index 00000000000..c75d75e2864
--- /dev/null
+++ b/html/weekly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub HTML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:15Z
+ Weekly Trending of HTML in GitHub
+
+
+ tpn/pdfs
+ 2024-12-01T01:43:15Z
+ tag:github.com,2024-12-01:/tpn/pdfs
+
+ <p>Technically-oriented PDF Collection (Papers, Specs, Decks, Manuals, etc)</p><hr>
+
+
+ brave/brave-core
+ 2024-12-01T01:43:15Z
+ tag:github.com,2024-12-01:/brave/brave-core
+
+ <p>Core engine for the Brave browser for mobile and desktop. For issues https://github.com/brave/brave-browser/issues</p><hr><h1>Brave Core</h1>
<p>Brave Core is a set of changes, APIs, and scripts used for customizing Chromium to make the Brave browser. Please also check <a href="https://github.com/brave/brave-browser">https://github.com/brave/brave-browser</a></p>
<p>Follow <a href="https://twitter.com/brave">@brave</a> on Twitter for important announcements.</p>
<h2>Resources</h2>
<ul>
<li><a href="https://github.com/brave/brave-browser/issues">Issues</a></li>
<li><a href="https://github.com/brave/brave-browser/releases">Releases</a></li>
<li><a href="https://github.com/brave/brave-browser/wiki">Documentation wiki</a></li>
</ul>
<h2>Community</h2>
<p>You can ask questions and interact with the community in the following locations:</p>
<ul>
<li><a href="https://community.brave.com/">Brave Community</a></li>
<li><a href="https://bravesoftware.slack.com"><code>community</code></a> channel on Brave Software's Slack</li>
</ul>
+
+
\ No newline at end of file
diff --git a/http/daily/index.xml b/http/daily/index.xml
index a274ba50a88..56d442e041a 100644
--- a/http/daily/index.xml
+++ b/http/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HTTP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:47Z
+ 2024-12-01T01:32:44Z
Daily Trending of HTTP in GitHub
\ No newline at end of file
diff --git a/http/monthly/index.xml b/http/monthly/index.xml
new file mode 100644
index 00000000000..affe143e2be
--- /dev/null
+++ b/http/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTTP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:21Z
+ Monthly Trending of HTTP in GitHub
+
+
\ No newline at end of file
diff --git a/http/weekly/index.xml b/http/weekly/index.xml
new file mode 100644
index 00000000000..9248c1ccc8b
--- /dev/null
+++ b/http/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HTTP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:25Z
+ Weekly Trending of HTTP in GitHub
+
+
\ No newline at end of file
diff --git a/hxml/daily/index.xml b/hxml/daily/index.xml
index df84292e702..8361a8e510a 100644
--- a/hxml/daily/index.xml
+++ b/hxml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HXML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:46Z
+ 2024-12-01T01:32:44Z
Daily Trending of HXML in GitHub
\ No newline at end of file
diff --git a/hxml/monthly/index.xml b/hxml/monthly/index.xml
new file mode 100644
index 00000000000..b06c44fb3b6
--- /dev/null
+++ b/hxml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HXML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:20Z
+ Monthly Trending of HXML in GitHub
+
+
\ No newline at end of file
diff --git a/hxml/weekly/index.xml b/hxml/weekly/index.xml
new file mode 100644
index 00000000000..f9ab27689ca
--- /dev/null
+++ b/hxml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HXML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:25Z
+ Weekly Trending of HXML in GitHub
+
+
\ No newline at end of file
diff --git a/hy/daily/index.xml b/hy/daily/index.xml
index 7afc4b5a9ca..3f4d0b9e071 100644
--- a/hy/daily/index.xml
+++ b/hy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Hy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:47Z
+ 2024-12-01T01:32:44Z
Daily Trending of Hy in GitHub
\ No newline at end of file
diff --git a/hy/monthly/index.xml b/hy/monthly/index.xml
new file mode 100644
index 00000000000..8af4fbcb032
--- /dev/null
+++ b/hy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Hy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:21Z
+ Monthly Trending of Hy in GitHub
+
+
\ No newline at end of file
diff --git a/hy/weekly/index.xml b/hy/weekly/index.xml
new file mode 100644
index 00000000000..8c03a8ebe78
--- /dev/null
+++ b/hy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Hy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:25Z
+ Weekly Trending of Hy in GitHub
+
+
\ No newline at end of file
diff --git a/hyphy/daily/index.xml b/hyphy/daily/index.xml
index edcfaf96285..be4a6767792 100644
--- a/hyphy/daily/index.xml
+++ b/hyphy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub HyPhy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:49Z
+ 2024-12-01T01:32:46Z
Daily Trending of HyPhy in GitHub
\ No newline at end of file
diff --git a/hyphy/monthly/index.xml b/hyphy/monthly/index.xml
new file mode 100644
index 00000000000..8cf6f7e1d05
--- /dev/null
+++ b/hyphy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HyPhy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:22Z
+ Monthly Trending of HyPhy in GitHub
+
+
\ No newline at end of file
diff --git a/hyphy/weekly/index.xml b/hyphy/weekly/index.xml
new file mode 100644
index 00000000000..4272287dd10
--- /dev/null
+++ b/hyphy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub HyPhy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:27Z
+ Weekly Trending of HyPhy in GitHub
+
+
\ No newline at end of file
diff --git a/idl/daily/index.xml b/idl/daily/index.xml
index 0bf3b0d52f1..8d80f3f86b5 100644
--- a/idl/daily/index.xml
+++ b/idl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub IDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:48Z
+ 2024-12-01T01:32:46Z
Daily Trending of IDL in GitHub
\ No newline at end of file
diff --git a/idl/monthly/index.xml b/idl/monthly/index.xml
new file mode 100644
index 00000000000..24fd7ee6b40
--- /dev/null
+++ b/idl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:22Z
+ Monthly Trending of IDL in GitHub
+
+
\ No newline at end of file
diff --git a/idl/weekly/index.xml b/idl/weekly/index.xml
new file mode 100644
index 00000000000..e0ec7a5f916
--- /dev/null
+++ b/idl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:27Z
+ Weekly Trending of IDL in GitHub
+
+
\ No newline at end of file
diff --git a/idris/daily/index.xml b/idris/daily/index.xml
index 6f431e9f144..ed7628de597 100644
--- a/idris/daily/index.xml
+++ b/idris/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Idris Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:48Z
+ 2024-12-01T01:32:46Z
Daily Trending of Idris in GitHub
\ No newline at end of file
diff --git a/idris/monthly/index.xml b/idris/monthly/index.xml
new file mode 100644
index 00000000000..160d59a8351
--- /dev/null
+++ b/idris/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Idris Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:23Z
+ Monthly Trending of Idris in GitHub
+
+
\ No newline at end of file
diff --git a/idris/weekly/index.xml b/idris/weekly/index.xml
new file mode 100644
index 00000000000..d9dd45854ae
--- /dev/null
+++ b/idris/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Idris Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:27Z
+ Weekly Trending of Idris in GitHub
+
+
\ No newline at end of file
diff --git a/ignore-list/daily/index.xml b/ignore-list/daily/index.xml
index 0e7cb6b5787..7446ef20c1f 100644
--- a/ignore-list/daily/index.xml
+++ b/ignore-list/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ignore List Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:50Z
+ 2024-12-01T01:32:48Z
Daily Trending of Ignore List in GitHub
\ No newline at end of file
diff --git a/ignore-list/monthly/index.xml b/ignore-list/monthly/index.xml
new file mode 100644
index 00000000000..40231ef74fd
--- /dev/null
+++ b/ignore-list/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ignore List Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:24Z
+ Monthly Trending of Ignore List in GitHub
+
+
\ No newline at end of file
diff --git a/ignore-list/weekly/index.xml b/ignore-list/weekly/index.xml
new file mode 100644
index 00000000000..8a91a785840
--- /dev/null
+++ b/ignore-list/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ignore List Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:28Z
+ Weekly Trending of Ignore List in GitHub
+
+
\ No newline at end of file
diff --git a/igor-pro/daily/index.xml b/igor-pro/daily/index.xml
index ef2e7dc1d02..ffd1f7d700a 100644
--- a/igor-pro/daily/index.xml
+++ b/igor-pro/daily/index.xml
@@ -1,7 +1,7 @@
GitHub IGOR Pro Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:50Z
+ 2024-12-01T01:32:47Z
Daily Trending of IGOR Pro in GitHub
\ No newline at end of file
diff --git a/igor-pro/monthly/index.xml b/igor-pro/monthly/index.xml
new file mode 100644
index 00000000000..fc9a1a5decf
--- /dev/null
+++ b/igor-pro/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IGOR Pro Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:24Z
+ Monthly Trending of IGOR Pro in GitHub
+
+
\ No newline at end of file
diff --git a/igor-pro/weekly/index.xml b/igor-pro/weekly/index.xml
new file mode 100644
index 00000000000..627b6d60056
--- /dev/null
+++ b/igor-pro/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IGOR Pro Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:28Z
+ Weekly Trending of IGOR Pro in GitHub
+
+
\ No newline at end of file
diff --git a/imagej-macro/daily/index.xml b/imagej-macro/daily/index.xml
index 818cc71fd0d..a8776548ab7 100644
--- a/imagej-macro/daily/index.xml
+++ b/imagej-macro/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ImageJ Macro Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:51Z
+ 2024-12-01T01:32:47Z
Daily Trending of ImageJ Macro in GitHub
\ No newline at end of file
diff --git a/imagej-macro/monthly/index.xml b/imagej-macro/monthly/index.xml
new file mode 100644
index 00000000000..f5ffc26e1c1
--- /dev/null
+++ b/imagej-macro/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ImageJ Macro Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:24Z
+ Monthly Trending of ImageJ Macro in GitHub
+
+
\ No newline at end of file
diff --git a/imagej-macro/weekly/index.xml b/imagej-macro/weekly/index.xml
new file mode 100644
index 00000000000..c8140be6216
--- /dev/null
+++ b/imagej-macro/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ImageJ Macro Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:29Z
+ Weekly Trending of ImageJ Macro in GitHub
+
+
\ No newline at end of file
diff --git a/inform-7/daily/index.xml b/inform-7/daily/index.xml
index d713ec49929..e0b9291f6bd 100644
--- a/inform-7/daily/index.xml
+++ b/inform-7/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Inform 7 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:52Z
+ 2024-12-01T01:32:49Z
Daily Trending of Inform 7 in GitHub
\ No newline at end of file
diff --git a/inform-7/monthly/index.xml b/inform-7/monthly/index.xml
new file mode 100644
index 00000000000..796c4e37453
--- /dev/null
+++ b/inform-7/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Inform 7 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:26Z
+ Monthly Trending of Inform 7 in GitHub
+
+
\ No newline at end of file
diff --git a/inform-7/weekly/index.xml b/inform-7/weekly/index.xml
new file mode 100644
index 00000000000..29c181087a5
--- /dev/null
+++ b/inform-7/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Inform 7 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:30Z
+ Weekly Trending of Inform 7 in GitHub
+
+
\ No newline at end of file
diff --git a/ini/daily/index.xml b/ini/daily/index.xml
index 9dd2c1c0dfb..a7435a1e6c2 100644
--- a/ini/daily/index.xml
+++ b/ini/daily/index.xml
@@ -1,7 +1,7 @@
GitHub INI Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:52Z
+ 2024-12-01T01:32:49Z
Daily Trending of INI in GitHub
\ No newline at end of file
diff --git a/ini/monthly/index.xml b/ini/monthly/index.xml
new file mode 100644
index 00000000000..3bfb5e43636
--- /dev/null
+++ b/ini/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub INI Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:25Z
+ Monthly Trending of INI in GitHub
+
+
\ No newline at end of file
diff --git a/ini/weekly/index.xml b/ini/weekly/index.xml
new file mode 100644
index 00000000000..89fae0fe771
--- /dev/null
+++ b/ini/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub INI Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:30Z
+ Weekly Trending of INI in GitHub
+
+
\ No newline at end of file
diff --git a/inno-setup/daily/index.xml b/inno-setup/daily/index.xml
index afe82828ce8..79759285205 100644
--- a/inno-setup/daily/index.xml
+++ b/inno-setup/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Inno Setup Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:52Z
+ 2024-12-01T01:32:50Z
Daily Trending of Inno Setup in GitHub
\ No newline at end of file
diff --git a/inno-setup/monthly/index.xml b/inno-setup/monthly/index.xml
new file mode 100644
index 00000000000..7528c8e9b60
--- /dev/null
+++ b/inno-setup/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Inno Setup Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:26Z
+ Monthly Trending of Inno Setup in GitHub
+
+
\ No newline at end of file
diff --git a/inno-setup/weekly/index.xml b/inno-setup/weekly/index.xml
new file mode 100644
index 00000000000..131f1189510
--- /dev/null
+++ b/inno-setup/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Inno Setup Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:31Z
+ Weekly Trending of Inno Setup in GitHub
+
+
\ No newline at end of file
diff --git a/io/daily/index.xml b/io/daily/index.xml
index ea3f9eea0d0..f0b5c30805b 100644
--- a/io/daily/index.xml
+++ b/io/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Io Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:54Z
+ 2024-12-01T01:32:51Z
Daily Trending of Io in GitHub
\ No newline at end of file
diff --git a/io/monthly/index.xml b/io/monthly/index.xml
new file mode 100644
index 00000000000..0192a206138
--- /dev/null
+++ b/io/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Io Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:28Z
+ Monthly Trending of Io in GitHub
+
+
\ No newline at end of file
diff --git a/io/weekly/index.xml b/io/weekly/index.xml
new file mode 100644
index 00000000000..389db89b810
--- /dev/null
+++ b/io/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Io Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:32Z
+ Weekly Trending of Io in GitHub
+
+
\ No newline at end of file
diff --git a/ioke/daily/index.xml b/ioke/daily/index.xml
index 379fef48878..9b52612204a 100644
--- a/ioke/daily/index.xml
+++ b/ioke/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ioke Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:53Z
+ 2024-12-01T01:32:50Z
Daily Trending of Ioke in GitHub
\ No newline at end of file
diff --git a/ioke/monthly/index.xml b/ioke/monthly/index.xml
new file mode 100644
index 00000000000..f210ef4d2c8
--- /dev/null
+++ b/ioke/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ioke Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:27Z
+ Monthly Trending of Ioke in GitHub
+
+
\ No newline at end of file
diff --git a/ioke/weekly/index.xml b/ioke/weekly/index.xml
new file mode 100644
index 00000000000..a176407d5a0
--- /dev/null
+++ b/ioke/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ioke Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:31Z
+ Weekly Trending of Ioke in GitHub
+
+
\ No newline at end of file
diff --git a/irc-log/daily/index.xml b/irc-log/daily/index.xml
index 97ac764d4da..c5bdadd9ef6 100644
--- a/irc-log/daily/index.xml
+++ b/irc-log/daily/index.xml
@@ -1,7 +1,7 @@
GitHub IRC log Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:53Z
+ 2024-12-01T01:32:51Z
Daily Trending of IRC log in GitHub
\ No newline at end of file
diff --git a/irc-log/monthly/index.xml b/irc-log/monthly/index.xml
new file mode 100644
index 00000000000..e7fc80339d5
--- /dev/null
+++ b/irc-log/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IRC log Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:28Z
+ Monthly Trending of IRC log in GitHub
+
+
\ No newline at end of file
diff --git a/irc-log/weekly/index.xml b/irc-log/weekly/index.xml
new file mode 100644
index 00000000000..ebfdd107e5d
--- /dev/null
+++ b/irc-log/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub IRC log Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:32Z
+ Weekly Trending of IRC log in GitHub
+
+
\ No newline at end of file
diff --git a/isabelle-root/daily/index.xml b/isabelle-root/daily/index.xml
index 375e3fa1f5e..ca40eb1d0f1 100644
--- a/isabelle-root/daily/index.xml
+++ b/isabelle-root/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Isabelle ROOT Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:55Z
+ 2024-12-01T01:32:52Z
Daily Trending of Isabelle ROOT in GitHub
\ No newline at end of file
diff --git a/isabelle-root/monthly/index.xml b/isabelle-root/monthly/index.xml
new file mode 100644
index 00000000000..edc7fdf16f1
--- /dev/null
+++ b/isabelle-root/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Isabelle ROOT Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:29Z
+ Monthly Trending of Isabelle ROOT in GitHub
+
+
\ No newline at end of file
diff --git a/isabelle-root/weekly/index.xml b/isabelle-root/weekly/index.xml
new file mode 100644
index 00000000000..afb3010605d
--- /dev/null
+++ b/isabelle-root/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Isabelle ROOT Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:33Z
+ Weekly Trending of Isabelle ROOT in GitHub
+
+
\ No newline at end of file
diff --git a/isabelle/daily/index.xml b/isabelle/daily/index.xml
index 9bc46b877b8..c9a7521616e 100644
--- a/isabelle/daily/index.xml
+++ b/isabelle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Isabelle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:54Z
+ 2024-12-01T01:32:51Z
Daily Trending of Isabelle in GitHub
\ No newline at end of file
diff --git a/isabelle/monthly/index.xml b/isabelle/monthly/index.xml
new file mode 100644
index 00000000000..954164e4340
--- /dev/null
+++ b/isabelle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Isabelle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:27Z
+ Monthly Trending of Isabelle in GitHub
+
+
\ No newline at end of file
diff --git a/isabelle/weekly/index.xml b/isabelle/weekly/index.xml
new file mode 100644
index 00000000000..42399fe1a8b
--- /dev/null
+++ b/isabelle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Isabelle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:32Z
+ Weekly Trending of Isabelle in GitHub
+
+
\ No newline at end of file
diff --git a/j/daily/index.xml b/j/daily/index.xml
index 0257a0e3c3b..62513799210 100644
--- a/j/daily/index.xml
+++ b/j/daily/index.xml
@@ -1,7 +1,7 @@
GitHub J Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:55Z
+ 2024-12-01T01:32:53Z
Daily Trending of J in GitHub
\ No newline at end of file
diff --git a/j/monthly/index.xml b/j/monthly/index.xml
new file mode 100644
index 00000000000..6ad0f245d6e
--- /dev/null
+++ b/j/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub J Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:29Z
+ Monthly Trending of J in GitHub
+
+
\ No newline at end of file
diff --git a/j/weekly/index.xml b/j/weekly/index.xml
new file mode 100644
index 00000000000..4bab7458b05
--- /dev/null
+++ b/j/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub J Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:34Z
+ Weekly Trending of J in GitHub
+
+
\ No newline at end of file
diff --git a/janet/daily/index.xml b/janet/daily/index.xml
index 765564fe721..6ba6011ac0b 100644
--- a/janet/daily/index.xml
+++ b/janet/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Janet Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:55Z
+ 2024-12-01T01:32:52Z
Daily Trending of Janet in GitHub
\ No newline at end of file
diff --git a/janet/monthly/index.xml b/janet/monthly/index.xml
new file mode 100644
index 00000000000..b45c66eccea
--- /dev/null
+++ b/janet/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Janet Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:30Z
+ Monthly Trending of Janet in GitHub
+
+
\ No newline at end of file
diff --git a/janet/weekly/index.xml b/janet/weekly/index.xml
new file mode 100644
index 00000000000..1606a416616
--- /dev/null
+++ b/janet/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Janet Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:34Z
+ Weekly Trending of Janet in GitHub
+
+
\ No newline at end of file
diff --git a/jar-manifest/daily/index.xml b/jar-manifest/daily/index.xml
index 230968d5903..d9fe079cd21 100644
--- a/jar-manifest/daily/index.xml
+++ b/jar-manifest/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JAR Manifest Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:55Z
+ 2024-12-01T01:32:53Z
Daily Trending of JAR Manifest in GitHub
\ No newline at end of file
diff --git a/jar-manifest/monthly/index.xml b/jar-manifest/monthly/index.xml
new file mode 100644
index 00000000000..4376943c025
--- /dev/null
+++ b/jar-manifest/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JAR Manifest Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:29Z
+ Monthly Trending of JAR Manifest in GitHub
+
+
\ No newline at end of file
diff --git a/jar-manifest/weekly/index.xml b/jar-manifest/weekly/index.xml
new file mode 100644
index 00000000000..09ed7df453c
--- /dev/null
+++ b/jar-manifest/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JAR Manifest Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:33Z
+ Weekly Trending of JAR Manifest in GitHub
+
+
\ No newline at end of file
diff --git a/jasmin/daily/index.xml b/jasmin/daily/index.xml
index fedd23e5aba..342cff96c87 100644
--- a/jasmin/daily/index.xml
+++ b/jasmin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jasmin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:57Z
+ 2024-12-01T01:32:54Z
Daily Trending of Jasmin in GitHub
\ No newline at end of file
diff --git a/jasmin/monthly/index.xml b/jasmin/monthly/index.xml
new file mode 100644
index 00000000000..fa18789f319
--- /dev/null
+++ b/jasmin/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jasmin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:31Z
+ Monthly Trending of Jasmin in GitHub
+
+
\ No newline at end of file
diff --git a/jasmin/weekly/index.xml b/jasmin/weekly/index.xml
new file mode 100644
index 00000000000..86afd9e5fca
--- /dev/null
+++ b/jasmin/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jasmin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:35Z
+ Weekly Trending of Jasmin in GitHub
+
+
\ No newline at end of file
diff --git a/java-properties/daily/index.xml b/java-properties/daily/index.xml
index a0284da4548..06f0ba06633 100644
--- a/java-properties/daily/index.xml
+++ b/java-properties/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Java Properties Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:56Z
+ 2024-12-01T01:32:54Z
Daily Trending of Java Properties in GitHub
\ No newline at end of file
diff --git a/java-properties/monthly/index.xml b/java-properties/monthly/index.xml
new file mode 100644
index 00000000000..c45f54148e8
--- /dev/null
+++ b/java-properties/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Java Properties Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:31Z
+ Monthly Trending of Java Properties in GitHub
+
+
\ No newline at end of file
diff --git a/java-properties/weekly/index.xml b/java-properties/weekly/index.xml
new file mode 100644
index 00000000000..1f8e19915b9
--- /dev/null
+++ b/java-properties/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Java Properties Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:35Z
+ Weekly Trending of Java Properties in GitHub
+
+
\ No newline at end of file
diff --git a/java-server-pages/daily/index.xml b/java-server-pages/daily/index.xml
index b9f9da73c20..cc6043d64f2 100644
--- a/java-server-pages/daily/index.xml
+++ b/java-server-pages/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Java Server Pages Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:56Z
+ 2024-12-01T01:32:54Z
Daily Trending of Java Server Pages in GitHub
\ No newline at end of file
diff --git a/java-server-pages/monthly/index.xml b/java-server-pages/monthly/index.xml
new file mode 100644
index 00000000000..412801cd0da
--- /dev/null
+++ b/java-server-pages/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Java Server Pages Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:30Z
+ Monthly Trending of Java Server Pages in GitHub
+
+
\ No newline at end of file
diff --git a/java-server-pages/weekly/index.xml b/java-server-pages/weekly/index.xml
new file mode 100644
index 00000000000..2b860cd3fe2
--- /dev/null
+++ b/java-server-pages/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Java Server Pages Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:35Z
+ Weekly Trending of Java Server Pages in GitHub
+
+
\ No newline at end of file
diff --git a/java/daily/index.xml b/java/daily/index.xml
index b13a70e3bab..0420f684068 100644
--- a/java/daily/index.xml
+++ b/java/daily/index.xml
@@ -1,28 +1,7 @@
GitHub Java Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:58Z
+ 2024-12-01T01:32:55Z
Daily Trending of Java in GitHub
-
- react-native-share/react-native-share
- 2024-11-30T01:31:58Z
- tag:github.com,2024-11-30:/react-native-share/react-native-share
-
- <p>Social share, sending simple data to other apps.</p><hr><h1>react-native-share <a href="https://app.circleci.com/pipelines/github/react-native-share/react-native-share"><img src="https://circleci.com/gh/react-native-share/react-native-share.svg?style=svg" alt="react-native-share"></a> <a href="http://badge.fury.io/js/react-native-share"><img src="https://badge.fury.io/js/react-native-share.svg?sanitize=true" alt="npm version"></a> <a href="https://github.com/semantic-release/semantic-release"><img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?sanitize=true" alt="semantic-release"></a></h1>
<p>React Native Share, is a simple tool for sharing messages and files with other apps.</p>
<h1>Getting started 🚀</h1>
<hr>
<h2>Expo Managed Workflow</h2>
<p>For Expo projects, you will need to be on a managed workflow and use the following command:</p>
<pre><code class="language-shell">npx expo install react-native-share
</code></pre>
<p>Configure you <code>app.config.ts</code> or <code>app.json</code> to use the permissions needed by the library:</p>
<pre><code class="language-json">{
"plugins": [
[
"react-native-share",
{
"ios": [
"fb",
"instagram",
"twitter",
"tiktoksharesdk",
],
"android": [
"com.facebook.katana",
"com.instagram.android",
"com.twitter.android",
"com.zhiliaoapp.musically",
]
}
]
]
}
</code></pre>
<p><code>ios</code> parameter will take care of adding queries (LSApplicationQueriesSchemes) to the Info.plist.</p>
<pre><code class="language-xml"><key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>instagram</string>
<string>twitter</string>
<string>tiktoksharesdk</string>
</array>
</code></pre>
<p><code>android</code> parameter will take care of adding queries to the AndroidManifest.xml.</p>
<pre><code class="language-xml"><queries>
<package android:name="com.facebook.katana" />
<package android:name="com.instagram.android" />
<package android:name="com.twitter.android" />
<package android:name="com.zhiliaoapp.musically" />
</queries>
</code></pre>
<p>And prebuild the project with <code>expo prebuild</code>.</p>
<h2>Bare React Native</h2>
<p>If you are using <code>react-native >= 0.7X</code> and/or the new arch you just need to do a simple:</p>
<pre><code class="language-shell">yarn add react-native-share
</code></pre>
<p>Or if are using npm:</p>
<pre><code class="language-shell">npm i react-native-share --save
</code></pre>
<p>After that, we need to install the dependencies to use the project on iOS(you can skip this part if you are using this on Android).</p>
<p>Now run a simple: <code>npx pod-install</code> or <code>cd ios && pod install</code>. After that, you should be able to use the library on both Platforms, iOS and Android.</p>
<h1>Usage</h1>
<p>Then simply import:</p>
<pre><code class="language-js">import Share from 'react-native-share';
Share.open(options)
.then((res) => {
console.log(res);
})
.catch((err) => {
err && console.log(err);
});
</code></pre>
<p>Which you do something similar to this:</p>
<p><img src="https://raw.githubusercontent.com/react-native-share/react-native-share/main/website/static/img/assets-docs/ios-readme-example.gif" alt="example-ios"></p>
<h1>Documentation</h1>
<p>If you are using a older version of <code>react-native</code> or <code>react-native-share</code>, having any problem or want to know how use <code>Share.open</code> and other functions, please refer to our new <a href="https://react-native-share.github.io/react-native-share">docs</a> and help us improve that.🚀</p>
-
-
- freeplane/freeplane
- 2024-11-30T01:31:58Z
- tag:github.com,2024-11-30:/freeplane/freeplane
-
- <p>Application for Mind Mapping, Knowledge Management, Project Management. Develop, organize and communicate your ideas and knowledge in the most effective way.</p><hr><h1>Freeplane</h1>
<p><a href="https://sourceforge.net/projects/freeplane/files/stats/timeline"><img src="https://img.shields.io/sourceforge/dt/freeplane?color=green" alt="SourceForge"></a> <a href="https://github.com/freeplane/freeplane/stargazers"><img src="https://img.shields.io/github/stars/freeplane/freeplane?color=yellow" alt="GitHub Repo stars"></a> <a href="https://github.com/freeplane/freeplane/network"><img src="https://img.shields.io/github/forks/freeplane/freeplane" alt="GitHub forks"></a> <a href="https://img.shields.io/github/commit-activity/y/freeplane/freeplane?color=red"><img src="https://img.shields.io/github/commit-activity/y/freeplane/freeplane?color=red" alt="GitHub commit activity"></a> <a href="https://github.com/freeplane/freeplane/commits"><img src="https://img.shields.io/github/last-commit/freeplane/freeplane?color=orange" alt="GitHub last commit"></a> <a href="https://github.com/freeplane/freeplane/pulls"><img src="https://img.shields.io/github/issues-pr-closed/freeplane/freeplane" alt="GitHub closed pull requests"></a> <a href="https://github.com/freeplane/freeplane/graphs/contributors"><img src="https://img.shields.io/github/contributors/freeplane/freeplane?color=purple" alt="GitHub contributors"></a> <a href="https://img.shields.io/github/watchers/freeplane/freeplane?color=yellowgreen"><img src="https://img.shields.io/github/watchers/freeplane/freeplane?color=yellowgreen" alt="GitHub watchers"></a></p>
<p><a href="https://www.freeplane.org">Freeplane</a> is a free and open source software application that supports thinking, sharing information, getting things done at work, in school and at home. It provides you a set of tools for mind mapping (also known as concept mapping or information mapping) and navigating the mapped information. Freeplane is also a more robust and superior alternative to Xmind, Mindmeister, and similar mind mapping software.</p>
<p>Freeplane is written in Java using OSGi and Java Swing. It runs on any operating system that has a current version of Java installed. It can be installed or can run from removable storage like a USB drive.</p>
<p>Download and install the latest version over at <a href="https://sourceforge.net/projects/freeplane/files/">Sourceforge</a>. If you would like to report a bug, you can go report it over at <a href="https://github.com/freeplane/freeplane/issues">Issues</a>.</p>
<p>The documentation can be found at <a href="https://docs.freeplane.org/"><img src="https://img.shields.io/badge/mdBook-Docu-lightblue" alt="mdBook Docu"></a>. There, you will find How-To Guides, FAQs, Examples and explanations about the functions of Freeplane.</p>
<p>Hop on to our <a href="https://github.com/freeplane/freeplane/discussions">Discussions</a> if you have any questions, ideas, or thoughts you'd like to share. Contributors are very much welcome, of course!</p>
<h1>Features Rundown</h1>
<p><img src="https://user-images.githubusercontent.com/88552647/170373856-7a636373-a783-4fa0-ba27-2ddb39d8ca3c.png" alt="student"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373905-107a46ce-b8e6-4d6c-bf19-e711bfeb6a20.png" alt="slides"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373875-b2885816-b900-4a2f-9ab4-3293cb148654.png" alt="formatting"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170374143-9e65d981-c7ef-456e-8c84-a43abcae3181.png" alt="UI"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373895-f851ddf8-4bc3-4544-a197-9b101c0d986d.png" alt="addons"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373890-fdb4ec75-ba95-4a71-ab6e-65f50e72897b.png" alt="command search"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373913-7337604c-9a08-4a73-8d7b-2d9d73981fa8.png" alt="styling"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373932-247effb8-3df4-49a8-9158-192d26a752ec.png" alt="formulas"></p>
<hr>
<p><img src="https://user-images.githubusercontent.com/88552647/170373883-2a34bbeb-5bfe-4544-99bd-435295f46f8f.png" alt="discussions"></p>
<hr>
<h1>How to Start Contributing</h1>
<p>We're currently looking for contributors for developing the documentation. If you can write simple step-by-step guides, translate existing text into English, transfer text from our old documentation into the new one, then we could use your help. You can start a discussion post saying you want to contribute to the documentation and the Freeplane team will respond and assist you.</p>
<p>If you have other ways of contributing: developing an add-on, sharing your pre-configured mindmap, or suggestions about future development, please feel free to join us in the <a href="https://github.com/freeplane/freeplane/discussions">Discussions</a></p>
<p>Every contributor or team member freely decides what task they are going to work on. However, for making the best decision regarding development, it's advised that we first propose and suggest the idea to the community through a discussion post as to enable early discussion and community feedback.</p>
<h1>Where to Download</h1>
<p>Download and install the latest version over at <a href="https://sourceforge.net/projects/freeplane/files/">Sourceforge</a>.</p>
-
-
- valkey-io/valkey-glide
- 2024-11-30T01:31:58Z
- tag:github.com,2024-11-30:/valkey-io/valkey-glide
-
- <p>An open source Valkey client library that supports Valkey and Redis open source 6.2, 7.0 and 7.2. Valkey GLIDE is designed for reliability, optimized performance, and high-availability, for Valkey and Redis OSS based applications. GLIDE is a multi language client library, written in Rust with programming language bindings, such as Java and Python</p><hr><h1>Valkey GLIDE</h1>
<p>Valkey General Language Independent Driver for the Enterprise (GLIDE), is an open-source Valkey client library. Valkey GLIDE is one of the official client libraries for Valkey, and it supports all Valkey commands. Valkey GLIDE supports Valkey 7.2 and above, and Redis open-source 6.2, 7.0 and 7.2. Application programmers use Valkey GLIDE to safely and reliably connect their applications to Valkey- and Redis OSS- compatible services. Valkey GLIDE is designed for reliability, optimized performance, and high-availability, for Valkey and Redis OSS based applications. It is sponsored and supported by AWS, and is pre-configured with best practices learned from over a decade of operating Redis OSS-compatible services used by hundreds of thousands of customers. To help ensure consistency in application development and operations, Valkey GLIDE is implemented using a core driver framework, written in Rust, with language specific extensions. This design ensures consistency in features across languages and reduces overall complexity.</p>
<h2>Supported Engine Versions</h2>
<p>Valkey GLIDE is API-compatible with the following engine versions:</p>
<table>
<thead>
<tr>
<th>Engine Type</th>
<th>6.2</th>
<th>7.0</th>
<th>7.2</th>
<th>8.0</th>
</tr>
</thead>
<tbody>
<tr>
<td>Valkey</td>
<td>-</td>
<td>-</td>
<td>V</td>
<td>V</td>
</tr>
<tr>
<td>Redis</td>
<td>V</td>
<td>V</td>
<td>V</td>
<td>-</td>
</tr>
</tbody>
</table>
<h2>Current Status and upcoming releases</h2>
<p>In the current release, Valkey GLIDE is available for Python, Java and Node.js. Support for GO is actively under development, with plans to include more programming languages in the future.</p>
<h4>v1.2 (Dec. 2024)</h4>
<ul>
<li>Vector Similarity Search and JSON modules support</li>
<li>Availability zone routing for Read from Replica</li>
</ul>
<h4>v1.3 (TBD)</h4>
<ul>
<li>GO support</li>
<li>Observability with Open Telemetry</li>
<li>Client side metrics</li>
</ul>
<h2>Getting Started</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/valkey-io/valkey-glide/main/java/README.md">Java</a></li>
<li><a href="https://raw.githubusercontent.com/valkey-io/valkey-glide/main/python/README.md">Python</a></li>
<li><a href="https://raw.githubusercontent.com/valkey-io/valkey-glide/main/node/README.md">Node</a></li>
<li><a href="https://github.com/valkey-io/valkey-glide/wiki">Documentation</a></li>
</ul>
<h2>Getting Help</h2>
<p>If you have any questions, feature requests, encounter issues, or need assistance with this project, please don't hesitate to open a GitHub issue. Our community and contributors are here to help you. Before creating an issue, we recommend checking the <a href="https://github.com/valkey-io/valkey-glide/issues">existing issues</a> to see if your question or problem has already been addressed. If not, feel free to create a new issue, and we'll do our best to assist you. Please provide as much detail as possible in your issue description, including:</p>
<ol>
<li>A clear and concise title</li>
<li>Detailed description of the problem or question</li>
<li>Reproducible test case or step-by-step instructions</li>
<li>Valkey GLIDE version in use</li>
<li>Operating system details</li>
<li>Server version</li>
<li>Cluster or standalone setup information, including topology, number of shards, number of replicas, and data types used</li>
<li>Relevant modifications you've made</li>
<li>Any unusual aspects of your environment or deployment</li>
<li>Log files</li>
</ol>
<h2>Contributing</h2>
<p>GitHub is a platform for collaborative coding. If you're interested in writing code, we encourage you to contribute by submitting pull requests from forked copies of this repository. Additionally, please consider creating GitHub issues for reporting bugs and suggesting new features. Feel free to comment on issues that interest. For more info see <a href="https://raw.githubusercontent.com/valkey-io/valkey-glide/main/CONTRIBUTING.md">Contributing</a>.</p>
<h2>License</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/valkey-io/valkey-glide/main/LICENSE">Apache License 2.0</a></li>
</ul>
-
\ No newline at end of file
diff --git a/java/monthly/index.xml b/java/monthly/index.xml
new file mode 100644
index 00000000000..19502ce3efa
--- /dev/null
+++ b/java/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Java Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:33Z
+ Monthly Trending of Java in GitHub
+
+
+ StarRocks/starrocks
+ 2024-12-01T01:54:33Z
+ tag:github.com,2024-12-01:/StarRocks/starrocks
+
+ <p>The world's fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.</p><hr><img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=e8355b6b-a9fc-4d4e-8ed8-b3157aa1827d">
<p align="center"> <a href="https://starrocks.io/index"> <img width="900" src="https://cdn.starrocks.io/static/github/starrocks.png?t=12234"> </a> </p>
<p align="center"> <a href="https://starrocks.io/download/community">Download</a> | <a href="https://docs.starrocks.io/">Docs</a> | <a href="https://starrocks.io/blog/benchmark-test">Benchmarks</a> | <a href="https://github.com/StarRocks/demo">Demo</a> </p>
<p align="center"> <img src="https://img.shields.io/badge/Made%20with-JAVA%20%26%20C%2B%2B-red" alt="JAVA&C++"> <img src="https://img.shields.io/github/commit-activity/m/StarRocks/starrocks" alt="Commit Activities"> <a href="https://github.com/StarRocks/starrocks/issues"> <img src="https://img.shields.io/github/issues-raw/StarRocks/starrocks" alt="Open Issues"> </a> <a href="https://starrocks.io/index"> <img src="https://img.shields.io/badge/Visit%20StarRocks-Website-green" alt="Website"> </a> <a href="https://try.starrocks.com/join-starrocks-on-slack"> <img src="https://img.shields.io/badge/Join-Slack-ff69b4" alt="Slack"> </a> <a href="https://twitter.com/StarRocksLabs"> <img src="https://img.shields.io/twitter/follow/StarRocksLabs?style=social" alt="Twitter"> </a> <a href="https://gurubase.io/g/starrocks"> <img src="https://img.shields.io/badge/Gurubase-Ask%20StarRocks%20Guru-006BFF" alt="Gurubase"> </a> </p>
<div align="center">
</div> StarRocks is the world's fastest open query engine for sub-second, ad-hoc analytics both on and off the data lakehouse. With average query performance 3x faster than other popular alternatives, StarRocks is a query engine that eliminates the need for denormalization and adapts to your use cases, without having to move your data or rewrite SQL. A Linux Foundation project.
<br>
<br>
<p>Learn more 👉🏻 <a href="https://www.youtube.com/watch?v=RfXO5GOnbW4&ab_channel=CelerData">What Is StarRocks: Features and Use Cases</a></p>
<br>
<p align="center"> <img src="https://cdn.starrocks.io/static/github/community.gif"> </p>
<br>
<h2>Features</h2>
<ul>
<li><strong>🚀 Native vectorized SQL engine:</strong> StarRocks adopts vectorization technology to make full use of the parallel computing power of CPU, achieving sub-second query returns in multi-dimensional analyses, which is 5 to 10 times faster than previous systems.</li>
<li><strong>📊 Standard SQL:</strong> StarRocks supports ANSI SQL syntax (fully supported TPC-H and TPC-DS). It is also compatible with the MySQL protocol. Various clients and BI software can be used to access StarRocks.</li>
<li><strong>💡 Smart query optimization:</strong> StarRocks can optimize complex queries through CBO (Cost Based Optimizer). With a better execution plan, the data analysis efficiency will be greatly improved.</li>
<li><strong>⚡ Real-time update:</strong> The updated model of StarRocks can perform upsert/delete operations according to the primary key, and achieve efficient query while concurrent updates.</li>
<li><strong>🪟 Intelligent materialized view:</strong> The materialized view of StarRocks can be automatically updated during the data import and automatically selected when the query is executed.</li>
<li><strong>✨ Querying data in data lakes directly</strong>: StarRocks allows direct access to data from Apache Hive™, Apache Iceberg™, Delta Lake™ and Apache Hudi™ without importing.</li>
<li><strong>🎛️ Resource management</strong>: This feature allows StarRocks to limit resource consumption for queries and implement isolation and efficient use of resources among tenants in the same cluster.</li>
<li><strong>💠 Easy to maintain</strong>: Simple architecture makes StarRocks easy to deploy, maintain and scale out. StarRocks tunes its query plan agilely, balances the resources when the cluster is scaled in or out, and recovers the data replica under node failure automatically.</li>
</ul>
<br>
<h2>Architecture Overview</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/StarRocks/starrocks/main/images/arch.png"> </p>
<p>StarRocks’s streamlined architecture is mainly composed of two modules: Frontend (FE) and Backend (BE). The entire system eliminates single points of failure through seamless and horizontal scaling of FE and BE, as well as replication of metadata and data.</p>
<p>Starting from version 3.0, StarRocks supports a new shared-data architecture, which can provide better scalability and lower costs.</p>
<p align="center"> <img src="https://raw.githubusercontent.com/StarRocks/starrocks/main/docs/en/_assets/shared-data.png" width="55%" height="55%"> </p>
<br>
<h2>Resources</h2>
<h3>📚 Read the docs</h3>
<table>
<thead>
<tr>
<th>Section</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://docs.starrocks.io/docs/quick_start/">Quick Starts</a></td>
<td>How-tos and Tutorials.</td>
</tr>
<tr>
<td><a href="https://docs.starrocks.io/docs/deployment/deployment_overview/">Deploy</a></td>
<td>Learn how to run and configure StarRocks.</td>
</tr>
<tr>
<td><a href="https://docs.starrocks.io/">Docs</a></td>
<td>Full documentation.</td>
</tr>
<tr>
<td><a href="https://www.starrocks.io/blog">Blogs</a></td>
<td>StarRocks deep dive and user stories.</td>
</tr>
</tbody>
</table>
<h3>❓ Get support</h3>
<p><a href="https://try.starrocks.com/join-starrocks-on-slack"><img align="right" width="150" src="https://firstcontributions.github.io/assets/Readme/join-slack-team.png"></a></p>
<ul>
<li><a href="https://try.starrocks.com/join-starrocks-on-slack">Slack community: </a> join technical discussions, ask questions, and meet other users!</li>
<li><a href="https://www.youtube.com/channel/UC38wR-ogamk4naaWNQ45y7Q/featured">YouTube channel:</a> subscribe to the latest video tutorials and webcasts.</li>
<li><a href="https://github.com/StarRocks/starrocks/issues">GitHub issues:</a> report an issue with StarRocks.</li>
</ul>
<br>
<h2>Contributing to StarRocks</h2>
<p>We welcome all kinds of contributions from the community, individuals and partners. We owe our success to your active involvement.</p>
<ol>
<li>See <a href="https://github.com/StarRocks/starrocks/raw/main/CONTRIBUTING.md">Contributing.md</a> to get started.</li>
<li>Set up StarRocks development environment:</li>
</ol>
<ul>
<li><a href="https://docs.starrocks.io/docs/developers/development-environment/ide-setup/">IDE Setup</a></li>
<li><a href="https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/">Compile StarRocks with Docker</a></li>
<li><a href="https://docs.starrocks.io/docs/deployment/deploy_manually/">Deploy StarRocks manually</a></li>
</ul>
<ol start="3">
<li>Understand our <a href="https://github.com/StarRocks/community/raw/main/Contributors/guide/workflow.md">GitHub workflow</a> for opening a pull request; use this <a href="https://github.com/StarRocks/starrocks/raw/main/.github/PULL_REQUEST_TEMPLATE.md">PR Template</a> when submitting a pull request.</li>
<li>Pick a <a href="https://github.com/StarRocks/starrocks/labels/good%20first%20issue">good first issue</a> and start contributing.</li>
</ol>
<p><strong>📝 License:</strong> StarRocks is licensed under <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.</p>
<p><strong>👥 Community Membership:</strong> Learn more about different <a href="https://raw.githubusercontent.com/StarRocks/starrocks/main/community/membership.md">contributor roles</a> in StarRocks community.</p>
<p><strong>💬 Developer Group:</strong> Please join our <a href="https://groups.google.com/g/starrocks-dev">Google Groups</a> to discuss StarRocks features, project directions, issues, pull requests, or share suggestions.</p>
<br>
<h2>Used By</h2>
<p>This project is used by the following companies. Learn more about their use cases:</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=AzDxEZuMBwM&ab_channel=StarRocks_labs">Airbnb</a></li>
<li><a href="https://medium.com/pinterest-engineering/delivering-faster-analytics-at-pinterest-a639cdfad374">Pinterest</a></li>
<li><a href="https://www.youtube.com/watch?v=3Z9jSCaHnYg&list=PL0eWwaesODdhBhKSnvpfIEAB9sgk8rKmy">Coinbase</a></li>
<li><a href="https://www.starrocks.io/blog/tencent-unifies-their-gaming-analytics-with-starrocks">Tencent(Games)</a></li>
<li><a href="https://www.youtube.com/watch?v=WVHXFks9EQk">Tencent(LLM)</a></li>
<li><a href="https://starrocks.medium.com/demandbase-ditches-denormalization-by-switching-off-clickhouse-44195d795a83">Demandbase</a></li>
<li><a href="https://celerdata.com/blog/how-shopee-3xed-their-query-performance-with-starrocks">Shopee</a></li>
<li><a href="https://starrocks.medium.com/trip-com-starrocks-efficiently-supports-high-concurrent-queries-dramatically-reduces-labor-and-1e1921dd6bf8">Trip.com</a></li>
<li><a href="https://www.starrocks.io/blog/reduced-80-cost-didis-journey-from-multiple-olap-engines-to-starrocks">Didi</a></li>
</ul>
+
+
+ dromara/Sa-Token
+ 2024-12-01T01:54:33Z
+ tag:github.com,2024-12-01:/dromara/Sa-Token
+
+ <p>一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0</p><hr><p align="center"> <img alt="logo" src="https://sa-token.cc/logo.png" width="150" height="150"> </p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Sa-Token v1.39.0</h1>
<h4 align="center">一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!</h4>
<p align="center"> <a href="https://gitee.com/dromara/sa-token/stargazers"><img src="https://gitee.com/dromara/sa-token/badge/star.svg?theme=gvp"></a> <a href="https://gitee.com/dromara/sa-token/members"><img src="https://gitee.com/dromara/sa-token/badge/fork.svg?theme=gvp"></a> <a href="https://github.com/dromara/sa-token/stargazers"><img src="https://img.shields.io/github/stars/dromara/sa-token?style=flat-square&logo=GitHub"></a> <a href="https://github.com/dromara/sa-token/network/members"><img src="https://img.shields.io/github/forks/dromara/sa-token?style=flat-square&logo=GitHub"></a> <a href="https://github.com/dromara/sa-token/watchers"><img src="https://img.shields.io/github/watchers/dromara/sa-token?style=flat-square&logo=GitHub"></a> <a href="https://github.com/dromara/sa-token/issues"><img src="https://img.shields.io/github/issues/dromara/sa-token.svg?style=flat-square&logo=GitHub"></a> <a href="https://github.com/dromara/sa-token/raw/master/LICENSE"><img src="https://img.shields.io/github/license/dromara/sa-token.svg?style=flat-square"></a> </p>
<!-- <p align="center">学习测试请拉取 master 分支,dev 是在开发分支 (在根目录执行 `git checkout master`)</p> -->
<p align="center"><a href="https://sa-token.cc" target="_blank">在线文档:https://sa-token.cc</a></p>
<hr>
<h3>Sa-Token 介绍</h3>
<p>Sa-Token 是一个轻量级 Java 权限认证框架,目前拥有五大核心模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。</p>
<details>
<summary><b>简单示例展示:(点击展开 / 折叠)</b></summary>
<p>Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:</p>
<pre><code class="language-java">// 会话登录,参数填登录人的账号id
StpUtil.login(10001);
</code></pre>
<p>无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。</p>
<p>如果一个接口需要登录后才能访问,我们只需调用以下代码:</p>
<pre><code class="language-java">// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil.checkLogin();
</code></pre>
<p>在 Sa-Token 中,大多数功能都可以一行代码解决:</p>
<p>踢人下线:</p>
<pre><code class="language-java">// 将账号id为 10077 的会话踢下线
StpUtil.kickout(10077);
</code></pre>
<p>权限认证:</p>
<pre><code class="language-java">// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@SaCheckPermission("user:add")
public String insert(SysUser user) {
// ...
return "用户增加";
}
</code></pre>
<p>路由拦截鉴权:</p>
<pre><code class="language-java">// 根据路由划分模块,不同模块不同鉴权
registry.addInterceptor(new SaInterceptor(handler -> {
SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
// 更多模块...
})).addPathPatterns("/**");
</code></pre>
<p>当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!</p>
</details>
<details>
<summary> <b>核心模块一览:(点击展开 / 折叠)</b> </summary>
<ul>
<li><strong>登录认证</strong> —— 单端登录、多端登录、同端互斥登录、七天内免登录。</li>
<li><strong>权限认证</strong> —— 权限认证、角色认证、会话二级认证。</li>
<li><strong>踢人下线</strong> —— 根据账号id踢人下线、根据Token值踢人下线。</li>
<li><strong>注解式鉴权</strong> —— 优雅的将鉴权与业务代码分离。</li>
<li><strong>路由拦截式鉴权</strong> —— 根据路由拦截鉴权,可适配 restful 模式。</li>
<li><strong>Session会话</strong> —— 全端共享Session,单端独享Session,自定义Session,方便的存取值。</li>
<li><strong>持久层扩展</strong> —— 可集成 Redis,重启数据不丢失。</li>
<li><strong>前后台分离</strong> —— APP、小程序等不支持 Cookie 的终端也可以轻松鉴权。</li>
<li><strong>Token风格定制</strong> —— 内置六种 Token 风格,还可:自定义 Token 生成策略。</li>
<li><strong>记住我模式</strong> —— 适配 [记住我] 模式,重启浏览器免验证。</li>
<li><strong>二级认证</strong> —— 在已登录的基础上再次认证,保证安全性。</li>
<li><strong>模拟他人账号</strong> —— 实时操作任意用户状态数据。</li>
<li><strong>临时身份切换</strong> —— 将会话身份临时切换为其它账号。</li>
<li><strong>同端互斥登录</strong> —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录。</li>
<li><strong>账号封禁</strong> —— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁。</li>
<li><strong>密码加密</strong> —— 提供基础加密算法,可快速 MD5、SHA1、SHA256、AES 加密。</li>
<li><strong>会话查询</strong> —— 提供方便灵活的会话查询接口。</li>
<li><strong>Http Basic认证</strong> —— 一行代码接入 Http Basic、Digest 认证。</li>
<li><strong>全局侦听器</strong> —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作。</li>
<li><strong>全局过滤器</strong> —— 方便的处理跨域,全局设置安全响应头等操作。</li>
<li><strong>多账号体系认证</strong> —— 一个系统多套账号分开鉴权(比如商城的 User 表和 Admin 表)</li>
<li><strong>单点登录</strong> —— 内置三种单点登录模式:同域、跨域、同Redis、跨Redis、前后端分离等架构都可以搞定。</li>
<li><strong>单点注销</strong> —— 任意子系统内发起注销,即可全端下线。</li>
<li><strong>OAuth2.0认证</strong> —— 轻松搭建 OAuth2.0 服务,支持openid模式 。</li>
<li><strong>分布式会话</strong> —— 提供共享数据中心分布式会话方案。</li>
<li><strong>微服务网关鉴权</strong> —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证。</li>
<li><strong>RPC调用鉴权</strong> —— 网关转发鉴权,RPC调用鉴权,让服务调用不再裸奔</li>
<li><strong>临时Token认证</strong> —— 解决短时间的 Token 授权问题。</li>
<li><strong>独立Redis</strong> —— 将权限缓存与业务缓存分离。</li>
<li><strong>Quick快速登录认证</strong> —— 为项目零代码注入一个登录页面。</li>
<li><strong>标签方言</strong> —— 提供 Thymeleaf 标签方言集成包,提供 beetl 集成示例。</li>
<li><strong>jwt集成</strong> —— 提供三种模式的 jwt 集成方案,提供 token 扩展参数能力。</li>
<li><strong>RPC调用状态传递</strong> —— 提供 dubbo、grpc 等集成包,在RPC调用时登录状态不丢失。</li>
<li><strong>参数签名</strong> —— 提供跨系统API调用签名校验模块,防参数篡改,防请求重放。</li>
<li><strong>自动续签</strong> —— 提供两种Token过期策略,灵活搭配使用,还可自动续签。</li>
<li><strong>开箱即用</strong> —— 提供SpringMVC、WebFlux、Solon 等常见框架集成包,开箱即用。</li>
<li><strong>最新技术栈</strong> —— 适配最新技术栈:支持 SpringBoot 3.x,jdk 17。</li>
</ul>
</details>
<p><img src="https://color-test.oss-cn-qingdao.aliyuncs.com/sa-token/x/sa-token-js4.png" alt="sa-token-js"></p>
<h3>SSO 单点登录</h3>
<p>Sa-Token SSO 分为三种模式,解决同域、跨域、共享Redis、跨Redis、前后端一体、前后端分离……等不同架构下的 SSO 接入问题:</p>
<table>
<thead>
<tr>
<th align="left">系统架构</th>
<th align="left">采用模式</th>
<th align="left">简介</th>
<th align="left">文档链接</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">前端同域 + 后端同 Redis</td>
<td align="left">模式一</td>
<td align="left">共享Cookie同步会话</td>
<td align="left"><a href="https://sa-token.cc/doc.html#/sso/sso-type1">文档</a>、<a href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso1-client">示例</a></td>
</tr>
<tr>
<td align="left">前端不同域 + 后端同 Redis</td>
<td align="left">模式二</td>
<td align="left">URL重定向传播会话</td>
<td align="left"><a href="https://sa-token.cc/doc.html#/sso/sso-type2">文档</a>、<a href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso2-client">示例</a></td>
</tr>
<tr>
<td align="left">前端不同域 + 后端 不同Redis</td>
<td align="left">模式三</td>
<td align="left">Http请求获取会话</td>
<td align="left"><a href="https://sa-token.cc/doc.html#/sso/sso-type3">文档</a>、<a href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-sso3-client">示例</a></td>
</tr>
</tbody>
</table>
<ol>
<li>前端同域:就是指多个系统可以部署在同一个主域名之下,比如:<code>c1.domain.com</code>、<code>c2.domain.com</code>、<code>c3.domain.com</code></li>
<li>后端同Redis:就是指多个系统可以连接同一个Redis。(此处并非要所有项目数据都放在一个Redis中,Sa-Token提供 <strong><code>[权限缓存与业务缓存分离]</code></strong> 的解决方案)</li>
<li>如果既无法做到前端同域,也无法做到后端同Redis,可以走模式三,Http请求校验 ticket 获取会话。</li>
<li>提供 NoSdk 模式示例,不使用 Sa-Token 的系统也可以对接。</li>
<li>提供 sso-server 接口文档,不使用 java 语言的系统也可以对接。</li>
<li>提供前后端分离整合方案:无论是 sso-server 还是 sso-client 的前后端分离都可以整合。</li>
<li>提供安全校验:域名校验、ticket校验、参数签名校验,有效防 ticket 劫持,防请求重放等攻击。</li>
<li>参数防丢:笔者曾试验多个SSO框架,均有参数丢失情况,比如登录前是:<code>http://a.com?id=1&name=2</code>,登录成功后就变成了:<code>http://a.com?id=1</code>,Sa-Token-SSO 内有专门算法保证了参数不丢失,登录成功后精准原路返回。</li>
<li>提供用户数据同步/迁移方案的建议:开发前统一迁移、运行时实时数据同步、根据关联字段匹配、根据 center_id 字段匹配等。</li>
<li>提供直接可运行的 demo 示例,帮助你快速熟悉 SSO 大致登录流程。</li>
</ol>
<h3>OAuth2 授权认证</h3>
<p>Sa-Token-OAuth2 模块分为四种授权模式,解决不同场景下的授权需求</p>
<table>
<thead>
<tr>
<th align="left">授权模式</th>
<th align="left">简介</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">授权码(Authorization Code)</td>
<td align="left">OAuth2.0 标准授权步骤,Server 端向 Client 端下放 Code 码,Client 端再用 Code 码换取授权 Token</td>
</tr>
<tr>
<td align="left">隐藏式(Implicit)</td>
<td align="left">无法使用授权码模式时的备用选择,Server 端使用 URL 重定向方式直接将 Token 下放到 Client 端页面</td>
</tr>
<tr>
<td align="left">密码式(Password)</td>
<td align="left">Client直接拿着用户的账号密码换取授权 Token</td>
</tr>
<tr>
<td align="left">客户端凭证(Client Credentials)</td>
<td align="left">Server 端针对 Client 级别的 Token,代表应用自身的资源授权</td>
</tr>
</tbody>
</table>
<p>详细参考文档:<a href="https://sa-token.cc/doc.html#/oauth2/readme">https://sa-token.cc/doc.html#/oauth2/readme</a></p>
<h3>开源集成案例</h3>
<ul>
<li><a href="https://gitee.com/xiaonuobase/snowy">[ Snowy ]</a>:国内首个国密前后分离快速开发平台,采用 Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken。</li>
<li><a href="https://gitee.com/dromara/RuoYi-Vue-Plus">[ RuoYi-Vue-Plus ]</a>:重写RuoYi-Vue所有功能 集成 Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS 定期同步</li>
<li><a href="https://gitee.com/lab1024/smart-admin">[Smart-Admin]</a>:SmartAdmin国内首个以「高质量代码」为核心,「简洁、高效、安全」中后台快速开发平台;</li>
<li><a href="https://gitee.com/dromara/lamp-cloud">[ 灯灯 ]</a>: 专注于多租户解决方案的微服务中后台快速开发平台。租户模式支持独立数据库(DATASOURCE模式)、共享数据架构(COLUMN模式) 和 非租户模式(NONE模式)✨</li>
<li><a href="https://gitee.com/lakernote/easy-admin">[ EasyAdmin ]</a>:一个基于SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui 的后台管理系统,灵活多变可前后端分离,也可单体,内置代码生成器、权限管理、工作流引擎等</li>
<li><a href="https://gitee.com/wlf213/sa-admin-server">[ sa-admin-server ]</a>: 基于 sa-admin-ui 的后台管理开发脚手架。</li>
</ul>
<p>还有更多优秀开源案例无法逐一展示,请参考:<a href="https://gitee.com/sa-token/awesome-sa-token">Awesome-Sa-Token</a></p>
<h3>友情链接</h3>
<ul>
<li><a href="https://gitee.com/ejlchina-zhxu/okhttps">[ OkHttps ]</a>:轻量级 http 通信框架,API无比优雅,支持 WebSocket、Stomp 协议</li>
<li><a href="https://github.com/ejlchina/bean-searcher">[ Bean Searcher ]</a>:专注高级查询的只读 ORM,使一行代码实现复杂列表检索!</li>
<li><a href="https://gitee.com/dromara/Jpom">[ Jpom ]</a>:简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。</li>
<li><a href="https://gitee.com/dromara/TLog">[ TLog ]</a>:一个轻量级的分布式日志标记追踪神器。</li>
<li><a href="https://gitee.com/agentart/hippo4j">[ hippo4j ]</a>:强大的动态线程池框架,附带监控报警功能。</li>
<li><a href="https://gitee.com/dromara/hertzbeat">[ hertzbeat ]</a>:易用友好的开源实时监控告警系统,无需Agent,高性能集群,强大自定义监控能力。</li>
<li><a href="https://gitee.com/noear/solon">[ Solon ]</a>:一个更现代感的应用开发框架:更快、更小、更自由。</li>
<li><a href="https://github.com/chat2db/Chat2DB">[ Chat2DB ]</a>:一个AI驱动的数据库管理和BI工具,支持Mysql、pg、Oracle、Redis等22种数据库的管理。</li>
</ul>
<h3>代码托管</h3>
<ul>
<li>Gitee:<a href="https://gitee.com/dromara/sa-token">https://gitee.com/dromara/sa-token</a></li>
<li>GitHub:<a href="https://github.com/dromara/sa-token">https://github.com/dromara/sa-token</a></li>
<li>GitCode:<a href="https://gitcode.com/dromara/sa-token">https://gitcode.com/dromara/sa-token</a></li>
</ul>
<h3>交流群</h3>
<!-- QQ交流群:685792424 [点击加入](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Y05Ld4125W92YSwZ0gA8e3RhG9Q4Vsfx&authKey=IomXuIuhP9g8G7l%2ByfkrRsS7i%2Fna0lIBpkTXxx%2BQEaz0NNEyJq00kgeiC4dUyNLS&noverify=0&group_code=685792424)-->
<p>QQ交流群:823181187 <a href="https://qm.qq.com/q/EBIJVZBVGE">点击加入</a></p>
<p>微信交流群:</p>
<!-- <img src="https://oss.dev33.cn/sa-token/qr/wx-qr-m-400k.png" width="230px" title="微信群" /> -->
<img src="https://oss.dev33.cn/sa-token/qr/i-wx-qr2.png" width="230px" title="微信群">
<p>(扫码添加微信,备注:sa-token,邀您加入群聊)</p>
<br>
<p>加入群聊的好处:</p>
<ul>
<li>第一时间收到框架更新通知。</li>
<li>第一时间收到框架 bug 通知。</li>
<li>第一时间收到新增开源案例通知。</li>
<li>和众多大佬一起互相 (huá shuǐ) 交流 (mō yú)。</li>
</ul>
+
+
+ gyoogle/tech-interview-for-developer
+ 2024-12-01T01:54:33Z
+ tag:github.com,2024-12-01:/gyoogle/tech-interview-for-developer
+
+ <p>👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖</p><hr><h1>tech-interview-for-developer</h1>
<p><a href="https://gyoogle.github.io"><img src="https://img.shields.io/badge/since-2019.03.01-333333.svg?style=flat-square" alt="Since"></a> <a href="https://gyoogle.github.io"><img src="https://img.shields.io/badge/author-gyoogle-0066FF.svg?style=flat-square" alt="author"></a> <a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/LICENSE"><img src="https://img.shields.io/dub/l/vibe-d.svg?style=flat-square" alt="LICENSE"></a> <a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fgyoogle%2Fhit-counter&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false" alt="Hits"></a> <a href="https://raw.githubusercontent.com/gyoogle/tech-interview-for-developer/master/#contributors"><img src="https://img.shields.io/badge/all_contributors-58-orange.svg?style=flat-square" alt="All Contributors"></a> <a href="http://makeapullrequest.com"><img src="https://img.shields.io/badge/PRs-welcome-FF66FF.svg?style=flat-square" alt="PRs Welcome"></a></p>
<p><a href="https://github.com/gyoogle/tech-interview-for-developer/watchers"><img src="https://img.shields.io/github/watchers/gyoogle/tech-interview-for-developer.svg?style=social" alt="Watch on GitHub"></a> <a href="https://github.com/gyoogle/tech-interview-for-developer/stargazers"><img src="https://img.shields.io/github/stars/gyoogle/tech-interview-for-developer.svg?style=social" alt="Star on GitHub"></a> <a href="https://github.com/gyoogle/tech-interview-for-developer/network/members"><img src="https://img.shields.io/github/forks/gyoogle/tech-interview-for-developer.svg?style=social" alt="Fork on GitHub"></a></p>
<br>
<br>
<h3>👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖</h3>
<br>
<p><strong>Collaborator</strong></p>
<table>
<thead>
<tr>
<th align="center"><a href="https://github.com/gyoogle"><img src="https://avatars3.githubusercontent.com/u/34904741?s=460&u=c8b8b7954518e26abbcf5d29c69c5df0b5c53c1b&v=4" width="100"></a></th>
<th align="center"><a href="https://github.com/GimunLee"><img src="https://avatars2.githubusercontent.com/u/46181475?s=460&u=16d868ed1e357e51e8ba9f6dbb77df53a8fbb945&v=4" width="100"></a></th>
<th align="center"><a href="https://github.com/b2narae"><img src="https://avatars2.githubusercontent.com/u/37679254?s=460&u=1a7ccc7bf9926d6ea1cc455d04dfb63e4ebceaec&v=4" width="100"></a></th>
</tr>
</thead>
</table>
<br>
<p><strong>Commit convention rule</strong> : 날짜-[주제]-내용-상태</p>
<p><code>ex) 2019-10-14 [Algorithm] Sort Add/Update/Delete</code></p>
<br>
<p>잘못된 내용은 <a href="https://github.com/gyoogle/tech-interview-for-developer/issues">이슈</a>와 <a href="https://github.com/gyoogle/tech-interview-for-developer/pulls">PR</a>로 알려주세요 💡</p>
<br>
<center>
🙏도움을 주신 분들🙏
</center>
<br>
<br>
<a href="https://github.com/gyoogle/tech-interview-for-developer/graphs/contributors"> <img src="https://contrib.rocks/image?repo=gyoogle/tech-interview-for-developer"> </a>
<br>
<h4><a href="https://github.com/sponsors/gyoogle">💖후원하기💝</a></h4>
<br>
<br>
<h2>⏩ ⏩ ⏩ <a href="https://gyoogle.dev/">웹 사이트에서 편하게 공부하세요! Click!</a> ⏪ ⏪ ⏪</h2>
<br>
<br>
<br>
<h3>👨🏻🏫 <a href="https://github.com/gyoogle/tech-interview-for-developer/tree/master/Interview#%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0">기술 면접 감 잡기</a> 👩🏻🏫</h3>
<hr>
<br>
<h2>📌 Computer Science</h2>
<ul>
<li> <h3>Computer Architecture</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0%20%EA%B8%B0%EC%B4%88.pdf">컴퓨터 구조 기초</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98%20%EA%B5%AC%EC%84%B1.md">컴퓨터의 구성</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%EC%A4%91%EC%95%99%EC%B2%98%EB%A6%AC%EC%9E%A5%EC%B9%98(CPU)%20%EC%9E%91%EB%8F%99%20%EC%9B%90%EB%A6%AC.md">중앙처리장치(CPU) 작동 원리</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%EC%BA%90%EC%8B%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC(Cache%20Memory).md">캐시 메모리</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%EA%B3%A0%EC%A0%95%20%EC%86%8C%EC%88%98%EC%A0%90%20%26%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90.md">고정 소수점 & 부동 소수점</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/%ED%8C%A8%EB%A6%AC%ED%8B%B0%20%EB%B9%84%ED%8A%B8%20%26%20%ED%95%B4%EB%B0%8D%20%EC%BD%94%EB%93%9C.md">패리티 비트 & 해밍 코드</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Computer%20Architecture/ARM%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C.md">ARM 프로세서</a></li>
</ul> <br> </li>
<li> <h3>Data Structure</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Array.md">Array</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Linked%20List.md">LinkedList</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Array%20vs%20ArrayList%20vs%20LinkedList.md">Array & ArrayList & LinkedList</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Stack%20%26%20Queue.md">스택(Stack) & 큐(Queue)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Heap.md">힙(Heap)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Tree.md">트리(Tree)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Binary%20Search%20Tree.md">이진탐색트리(Binary Search Tree)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Hash.md">해시(Hash)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/Trie.md">트라이(Trie)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Data%20Structure/B%20Tree%20%26%20B%2B%20Tree.md">B-Tree & B+Tree</a></li>
</ul> <br> </li>
<li> <h3>Database</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%5BDB%5D%20Key.md">키(Key) 정리</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%5BDatabase%20SQL%5D%20JOIN.md">SQL - JOIN</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/SQL%20Injection.md">SQL Injection</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/SQL%EA%B3%BC%20NOSQL%EC%9D%98%20%EC%B0%A8%EC%9D%B4.md">SQL vs NoSQL</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%EC%A0%95%EA%B7%9C%ED%99%94(Normalization).md">정규화(Normalization)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%5BDB%5D%20Anomaly.md">이상(Anomaly)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%5BDB%5D%20Index.md">인덱스(INDEX)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/Transaction.md">트랜잭션(Transaction)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/Transaction%20Isolation%20Level.md">트랜잭션 격리 수준(Transaction Isolation Level)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/%EC%A0%80%EC%9E%A5%20%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80(Stored%20PROCEDURE).md">저장 프로시저(Stored PROCEDURE)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Database/Redis.md">레디스(Redis)</a></li>
</ul> <br> </li>
<li> <h3>Network</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/OSI%207%20%EA%B3%84%EC%B8%B5.md">OSI 7 계층</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/TCP%203%20way%20handshake%20%26%204%20way%20handshake.md">TCP 3 way handshake & 4 way handshake</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/TCP%20(%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4).md#tcp-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4">TCP/IP 흐름제어 & 혼잡제어</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/UDP.md#20190826%EC%9B%94-bym-udp%EB%9E%80">UDP</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/%EB%8C%80%EC%B9%AD%ED%82%A4%20%26%20%EA%B3%B5%EA%B0%9C%ED%82%A4.md">대칭키 & 공개키</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/HTTP%20%26%20HTTPS.md">HTTP & HTTPS</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/TLS%20HandShake.md">TLS/SSL handshake</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/%EB%A1%9C%EB%93%9C%20%EB%B0%B8%EB%9F%B0%EC%8B%B1(Load%20Balancing).md">로드 밸런싱(Load Balancing)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/%5BNetwork%5D%20Blocking%2CNon-blocking%20%26%20Synchronous%2CAsynchronous.md">Blocking,Non-blocking & Synchronous,Asynchronous</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Network/%5BNetwork%5D%20Blocking%20Non-Blocking%20IO.md">Blocking & Non-Blocking I/O</a></li>
</ul> <br> </li>
<li> <h3>Operating System</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Operation%20System.md">운영체제란</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Process%20vs%20Thread.md">프로세스 vs 스레드</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Process%20Address%20Space.md">프로세스 주소 공간</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Interrupt.md">인터럽트(Interrupt)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/%5BOS%5D%20System%20Call%20(Fork%20Wait%20Exec).md">시스템 콜(System Call)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/PCB%20%26%20Context%20Switcing.md">PCB와 Context Switching</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/IPC(Inter%20Process%20Communication).md">IPC(Inter Process Communication)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/CPU%20Scheduling.md">CPU 스케줄링</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/DeadLock.md">데드락(DeadLock)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Race%20Condition.md">Race Condition</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Semaphore%20%26%20Mutex.md">세마포어(Semaphore) & 뮤텍스(Mutex)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Paging%20and%20Segmentation.md">페이징 & 세그먼테이션</a> (<a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Paging%20and%20Segmentation.pdf">PDF</a>)</li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Page%20Replacement%20Algorithm.md">페이지 교체 알고리즘</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/Memory.md">메모리(Memory)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Operating%20System/File%20System.md">파일 시스템</a></li>
</ul> <br> </li>
<li> <h3>Software Engineering</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/Clean%20Code%20%26%20Refactoring.md">클린코드 & 리팩토링</a> / <a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C(Clean%20Code)%20%26%20%EC%8B%9C%ED%81%90%EC%96%B4%EC%BD%94%EB%94%A9(Secure%20Coding).md">클린코드 & 시큐어코딩</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/TDD(Test%20Driven%20Development).md">TDD(Test Driven Development)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%EC%95%A0%EC%9E%90%EC%9D%BC(Agile).md">애자일(Agile) 정리1</a> / <a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%EC%95%A0%EC%9E%90%EC%9D%BC(Agile)2.md">애자일(Agile) 정리2</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/Object-Oriented%20Programming.md">객체 지향 프로그래밍(Object-Oriented Programming)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/Fuctional%20Programming.md">함수형 프로그래밍(Fuctional Programming)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4(DevOps).md">데브옵스(DevOps)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%EC%8D%A8%EB%93%9C%ED%8C%8C%ED%8B%B0(3rd%20party)%EB%9E%80.md">서드 파티(3rd party)란?</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Computer%20Science/Software%20Engineering/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4%20%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98(MSA).md">마이크로서비스 아키텍처(MSA)</a></li>
</ul> </li>
</ul>
<br>
<br>
<h2>📌 Algorithm</h2>
<ul>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Algorithm/%EA%B1%B0%ED%92%88%20%EC%A0%95%EB%A0%AC%20(Bubble%20Sort).md#%EA%B1%B0%ED%92%88-%EC%A0%95%EB%A0%AC-bubble-sort">거품 정렬(Bubble Sort)</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Algorithm/%EC%84%A0%ED%83%9D%20%EC%A0%95%EB%A0%AC%20(Selection%20Sort).md#%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC-selection-sort">선택 정렬(Selection Sort)</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Algorithm/%EC%82%BD%EC%9E%85%20%EC%A0%95%EB%A0%AC%20(Insertion%20Sort).md#%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%AC-insertion-sort">삽입 정렬(Insertion Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/QuickSort.md">퀵 정렬(Quick Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/MergeSort.md">병합 정렬(Merge Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/HeapSort.md">힙 정렬(Heap Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/Sort_Radix.md">기수 정렬(Radix Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/Sort_Counting.md">계수 정렬(Count Sort)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/Binary%20Search.md">이분 탐색(Binary Search)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/Hash%20Table%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0.md">해시 테이블 구현</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/DFS%20%26%20BFS.md">DFS & BFS</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/LIS%20(Longest%20Increasing%20Sequence).md">최장 증가 수열(LIS)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/LCA(Lowest%20Common%20Ancestor).md">최소 공통 조상(LCA)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95%20(Dynamic%20Programming).md">동적 계획법(Dynamic Programming)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BC(Dijkstra).md">다익스트라(Dijkstra) 알고리즘</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/%EB%B9%84%ED%8A%B8%EB%A7%88%EC%8A%A4%ED%81%AC(BitMask).md">비트마스크(BitMask)</a></li>
</ul>
<br>
<ul>
<li> <h5>✏️ TEST</h5>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Algorithm/SAMSUNG%20Software%20PRO%EB%93%B1%EA%B8%89%20%EC%A4%80%EB%B9%84.md">삼성 소프트웨어 역량테스트 PRO 등급 준비</a></li>
</ul> </li>
</ul>
<br>
<h2>📌 Design Pattern</h2>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/%5BDesign%20Pattern%5D%20Overview.md">디자인패턴 개요(Overview)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Adapter%20Pattern.md">어댑터 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Singleton%20Pattern.md">싱글톤 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Design%20Pattern_Template%20Method.md">탬플릿 메소드 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Design%20Pattern_Factory%20Method.md">팩토리 메소드 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Observer%20pattern.md">옵저버 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Strategy%20Pattern.md">스트레티지 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/Composite%20Pattern.md">컴포지트 패턴</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Design%20Pattern/SOLID.md">SOLID</a></li>
</ul>
<br>
<h2>📌 Interview</h2>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Interview/Interview%20List.md#%EC%96%B8%EC%96%B4">언어(Java, C++ ... )</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Interview/Interview%20List.md#%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C">운영체제</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Interview/Interview%20List.md#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4">데이터베이스</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Interview/Interview%20List.md#%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC">네트워크</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Interview/Interview%20List.md#%EC%8A%A4%ED%94%84%EB%A7%81">웹(스프링)</a></li>
</ul>
<br>
<h2>📌 Language</h2>
<ul>
<li> <h3>C</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bc%5D%20C%EC%96%B8%EC%96%B4%20%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.md">[C] C언어 컴파일 과정</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%5D%20%EA%B5%AC%EC%A1%B0%EC%B2%B4%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%ED%81%AC%EA%B8%B0%20%EA%B3%84%EC%82%B0.md">[C] 구조체 메모리 크기 계산</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%5D%20%ED%8F%AC%EC%9D%B8%ED%84%B0(Pointer).md">[C] 포인터(Pointer)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%5D%20%EB%8F%99%EC%A0%81%ED%95%A0%EB%8B%B9.md">[C] 동적할당</a></li>
</ul> </li>
<li> <h3>C++</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BCpp%5D%20shallow%20copy%20vs%20deep%20copy.md">[C++] 얕은 복사 vs 깊은 복사</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%2B%2B%5D%20%EA%B0%80%EC%83%81%20%ED%95%A8%EC%88%98(virtual%20function).md">[C++] 가상 함수(Virtual Function)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%2B%2B%5D%20%EC%9E%85%EC%B6%9C%EB%A0%A5%20%EC%8B%A4%ED%96%89%EC%86%8D%EB%8F%84%20%EC%A4%84%EC%9D%B4%EB%8A%94%20%EB%B2%95.md">[C++] 입출력 최적화하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BC%2B%2B%5D%20Vector%20Container.md">[C++] Vector Container</a></li>
</ul> </li>
<li> <h3>Java</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20%EC%9E%90%EB%B0%94%20%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.md">[Java] Java 컴파일 과정</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20Call%20by%20value%EC%99%80%20Call%20by%20reference.md">[Java] Call by Value vs Call by Reference</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20String%20StringBuilder%20StringBuffer%20%EC%B0%A8%EC%9D%B4.md">[Java] String & StringBuffer & StringBuilder</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20%EC%9E%90%EB%B0%94%20%EA%B0%80%EC%83%81%20%EB%A8%B8%EC%8B%A0(Java%20Virtual%20Machine).md">[Java] 자바 가상 머신(Java Virtual Machine)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20Casting(%EC%97%85%EC%BA%90%EC%8A%A4%ED%8C%85%20%26%20%EB%8B%A4%EC%9A%B4%EC%BA%90%EC%8A%A4%ED%8C%85).md">[Java] Casting(업캐스팅 & 다운캐스팅)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJava%5D%20Auto%20Boxing%20%26%20Unboxing.md">[Java] 오토 박싱 & 오토언박싱</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20Java%EC%97%90%EC%84%9C%EC%9D%98%20Thread.md">[Java] Thread 활용</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJava%5D%20Intrinsic%20Lock.md">[Java] 고유 락(Intrinsic Lock)</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Language/JAVA/%EB%AC%B8%EC%9E%90%EC%97%B4%20%ED%81%B4%EB%9E%98%EC%8A%A4.md#%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%81%B4%EB%9E%98%EC%8A%A4">[Java] 문자열 클래스</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Language/JAVA/Garbage%20Collection.md#garbage-collection">[Java] Garbage Collection</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Language/JAVA/Promotion%20%26%20Casting.md#promotion--casting">[Java] Promotion & Casting</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Language/JAVA/Primitive%20type%20%26%20Reference%20type.md#primitive-type--reference-type">[Java] Primitive type & Reference type</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJava%5D%20%EC%A7%81%EB%A0%AC%ED%99%94(Serialization).md">[Java] 직렬화(Serialization)</a></li>
<li><a href="https://github.com/GimunLee/tech-refrigerator/raw/master/Language/JAVA/Error%20%26%20Exception.md#error--exception">[Java] Error & Exception</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20Stream.md">[Java] Stream API</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5Bjava%5D%20Record.md">[Java] Record</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJava%5D%20Interned%20String%20in%20JAVA.md">[Java] Interend String in Java</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJava%5D%20%EC%BB%B4%ED%8F%AC%EC%A7%80%EC%85%98(Composition).md">[Java] Composition</a></li>
</ul> </li>
<li> <h3>Javascript</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJavascript%5D%20ES2015%2B%20%EC%9A%94%EC%95%BD%20%EC%A0%95%EB%A6%AC.md">[Javascript] ES2015+ 요약 정리</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJavasript%5D%20Object%20Prototype.md">[Javascript] Object Prototype</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BJavascript%5D%20Closure.md">[Javascript] Closure</a></li>
</ul> </li>
<li> <h3>Python</h3>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Language/%5BPython%5D%20%EB%A7%A4%ED%81%AC%EB%A1%9C%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC.md">[Python] 매크로 사용법</a></li>
</ul> </li>
</ul>
<br>
<h2>📌 Web</h2>
<ul>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%20%EB%8F%99%EC%9E%91%20%EB%B0%A9%EB%B2%95.md">브라우저 동작 방법</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Cookie%20%26%20Session.md">쿠키(Cookie) & 세션(Session)</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/HTTP%20Request%20Methods.md">HTTP Request Methods</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/HTTP%20status%20code.md">HTTP Status Code</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/%5BWeb%5D%20REST%20API.md">REST API</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Web%20Server%EC%99%80%20WAS%EC%9D%98%20%EC%B0%A8%EC%9D%B4.md">웹 서버와 WAS의 차이점</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/OAuth.md">OAuth</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/JWT(JSON%20Web%20Token).md">JWT(JSON Web Token)</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D.md">Authentication and Authorization</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Logging%20Level.md">로그 레벨</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/UI%EC%99%80%20UX.md">UI와 UX</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/CSR%20%26%20SSR.md">CSR & SSR</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Vue.js%EC%99%80%20React%EC%9D%98%20%EC%B0%A8%EC%9D%B4.md">Vue.js vs React</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C%20%EC%95%B1%20%26%20%EC%9B%B9%20%EC%95%B1%20%26%20%ED%95%98%EC%9D%B4%EB%B8%8C%EB%A6%AC%EB%93%9C%20%EC%95%B1.md">네이티브 앱 & 웹 앱 & 하이브리드 앱</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/PWA%20(Progressive%20Web%20App).md">PWA(Progressive Web App)</a></p> </li>
<li> <p><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/CSRF%20%26%20XSS.md">CSRF & XSS</a></p> </li>
<li> <h5>Spring</h5>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/%5BSpring%5D%20Bean%20Scope.md">[Spring] Bean Scope</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/Spring%20MVC.md">[Spring] MVC Framework</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/%5BSpring%20Boot%5D%20SpringApplication.md">[Spring Boot] SpringApplication</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/%5BSpring%20Boot%5D%20Test%20Code.md">[Spring Boot] Test Code</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/JPA.md">JPA</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/%5BSpring%20Data%20JPA%5D%20%EB%8D%94%ED%8B%B0%20%EC%B2%B4%ED%82%B9%20(Dirty%20Checking).md">[Spring Data JPA] 더티 체킹(Dirty Checking)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Spring/Spring%20Security%20-%20Authentication%20and%20Authorization.md">Spring Security - 인증 및 권한 부여</a></li>
</ul> </li>
<li> <h5>Vue.js</h5>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Vue/Vue.js%20%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4%20%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0.md">Vue.js 라이프사이클</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Vue/Vue%20CLI%20%2B%20Spring%20Boot%20%EC%97%B0%EB%8F%99%ED%95%98%EC%97%AC%20%ED%99%98%EA%B2%BD%20%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0.md">Vue CLI + Spring Boot 연동하여 환경 구축하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Vue/Vue.js%20%2B%20Firebase%EB%A1%9C%20%EC%9D%B4%EB%A9%94%EC%9D%BC%20%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EA%B5%AC%ED%98%84.md">Vue.js + Firebase로 이메일 회원가입&로그인 구현하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Vue/Vue.js%20%2B%20Firebase%EB%A1%9C%20%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%B6%81(facebook)%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0.md">Vue.js + Firebase로 Facebook 로그인 연동하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/Nuxt.js.md">Nuxt.js란</a></li>
</ul> </li>
<li> <h5>React</h5>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/React/React%20Fragment.md">React Fragment</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/React/React%20Hook.md">React Hook</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/React/React%20%26%20Spring%20Boot%20%EC%97%B0%EB%8F%99%ED%95%98%EC%97%AC%20%ED%99%98%EA%B2%BD%20%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0.md">React + Spring Boot 연동하여 환경 구축하기</a></li>
</ul> </li>
<li> <h5>DevOps</h5>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/tree/master/Web/DevOps">[AWS] Spring Boot 배포 스크립트 생성</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/DevOps/%5BTravis%20CI%5D%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%20%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0.md">[Travis CI] 프로젝트 연동하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Web/DevOps/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EA%B7%9C%EB%AA%A8%20%ED%99%95%EC%9E%A5.md">시스템 규모 확장</a></li>
</ul> </li>
</ul>
<br>
<h2>📌 Linux</h2>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Linux/Linux%20Basic%20Command.md">리눅스 기본 명령어</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Linux/Von%20Neumann%20Architecture.md">폰 노이만 구조</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Linux/Permission.md">퍼미션 활용</a></li>
</ul>
<br>
<h2>📌 New Technology</h2>
<ul>
<li> <h4>AI</h4>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/AI/README.md">용어 정리</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/AI/Linear%20regression%20%EC%8B%A4%EC%8A%B5.md">Tensorflow로 Linear Regression 알고리즘 구현</a></li>
</ul> </li>
<li> <h4>Big Data</h4>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/Big%20Data/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D.md">데이터 분석</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/Big%20Data/DBSCAN%20%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.md">DBSCAN 클러스터링 알고리즘</a></li>
</ul> </li>
<li> <h4>IT Issues</h4>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/%5B2019.08.07%5D%20%EC%9D%B4%EB%A9%94%EC%9D%BC%20%EA%B3%B5%EA%B2%A9%20%EC%A6%9D%EA%B0%80%EB%A1%9C%20%EB%B3%B4%EC%95%88%EC%97%85%EA%B3%84%20%EB%8C%80%EC%9D%91%20%EB%B9%84%EC%83%81.md">이메일 공격 증가로 보안업계 대응 비상(19.08.07)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/%5B2019.08.08%5D%20IT%20%EC%88%98%EB%8B%A4%20%EC%A0%95%EB%A6%AC.md">쿠팡 서비스 오류(19.08.08)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/%5B2019.08.08%5D%20IT%20%EC%88%98%EB%8B%A4%20%EC%A0%95%EB%A6%AC.md">GraphQL(19.08.08)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/%5B2019.08.08%5D%20IT%20%EC%88%98%EB%8B%A4%20%EC%A0%95%EB%A6%AC.md">SK 하이닉스의 탄생은?(19.08.08)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/%5B2019.08.20%5D%20Google%2C%20%ED%81%AC%EB%A1%AC%20%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C%20FTP%20%EC%A7%80%EC%9B%90%20%EC%A4%91%EB%8B%A8%20%ED%99%95%EC%A0%95.md">구글, 크롬 브라우저에서 FTP 지원 중단 확정(19.08.20)</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/2020%20ICT%20%EC%9D%B4%EC%8A%88.md">2020 ICT 이슈</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/New%20Technology/IT%20Issues/AMD%20vs%20Intel.md">AMD와 Intel의 반백년 전쟁, 그리고 2020년의 '반도체'</a></li>
</ul> </li>
</ul>
<br>
<h2>📌 Seminar</h2>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Seminar/NHN%202019%20OPEN%20TALK%20DAY.md">2019 NHN OPEN TALK DAY</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Seminar/2019%20%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90%20%EB%B9%84%EC%A0%84%EC%BA%A0%ED%94%84.md">2019 삼성전자 비전캠프</a></li>
<li><a href="https://github.com/GimunLee/tech-interview-for-developer/raw/master/Seminar/NCSOFT%202019%20JOB%20Cafe.md#2019-10-02-ncsoft-job-cafe">2019 NCSOFT JOB Cafe</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/Seminar/2019%20%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90%20%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%BB%A8%ED%8D%BC%EB%9F%B0%EC%8A%A4(SOSCON).md">2019 삼성전자 오픈소스 컨퍼런스</a></li>
</ul>
<br>
<h2>📌 ETC</h2>
<ul>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/ETC/Git%20Commit%20Message%20Convention.md">Git Commit Message Convention</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/ETC/GitHub%20Fork%EB%A1%9C%20%ED%98%91%EC%97%85%ED%95%98%EA%B8%B0.md#github-fork%EB%A1%9C-%ED%98%91%EC%97%85%ED%95%98%EA%B8%B0">GitHub Fork로 협업하기</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/ETC/GitHub%20%EC%A0%80%EC%9E%A5%EC%86%8C(repository)%20%EB%AF%B8%EB%9F%AC%EB%A7%81.md#github-%EC%A0%80%EC%9E%A5%EC%86%8Crepository-%EB%AF%B8%EB%9F%AC%EB%A7%81">GitHub 저장소(repository) 미러링</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/ETC/Git%20vs%20GitHub%20vs%20GitLab%20Flow.md">Git & GitHub & GitLab Flow</a></li>
<li><a href="https://github.com/gyoogle/tech-interview-for-developer/raw/master/ETC/Collaborate%20with%20Git%20on%20Javascript%20and%20Node.js.md">Javascript와 Node.js로 Git을 통해 협업하기</a></li>
</ul>
<br>
<h2>License</h2>
<p><a href="https://app.fossa.com/projects/git%2Bgithub.com%2Fgyoogle%2Ftech-interview-for-developer?ref=badge_small"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Fgyoogle%2Ftech-interview-for-developer.svg?type=small" alt="FOSSA Status"></a></p>
<br>
<p><a href="https://www.buymeacoffee.com/gyoogle"><img src="https://github.com/gyoogle/blog/raw/master/docs/.vuepress/public/images/BMC.png?raw=true" width="150px" height="30px"></a></p>
+
+
\ No newline at end of file
diff --git a/java/weekly/index.xml b/java/weekly/index.xml
new file mode 100644
index 00000000000..754154980ab
--- /dev/null
+++ b/java/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Java Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:37Z
+ Weekly Trending of Java in GitHub
+
+
+ apache/camel
+ 2024-12-01T01:43:37Z
+ tag:github.com,2024-12-01:/apache/camel
+
+ <p>Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.</p><hr><h1>Apache Camel</h1>
<p><a href="https://maven-badges.herokuapp.com/maven-central/org.apache.camel/apache-camel"><img src="https://maven-badges.herokuapp.com/maven-central/org.apache.camel/apache-camel/badge.svg?style=flat-square" alt="Maven Central"></a> <a href="https://www.javadoc.io/doc/org.apache.camel/camel-api"><img src="https://www.javadoc.io/badge/org.apache.camel/apache-camel.svg?color=brightgreen" alt="Javadocs"></a> <a href="http://stackoverflow.com/questions/tagged/apache-camel"><img src="https://img.shields.io/:stack%20overflow-apache--camel-brightgreen.svg?sanitize=true" alt="Stack Overflow"></a> <a href="https://camel.zulipchat.com/"><img src="https://img.shields.io/badge/zulip-join_chat-brightgreen.svg?sanitize=true" alt="Chat"></a> <a href="https://twitter.com/ApacheCamel"><img src="https://img.shields.io/twitter/follow/ApacheCamel.svg?label=Follow&style=social" alt="Twitter"></a></p>
<p><a href="https://camel.apache.org/">Apache Camel</a> is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.</p>
<h3>Introduction</h3>
<p>Camel empowers you to define routing and mediation rules in a variety of domain-specific languages (DSL, such as Java, XML, Groovy and YAML). This means you get smart completion of routing rules in your IDE, whether in a Java or XML editor.</p>
<p>Apache Camel uses URIs to enable easier integration with all kinds of transport or messaging model including HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF together with working with pluggable Data Format options. Apache Camel is a small library that has minimal dependencies for easy embedding in any Java application. Apache Camel lets you work with the same API regardless of the transport type, making it possible to interact with all the components provided out-of-the-box, with a good understanding of the API.</p>
<p>Apache Camel has powerful Bean Binding and integrated seamlessly with popular frameworks such as Spring, Quarkus, and CDI.</p>
<p>Apache Camel has extensive testing support allowing you to easily unit test your routes.</p>
<h2>Components</h2>
<p>Apache Camel comes alongside several artifacts with components, data formats, languages, and kinds. The up-to-date list is available online at the Camel website:</p>
<ul>
<li>Components: <a href="https://camel.apache.org/components/latest/">https://camel.apache.org/components/latest/</a></li>
<li>Data Formats: <a href="https://camel.apache.org/components/latest/dataformats/">https://camel.apache.org/components/latest/dataformats/</a></li>
<li>Languages: <a href="https://camel.apache.org/components/latest/languages/">https://camel.apache.org/components/latest/languages/</a></li>
<li>Miscellaneous: <a href="https://camel.apache.org/components/latest/#_miscellaneous_components">https://camel.apache.org/components/latest/#_miscellaneous_components</a></li>
</ul>
<h2>Examples</h2>
<p>Apache Camel comes with many examples. The up to date list is available online at GitHub:</p>
<ul>
<li>Examples: <a href="https://github.com/apache/camel-examples/tree/main#welcome-to-the-apache-camel-examples">https://github.com/apache/camel-examples/tree/main#welcome-to-the-apache-camel-examples</a></li>
</ul>
<h2>Getting Started</h2>
<p>To help you get started, try the following links:</p>
<p><strong>Getting Started</strong></p>
<p><a href="https://camel.apache.org/getting-started.html">https://camel.apache.org/getting-started.html</a></p>
<p>The beginner examples are another powerful alternative pathway for getting started with Apache Camel.</p>
<ul>
<li>Examples: <a href="https://github.com/apache/camel-examples/tree/main#welcome-to-the-apache-camel-examples">https://github.com/apache/camel-examples/tree/main#welcome-to-the-apache-camel-examples</a></li>
</ul>
<p><strong>Building</strong></p>
<p><a href="https://camel.apache.org/camel-core/contributing/">https://camel.apache.org/camel-core/contributing/</a></p>
<p><strong>Contributions</strong></p>
<p>We welcome all kinds of contributions, the details of which are specified here:</p>
<p><a href="https://github.com/apache/camel/raw/main/CONTRIBUTING.md">https://github.com/apache/camel/blob/main/CONTRIBUTING.md</a></p>
<p>Please refer to the website for details of finding the issue tracker, email lists, GitHub, chat</p>
<p>Website: <a href="https://camel.apache.org/">https://camel.apache.org/</a></p>
<p>GitHub (source): <a href="https://github.com/apache/camel">https://github.com/apache/camel</a></p>
<p>Issue tracker: <a href="https://issues.apache.org/jira/projects/CAMEL">https://issues.apache.org/jira/projects/CAMEL</a></p>
<p>Mailing-list: <a href="https://camel.apache.org/community/mailing-list/">https://camel.apache.org/community/mailing-list/</a></p>
<p>Chat: <a href="https://camel.zulipchat.com/">https://camel.zulipchat.com/</a></p>
<p>StackOverflow: <a href="https://stackoverflow.com/questions/tagged/apache-camel">https://stackoverflow.com/questions/tagged/apache-camel</a></p>
<p>Twitter: <a href="https://twitter.com/ApacheCamel">https://twitter.com/ApacheCamel</a></p>
<p><strong>Support</strong></p>
<p>For additional help, support, we recommend referencing this page first:</p>
<p><a href="https://camel.apache.org/community/support/">https://camel.apache.org/community/support/</a></p>
<p><strong>Getting Help</strong></p>
<p>If you get stuck somewhere, please feel free to reach out to us on either StackOverflow, Chat, or the email mailing list.</p>
<p>Please help us make Apache Camel better — we appreciate any feedback you may have.</p>
<p>Enjoy!</p>
<hr>
<p>The Camel riders!</p>
<h1>Licensing</h1>
<p>The terms for software licensing are detailed in the <code>LICENSE.txt</code> file,<br> located in the working directory.</p>
+
+
+ comet-ml/opik
+ 2024-12-01T01:43:37Z
+ tag:github.com,2024-12-01:/comet-ml/opik
+
+ <p>Open-source end-to-end LLM Development Platform</p><hr><h1 align="center" style="border-bottom: none">
<div>
<a href="https://www.comet.com/site/products/opik?from=llm&utm_source=opik&utm_medium=github&utm_content=header_img&utm_campaign=opik">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="/apps/opik-documentation/documentation/static/img/logo-dark-mode.svg">
<source media="(prefers-color-scheme: light)" srcset="/apps/opik-documentation/documentation/static/img/opik-logo.svg">
<img alt="Comet Opik logo" src="https://raw.githubusercontent.com/comet-ml/opik/main/apps/opik-documentation/documentation/static/img/opik-logo.svg?sanitize=true" width="200">
</picture></a>
<br> Opik
</div> Open-source end-to-end LLM Development Platform<br> </h1>
<p align="center"> Confidently evaluate, test and monitor LLM applications. </p>
<div align="center">
<p><a href="https://pypi.org/project/opik/"><img src="https://img.shields.io/pypi/v/opik" alt="Python SDK"></a> <a href="https://github.com/comet-ml/opik/raw/main/LICENSE"><img src="https://img.shields.io/github/license/comet-ml/opik" alt="License"></a> <a href="https://github.com/comet-ml/opik/actions/workflows/build_apps.yml"><img src="https://github.com/comet-ml/opik/actions/workflows/build_apps.yml/badge.svg?sanitize=true" alt="Build"></a> <a target="_blank" href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/opik_quickstart.ipynb"></a></p>
<a target="_blank" href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/opik_quickstart.ipynb">
<!-- <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open Quickstart In Colab"/> --> </a>
</div>
<p align="center"> <a href="https://www.comet.com/site/products/opik?from=llm&utm_source=opik&utm_medium=github&utm_content=website_button&utm_campaign=opik"><b>Website</b></a> • <a href="https://chat.comet.com"><b>Slack community</b></a> • <a href="https://x.com/Cometml"><b>Twitter</b></a> • <a href="https://www.comet.com/docs/opik/?from=llm&utm_source=opik&utm_medium=github&utm_content=docs_button&utm_campaign=opik"><b>Documentation</b></a> </p>
<p><img src="https://raw.githubusercontent.com/comet-ml/opik/main/readme-thumbnail.png" alt="Opik thumbnail"></p>
<h2>🚀 What is Opik?</h2>
<p>Opik is an open-source platform for evaluating, testing and monitoring LLM applications. Built by <a href="https://www.comet.com?from=llm&utm_source=opik&utm_medium=github&utm_content=what_is_opik_link&utm_campaign=opik">Comet</a>.</p>
<br>
<p>You can use Opik for:</p>
<ul>
<li> <p><strong>Development:</strong></p>
<ul>
<li><strong>Tracing:</strong> Track all LLM calls and traces during development and production (<a href="https://www.comet.com/docs/opik/quickstart/?from=llm&utm_source=opik&utm_medium=github&utm_content=quickstart_link&utm_campaign=opik">Quickstart</a>, <a href="https://www.comet.com/docs/opik/tracing/integrations/overview/?from=llm&utm_source=opik&utm_medium=github&utm_content=integrations_link&utm_campaign=opik">Integrations</a></li>
<li><strong>Annotations:</strong> Annotate your LLM calls by logging feedback scores using the <a href="https://www.comet.com/docs/opik/tracing/annotate_traces/#annotating-traces-and-spans-using-the-sdk?from=llm&utm_source=opik&utm_medium=github&utm_content=sdk_link&utm_campaign=opik">Python SDK</a> or the <a href="https://www.comet.com/docs/opik/tracing/annotate_traces/#annotating-traces-through-the-ui?from=llm&utm_source=opik&utm_medium=github&utm_content=ui_link&utm_campaign=opik">UI</a>.</li>
</ul> </li>
<li> <p><strong>Evaluation</strong>: Automate the evaluation process of your LLM application:</p>
<ul>
<li> <p><strong>Datasets and Experiments</strong>: Store test cases and run experiments (<a href="https://www.comet.com/docs/opik/evaluation/manage_datasets/?from=llm&utm_source=opik&utm_medium=github&utm_content=datasets_link&utm_campaign=opik">Datasets</a>, <a href="https://www.comet.com/docs/opik/evaluation/evaluate_your_llm/?from=llm&utm_source=opik&utm_medium=github&utm_content=eval_link&utm_campaign=opik">Evaluate your LLM Application</a>)</p> </li>
<li> <p><strong>LLM as a judge metrics</strong>: Use Opik's LLM as a judge metric for complex issues like <a href="https://www.comet.com/docs/opik/evaluation/metrics/hallucination/?from=llm&utm_source=opik&utm_medium=github&utm_content=hallucination_link&utm_campaign=opik">hallucination detection</a>, <a href="https://www.comet.com/docs/opik/evaluation/metrics/moderation/?from=llm&utm_source=opik&utm_medium=github&utm_content=moderation_link&utm_campaign=opik">moderation</a> and RAG evaluation (<a href="https://www.comet.com/docs/opik/evaluation/metrics/answer_relevance/?from=llm&utm_source=opik&utm_medium=github&utm_content=alex_link&utm_campaign=opik">Answer Relevance</a>, <a href="https://www.comet.com/docs/opik/evaluation/metrics/context_precision/?from=llm&utm_source=opik&utm_medium=github&utm_content=context_link&utm_campaign=opik">Context Precision</a></p> </li>
<li> <p><strong>CI/CD integration</strong>: Run evaluations as part of your CI/CD pipeline using our <a href="https://www.comet.com/docs/opik/testing/pytest_integration/?from=llm&utm_source=opik&utm_medium=github&utm_content=pytest_link&utm_campaign=opik">PyTest integration</a></p> </li>
</ul> </li>
<li> <p><strong>Production Monitoring</strong>: Monitor your LLM application in production and easily close the feedback loop by adding error traces to your evaluation datasets.</p> </li>
</ul>
<blockquote>
<p>[!TIP]<br> If you are looking for features that Opik doesn't have today, please raise a new <a href="https://github.com/comet-ml/opik/discussions/categories/ideas">Github discussion topic</a> 🚀</p>
</blockquote>
<br>
<h2>🛠️ Installation</h2>
<p>Opik is available as a fully open source local installation or using Comet.com as a hosted solution. The easiest way to get started with Opik is by creating a free Comet account at <a href="https://www.comet.com/signup?from=llm&utm_source=opik&utm_medium=github&utm_content=install&utm_campaign=opik">comet.com</a>.</p>
<p>If you'd like to self-host Opik, you can do so by cloning the repository and starting the platform using Docker Compose:</p>
<pre><code class="language-bash"># Clone the Opik repository
git clone https://github.com/comet-ml/opik.git
# Navigate to the opik/deployment/docker-compose directory
cd opik/deployment/docker-compose
# Start the Opik platform
docker compose up --detach
# You can now visit http://localhost:5173 on your browser!
</code></pre>
<p>For more information about the different deployment options, please see our deployment guides:</p>
<table>
<thead>
<tr>
<th>Installation methods</th>
<th>Docs link</th>
</tr>
</thead>
<tbody>
<tr>
<td>Local instance</td>
<td><a href="https://www.comet.com/docs/opik/self-host/local_deployment?from=llm&utm_source=opik&utm_medium=github&utm_content=self_host_link&utm_campaign=opik"><img src="https://img.shields.io/badge/Local%20Deployments-%232496ED?style=flat&logo=docker&logoColor=white" alt="Local Deployment"></a></td>
</tr>
<tr>
<td>Kubernetes</td>
<td><a href="https://www.comet.com/docs/opik/self-host/kubernetes/#kubernetes-installation?from=llm&utm_source=opik&utm_medium=github&utm_content=kubernetes_link&utm_campaign=opik"><img src="https://img.shields.io/badge/Kubernetes-%23326ce5.svg?&logo=kubernetes&logoColor=white" alt="Kubernetes"></a></td>
</tr>
</tbody>
</table>
<h2>🏁 Get Started</h2>
<p>To get started, you will need to first install the Python SDK:</p>
<pre><code class="language-bash">pip install opik
</code></pre>
<p>Once the SDK is installed, you can configure it by running the <code>opik configure</code> command:</p>
<pre><code class="language-bash">opik configure
</code></pre>
<p>This will allow you to configure Opik locally by setting the correct local server address or if you're using the Cloud platform by setting the API Key</p>
<blockquote>
<p>[!TIP]<br> You can also call the <code>opik.configure(use_local=True)</code> method from your Python code to configure the SDK to run on the local installation.</p>
</blockquote>
<p>You are now ready to start logging traces using the <a href="https://www.comet.com/docs/opik/python-sdk-reference/?from=llm&utm_source=opik&utm_medium=github&utm_content=sdk_link2&utm_campaign=opik">Python SDK</a>.</p>
<h3>📝 Logging Traces</h3>
<p>The easiest way to get started is to use one of our integrations. Opik supports:</p>
<table>
<thead>
<tr>
<th>Integration</th>
<th>Description</th>
<th>Documentation</th>
<th>Try in Colab</th>
</tr>
</thead>
<tbody>
<tr>
<td>OpenAI</td>
<td>Log traces for all OpenAI LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/openai/?utm_source=opik&utm_medium=github&utm_content=openai_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/openai.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>LiteLLM</td>
<td>Call any LLM model using the OpenAI format</td>
<td><a href="https://raw.githubusercontent.com/comet-ml/opik/main/tracing/integrations/litellm.md">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/litellm.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>LangChain</td>
<td>Log traces for all LangChain LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/langchain/?utm_source=opik&utm_medium=github&utm_content=langchain_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/langchain.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Bedrock</td>
<td>Log traces for all Bedrock LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/bedrock?utm_source=opik&utm_medium=github&utm_content=bedrock_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/bedrock.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Anthropic</td>
<td>Log traces for all Anthropic LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/anthropic?utm_source=opik&utm_medium=github&utm_content=anthropic_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/anthropic.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Gemini</td>
<td>Log traces for all Gemini LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/gemini?utm_source=opik&utm_medium=github&utm_content=gemini_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/gemini.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Groq</td>
<td>Log traces for all Groq LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/groq?utm_source=opik&utm_medium=github&utm_content=groq_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/groq.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>LangGraph</td>
<td>Log traces for all LangGraph executions</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/langgraph/?utm_source=opik&utm_medium=github&utm_content=langchain_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/langgraph.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>LlamaIndex</td>
<td>Log traces for all LlamaIndex LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/llama_index?utm_source=opik&utm_medium=github&utm_content=llama_index_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/llama-index.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Ollama</td>
<td>Log traces for all Ollama LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/ollama?utm_source=opik&utm_medium=github&utm_content=ollama_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/ollama.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Predibase</td>
<td>Fine-tune and serve open-source Large Language Models</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/predibase?utm_source=opik&utm_medium=github&utm_content=predibase_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/predibase.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>Ragas</td>
<td>Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/ragas?utm_source=opik&utm_medium=github&utm_content=ragas_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/ragas.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
<tr>
<td>watsonx</td>
<td>Log traces for all watsonx LLM calls</td>
<td><a href="https://www.comet.com/docs/opik/tracing/integrations/watsonx?utm_source=opik&utm_medium=github&utm_content=watsonx_link&utm_campaign=opik">Documentation</a></td>
<td><a href="https://colab.research.google.com/github/comet-ml/opik/blob/master/apps/opik-documentation/documentation/docs/cookbook/watsonx.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open Quickstart In Colab"></a></td>
</tr>
</tbody>
</table>
<blockquote>
<p>[!TIP]<br> If the framework you are using is not listed above, feel free to <a href="https://github.com/comet-ml/opik/issues">open an issue</a> or submit a PR with the integration.</p>
</blockquote>
<p>If you are not using any of the frameworks above, you can also use the <code>track</code> function decorator to <a href="https://www.comet.com/docs/opik/tracing/log_traces/?from=llm&utm_source=opik&utm_medium=github&utm_content=traces_link&utm_campaign=opik">log traces</a>:</p>
<pre><code class="language-python">import opik
opik.configure(use_local=True) # Run locally
@opik.track
def my_llm_function(user_question: str) -> str:
# Your LLM code here
return "Hello"
</code></pre>
<blockquote>
<p>[!TIP]<br> The track decorator can be used in conjunction with any of our integrations and can also be used to track nested function calls.</p>
</blockquote>
<h3>🧑⚖️ LLM as a Judge metrics</h3>
<p>The Python Opik SDK includes a number of LLM as a judge metrics to help you evaluate your LLM application. Learn more about it in the <a href="https://www.comet.com/docs/opik/evaluation/metrics/overview/?from=llm&utm_source=opik&utm_medium=github&utm_content=metrics_2_link&utm_campaign=opik">metrics documentation</a>.</p>
<p>To use them, simply import the relevant metric and use the <code>score</code> function:</p>
<pre><code class="language-python">from opik.evaluation.metrics import Hallucination
metric = Hallucination()
score = metric.score(
input="What is the capital of France?",
output="Paris",
context=["France is a country in Europe."]
)
print(score)
</code></pre>
<p>Opik also includes a number of pre-built heuristic metrics as well as the ability to create your own. Learn more about it in the <a href="https://www.comet.com/docs/opik/evaluation/metrics/overview?from=llm&utm_source=opik&utm_medium=github&utm_content=metrics_3_link&utm_campaign=opik">metrics documentation</a>.</p>
<h3>🔍 Evaluating your LLM Application</h3>
<p>Opik allows you to evaluate your LLM application during development through <a href="https://www.comet.com/docs/opik/evaluation/manage_datasets/?from=llm&utm_source=opik&utm_medium=github&utm_content=datasets_2_link&utm_campaign=opik">Datasets</a> and <a href="https://www.comet.com/docs/opik/evaluation/evaluate_your_llm/?from=llm&utm_source=opik&utm_medium=github&utm_content=experiments_link&utm_campaign=opik">Experiments</a>.</p>
<p>You can also run evaluations as part of your CI/CD pipeline using our <a href="https://www.comet.com/docs/opik/testing/pytest_integration/?from=llm&utm_source=opik&utm_medium=github&utm_content=pytest_2_link&utm_campaign=opik">PyTest integration</a>.</p>
<h2>🤝 Contributing</h2>
<p>There are many ways to contribute to Opik:</p>
<ul>
<li>Submit <a href="https://github.com/comet-ml/opik/issues">bug reports</a> and <a href="https://github.com/comet-ml/opik/issues">feature requests</a></li>
<li>Review the documentation and submit <a href="https://github.com/comet-ml/opik/pulls">Pull Requests</a> to improve it</li>
<li>Speaking or writing about Opik and <a href="https://chat.comet.com">letting us know</a></li>
<li>Upvoting <a href="https://github.com/comet-ml/opik/issues?q=is%3Aissue+is%3Aopen+label%3A%22enhancement%22">popular feature requests</a> to show your support</li>
</ul>
<p>To learn more about how to contribute to Opik, please see our <a href="https://raw.githubusercontent.com/comet-ml/opik/main/CONTRIBUTING.md">contributing guidelines</a>.</p>
+
+
+ elastic/logstash
+ 2024-12-01T01:43:37Z
+ tag:github.com,2024-12-01:/elastic/logstash
+
+ <p>Logstash - transport and process your logs, events, or other data</p><hr><h1>Logstash</h1>
<p>Logstash is part of the <a href="https://www.elastic.co/products">Elastic Stack</a> along with Beats, Elasticsearch and Kibana. Logstash is a server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to your favorite "stash." (Ours is Elasticsearch, naturally.). Logstash has over 200 plugins, and you can write your own very easily as well.</p>
<p>For more info, see <a href="https://www.elastic.co/products/logstash">https://www.elastic.co/products/logstash</a></p>
<h2>Documentation and Getting Started</h2>
<p>You can find the documentation and getting started guides for Logstash on the <a href="https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html">elastic.co site</a></p>
<p>For information about building the documentation, see the README in <a href="https://github.com/elastic/docs">https://github.com/elastic/docs</a></p>
<h2>Downloads</h2>
<p>You can download officially released Logstash binaries, as well as debian/rpm packages for the supported platforms, from <a href="https://www.elastic.co/downloads/logstash">downloads page</a>.</p>
<h2>Need Help?</h2>
<ul>
<li><a href="https://discuss.elastic.co/c/logstash">Logstash Forum</a></li>
<li><a href="https://www.elastic.co/guide/en/logstash/current/index.html">Logstash Documentation</a></li>
<li><a href="https://webchat.freenode.net/?channels=logstash">#logstash on freenode IRC</a></li>
<li><a href="https://www.elastic.co/products/logstash">Logstash Product Information</a></li>
<li><a href="https://www.elastic.co/subscriptions">Elastic Support</a></li>
</ul>
<h2>Logstash Plugins</h2>
<p>Logstash plugins are hosted in separate repositories under the <a href="https://github.com/logstash-plugins">logstash-plugins</a> github organization. Each plugin is a self-contained Ruby gem which gets published to RubyGems.org.</p>
<h3>Writing your own Plugin</h3>
<p>Logstash is known for its extensibility. There are hundreds of plugins for Logstash and you can write your own very easily! For more info on developing and testing these plugins, please see the <a href="https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html">working with plugins section</a></p>
<h3>Plugin Issues and Pull Requests</h3>
<p><strong>Please open new issues and pull requests for plugins under its own repository</strong></p>
<p>For example, if you have to report an issue/enhancement for the Elasticsearch output, please do so <a href="https://github.com/logstash-plugins/logstash-output-elasticsearch/issues">here</a>.</p>
<p>Logstash core will continue to exist under this repository and all related issues and pull requests can be submitted here.</p>
<h2>Developing Logstash Core</h2>
<h3>Prerequisites</h3>
<ul>
<li>Install JDK version 11 or 17. Make sure to set the <code>JAVA_HOME</code> environment variable to the path to your JDK installation directory. For example <code>set JAVA_HOME=<JDK_PATH></code></li>
<li>Install JRuby 9.2.x It is recommended to use a Ruby version manager such as <a href="https://rvm.io/">RVM</a> or <a href="https://github.com/sstephenson/rbenv">rbenv</a>.</li>
<li>Install <code>rake</code> and <code>bundler</code> tool using <code>gem install rake</code> and <code>gem install bundler</code> respectively.</li>
</ul>
<h3>RVM install (optional)</h3>
<p>If you prefer to use rvm (ruby version manager) to manage Ruby versions on your machine, follow these directions. In the Logstash folder:</p>
<pre><code class="language-sh">gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable --ruby=$(cat .ruby-version)
</code></pre>
<h3>Check Ruby version</h3>
<p>Before you proceed, please check your ruby version by:</p>
<pre><code class="language-sh">$ ruby -v
</code></pre>
<p>The printed version should be the same as in the <code>.ruby-version</code> file.</p>
<h3>Building Logstash</h3>
<p>The Logstash project includes the source code for all of Logstash, including the Elastic-Licensed X-Pack features and functions; to run Logstash from source using only the OSS-licensed code, export the <code>OSS</code> environment variable with a value of <code>true</code>:</p>
<pre><code class="language-sh">export OSS=true
</code></pre>
<ul>
<li>Set up the location of the source code to build</li>
</ul>
<pre><code class="language-sh">export LOGSTASH_SOURCE=1
export LOGSTASH_PATH=/YOUR/LOGSTASH/DIRECTORY
</code></pre>
<h4>Install dependencies with <code>gradle</code> <strong>(recommended)</strong>[^1]</h4>
<ul>
<li>Install development dependencies</li>
</ul>
<pre><code class="language-sh">./gradlew installDevelopmentGems
</code></pre>
<ul>
<li>Install default plugins and other dependencies</li>
</ul>
<pre><code class="language-sh">./gradlew installDefaultGems
</code></pre>
<h3>Verify the installation</h3>
<p>To verify your environment, run the following to start Logstash and send your first event:</p>
<pre><code class="language-sh">bin/logstash -e 'input { stdin { } } output { stdout {} }'
</code></pre>
<p>This should start Logstash with stdin input waiting for you to enter an event</p>
<pre><code class="language-sh">hello world
2016-11-11T01:22:14.405+0000 0.0.0.0 hello world
</code></pre>
<p><strong>Advanced: Drip Launcher</strong></p>
<p><a href="https://github.com/ninjudd/drip">Drip</a> is a tool that solves the slow JVM startup problem while developing Logstash. The drip script is intended to be a drop-in replacement for the java command. We recommend using drip during development, in particular for running tests. Using drip, the first invocation of a command will not be faster but the subsequent commands will be swift.</p>
<p>To tell logstash to use drip, set the environment variable <code>JAVACMD=`which drip`</code>.</p>
<p>Example (but see the <em>Testing</em> section below before running rspec for the first time):</p>
<pre><code>JAVACMD=`which drip` bin/rspec
</code></pre>
<p><strong>Caveats</strong></p>
<p>Drip does not work with STDIN. You cannot use drip for running configs which use the stdin plugin.</p>
<h2>Building Logstash Documentation</h2>
<p>To build the Logstash Reference (open source content only) on your local machine, clone the following repos:</p>
<p><a href="https://github.com/elastic/logstash">logstash</a> - contains main docs about core features</p>
<p><a href="https://github.com/elastic/logstash-docs">logstash-docs</a> - contains generated plugin docs</p>
<p><a href="https://github.com/elastic/docs">docs</a> - contains doc build files</p>
<p>Make sure you have the same branch checked out in <code>logstash</code> and <code>logstash-docs</code>. Check out <code>master</code> in the <code>docs</code> repo.</p>
<p>Run the doc build script from within the <code>docs</code> repo. For example:</p>
<pre><code>./build_docs.pl --doc ../logstash/docs/index.asciidoc --chunk=1 -open
</code></pre>
<h2>Testing</h2>
<p>Most of the unit tests in Logstash are written using <a href="http://rspec.info/">rspec</a> for the Ruby parts. For the Java parts, we use <a href="https://junit.org">junit</a>. For testing you can use the <em>test</em> <code>rake</code> tasks and the <code>bin/rspec</code> command, see instructions below:</p>
<h3>Core tests</h3>
<p>1- To run the core tests you can use the Gradle task:</p>
<pre><code>./gradlew test
</code></pre>
<p>or use the <code>rspec</code> tool to run all tests or run a specific test:</p>
<pre><code>bin/rspec
bin/rspec spec/foo/bar_spec.rb
</code></pre>
<p>Note that before running the <code>rspec</code> command for the first time you need to set up the RSpec test dependencies by running:</p>
<pre><code>./gradlew bootstrap
</code></pre>
<p>2- To run the subset of tests covering the Java codebase only run:</p>
<pre><code>./gradlew javaTests
</code></pre>
<p>3- To execute the complete test-suite including the integration tests run:</p>
<pre><code>./gradlew check
</code></pre>
<p>4- To execute a single Ruby test run:</p>
<pre><code>SPEC_OPTS="-fd -P logstash-core/spec/logstash/api/commands/default_metadata_spec.rb" ./gradlew :logstash-core:rubyTests --tests org.logstash.RSpecTests
</code></pre>
<p>5- To execute single spec for integration test, run:</p>
<pre><code>./gradlew integrationTests -PrubyIntegrationSpecs=specs/slowlog_spec.rb
</code></pre>
<p>Sometimes you might find a change to a piece of Logstash code causes a test to hang. These can be hard to debug.</p>
<p>If you set <code>LS_JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"</code> you can connect to a running Logstash with your IDEs debugger which can be a great way of finding the issue.</p>
<h3>Plugins tests</h3>
<p>To run the tests of all currently installed plugins:</p>
<pre><code>rake test:plugins
</code></pre>
<p>You can install the default set of plugins included in the logstash package:</p>
<pre><code>rake test:install-default
</code></pre>
<hr>
<p>Note that if a plugin is installed using the plugin manager <code>bin/logstash-plugin install ...</code> do not forget to also install the plugins development dependencies using the following command after the plugin installation:</p>
<pre><code>bin/logstash-plugin install --development
</code></pre>
<h2>Building Artifacts</h2>
<p>Built artifacts will be placed in the <code>LS_HOME/build</code> directory, and will create the directory if it is not already present.</p>
<p>You can build a Logstash snapshot package as tarball or zip file</p>
<pre><code class="language-sh">./gradlew assembleTarDistribution
./gradlew assembleZipDistribution
</code></pre>
<p>OSS-only artifacts can similarly be built with their own gradle tasks:</p>
<pre><code class="language-sh">./gradlew assembleOssTarDistribution
./gradlew assembleOssZipDistribution
</code></pre>
<p>You can also build .rpm and .deb, but the <a href="https://github.com/jordansissel/fpm">fpm</a> tool is required.</p>
<pre><code class="language-sh">rake artifact:rpm
rake artifact:deb
</code></pre>
<p>and:</p>
<pre><code class="language-sh">rake artifact:rpm_oss
rake artifact:deb_oss
</code></pre>
<h2>Using a Custom JRuby Distribution</h2>
<p>If you want the build to use a custom JRuby you can do so by setting a path to a custom JRuby distribution's source root via the <code>custom.jruby.path</code> Gradle property.</p>
<p>E.g.</p>
<pre><code class="language-sh">./gradlew clean test -Pcustom.jruby.path="/path/to/jruby"
</code></pre>
<h2>Project Principles</h2>
<ul>
<li>Community: If a newbie has a bad time, it's a bug.</li>
<li>Software: Make it work, then make it right, then make it fast.</li>
<li>Technology: If it doesn't do a thing today, we can make it do it tomorrow.</li>
</ul>
<h2>Contributing</h2>
<p>All contributions are welcome: ideas, patches, documentation, bug reports, complaints, and even something you drew up on a napkin.</p>
<p>Programming is not a required skill. Whatever you've seen about open source and maintainers or community members saying "send patches or die" - you will not see that here.</p>
<p>It is more important that you are able to contribute.</p>
<p>For more information about contributing, see the <a href="https://raw.githubusercontent.com/elastic/logstash/main/CONTRIBUTING.md">CONTRIBUTING</a> file.</p>
<h2>Footnotes</h2>
<p>[^1]: </p>
<details>
<summary>Use bundle instead of gradle to install dependencies</summary>
<p></p>
<pre><code>#### Alternatively, instead of using `gradle` you can also use `bundle`:
* Install development dependencies
```sh
bundle config set --local path vendor/bundle
bundle install
```
* Bootstrap the environment:
```sh
rake bootstrap
```
* You can then use `bin/logstash` to start Logstash, but there are no plugins installed. To install default plugins, you can run:
```sh
rake plugin:install-default
```
This will install the 80+ default plugins which makes Logstash ready to connect to multiple data sources, perform transformations and send the results to Elasticsearch and other destinations.
</details>
</code></pre>
</details>
+
+
\ No newline at end of file
diff --git a/javascript+erb/daily/index.xml b/javascript+erb/daily/index.xml
index 07a4b9623a5..6549d062b51 100644
--- a/javascript+erb/daily/index.xml
+++ b/javascript+erb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JavaScript+ERB Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:02Z
+ 2024-12-01T01:32:59Z
Daily Trending of JavaScript+ERB in GitHub
\ No newline at end of file
diff --git a/javascript+erb/monthly/index.xml b/javascript+erb/monthly/index.xml
new file mode 100644
index 00000000000..171576f0cc6
--- /dev/null
+++ b/javascript+erb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JavaScript+ERB Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:40Z
+ Monthly Trending of JavaScript+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/javascript+erb/weekly/index.xml b/javascript+erb/weekly/index.xml
new file mode 100644
index 00000000000..6b99118e6cb
--- /dev/null
+++ b/javascript+erb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JavaScript+ERB Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:44Z
+ Weekly Trending of JavaScript+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/javascript/daily/index.xml b/javascript/daily/index.xml
index 8d3a4faf817..5436b5a074c 100644
--- a/javascript/daily/index.xml
+++ b/javascript/daily/index.xml
@@ -1,14 +1,14 @@
GitHub JavaScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:04Z
+ 2024-12-01T01:33:01Z
Daily Trending of JavaScript in GitHub
- besuper/TwitchNoSub
- 2024-11-30T01:32:04Z
- tag:github.com,2024-11-30:/besuper/TwitchNoSub
-
- <p>An extension to watch sub only VOD on Twitch</p><hr><h1>TwitchNoSub</h1>
<p>Be able to watch any sub-only vod on Twitch, integrated in the website and support every twitch features.</p>
<p>Support chromium based browser (Chrome, Edge, Brave, Opera, ...) and Firefox.</p>
<h2>Download & installation</h2>
<h5>Chromium based browser</h5>
<p>Download the latest release in the <a href="https://github.com/besuper/TwitchNoSub/releases">releases section</a> or clone the repo.</p>
<p>You have to install the extension manually:</p>
<ul>
<li>Go in manage extension (<strong>chrome://extensions/</strong> in chrome)</li>
<li>Make sure <strong>Developer mode</strong> is enabled</li>
<li>Hit <strong>Load unpacked extension</strong> and select the unzipped folder of the extension.</li>
</ul>
<p>If you use Chromium (not Chrome), you can pack the extension to get a .crx file you can drag & drop inside extensions page (which removes the need to have a dedicated directory for the extension on your hard drive)</p>
<ul>
<li>Unzip the extension</li>
<li>In the parent directory of the extension, run the following command : <code>chromium --pack-extension=TwitchNoSub</code></li>
<li>Drop the created crx file in the extensions page of your browser (make sure <strong>Developer mode</strong> is enabled, however it will not work)</li>
</ul>
<h5>Firefox</h5>
<p>Download the latest .<strong>xpi</strong> file in the <a href="https://github.com/besuper/TwitchNoSub/releases">releases section</a>.</p>
<ul>
<li>Drag and drop the xpi file on Firefox</li>
<li>Click on "Add" in the little confirmation popup</li>
</ul>
<h2>Warning</h2>
<p>This extension is still in work in progress, if there is any issue please report it.</p>
+ xanderfrangos/twinkle-tray
+ 2024-12-01T01:33:01Z
+ tag:github.com,2024-12-01:/xanderfrangos/twinkle-tray
+
+ <p>Easily manage the brightness of your monitors in Windows from the system tray</p><hr><p align="center"> <img src="https://raw.githubusercontent.com/xanderfrangos/twinkle-tray/master/src/assets/logo.png" width="128px" height="128px" alt="Twinkle Tray brightness slider logo"> </p>
<h1 align="center">Twinkle Tray</h1>
<p align="center"><a href="https://github.com/xanderfrangos/twinkle-tray/releases" target="_blank"><img src="https://img.shields.io/github/v/release/xanderfrangos/twinkle-tray" alt="Latest release"></a> <a href="https://github.com/xanderfrangos/twinkle-tray/releases" target="_blank"><img src="https://img.shields.io/github/downloads/xanderfrangos/twinkle-tray/total" alt="Total downloads"></a> <a href="https://hosted.weblate.org/projects/twinkle-tray/twinkle-tray/" target="_blank"><img src="https://hosted.weblate.org/widgets/twinkle-tray/-/twinkle-tray/svg-badge.svg?sanitize=true" alt="Translations"></a></p>
<p>Twinkle Tray enables brightness control on external displays in Windows 10 & 11. Even though Windows is capable of adjusting the backlight on most monitors, it doesn't support external monitors natively. Windows also lacks any options to manage the brightness of multiple displays. This app inserts a new icon into your system tray, where you can click to have instant access to the brightness levels of all compatible displays.</p>
<img src="https://raw.githubusercontent.com/xanderfrangos/twinkle-tray/gh-pages/assets/img/tt-screenshot-w11.jpg" alt="Win 10 brightness slider">
<h2>Features</h2>
<ul>
<li>Adds brightness sliders to the system tray, similar to the built-in Windows volume flyout.</li>
<li>Seamlessly blends in with Windows 10 and Windows 11. Uses your Personalization settings to match your taskbar.</li>
<li>Can automatically change monitor brightness depending on the time of day or when idle.</li>
<li>Bind hotkeys to adjust the brightness of specific or all displays.</li>
<li>Normalize backlight across different monitors.</li>
<li>Control DDC/CI features such as contrast.</li>
<li>Starts up with Windows.</li>
</ul>
<h3>Design & Personalization</h3>
<p>Twinkle Tray will automatically adjust the look and feel to match your Windows version and preferences. Additional options are available to select the Windows version and theme of your choice.</p>
<img src="https://raw.githubusercontent.com/xanderfrangos/twinkle-tray/gh-pages/assets/img/tt-comparison.jpg" alt="Win 11 brightness slider">
<h2>Download</h2>
<p><strong>Download the lastest version from <a href="https://twinkletray.com/">twinkletray.com</a> or the <a href="https://github.com/xanderfrangos/twinkle-tray/releases">Releases page</a>.</strong></p>
<p><a href="https://www.microsoft.com/store/productId/9PLJWWSV01LK" target="_blank"><img width="156" src="https://crushee.app/assets/img/ms-store.svg?sanitize=true" alt="Get Twinkle Tray brightness slider from the Microsoft Store"></a></p>
<h2>Install via Package Manager</h2>
<h3>Windows Package Manager</h3>
<pre><code class="language-powershell">winget install xanderfrangos.twinkletray
</code></pre>
<h3>Chocolatey (unofficial)</h3>
<p><a href="https://chocolatey.org/">Chocolatey</a> users can download and install Twinkle Tray from Chocolatey's Community Repository by installing the <code>twinkle-tray</code> package:</p>
<pre><code class="language-powershell">choco install twinkle-tray
</code></pre>
<p>To upgrade to the latest approved package version, run the following command:</p>
<pre><code class="language-powershell">choco upgrade twinkle-tray
</code></pre>
<p><strong>This package is not maintained at this repository</strong>. Please do not create issues relating to the package here. Instead, go to the <a href="https://community.chocolatey.org/packages/twinkle-tray">package page</a> and follow the <a href="https://docs.chocolatey.org/en-us/community-repository/users/package-triage-process">Package Triage Process</a>.</p>
<h3>Scoop (unofficial)</h3>
<p><a href="https://scoop.sh/">Scoop</a> users can download and install Twinkle Tray from Scoop's Extras bucket by installing the <code>twinkle-tray</code> package:</p>
<pre><code class="language-sh">scoop bucket add extras
scoop install extras/twinkle-tray
</code></pre>
<p>To upgrade to the latest approved package version, run the following command:</p>
<pre><code class="language-sh">scoop update twinkle-tray
</code></pre>
<p><strong>This package is not maintained at this repository</strong>. Please do not create issues relating to the package here. Instead, go to <a href="https://github.com/ScoopInstaller/Extras">ScoopInstallers/Extras</a> and search for an existing <a href="https://github.com/ScoopInstaller/Extras/issues?q=is%3Aissue+twinkle-tray">issue</a> or <a href="https://github.com/ScoopInstaller/Extras/discussions?discussions_q=twinkle-tray">discussion</a> and create a new <a href="https://github.com/ScoopInstaller/Extras/issues/new/choose">issue</a> or <a href="https://github.com/ScoopInstaller/Extras/discussions/new/choose">discussion</a> if one does not already exist.</p>
<h2>Usage</h2>
<ul>
<li>Download from the <a href="https://github.com/xanderfrangos/twinkle-tray/releases">Releases page</a> and run the installer EXE.</li>
<li>Once installation has finished, you should see the Twinkle Tray icon in your system tray.</li>
<li>Click the icon to bring up the Adjust Brightness flyout.</li>
<li>Click away to hide the flyout.</li>
<li>Right-click the system tray icon to quit.</li>
</ul>
<h2>Compatibility</h2>
<p>Twinkle Tray uses DDC/CI and WMI to communicate with your monitors. Most monitors offer DDC/CI compatibility, but it may be off by default. Make sure you have the appropriate option(s) enabled on your monitor so that it can work with Twinkle Tray. Refer to your monitor's user manual for more information.</p>
<p><strong>Known issues:</strong></p>
<ul>
<li>The AMD Radeon Control Panel can interfere with Twinkle Tray. Ensure "Custom Colors" is not enabled.</li>
<li>VGA/DVI may not be compatible.</li>
<li>USB/Thunderbolt/Surface docks with HDMI or DisplayPort may not be compatible.</li>
<li>DDC/CI features such as brightness control and power state may cause certain models of monitors to behave poorly. This applies to any DDC/CI software, not just Twinkle Tray.</li>
</ul>
<p>If some of your monitors are not being detected, please see <a href="https://github.com/xanderfrangos/twinkle-tray/wiki/Display-Detection-&-Support-Issues">this page</a> for troubleshooting steps.</p>
<h2>Command Line Arguments</h2>
<p>Twinkle Tray (v1.13.0+) supports requesting brightness changes from the command line. Twinkle Tray must already be running. One monitor argument and one brightness argument are required. Multiple arguments will override each other.</p>
<p>For example: <code>"%LocalAppData%\Programs\twinkle-tray\Twinkle Tray.exe" --MonitorNum=1 --Offset=-30</code> will adjust monitor number 1 by -30 brightness.</p>
<h3>Supported args:</h3>
<ul>
<li><code>--List</code> List all displays. <em>(available in v1.14.0+)</em></li>
<li><code>--MonitorNum</code> Select monitor by number. Starts at 1. <em>Example: <code>--MonitorNum=2</code></em></li>
<li><code>--MonitorID</code> Select monitor by internal ID. Partial or whole matches accepted. <em>Example: <code>--MonitorID="UID2353"</code></em></li>
<li><code>--All</code> Flag to select all monitors.</li>
<li><code>--Set</code> Set brightness percentage. <em>Example: <code>--Set=95</code></em></li>
<li><code>--Offset</code> Adjust brightness percentage. <em>Example: <code>--Offset=-20</code></em></li>
<li><code>--VCP</code> Send a specific DDC/CI VCP code and value instead of brightness. The first part is the VCP code (decimal or hexadecimal), and the second is the value. <em>Example: <code>--VCP="0xD6:5"</code></em> <em>(available in v1.14.4+)</em></li>
<li><code>--Overlay</code> Flag to show new brightness levels in the overlay <em>Example: <code>--Overlay</code></em></li>
<li><code>--Panel</code> Flag to show new brightness levels in the panel <em>Example: <code>--Panel</code></em></li>
</ul>
<p><em>This feature is not available on the Windows Store version of Twinkle Tray.</em></p>
<h2>Localization</h2>
<p>Thanks to <a href="https://github.com/xanderfrangos/twinkle-tray/graphs/contributors">several contributors</a>, Twinkle Tray is localized for multiple languages. If you'd like to create or update a localization, see <a href="https://github.com/xanderfrangos/twinkle-tray/wiki/Localization-files">this page</a> for details. Special thanks to <a href="https://weblate.org/">Weblate</a> for allowing free use of their service.</p>
<h4>Localization progress</h4>
<a href="https://hosted.weblate.org/engage/twinkle-tray/?utm_source=widget"> <img src="https://hosted.weblate.org/widgets/twinkle-tray/-/multi-auto.svg?sanitize=true" alt="Translation status"> </a>
<h2>Build Instructions</h2>
<p>If you wish to run a development build of Twinkly Tray:</p>
<ul>
<li>Download or clone.</li>
<li>Install the build tools for <a href="https://github.com/nodejs/node-gyp#installation"><code>node-gyp</code></a>, if not already installed. You may already have these from installing NodeJS.</li>
<li>Run <code>npm install</code>.</li>
<li>Run <code>npm run build</code> to build an executable or <code>npm start</code> to run a development build.</li>
</ul>
<p><em>Note: Twinkle Tray must be built on Windows.</em></p>
<h2>Special Thanks</h2>
<p>Twinkle Tray was built using frameworks & libraries such as <a href="https://electronjs.org/">Electron</a>, <a href="https://nodejs.org/">Node.js</a>, <a href="https://github.com/hensm/node-ddcci">node-ddcci</a>, and <a href="https://github.com/djsweet/win32-displayconfig">win32-displayconfig</a>. Thanks to Weblate for allowing free use of their service, along with the many contributors to the localizations of Twinkle Tray. The app would not be nearly as popular without all of your help. And thank you for the many donations, small and large, over the years.</p>
<h2>License</h2>
<p>Copyright © 2020 Xander Frangos</p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
\ No newline at end of file
diff --git a/javascript/monthly/index.xml b/javascript/monthly/index.xml
new file mode 100644
index 00000000000..0a9765fa1d4
--- /dev/null
+++ b/javascript/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub JavaScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:45Z
+ Monthly Trending of JavaScript in GitHub
+
+
+ stdlib-js/stdlib
+ 2024-12-01T01:54:45Z
+ tag:github.com,2024-12-01:/stdlib-js/stdlib
+
+ <p>✨ Standard library for JavaScript and Node.js. ✨</p><hr><section class="announcement">
</section>
<!-- /.announcement -->
<!-- Section to include assets such as the project logo, etc. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<section class="banner">
<div class="image" align="center">
<br>
<br>
<a href="https://stdlib.io/"></a>
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@9f7d30f089ecc458a8b836a75afab75caf5c0b36/docs/assets/logo_banner.svg?sanitize=true" alt="stdlib logo">
<br>
<br>
<br>
<br>
</div>
</section>
<!-- /.banner -->
<hr>
<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
<section class="intro">
<p>We believe in a future in which the web is a preferred environment for numerical computation. To help realize this future, we've built stdlib.</p>
<p>stdlib (<a href="https://en.wikipedia.org/wiki/Help:IPA/English">/ˈstændərd lɪb/</a> "standard lib") is a standard library with an emphasis on numerical and scientific computation, written in JavaScript (and C) for execution in browsers and in Node.js. The library provides a collection of robust, high performance libraries for mathematics, statistics, data processing, streams, and more and includes many of the utilities you would expect from a standard library.</p>
<p>What sets stdlib apart is its fully decomposable architecture, which allows you to swap out and mix and match APIs and functionality to cater to your exact preferences and use cases.</p>
<p>When you use stdlib, you can be confident that you are using the most thorough, rigorous, well-written, studied, documented, tested, measured, and high-quality code available.</p>
<p>Want to join us in bringing numerical computing to the web? <strong>Start by starring the project.</strong> <span>🌟</span></p>
<p>Explore this GitHub repository for stdlib's source code and documentation. For guidance on developing stdlib, refer to the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">development guide</a>.</p>
<p>Thank you for being a part of our community! Your support is invaluable to us!</p>
<h2>Resources</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#installation"><strong>Installation</strong></a></li>
<li><a href="https://stdlib.io"><strong>Homepage</strong></a></li>
<li><a href="https://stdlib.io/docs/api"><strong>Documentation</strong></a></li>
<li><a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib"><strong>Source code</strong></a></li>
<li><a href="https://codecov.io/github/stdlib-js/stdlib/branch/develop"><strong>Code coverage</strong></a></li>
<li><a href="https://github.com/stdlib-js/stdlib/raw/develop/FAQ.md"><strong>FAQ</strong></a></li>
</ul>
<h3>External Resources</h3>
<ul>
<li><a href="https://opencollective.com/stdlib"><strong>Open Collective</strong></a></li>
<li><a href="https://twitter.com/stdlibjs"><strong>Twitter</strong></a></li>
<li><a href="https://gitter.im/stdlib-js/stdlib"><strong>Gitter</strong></a></li>
</ul>
<h2>Features</h2>
<ul>
<li> <p>150+ <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/math/base/special">special math functions</a>.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@203839353bc74297fe641207270f7917d2bda560/docs/assets/readme/base_special_math.png" alt="Demo showcasing special math functions">
</div> </li>
<li> <p>35+ <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/base/dists">probability distributions</a>, with support for evaluating probability density functions (PDFs), cumulative distribution functions (CDFs), quantiles, moments, and more.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@e13885087939c064c69aa43ee80ea52710de5591/docs/assets/readme/base_dists.png" alt="Demo showcasing probability distributions">
</div> </li>
<li> <p>40+ <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/random/base">seedable pseudorandom number generators</a> (PRNGs).</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@83dcd0fad98883320a8b1efc801b2fc1ed2a003d/docs/assets/readme/base_prngs.png" alt="Demo showcasing PRNGs">
</div> </li>
<li> <p>200+ general <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/utils">utilities</a> for data transformation, functional programming, and asynchronous control flow.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@e6eeea31e49d6db1b6f57ae59d2988d4b427e285/docs/assets/readme/utils.png" alt="Demo showcasing general utilities">
</div> </li>
<li> <p>200+ <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/assert">assertion utilities</a> for data validation and feature detection.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@6970c8b4eb546a10712734d225c15863db9b2c92/docs/assets/readme/assert.png" alt="Demo showcasing assertion utilities">
</div> </li>
<li> <p>50+ <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/datasets">sample datasets</a> for testing and development.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@f71a38e62247e31dc47d248f6f1b3e434abeb971/docs/assets/readme/datasets.png" alt="Demo showcasing sample datasets">
</div> </li>
<li> <p>A <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/plot/ctor">plot API</a> for data visualization and exploratory data analysis.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@39d75174b24ea2a84828d9624643776a164478e4/docs/assets/readme/plot.png" alt="Demo showcasing plot API">
</div> </li>
<li> <p>Native add-ons for interfacing with BLAS libraries, with pure JavaScript fallbacks.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@efede6af3ef957da08838903b0558441263adf85/docs/assets/readme/base_blas.png" alt="Demo showcasing BLAS APIs">
</div> </li>
<li> <p>A <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/bench/harness">benchmark framework</a> supporting TAP.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@4833049f8d1895585bd51ec6fa97b8ca0d37c6fb/docs/assets/readme/benchmark.gif" alt="Demo showcasing benchmark framework">
</div> </li>
<li> <p>REPL environment with integrated help and examples.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@3864ae6f86bbc215956c0e667d82d49a6eaca780/docs/assets/readme/repl.gif" alt="Demo showcasing REPL environment">
</div> </li>
<li> <p>Can be bundled using <a href="https://github.com/substack/node-browserify">Browserify</a>, <a href="https://webpack.js.org/">Webpack</a>, and other bundlers for use in web browsers.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@e54894a93697653dda22d11cd0aec1ccb292b7b8/docs/assets/readme/bundled.png" alt="Demo showcasing browser support">
</div> </li>
<li> <p>Every function is accompanied by <a href="https://www.typescriptlang.org/">TypeScript</a> declaration files, ensuring type safety and facilitating intelligent code completion in IDEs.</p>
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@f5f1f915a7178d9bc76a95d34afd799e6092ec3a/docs/assets/readme/typescript.png" alt="Demo showcasing TypeScript declaration files">
</div> </li>
</ul>
<hr>
<h2>Installation</h2>
<p>To accommodate various use cases, stdlib can be used in multiple ways. The preferred method of use depends on your individual use case. We've provided some user stories to help you identify the best approach. 😃</p>
<p>While this project's installation instructions defaults to using <a href="https://www.npmjs.com/">npm</a> for package management, installation via other package managers, such as <a href="https://yarnpkg.com/">yarn</a>, should be a matter of simply swapping out <a href="https://www.npmjs.com/">npm</a> commands with those of the relevant package manager.</p>
<h3>User Stories</h3>
<ul>
<li> <p>I want to perform <strong>data analysis</strong> and <strong>data science</strong> tasks in JavaScript and Node.js, similar to how I might use Python, Julia, R, and MATLAB.</p>
<ul>
<li>Install the entire project as a <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_command_line_utility">command-line utility</a>.</li>
</ul> </li>
<li> <p>I am building a <strong>web application</strong>.</p>
<ul>
<li> <p>I plan on using <a href="https://github.com/substack/node-browserify">Browserify</a>, <a href="https://webpack.js.org/">Webpack</a>, and other bundlers for use in web browsers.</p>
<ul>
<li>Install <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_individual_packages">individual packages</a>. Installing the entire project is likely unnecessary and will lead to slower installation times.</li>
</ul> </li>
<li> <p>I would like to <strong>vendor</strong> a custom bundle containing various stdlib functionality.</p>
<ul>
<li>Follow the steps for creating <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_custom_bundles">custom bundles</a>.</li>
</ul> </li>
<li> <p>I would like to include stdlib functionality by just using a <code>script</code> tag.</p>
<ul>
<li> <p>I would like to use ES Modules.</p>
<ul>
<li>Use an individual package's ES Module <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_esm">build</a>.</li>
</ul> </li>
<li> <p>I would like to use a pre-built bundle (possibly via a CDN, such as <a href="https://unpkg.com/#/">unpkg</a> or <a href="https://www.jsdelivr.com/">jsDelivr</a>).</p>
<ul>
<li>Install (or consume via a CDN) an individual package's pre-built UMD <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_umd">browser bundle</a>.</li>
</ul> </li>
</ul> </li>
<li> <p>I am interested in using a substantial amount of functionality found in a top-level stdlib namespace and don't want to separately install hundreds of individual packages (e.g., if building an on-line calculator application and wanting all of stdlib's math functionality).</p>
<ul>
<li> <p>Install one or more top-level <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_namespaces">namespaces</a>. Installing the entire project is likely unnecessary and will lead to slower installation times. Installing a top-level namespace is likely to mean installing functionality which will never be used; however, installing a top-level namespace is likely to be easier and less time-consuming than installing many individual packages separately.</p> <p>When bundling, installing a top-level namespace should not be a concern, as individual functionality can still be independently required/imported. Project installation times may, however, be somewhat slower.</p> </li>
</ul> </li>
</ul> </li>
<li> <p>I am building a <a href="https://nodejs.org/en/">Node.js</a> <strong>server application</strong>.</p>
<ul>
<li> <p>I am interested in using various functionality found in stdlib.</p>
<ul>
<li>Install <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_individual_packages">individual packages</a>. Installing the entire project is likely unnecessary and will lead to slower installation times.</li>
</ul> </li>
<li> <p>I would like to <strong>vendor</strong> stdlib functionality and avoid dependency trees.</p>
<ul>
<li>Install individual package UMD <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_nodejs">bundles</a>.</li>
</ul> </li>
<li> <p>I am interested in using a <em>substantial</em> amount of functionality found in a top-level stdlib namespace and don't want to separately install hundreds of individual packages.</p>
<ul>
<li>Install one or more top-level <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_namespaces">namespaces</a>. Installing the entire project is likely unnecessary and will lead to slower installation times. Installing a top-level namespace is likely to mean installing functionality which will never be used; however, installing a top-level namespace is likely to be easier and less time-consuming than installing many individual packages separately.</li>
</ul> </li>
</ul> </li>
<li> <p>I am using <strong>Deno</strong>.</p>
<ul>
<li>Import <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_deno">individual packages</a> using pre-built Deno builds.</li>
</ul> </li>
<li> <p>I would like to use stdlib functionality in an <a href="https://observablehq.com/">Observable</a> notebook.</p>
<ul>
<li>Consume a pre-built <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_umd">browser bundles</a> via a CDN, such as <a href="https://unpkg.com/#/">unpkg</a> or <a href="https://www.jsdelivr.com/">jsDelivr</a>.</li>
</ul> </li>
<li> <p>I want to hack at stdlib, possibly even creating <strong>customized</strong> builds to link to platform-specific native libraries (such as Intel's MKL or some other numerical library).</p>
<ul>
<li>Install the project as a <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_system_library">system library</a> by cloning this repository and following the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">installation</a> instructions as described in the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">development guide</a>.</li>
</ul> </li>
</ul>
<p><a name="install_complete_library"></a></p>
<h3>Complete Library</h3>
<p>To install the entire project as a library or application dependency,</p>
<!-- run-disable -->
<pre><code class="language-bash">$ npm install @stdlib/stdlib
</code></pre>
<p>Once installed, stdlib packages can be individually required/imported to minimize load times and decrease bundle sizes. For example, to use <code>require</code></p>
<pre><code class="language-javascript">var ndarray = require( '@stdlib/ndarray/array' );
var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
</code></pre>
<p>and to use <code>import</code></p>
<!-- run-disable -->
<pre><code class="language-javascript">import ndarray from '@stdlib/ndarray/array';
var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
</code></pre>
<p><a name="install_individual_packages"></a></p>
<h3>Individual Packages</h3>
<p>stdlib is designed to allow decomposition of the main project into individual packages which can be independently consumed. Accordingly, users of the project can avoid installing all project functionality and only install the exact functionality they need.</p>
<p>To install individual packages, replace forward slashes <code>/</code> after <code>@stdlib/</code> with hyphens <code>-</code>. For example,</p>
<!-- run-disable -->
<pre><code class="language-bash">$ npm install @stdlib/ndarray-array
</code></pre>
<p>Once installed, individual packages can be required/imported. For example, to use <code>require</code></p>
<pre><code class="language-javascript">var ndarray = require( '@stdlib/ndarray-array' );
var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
</code></pre>
<p>and to use <code>import</code></p>
<!-- run-disable -->
<pre><code class="language-javascript">import ndarray from '@stdlib/ndarray-array';
var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
</code></pre>
<p><a name="install_namespaces"></a></p>
<h3>Namespaces</h3>
<p>stdlib is comprised of various top-level namespaces (i.e., collections of related functionality united by common themes). For example, to install all math functionality found in the top-level <code>math</code> namespace,</p>
<!-- run-disable -->
<pre><code class="language-bash">$ npm install @stdlib/math
</code></pre>
<p>Once installed, packages within a top-level namespace can be individually required/imported to minimize load times and decrease bundle sizes. For example, to use <code>require</code></p>
<pre><code class="language-javascript">var sin = require( '@stdlib/math/base/special/sin' );
var v = sin( 3.14 );
// returns <number>
</code></pre>
<p>and to use <code>import</code></p>
<!-- run-disable -->
<pre><code class="language-javascript">import sin from '@stdlib/math/base/special/sin';
var v = sin( 3.14 );
// returns <number>
</code></pre>
<p><strong>Note</strong>: installing nested namespaces found within top-level namespaces (e.g., <code>math/base</code>) is <strong>not</strong> supported. Consider installing individual packages or the relevant top-level namespace.</p>
<p><a name="install_command_line_utility"></a></p>
<h3>Command-line Utility</h3>
<p>To install globally for use as a command-line utility and/or use the <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/repl">REPL</a>,</p>
<!-- run-disable -->
<pre><code class="language-bash">$ npm install -g @stdlib/stdlib
</code></pre>
<p>which will expose the <code>stdlib</code> command. For example, to see available sub-commands</p>
<!-- run-disable -->
<pre><code class="language-bash">$ stdlib help
</code></pre>
<p>and to run the <a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/repl">REPL</a></p>
<!-- run-disable -->
<pre><code class="language-bash">$ stdlib repl
</code></pre>
<p><a name="install_env_builds"></a></p>
<h3>Environment Builds</h3>
<p><a name="install_env_builds_esm"></a></p>
<h4>ES Modules</h4>
<p>To use ES Modules via a <code><script></code> tag, use <strong>ES Module builds</strong> available in each package's repository via a dedicated <code>esm</code> branch (e.g., see the <a href="https://github.com/stdlib-js/math-base-special-erf/tree/esm"><code>esm</code></a> branch for <a href="https://github.com/stdlib-js/math-base-special-erf/tree/esm"><code>@stdlib/math-base-special-erf</code></a>). For example,</p>
<!-- run-disable -->
<pre><code class="language-html"><script type="module">
import linspace from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-linspace@esm/index.mjs';
import erf from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-erf@esm/index.mjs';
const x = linspace( -10.0, 10.0, 100 );
for ( let i = 0; i < x.length; i++ ) {
console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}
</script>
</code></pre>
<p><a name="install_env_builds_deno"></a></p>
<h4>Deno</h4>
<p>To use individual packages in Deno, use <strong>Deno builds</strong> available in each package's repository via a dedicated <code>deno</code> branch (e.g., see the <a href="https://github.com/stdlib-js/ndarray-array/tree/deno"><code>deno</code></a> branch for <a href="https://github.com/stdlib-js/ndarray-array/tree/deno"><code>@stdlib/ndarray-array</code></a>). For example,</p>
<!-- run-disable -->
<pre><code class="language-javascript">import ndarray from 'https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-array@deno/mod.js';
var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
</code></pre>
<p><a name="install_env_builds_jquery"></a></p>
<h4>jQuery-like Bundle</h4>
<p>For those wanting a jQuery-like bundle, one can use pre-built distributable UMD bundles for use in browser environments or as shared ("vendored") libraries in server environments available in each package's repository via a dedicated <code>umd</code> branch. See sections <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_umd">UMD</a> and <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/#install_env_builds_nodejs">Node.js</a> for more details.</p>
<p><a name="install_env_builds_umd"></a></p>
<h4>UMD</h4>
<p>To use UMD bundles either via a <code><script></code> tag or in <a href="https://observablehq.com/">Observable</a>, use UMD <strong>browser builds</strong> available in each package's repository via a dedicated <code>umd</code> branch (e.g., see the <a href="https://github.com/stdlib-js/math-base-special-erf/tree/umd"><code>umd</code></a> branch for <a href="https://github.com/stdlib-js/math-base-special-erf/tree/umd"><code>@stdlib/math-base-special-erf</code></a>). For example,</p>
<!-- run-disable -->
<pre><code class="language-html"><script type="text/javascript" src="https://cdn.jsdelivr.net/gh/stdlib-js/array-base-linspace@umd/browser.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-erf@umd/browser.js"></script>
<script type="text/javascript">
(function () {
var x = linspace( -10.0, 10.0, 100 );
for ( var i = 0; i < x.length; i++ ) {
console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}
})();
</script>
</code></pre>
<p><a name="install_env_builds_nodejs"></a></p>
<h4>Node.js</h4>
<p>To <strong>vendor</strong> stdlib functionality and avoid installing dependency trees, use UMD <strong>server builds</strong> available in each package's repository via a dedicated <code>umd</code> branch (e.g., see the <a href="https://github.com/stdlib-js/math-base-special-erf/tree/umd"><code>umd</code></a> branch for <a href="https://github.com/stdlib-js/math-base-special-erf/tree/umd"><code>@stdlib/math-base-special-erf</code></a>). For example,</p>
<!-- run-disable -->
<pre><code class="language-javascript">var linspace = require( '/path/to/vendor/umd/@stdlib/array-base-linspace' );
var erf = require( '/path/to/vendor/umd/@stdlib/math-base-special-erf' );
var x = linspace( -10.0, 10.0, 100 );
for ( var i = 0; i < x.length; i++ ) {
console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}
</code></pre>
<p><a name="install_custom_bundles"></a></p>
<h3>Custom Bundles</h3>
<p>To create a custom bundle based on project needs,</p>
<ol>
<li> <p>follow the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">download</a>, <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">configuration</a>, and <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">installation</a> instructions as described in the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">development guide</a>.</p> </li>
<li> <p>navigate to the local installation directory.</p> </li>
<li> <p>run the following command to print help documentation for providing a list of stdlib package names to bundle</p>
<!-- run-disable --> <pre><code class="language-bash">$ NODE_PATH=./lib/node_modules node ./bin/cli bundle-pkg-list -- -h
</code></pre> </li>
<li> <p>modify and run the above command with the list of packages to bundle</p>
<!-- run-disable --> <pre><code class="language-bash">$ NODE_PATH=./lib/node_modules node ./bin/cli bundle-pkg-list -- <pkg> <pkg> <pkg> ...
</code></pre> </li>
</ol>
<!-- FIXME: the following is not possible atm as we don't publish `@stdlib/_tools` which is needed in order for the command-line utility to work!
Alternatively, install stdlib as a command-line utility (as described above) and run the following command
-->
<!-- run-disable -->
<!--
```bash
$ stdlib bundle-pkg-list -- <pkg> <pkg> <pkg> ...
```
-->
<p>Upon generating a bundle, the bundle can be loaded via a <code><script></code> tag as described above for pre-built distributable UMD bundles.</p>
<p><a name="install_system_library"></a></p>
<h3>System Library</h3>
<p>To install as a system library (e.g., for the purposes of creating custom builds), follow the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">download</a>, <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">configuration</a>, and <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">installation</a> instructions as described in the <a href="https://github.com/stdlib-js/stdlib/raw/develop/docs/development.md">development guide</a>.</p>
<hr>
<h2>Prerequisites</h2>
<p>Installing and running stdlib for use in <a href="https://nodejs.org/en/">Node.js</a> <strong>requires</strong> the following prerequisites:</p>
<ul>
<li><a href="https://nodejs.org/en/">Node.js</a>: JavaScript runtime (version <code>>= 0.10</code>)</li>
<li><a href="https://www.npmjs.com/">npm</a>: package manager (version <code>> 2.7.0</code>; if Node <code>< 1.0.0</code>, version <code>> 2.7.0</code> and <code>< 4.0.0</code>; if Node <code><= 10.x.x</code>, version <code>> 2.7.0</code> and <code>< 6.0.0</code>)</li>
</ul>
<p>Most functionality in stdlib is implemented in JavaScript and no further prerequisites are required to use stdlib (i.e., you can safely avoid installing any additional prerequisites); however, some implementations try to capture performance benefits by using <a href="https://nodejs.org/api/addons.html">native bindings</a> and/or <a href="https://webassembly.org/">WebAssembly</a>. While <strong>not</strong> required to run stdlib, as <strong>every</strong> stdlib implementation has a JavaScript fallback, the following dependencies are <strong>required</strong> for building native add-ons, including linking to BLAS and LAPACK libraries:</p>
<ul>
<li><a href="https://www.gnu.org/software/make/">GNU make</a>: development utility and task runner</li>
<li><a href="https://www.gnu.org/software/bash/">GNU bash</a>: an sh-compatible shell</li>
<li><a href="http://gcc.gnu.org/">gcc & g++</a> or <a href="https://clang.llvm.org/">Clang</a>: C/C++ compilation and linking (g++ version <code>>= 4.8</code>; clang version <code>>= 3.5</code>, Xcode version <code>>=8.3.1</code> on OS X)</li>
<li><a href="https://gcc.gnu.org/fortran/">gfortran</a>: Fortran compilation and linking (version <code>>= 4.8</code>)</li>
</ul>
<p>While <strong>not</strong> required to run stdlib, the following dependencies are <strong>required</strong> for automatically downloading external libraries:</p>
<ul>
<li><a href="https://curl.se/">curl</a>, <a href="https://www.gnu.org/software/wget/">wget</a>, or <a href="https://www.freebsd.org/cgi/man.cgi?fetch%281%29">fetch</a> (FreeBSD): utilities for downloading remote resources</li>
</ul>
<p>The following external libraries can be automatically downloaded and compiled from source using <code>make</code>:</p>
<ul>
<li><a href="https://github.com/xianyi/OpenBLAS">OpenBLAS</a>: optimized BLAS library</li>
<li><a href="https://www.electronjs.org/">Electron</a>: framework for cross-platform desktop applications</li>
</ul>
<hr>
<h2>Contributing</h2>
<p>First time contributor?</p>
<ul>
<li>See the <a href="https://github.com/stdlib-js/stdlib/raw/develop/CONTRIBUTING.md">contributing guidelines</a>.</li>
</ul>
<p>Already an expert?</p>
<ul>
<li> <p>Fork the repository.</p> </li>
<li> <p>Clone the forked repository</p> <pre><code class="language-bash">$ git clone --depth=1 https://github.com/<username>/stdlib.git
</code></pre> <p>where <code><username></code> is your GitHub username.</p> </li>
<li> <p>Navigate to the <code>stdlib</code> directory</p> <pre><code class="language-bash">$ cd stdlib
</code></pre> </li>
<li> <p>Install dependencies</p> <pre><code class="language-bash">$ make install-node-modules
</code></pre> </li>
<li> <p>Initialize your stdlib development environment</p> <pre><code class="language-bash">$ make init
</code></pre> </li>
</ul>
<!-- Project sponsors. If sponsors are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<hr>
<section class="sponsors">
<h2>Sponsors</h2>
<p>stdlib development is generously supported by the following sponsors:</p>
<div class="image" align="center">
<br>
<a href="https://labs.quansight.org/"> <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@2719e1d3ecab2cc29985bca35fd33594e65adb55/docs/assets/sponsors/quansight_labs_logo.png" alt="Quansight Labs"> </a>
<br>
<br>
</div>
<p>Are you interested in supporting stdlib? If so, join our <a href="https://opencollective.com/stdlib">Open Collective</a>!</p>
</section>
<!-- /.sponsors -->
<!-- Project users. If users are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<hr>
<section class="users">
<h2>Users</h2>
<p>The following organizations and key stakeholders trust and rely on stdlib:</p>
<div class="image" align="center">
<br>
<a href="https://www.cmu.edu/"> <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@1c8c7dbc9d081eeb13e16c62764f27a65c6553f8/docs/assets/misc/cmu_logo.png" alt="Carnegie Mellon University"> </a>
<br>
<br>
</div>
<p>Does your organization use stdlib? If so, we'd love to hear from you!</p>
</section>
<!-- /.users -->
<hr>
<h2>Governance</h2>
<p>For information about the governance of the stdlib project, see <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/GOVERNANCE.md">GOVERNANCE.md</a>.</p>
<h2>License</h2>
<p>See <a href="https://raw.githubusercontent.com/stdlib-js/stdlib/develop/LICENSE">LICENSE</a>.</p>
<h2>Copyright</h2>
<p>Copyright © 2016-2024. The Stdlib <a href="https://github.com/stdlib-js/stdlib/graphs/contributors">Authors</a>.</p>
</section>
<!-- /.intro -->
<!-- Project badges. If badges are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<hr>
<section class="badges">
<h2>Status</h2>
<h4>Version</h4>
<!-- lint disable no-paragraph-content-indent -->
<p><a href="https://github.com/stdlib-js/stdlib/tags"><img src="https://img.shields.io/github/v/tag/stdlib-js/stdlib.svg?sanitize=true" alt="git tag"></a> <a href="https://npmjs.com/package/@stdlib/stdlib"><img src="https://img.shields.io/npm/v/@stdlib/stdlib.svg?sanitize=true" alt="NPM version"></a> <a href="https://github.com/stdlib-js/stdlib"><img src="https://img.shields.io/node/v/@stdlib/stdlib.svg?sanitize=true" alt="Node.js version"></a></p>
<!-- lint enable no-paragraph-content-indent -->
<!-- #### Build -->
<!-- TODO: distinguish between Linux and Windows code coverage -->
<!-- lint disable table-pipe-alignment -->
<!-- | OS | Build (master) | Coverage (master) | Build (develop) | Coverage (develop) |
| ---------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Linux/OS X | [![Linux/OS X build status (master)][build-image-master]][build-url-master] | [![coverage (master)][coverage-image-master]][coverage-url-master] | [![Linux/OS X build status (develop)][build-image-develop]][build-url-develop] | [![coverage (develop)][coverage-image-develop]][coverage-url-develop] |
| Windows | [![Windows build status (master)][windows-build-image-master]][windows-build-url-master] | [![coverage (master)][coverage-image-master]][coverage-url-master] | [![Windows build status (develop)][windows-build-image-develop]][windows-build-url-develop] | [![coverage (develop)][coverage-image-develop]][coverage-url-develop] | -->
<!-- lint enable table-pipe-alignment -->
<!-- #### Dependencies -->
<!-- lint disable no-paragraph-content-indent -->
<!-- [![Dependencies][dependencies-image]][dependencies-url] [![DevDependencies][dev-dependencies-image]][dev-dependencies-url] -->
<!-- lint enable no-paragraph-content-indent -->
<h4>Community</h4>
<p><a href="https://app.gitter.im/#/room/%23stdlib-js_stdlib:gitter.im"><img src="https://img.shields.io/gitter/room/stdlib-js/stdlib.svg?sanitize=true" alt="Chat"></a></p>
</section>
<!-- /.badges> -->
<!-- Project acknowledgments. If section is included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<!-- * * *
<section class="acknowledgments">
## Acknowledgments
### Build Infrastructure
Test and build infrastructure is generously provided by the following services:
<div class="image" align="center">
<img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@3de52540666d1635df046d7e5dd07a1fc5b87d85/docs/assets/misc/ci_logo_banner.svg" alt="Continuous Integration Service Logos">
<br>
</div>
</section> -->
<!-- /.acknowledgments -->
<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
<section class="links">
<!-- [build-image-develop]: https://img.shields.io/travis/stdlib-js/stdlib/develop.svg
[build-url-develop]: https://travis-ci.org/stdlib-js/stdlib
[coverage-image-develop]: https://img.shields.io/codecov/c/github/stdlib-js/stdlib/develop.svg
[coverage-url-develop]: https://codecov.io/github/stdlib-js/stdlib/branch/develop
[dependencies-url]: https://socket.dev/npm/package/@stdlib/stdlib/dependencies
[dev-dependencies-url]: https://socket.dev/npm/package/@stdlib/stdlib/dependencies -->
</section>
<!-- /.links -->
+
+
+ GitSquared/edex-ui
+ 2024-12-01T01:54:45Z
+ tag:github.com,2024-12-01:/GitSquared/edex-ui
+
+ <p>A cross-platform, customizable science fiction terminal emulator with advanced monitoring & touchscreen support.</p><hr><p align="center"> <br> <img alt="Logo" src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/logo.png"> <br><br> <a href="https://lgtm.com/projects/g/GitSquared/edex-ui/context:javascript"><img alt="undefined" src="https://img.shields.io/lgtm/grade/javascript/g/GitSquared/edex-ui.svg?logo=lgtm&logoWidth=18"></a> <br> <a href="https://github.com/GitSquared/edex-ui/releases/latest"><img alt="undefined" src="https://img.shields.io/github/release/GitSquared/edex-ui.svg?style=popout"></a> <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#featured-in"><img alt="undefined" src="https://img.shields.io/github/downloads/GitSquared/edex-ui/total.svg?style=popout"></a> <a href="https://github.com/GitSquared/edex-ui/raw/master/LICENSE"><img alt="undefined" src="https://img.shields.io/github/license/GitSquared/edex-ui.svg?style=popout"></a> <br> <a href="https://github.com/GitSquared/edex-ui/releases/download/v2.2.8/eDEX-UI-Windows.exe" target="_blank"><img alt="undefined" src="https://badgen.net/badge/Download/Windows/?color=blue&icon=windows&label"></a> <a href="https://github.com/GitSquared/edex-ui/releases/download/v2.2.8/eDEX-UI-macOS.dmg" target="_blank"><img alt="undefined" src="https://badgen.net/badge/Download/macOS/?color=grey&icon=apple&label"></a> <a href="https://github.com/GitSquared/edex-ui/releases/download/v2.2.8/eDEX-UI-Linux-x86_64.AppImage" target="_blank"><img alt="undefined" src="https://badgen.net/badge/Download/Linux64/?color=orange&icon=terminal&label"></a> <a href="https://github.com/GitSquared/edex-ui/releases/download/v2.2.8/eDEX-UI-Linux-arm64-AppImage" target="_blank"><img alt="undefined" src="https://badgen.net/badge/Download/LinuxArm64/?color=orange&icon=terminal&label"></a> <a href="https://aur.archlinux.org/packages/edex-ui" target="_blank"><img alt="undefined" src="https://badgen.net/badge/AUR/Package/cyan"></a> <br> <a href="https://github.com/GitSquared/edex-ui/releases/tag/v2.2.8"><strong><i>(Project archived oct. 18th 2021)</i></strong></a> <br><br><br> </p>
<p>eDEX-UI is a fullscreen, cross-platform terminal emulator and system monitor that looks and feels like a sci-fi computer interface.</p>
<hr>
<a href="https://youtu.be/BGeY1rK19zA"> <img align="right" width="400" alt="Demo on YouTube" src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/youtube-demo-teaser.gif"> </a>
<p>Heavily inspired from the <a href="https://web.archive.org/web/20170511000410/http://jtnimoy.com/blogs/projects/14881671">TRON Legacy movie effects</a> (especially the <a href="https://gmunk.com/TRON-Board-Room">Board Room sequence</a>), the eDEX-UI project was originally meant to be <em>"<a href="https://github.com/seenaburns/dex-ui">DEX-UI</a> with less « art » and more « distributable software »"</em>.</p>
<p>While keeping a futuristic look and feel, it strives to maintain a certain level of functionality and to be usable in real-life scenarios, with the larger goal of bringing science-fiction UXs to the mainstream.</p>
<br>
<p>It might or might not be a joke taken too seriously.</p>
<hr>
<p align="center"> <em>Jump to: <br><a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#features">Features</a> — <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#screenshots">Screenshots</a> — <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#qa">Questions & Answers</a> — <strong><a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#how-do-i-get-it">Download</a></strong> — <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#featured-in">Featured In</a> — <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#useful-commands-for-the-nerds">Contributor Instructions</a> — <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#credits">Credits</a></em> </p>
<h2>Sponsor</h2>
<p><strong>Want to help support my open-source experiments and learn some cool JavaScript tricks at the same time?</strong></p>
<p>Click the banner below and sign up to <strong>Bytes</strong>, the only newsletter cool enough to be recommended by eDEX-UI.</p>
<p><a href="https://ui.dev/bytes/?r=gabriel"><img src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/sponsor-uidev-bytes.jpg" alt="Bytes by UI.dev"></a></p>
<h2>Features</h2>
<ul>
<li>Fully featured terminal emulator with tabs, colors, mouse events, and support for <code>curses</code> and <code>curses</code>-like applications.</li>
<li>Real-time system (CPU, RAM, swap, processes) and network (GeoIP, active connections, transfer rates) monitoring.</li>
<li>Full support for touch-enabled displays, including an on-screen keyboard.</li>
<li>Directory viewer that follows the CWD (current working directory) of the terminal.</li>
<li>Advanced customization using themes, on-screen keyboard layouts, CSS injections. See the <a href="https://github.com/GitSquared/edex-ui/wiki">wiki</a> for more info.</li>
<li>Optional sound effects made by a talented sound designer for maximum hollywood hacking vibe.</li>
</ul>
<h2>Screenshots</h2>
<p><img src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/screenshot_default.png" alt="Default screenshot"></p>
<p><em><a href="https://github.com/dylanaraps/neofetch">neofetch</a> on eDEX-UI 2.2 with the default "tron" theme & QWERTY keyboard</em></p>
<p><img src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/screenshot_blade.png" alt="Blade screenshot"></p>
<p><em>Checking out available themes in <a href="https://github.com/GitSquared/edex-ui/wiki/userData">eDEX's config dir</a> with <a href="https://github.com/ranger/ranger"><code>ranger</code></a> on eDEX-UI 2.2 with the "blade" theme</em></p>
<p><img src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/screenshot_disrupted.png" alt="Disrupted screenshot"></p>
<p><em><a href="https://github.com/abishekvashok/cmatrix">cmatrix</a> on eDEX-UI 2.2 with the experimental "tron-disrupted" theme, and the user-contributed DVORAK keyboard</em></p>
<p><img src="https://raw.githubusercontent.com/GitSquared/edex-ui/master/media/screenshot_horizon.png" alt="Horizon screenshot"></p>
<p><em>Editing eDEX-UI source code with <code>nvim</code> on eDEX-UI 2.2 with the custom <a href="https://github.com/GitSquared/horizon-edex-theme"><code>horizon-full</code></a> theme</em></p>
<h2>Q&A</h2>
<h4>How do I get it?</h4>
<p>Click on the little badges under the eDEX logo at the top of this page, or go to the <a href="https://github.com/GitSquared/edex-ui/releases">Releases</a> tab, or download it through <a href="https://repology.org/project/edex-ui/versions">one of the available repositories</a> (Homebrew, AUR...).</p>
<p>Public release binaries are unsigned (<a href="https://gaby.dev/posts/code-signing">why</a>). On Linux, you will need to <code>chmod +x</code> the AppImage file in order to run it.</p>
<h4>I have a problem!</h4>
<p>Search through the <a href="https://github.com/GitSquared/edex-ui/issues">Issues</a> to see if yours has already been reported. If you're confident it hasn't been reported yet, feel free to open up a new one. If you see your issue and it's been closed, it probably means that the fix for it will ship in the next version, and you'll have to wait a bit.</p>
<h4>Can you disable the keyboard/the filesystem display?</h4>
<p>You can't disable them (yet) but you can hide them. See the <code>tron-notype</code> theme.</p>
<h4>Why is the file browser saying that "Tracking Failed"? (Windows only)</h4>
<p>On Linux and macOS, eDEX tracks where you're going in your terminal tab to display the content of the current folder on-screen. Sadly, this is technically impossible to do on Windows right now, so the file browser reverts back to a "detached" mode. You can still use it to browse files & directories and click on files to input their path in the terminal.</p>
<h4>Can this run on a Raspberry Pi / ARM device?</h4>
<p>We provide prebuilt arm64 builds. For other platforms, see <a href="https://github.com/GitSquared/edex-ui/issues/313#issuecomment-443465345">this issue comment</a>, and the thread on issue <a href="https://github.com/GitSquared/edex-ui/issues/818">#818</a>.</p>
<h4>Is this repo actively maintained?</h4>
<p>No, after a 3 years run, this project has been archived. See the <a href="https://github.com/GitSquared/edex-ui/releases/tag/v2.2.8">announcement</a>.</p>
<h4>How did you make this?</h4>
<p>Glad you're interested! See <a href="https://github.com/GitSquared/edex-ui/issues/272">#272</a>.</p>
<h4>This is so cool.</h4>
<p>Thanks! If you feel like it, you can <a href="https://gaby.dev/twitter">follow me on Twitter</a> to hear about new stuff I'm making.</p>
<img width="220" src="https://78.media.tumblr.com/35d4ef4447e0112f776b629bffd99188/tumblr_mk4gf8zvyC1s567uwo1_500.gif">
<h2>Featured in...</h2>
<ul>
<li><a href="https://www.linuxuprising.com/2018/11/edex-ui-fully-functioning-sci-fi.html">Linux Uprising Blog</a></li>
<li><a href="https://www.reddit.com/r/unixporn/comments/9ysbx7/oc_a_little_project_that_ive_been_working_on/">My post on r/unixporn</a></li>
<li><a href="https://korben.info/une-interface-futuriste-pour-vos-ecrans-tactiles.html">Korben article (in french)</a></li>
<li><a href="https://news.ycombinator.com/item?id=18509828">Hacker News</a></li>
<li><a href="https://twitter.com/mikemaccana/status/1065615451940667396">This tweet that made me smile</a></li>
<li><a href="https://boingboing.net/2018/11/23/simulacrum-sf.html">BoingBoing article</a> - Apparently i'm a "French hacker"</li>
<li><a href="https://www.oreilly.com/ideas/four-short-links-23-november-2018">OReilly 4 short links</a></li>
<li><a href="https://hackaday.com/2018/11/23/look-like-a-movie-hacker/">Hackaday</a></li>
<li><a href="https://www.developpez.com/actu/234808/Une-application-de-bureau-ressemble-a-une-interface-d-ordinateur-de-science-fiction-inspiree-des-effets-du-film-TRON-Legacy/">Developpez.com (another french link)</a></li>
<li><a href="https://blog.github.com/2018-12-21-release-radar-november-2018/">GitHub Blog's Release Radar November 2018</a></li>
<li><a href="https://opensource.com/article/19/1/productivity-tool-edex-ui">opensource.com Productive Tools for 2019</a></li>
<li><a href="https://www.oreilly.com/radar/four-short-links-7-july-2020/">O'Reilly 4 short links (again)</a></li>
<li><a href="https://www.linuxlinks.com/linux-candy-edex-ui-sci-fi-computer-terminal-emulator-system-monitor/">LinuxLinks</a></li>
<li><a href="https://www.youtube.com/watch?v=gbzqCAjm--g">Linux For Everyone (Youtube)</a></li>
<li><a href="https://risingstars.js.org/2020/en#edex-ui">BestOfJS Rising Stars 2020</a></li>
<li><a href="https://youtu.be/TSjMIeLG0Sk">The Geek Freaks (Youtube/German)</a></li>
<li><a href="https://osawards.com/javascript/#nominees">JSNation Open Source Awards 2021</a> (Nominee - Fun Side Project of the Year)</li>
</ul>
<h2>Useful commands for the nerds</h2>
<p><strong>IMPORTANT NOTE:</strong> the following instructions are meant for running eDEX from the latest unoptimized, unreleased, development version. If you'd like to get stable software instead, refer to <a href="https://raw.githubusercontent.com/GitSquared/edex-ui/master/#how-do-i-get-it">these</a> instructions.</p>
<h4>Starting from source:</h4>
<p>on *nix systems (You'll need the Xcode command line tools on macOS):</p>
<ul>
<li>clone the repository</li>
<li><code>npm run install-linux</code></li>
<li><code>npm run start</code></li>
</ul>
<p>on Windows:</p>
<ul>
<li>start cmd or powershell <strong>as administrator</strong></li>
<li>clone the repository</li>
<li><code>npm run install-windows</code></li>
<li><code>npm run start</code></li>
</ul>
<h4>Building</h4>
<p>Note: Due to native modules, you can only build targets for the host OS you are using.</p>
<ul>
<li><code>npm install</code> (NOT <code>install-linux</code> or <code>install-windows</code>)</li>
<li><code>npm run build-linux</code> or <code>build-windows</code> or <code>build-darwin</code></li>
</ul>
<p>The script will minify the source code, recompile native dependencies and create distributable assets in the <code>dist</code> folder.</p>
<h4>Getting the bleeding edge</h4>
<p>If you're interested in running the latest in-development version but don't want to compile source code yourself, you can can get pre-built nightly binaries on <a href="https://github.com/GitSquared/edex-ui/actions">GitHub Actions</a>: click the latest commits, and download the artifacts bundle for your OS.</p>
<h2>Credits</h2>
<p>eDEX-UI's source code was primarily written by me, <a href="https://github.com/GitSquared">Squared</a>. If you want to get in touch with me or find other projects I'm involved in, check out <a href="https://gaby.dev">my website</a>.</p>
<p><a href="https://github.com/PixelyIon">PixelyIon</a> helped me get started with Windows compatibility and offered some precious advice when I started to work on this project seriously.</p>
<p><a href="https://soundcloud.com/iamicewolf">IceWolf</a> composed the sound effects on v2.1.x and above. He makes really cool stuff, check out his music!</p>
<h2>Thanks</h2>
<p>Of course, eDEX would never have existed if I hadn't stumbled upon the amazing work of <a href="https://github.com/seenaburns">Seena</a> on <a href="https://reddit.com/r/unixporn">r/unixporn</a>.</p>
<p>This project uses a bunch of open-source libraries, frameworks and tools, see <a href="https://github.com/GitSquared/edex-ui/network/dependencies">the full dependency graph</a>.</p>
<p>I want to namely thank the developers behind <a href="https://github.com/xtermjs/xterm.js">xterm.js</a>, <a href="https://github.com/sebhildebrandt/systeminformation">systeminformation</a> and <a href="https://github.com/joewalnes/smoothie">SmoothieCharts</a>.</p>
<p>Huge thanks to <a href="https://github.com/arscan">Rob "Arscan" Scanlon</a> for making the fantastic <a href="https://github.com/arscan/encom-globe">ENCOM Globe</a>, also inspired by the TRON: Legacy movie, and distributing it freely. His work really puts the icing on the cake.</p>
<h2>Licensing</h2>
<p>Licensed under the <a href="https://github.com/GitSquared/edex-ui/raw/master/LICENSE">GPLv3.0</a>.</p>
+
+
+ alexlenail/NN-SVG
+ 2024-12-01T01:54:45Z
+ tag:github.com,2024-12-01:/alexlenail/NN-SVG
+
+ <p>Publication-ready NN-architecture schematics.</p><hr><h1><a href="https://alexlenail.me/NN-SVG/">NN-SVG</a></h1>
<p><a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?sanitize=true" alt="License: MIT"></a> <a href="https://joss.theoj.org/papers/52b511ab107595a805107aa4ad70161d"><img src="https://joss.theoj.org/papers/52b511ab107595a805107aa4ad70161d/status.svg?sanitize=true" alt="status"></a> | <a href="https://github.com/zfrenchee/NN-SVG/wiki">Docs</a> | <a href="https://github.com/zfrenchee/NN-SVG/wiki/Contributing">Contributing</a></p>
<p>Illustrations of Neural Network architectures are often time-consuming to produce, and machine learning researchers all too often find themselves constructing these diagrams from scratch by hand.</p>
<p>NN-SVG is a tool for creating Neural Network (NN) architecture drawings parametrically rather than manually. It also provides the ability to export those drawings to Scalable Vector Graphics (SVG) files, suitable for inclusion in academic papers or web pages.</p>
<p>The tool provides the ability to generate figures of three kinds: classic Fully-Connected Neural Network (FCNN) figures, Convolutional Neural Network (CNN) figures of the sort introduced in <a href="http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf">the LeNet paper</a>, and Deep Neural Network figures following the style introduced in <a href="https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf">the AlexNet paper</a>. The former two are accomplished using the <a href="https://d3js.org/">D3 javascript library</a> and the latter with the javascript library <a href="https://threejs.org/">Three.js</a>. NN-SVG provides the ability to style the figure to the user's liking via many size, color, and layout parameters.</p>
<p>I hope this tool will save machine learning researchers time, and I hope this software might also serve as a pedagogical tool in some contexts.</p>
<img src="https://raw.githubusercontent.com/alexlenail/NN-SVG/master/example.svg?sanitize=true">
<h3>Citation</h3>
<blockquote>
<p>LeNail, (2019). NN-SVG: Publication-Ready Neural Network Architecture Schematics. <br> Journal of Open Source Software, 4(33), 747, <a href="https://doi.org/10.21105/joss.00747">https://doi.org/10.21105/joss.00747</a></p>
</blockquote>
<h3>Related</h3>
<ul>
<li><a href="https://github.com/vdumoulin/conv_arithmetic">vdumoulin/conv_arithmetic</a></li>
<li><a href="https://github.com/tensorspace-team/tensorspace">TensorSpace</a></li>
</ul>
+
+
\ No newline at end of file
diff --git a/javascript/weekly/index.xml b/javascript/weekly/index.xml
new file mode 100644
index 00000000000..b5671e60b92
--- /dev/null
+++ b/javascript/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub JavaScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:45Z
+ Weekly Trending of JavaScript in GitHub
+
+
+ XengShi/materialYouNewTab
+ 2024-12-01T01:43:45Z
+ tag:github.com,2024-12-01:/XengShi/materialYouNewTab
+
+ <p>A Simple New Tab ( browsers's home page ) inspired with Google's 'Material You' design</p><hr><h1 align="center"> <p><a href="https://xengshi.github.io/materialYouNewTab/"><img src="https://i.ibb.co/x11pGSs/icon-128.png" width="50"></a> <br> Material You NewTab</p> </h1>
<div align="center">
<p>Material You NewTab is a versatile browser extension that personalizes your New Tab page with customizable themes and a welcoming message, all while integrating seamlessly with your preferred search engine.</p>
</div>
<div align="center">
<p><img src="https://img.shields.io/github/license/XengShi/materialYouNewTab" alt="License"> <img src="https://img.shields.io/github/last-commit/XengShi/materialYouNewTab" alt="Last Commit"> <img src="https://img.shields.io/github/contributors/XengShi/materialYouNewTab" alt="GitHub contributors"> <img src="https://img.shields.io/github/stars/XengShi/materialYouNewTab" alt="GitHub stars"> <img src="https://img.shields.io/github/forks/XengShi/materialYouNewTab" alt="GitHub forks"></p>
</div>
<p align="center"> <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-features">Features</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#%EF%B8%8F-additional-features">Additional Features</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-currently-supported-languages-16">Currently Supported Languages</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-installation-guide">Installation Guide</a> <br> <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#--usage">Usage</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-contributing">Contributing</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-issues-and-support">Issues and Support</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-privacy-policy">Privacy Policy</a> • <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/#-license">License</a> </p>
<img src="https://i.postimg.cc/M6V8cBZc/Screenshot-from-2024-10-10-20-18-36.png" alt="Screenshot 1" width="100%">
<table>
<tbody>
<tr>
<td><img src="https://i.ibb.co/f46wKwW/Material-You-New-Tab-windows-chrome.png" alt="Screenshot 2" width="100%" style="margin-right: 1%;"></td>
<td><img src="https://i.ibb.co/7nV658Q/mtynt-hindi.png" alt="Screenshot 3" width="100%"></td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td><img src="https://i.postimg.cc/PX0JZ829/material-you-newtab.webp" alt="Screenshot 4" width="100%" style="margin-right: 1%;"></td>
<td><img src="https://i.ibb.co/41dyDSM/material-You-New-Tab-settings-preview.png" alt="Screenshot 6" width="100%" style="margin-right: 1%;"></td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td><img src="https://i.ibb.co/M7wtK9g/2024-11-08-10-31-22.png" alt="Screenshot 5" width="100%"></td>
<td><img src="https://i.ibb.co/98wBjLt/material-You-New-Tab-settings-look.png" alt="Screenshot 7" width="100%"></td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<td><img src="https://i.ibb.co/PC5Td8Q/Screenshot-from-2024-11-10-20-45-51.png" alt="Screenshot 5" width="100%"></td>
<td><img src="https://i.ibb.co/Y82qCMB/Screenshot-from-2024-11-10-20-58-20.png" alt="Screenshot 7" width="100%"></td>
</tr>
</tbody>
</table>
<h4>🔴 🟡 🟢 Test live : <a href="https://xengshi.github.io/materialYouNewTab/">https://xengshi.github.io/materialYouNewTab/</a></h4>
<h2>✨ Features</h2>
<ul>
<li><strong>Customizable Themes</strong>: Choose from a selection of themes to match your style.</li>
<li><strong>Personalized Greeting</strong>: Add a custom message or your name, so you're greeted each time you open a new tab.</li>
<li><strong>Integrated Search</strong>: Search directly from the New Tab using your preferred search engine—Google, DuckDuckGo, Bing, or YouTube.</li>
<li><strong>Browser Compatibility</strong>: Supports major browsers like Chrome, Edge, Firefox, Brave, and Safari.</li>
</ul>
<h2>🛠️ Additional Features</h2>
<ul>
<li> <p><strong>Responsive and Modern Design</strong>:</p>
<ul>
<li>The extension is built with a clean, modern interface inspired by Material You, offering a consistent aesthetic that’s pleasing to the eye.</li>
<li>Elements are intuitively placed, ensuring ease of use and accessibility for users of all ages.</li>
</ul> </li>
<li> <p><strong>Seamless Integration with Browsers</strong>:</p>
<ul>
<li>The extension integrates smoothly with all major browsers, including Chrome, Edge, Brave, Firefox, and Safari, providing a cohesive experience across platforms.</li>
</ul> </li>
</ul>
<h2>🌐 Currently Supported Languages (16)</h2>
<table>
<thead>
<tr>
<th>Language</th>
<th align="center">Code</th>
<th>Translator(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://flagcdn.com/us.svg?sanitize=true" width="20"> <strong>English</strong></td>
<td align="center">en</td>
<td><a href="https://github.com/XengShi/">XengShi</a>, <a href="https://github.com/prem-k-r/">Prem</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/bd.svg?sanitize=true" width="20"> <strong>Bangla</strong> - বাংলা</td>
<td align="center">bn</td>
<td><a href="https://github.com/itz-rj-here/">It'z RJ</a>, <a href="https://github.com/prem-k-r/">Prem</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/cn.svg?sanitize=true" width="20"> <strong>Chinese</strong> (Simplified) - 中文</td>
<td align="center">zh-CN</td>
<td><a href="https://github.com/Guy-Berryman">Guy Berryman</a>, <a href="https://github.com/TIANLI0">Tianli</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/cz.svg?sanitize=true" width="20"> <strong>Czech</strong> - Čeština</td>
<td align="center">cz</td>
<td><a href="https://github.com/ceskyDJ/">Michal Šmahel</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/in.svg?sanitize=true" width="20"> <strong>Hindi</strong> - हिंदी</td>
<td align="center">hi</td>
<td><a href="https://github.com/XengShi/">XengShi</a>, <a href="https://github.com/prem-k-r/">Prem</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/id.svg?sanitize=true" width="20"> <strong>Indonesian</strong> - Bahasa Indonesia</td>
<td align="center">idn</td>
<td><a href="https://github.com/Ayyas-RF/">Ayyas-RF</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/it.svg?sanitize=true" width="20"> <strong>Italian</strong> - Italiano</td>
<td align="center">it</td>
<td><a href="https://github.com/ZiClaud/">Claudio Di Maio</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/jp.svg?sanitize=true" width="20"> <strong>Japanese</strong> - 日本語</td>
<td align="center">ja</td>
<td><a href="https://github.com/XengShi/">XengShi</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/kr.svg?sanitize=true" width="20"> <strong>Korean</strong> - 한국어</td>
<td align="center">ko</td>
<td><a href="https://github.com/XengShi/">XengShi</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/in.svg?sanitize=true" width="20"> <strong>Marathi</strong> - मराठी</td>
<td align="center">mr</td>
<td><a href="https://github.com/prem-k-r/">Prem</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/br.svg?sanitize=true" width="20"> <strong>Portuguese</strong> - Português</td>
<td align="center">pt-BR</td>
<td><a href="https://github.com/MestreWalla/">Maycon Vitor Correa</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/ru.svg?sanitize=true" width="20"> <strong>Russian</strong> - Русский</td>
<td align="center">ru</td>
<td><a href="https://github.com/giwih/">giwi</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/es.svg?sanitize=true" width="20"> <strong>Spanish</strong> - Español</td>
<td align="center">es-ES</td>
<td><a href="https://github.com/XengShi/">XengShi</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/tr.svg?sanitize=true" width="20"> <strong>Turkish</strong> - Türkçe</td>
<td align="center">tr</td>
<td><a href="https://github.com/Nobody9512/">Nobody</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/uz.svg?sanitize=true" width="20"> <strong>Uzbek</strong> - O'zbek</td>
<td align="center">uz</td>
<td><a href="https://github.com/Firdavs9512/">Firdavs</a></td>
</tr>
<tr>
<td><img src="https://flagcdn.com/vn.svg?sanitize=true" width="20"> <strong>Vietnamese</strong> - Tiếng Việt</td>
<td align="center">vn</td>
<td><a href="https://github.com/diepdo1810/">Diep</a></td>
</tr>
</tbody>
</table>
<h2>📥 Installation Guide</h2>
<h3>Download</h3>
<ol>
<li> <p><strong>Clone the Repository</strong>:</p> <pre><code class="language-bash">git clone https://github.com/XengShi/materialYouNewTab.git
</code></pre>
<ul>
<li>Alternatively, download the latest version as a ZIP file by clicking the <strong>Download ZIP</strong> button below:</li>
</ul> <p><a href="https://github.com/XengShi/materialYouNewTab/releases"><img src="https://img.shields.io/badge/Download-ZIP-blue.svg?sanitize=true" alt="Download ZIP"></a></p> </li>
<li> <p><strong>Direct Download</strong>:</p>
<ul>
<li>On the repository page, click the <strong>Code</strong> button, then select <strong>Download ZIP</strong> from the dropdown.</li>
</ul> </li>
</ol>
<hr>
<h3>Installation</h3>
<h4><img src="https://img.icons8.com/?size=20&id=104996&format=png&color=000000" alt="Chromium"> Chromium-Based Browsers</h4>
<ol>
<li> <p><strong>Install from Chrome Web Store</strong>:</p>
<ul>
<li><a href="https://chromewebstore.google.com/detail/material-you-newtab/glloabhodjfmeoccmdngmhkpmdlakfbn">Chrome Web Store link</a></li>
</ul> <p><strong>Or</strong> follow the manual steps below:</p> </li>
<li> <p><strong>Manual Installation</strong>:</p>
<ul>
<li> <p><strong>Prepare the Extension Folder</strong>:</p>
<ul>
<li>Ensure you’ve cloned the repository or downloaded the ZIP file and extracted it.</li>
</ul> </li>
<li> <p><strong>Open Extensions Page</strong>: Open your preferred browser and enter the following text in the address bar</p>
<ul>
<li> <p><img src="https://img.icons8.com/color/20/000000/chrome--v1.png" alt="Chrome"> Chrome: <code>chrome://extensions</code></p> </li>
<li> <p><img src="https://img.icons8.com/?size=20&id=dGm9KIZPpukc&format=png&color=000000" alt="Edge"> Edge: <code>edge://extensions</code></p> </li>
<li> <p><img src="https://img.icons8.com/color/20/000000/brave-web-browser.png" alt="Brave"> Brave: <code>brave://extensions</code></p> </li>
<li> <p><img src="https://img.icons8.com/color/20/000000/opera--v1.png" alt="Opera"> Opera: <code>opera://extensions</code></p> </li>
</ul> </li>
<li> <p><strong>Enable Developer Mode</strong>:</p>
<ul>
<li>Turn on <strong>Developer Mode</strong> in the extensions page.</li>
</ul> </li>
<li> <p><strong>Load Unpacked Extension</strong>:</p>
<ul>
<li>Click on <strong>Load unpacked</strong> and select your extracted extension folder.</li>
</ul> </li>
</ul> </li>
</ol>
<p>Below are screenshots of the process to guide you through each step visually.</p>
<img src="https://i.postimg.cc/w6JYypvc/chrome.png" alt="Screenshot 1" width="569">
<img src="https://i.postimg.cc/0ksR7BKg/edge.png" alt="Screenshot 2" width="569">
<img src="https://i.postimg.cc/MqPSg5NR/brave.png" alt="Screenshot 3" width="569">
<hr>
<h4><img src="https://img.icons8.com/color/20/000000/firefox--v1.png" alt="Firefox"> Firefox</h4>
<ol>
<li><strong>Install from Mozilla Extensions Store</strong>:
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/material-you-newtab/">Mozilla Add-ons link</a></li>
</ul> </li>
</ol>
<img src="https://i.postimg.cc/bPW2fHX7/FireFox.png" alt="Screenshot" width="569">
<p><strong>Or</strong> follow the manual steps below:</p>
<ol start="2">
<li><strong>Manual Installation</strong>:
<ul>
<li>Clone the repository or download and extract the ZIP file.</li>
<li><strong>Prepare the Manifest</strong>:
<ul>
<li>Delete the existing <code>manifest.json</code> file.</li>
<li>Rename <code>manifest(firefox).json</code> to <code>manifest.json</code>.</li>
</ul> </li>
<li><strong>Load Temporary Add-on</strong>:
<ul>
<li>Go to <code>about:debugging#/runtime/this-firefox</code>, select <strong>"This Firefox"</strong>, then click <strong>Load Temporary Add-on</strong>.</li>
<li>Browse and select the updated <code>manifest.json</code>.</li>
</ul> </li>
</ul> </li>
</ol>
<hr>
<h4><img src="https://img.icons8.com/color/20/000000/safari--v1.png" alt="Safari"> Safari</h4>
<ol>
<li>Clone the repository or download and extract the ZIP file.</li>
<li><strong>Enable Developer Mode</strong>:
<ul>
<li>Open <strong>Safari</strong>, go to <strong>Preferences > Advanced</strong> and enable <strong>Show Develop menu in the menu bar</strong>.</li>
</ul> </li>
<li><strong>Install Extension</strong>:
<ul>
<li>Go to <strong>Develop > Show Extension Builder</strong>, click the <strong>"+"</strong> button, and select your extension folder.</li>
<li>Click <strong>Install</strong>.</li>
</ul> </li>
</ol>
<hr>
<h3>Installation Video</h3>
<p>For a step-by-step walkthrough, watch this <a href="https://youtu.be/P4ryQPixfw8">installation guide video</a>.</p>
<p><a href="https://youtu.be/P4ryQPixfw8"><img src="https://img.youtube.com/vi/P4ryQPixfw8/0.jpg" alt="Watch the video"></a></p>
<h2>📖 Usage</h2>
<ol>
<li> <p><strong>Welcome Greeting</strong>:</p>
<ul>
<li>The extension greets you with a personalized message, like "Hello! It’z RJ," and displays the current date. This feature can be customized in the settings to show your name or preferred text, making your browsing experience feel more personal.</li>
</ul> </li>
<li> <p><strong>Clock Widget</strong>:</p>
<ul>
<li>A modern, animated clock is displayed prominently on the left side, keeping you aware of the current time without needing to check elsewhere.</li>
</ul> </li>
<li> <p><strong>Weather Information</strong>:</p>
<ul>
<li>Displays real-time weather information for your location, including temperature, weather condition (like "Sunny"), humidity, and "Feels like" temperature.</li>
<li>Users can set their location (like "Dhaka" in the screenshot) to get accurate weather data. A visual icon represents the weather, and temperature is displayed in degrees Celsius.</li>
</ul> </li>
<li> <p><strong>Search Bar</strong>:</p>
<ul>
<li>The search bar allows you to enter queries directly from the new tab page. This makes it quick and easy to start searching without switching to a different page or window.</li>
<li>Below the search bar, there are search engine options that allow you to choose your preferred search engine: Google, DuckDuckGo, Bing, Brave, or YouTube.</li>
</ul> </li>
<li> <p><strong>Quick Access Social Media Icons</strong>:</p>
<ul>
<li>At the bottom, there are quick-access icons for popular platforms, including YouTube, Email, Telegram, WhatsApp, Twitter, and more.</li>
<li>Clicking on any of these icons will redirect you to the respective platform, allowing for easy access to your frequently used services.</li>
</ul> </li>
<li> <p><strong>AI Tools Button</strong>:</p>
<ul>
<li>On the bottom left, an "AI Tools" button is available, which could provide access to AI-powered tools directly from the New Tab page. This feature can be helpful for quick, AI-driven assistance or tasks.</li>
</ul> </li>
</ol>
<h2>🤝 Contributing</h2>
<p>Contributions are welcome! If you’d like to contribute:</p>
<ol>
<li>Fork the repository.</li>
<li>Create a feature branch: <code>git checkout -b feature/YourFeature</code>.</li>
<li>Commit your changes: <code>git commit -m 'Add Your Feature'</code>.</li>
<li>Push to the branch: <code>git push origin feature/YourFeature</code>.</li>
<li>Open a pull request.</li>
</ol>
<h2>❓ Issues and Support</h2>
<p>If you encounter any bugs or issues, please <a href="https://github.com/XengShi/materialYouNewTab/issues">submit an issue</a> on the GitHub repository.</p>
<h2>🔒 Privacy Policy</h2>
<p>For information on how we handle privacy, please read our <a href="https://raw.githubusercontent.com/XengShi/materialYouNewTab/main/PRIVACY_POLICY.md">Privacy Policy</a>.</p>
<h2>📜 License</h2>
<p>Copyright (C) 2023-2024 XengShi</p>
<p>This project is licensed under the GNU General Public License v3.0 (GPL-3.0). See the <a href="https://github.com/XengShi/materialYouNewTab/raw/main/LICENSE">LICENSE</a> file for details.</p>
<blockquote>
<p>GitHub <a href="https://github.com/XengShi">@XengShi</a> · Telegram <a href="https://t.me/xengshi">@xengshi</a> · Email <a href="mailto:xengshi@duck.com">xengshi@duck.com</a></p>
</blockquote>
+
+
+ metowolf/vCards
+ 2024-12-01T01:43:45Z
+ tag:github.com,2024-12-01:/metowolf/vCards
+
+ <p>📡️ vCards 中国黄页 - 优化 iOS/Android 来电、信息界面体验</p><hr><h1>vCards CN</h1>
<p>导入常用联系人头像,优化 iOS 来电、信息界面体验。</p>
<p><img src="https://user-images.githubusercontent.com/2666735/59692672-0b6bdf00-9218-11e9-881e-5856e263f3aa.png" alt="Screenshot"></p>
<h2>使用指南</h2>
<h3>订阅:CardDAV 服务/ 或参考<a href="https://github.com/metowolf/vCards/issues/208">教程自建</a></h3>
<p>采用订阅方式导入,优势是会自动更新,也更方便区分和管理个人通讯录和黄页,不会混合两种列表。</p>
<ul>
<li>服务器:<code>vcards.metowolf.com</code></li>
<li>用户名:<code>cn</code></li>
<li>密码:<code>cn</code> 或任意填写</li>
</ul>
<p>步骤:</p>
<ol>
<li><a href="https://support.apple.com/zh-sg/guide/iphone/ipha0d932e96/ios">iOS</a>:「设置」--「通讯录」--「账户」--「添加账户」-- 「其他」--「添加 CardDAV 账户」</li>
<li><a href="https://support.apple.com/zh-cn/guide/contacts/adrb7e5aaa2a/mac">Mac</a>:「通讯录」--「设置」--「账户」--「其他通讯录账户」</li>
</ol>
<h3>下载导入</h3>
<ol>
<li>到 <a href="https://github.com/metowolf/vCards/releases">https://github.com/metowolf/vCards/releases</a> 下载最新的打包文件 <code>archive.zip</code>;</li>
<li>解压后,根据不同平台的指南导入 <code>vcf</code> 文件至 iCloud 中,推荐单独创建「黄页」分组方便管理和隐藏。</li>
</ol>
<h4>macOS</h4>
<ul>
<li><a href="https://support.apple.com/zh-cn/guide/contacts/adrb3280fe91/12.0/mac/10.14">在 Mac 上的“通讯录”中创建联系人群组</a></li>
<li><a href="https://support.apple.com/zh-cn/guide/contacts/adrbk1457/mac">在 Mac 上的“通讯录”中导入来自其他应用的联系人</a></li>
</ul>
<h4>iOS/web</h4>
<ul>
<li><a href="https://support.apple.com/kb/PH2667?locale=zh_CN">在 iCloud 通讯录中创建群组</a></li>
<li><a href="https://support.apple.com/kb/ph3605?locale=zh_CN">将联系人导入 iCloud 通讯录</a></li>
</ul>
<hr>
<h2>请求收录</h2>
<ol>
<li>打开 <a href="https://github.com/metowolf/vCards/issues/new/choose">https://github.com/metowolf/vCards/issues/new/choose</a> 页面,选择「vCard 新增请求」</li>
<li>完整填写相关信息</li>
<li>提交 <code>issue</code>,等待处理</li>
</ol>
<h2>参与维护</h2>
<ol>
<li>在 <code>/data/类别/</code> 里添加 <code>yaml</code> 与 <code>png</code> 文件</li>
<li>在根目录下执行 <code>yarn test</code> 检查格式规范</li>
<li>提交 <code>pull requests</code>,等待合并</li>
</ol>
<h2>号码收录</h2>
<p>由于不同地区不同运营商的 106 短信推送号段存在差异,项目不作收录,建议将本项目作为一个基础模板,导入联系人后可以按以下方式自行补充其余号码</p>
<p><img src="https://user-images.githubusercontent.com/2666735/59747105-ccd33480-92aa-11e9-90e0-93f295dcb504.png" alt="Screenshot"></p>
<h2>图标设计</h2>
<ul>
<li>采用 <code>PNG</code> 编码</li>
<li>画布大小 <code>width:200px;height:200px</code></li>
<li>logo 居中放置
<ul>
<li>圆形尺寸 140w140h</li>
<li>正矩形尺寸 120w120h</li>
<li>长矩形尺寸 160w80h</li>
<li>无 svg 需要使用 Inkscape 改绘转换</li>
<li>特殊情况特殊处理</li>
</ul> </li>
<li>图像大小压缩在 <code>20 kB</code> 内</li>
</ul>
<p><img src="https://user-images.githubusercontent.com/2666735/60966995-224fae00-a34c-11e9-970c-ea5fa15186c6.png" alt="Design"></p>
<h2>致谢</h2>
<ul>
<li><a href="http://www.114best.com/">114 百事通</a>提供查询接口</li>
<li><a href="https://haoma.baidu.com/yellowPage">百度手机卫士</a>提供查询接口</li>
<li><a href="https://www.kexinhaoma.org/">中国可信号码数据中心</a>提供查询接口</li>
</ul>
+
+
+ denysdovhan/wtfjs
+ 2024-12-01T01:43:45Z
+ tag:github.com,2024-12-01:/denysdovhan/wtfjs
+
+ <p>🤪 A list of funny and tricky JavaScript examples</p><hr><p><a href="https://stand-with-ukraine.pp.ua/"><img src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct-single.svg?sanitize=true" alt="SWUbanner"></a></p>
<h1>What the f*ck JavaScript?</h1>
<p><a href="http://www.wtfpl.net"><img src="https://img.shields.io/badge/License-WTFPL%202.0-lightgrey.svg?style=flat-square" alt="WTFPL 2.0"></a> <a href="https://npmjs.org/package/wtfjs"><img src="https://img.shields.io/npm/v/wtfjs.svg?style=flat-square" alt="NPM version"></a> <a href="https://patreon.com/denysdovhan"><img src="https://img.shields.io/badge/support-patreon-F96854.svg?style=flat-square" alt="Patreon"></a> <a href="https://patreon.com/denysdovhan"><img src="https://img.shields.io/badge/support-buymeacoffee-222222.svg?style=flat-square" alt="Buy Me A Coffee"></a></p>
<blockquote>
<p>A list of funny and tricky JavaScript examples</p>
</blockquote>
<p>JavaScript is a great language. It has a simple syntax, large ecosystem and, what is most important, a great community.</p>
<p>At the same time, we all know that JavaScript is quite a funny language with tricky parts. Some of them can quickly turn our everyday job into hell, and some of them can make us laugh out loud.</p>
<p>The original idea for WTFJS belongs to <a href="https://twitter.com/brianleroux">Brian Leroux</a>. This list is highly inspired by his talk <a href="https://www.youtube.com/watch?v=et8xNAc2ic8"><strong>“WTFJS”</strong> at dotJS 2012</a>:</p>
<p><a href="https://www.youtube.com/watch?v=et8xNAc2ic8"><img src="https://img.youtube.com/vi/et8xNAc2ic8/0.jpg" alt="dotJS 2012 - Brian Leroux - WTFJS"></a></p>
<h1>Node Packaged Manuscript</h1>
<p>You can install this handbook using <code>npm</code>. Just run:</p>
<pre><code>$ npm install -g wtfjs
</code></pre>
<p>You should be able to run <code>wtfjs</code> at the command line now. This will open the manual in your selected <code>$PAGER</code>. Otherwise, you may continue reading on here.</p>
<p>The source is available here: <a href="https://github.com/denysdovhan/wtfjs">https://github.com/denysdovhan/wtfjs</a></p>
<h1>Translations</h1>
<p>Currently, there are these translations of <strong>wtfjs</strong>:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-zh-cn.md">中文</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-hi.md">हिंदी</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-fr-fr.md">Français</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-pt-br.md">Português do Brasil</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-pl-pl.md">Polski</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-it-it.md">Italiano</a></li>
<li><a href="https://habr.com/ru/company/mailru/blog/335292/">Russian</a> (on Habr.com)</li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/README-kr.md">한국어</a></li>
</ul>
<p><a href="https://github.com/denysdovhan/wtfjs/raw/master/CONTRIBUTING.md#translations"><strong>Help translating to your language</strong></a></p>
<p><strong>Note:</strong> Translations are maintained by their translators. They may not contain every example, and existing examples may be outdated.</p>
<!-- prettier-ignore-start -->
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
<h1>Table of Contents</h1>
<ul>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-motivation">💪🏻 Motivation</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-notation">✍🏻 Notation</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-examples">👀 Examples</a>
<ul>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-is-equal-"><code>[]</code> is equal <code>![]</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#true-is-not-equal--but-not-equal--too"><code>true</code> is not equal <code>![]</code>, but not equal <code>[]</code> too</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#true-is-false">true is false</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#banana">baNaNa</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#nan-is-not-a-nan"><code>NaN</code> is not a <code>NaN</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#objectis-and--weird-cases"><code>Object.is()</code> and <code>===</code> weird cases</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#its-a-fail">It's a fail</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-is-truthy-but-not-true"><code>[]</code> is truthy, but not <code>true</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#null-is-falsy-but-not-false"><code>null</code> is falsy, but not <code>false</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#documentall-is-an-object-but-it-is-undefined"><code>document.all</code> is an object, but it is undefined</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#minimal-value-is-greater-than-zero">Minimal value is greater than zero</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#function-is-not-a-function">function is not a function</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#adding-arrays">Adding arrays</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#trailing-commas-in-array">Trailing commas in array</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#array-equality-is-a-monster">Array equality is a monster</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#undefined-and-number"><code>undefined</code> and <code>Number</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#parseint-is-a-bad-guy"><code>parseInt</code> is a bad guy</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#math-with-true-and-false">Math with <code>true</code> and <code>false</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#html-comments-are-valid-in-javascript">HTML comments are valid in JavaScript</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#nan-is-not-a-number"><code>NaN</code> is <del>not</del> a number</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-and-null-are-objects"><code>[]</code> and <code>null</code> are objects</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#magically-increasing-numbers">Magically increasing numbers</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#precision-of-01--02">Precision of <code>0.1 + 0.2</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#patching-numbers">Patching numbers</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#comparison-of-three-numbers">Comparison of three numbers</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#funny-math">Funny math</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#addition-of-regexps">Addition of RegExps</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#strings-arent-instances-of-string">Strings aren't instances of <code>String</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#calling-functions-with-backticks">Calling functions with backticks</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#call-call-call">Call call call</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#a-constructor-property">A <code>constructor</code> property</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#object-as-a-key-of-objects-property">Object as a key of object's property</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#accessing-prototypes-with-__proto__">Accessing prototypes with <code>__proto__</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-object-"><code>`${{Object}}`</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#destructuring-with-default-values">Destructuring with default values</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#dots-and-spreading">Dots and spreading</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#labels">Labels</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#nested-labels">Nested labels</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#insidious-trycatch">Insidious <code>try..catch</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#is-this-multiple-inheritance">Is this multiple inheritance?</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#a-generator-which-yields-itself">A generator which yields itself</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#a-class-of-class">A class of class</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#non-coercible-objects">Non-coercible objects</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#tricky-arrow-functions">Tricky arrow functions</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#arrow-functions-can-not-be-a-constructor">Arrow functions can not be a constructor</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#arguments-and-arrow-functions"><code>arguments</code> and arrow functions</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#tricky-return">Tricky return</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#chaining-assignments-on-object">Chaining assignments on object</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#accessing-object-properties-with-arrays">Accessing object properties with arrays</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#numbertofixed-display-different-numbers"><code>Number.toFixed()</code> display different numbers</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#mathmax-less-than-mathmin"><code>Math.max()</code> less than <code>Math.min()</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#comparing-null-to-0">Comparing <code>null</code> to <code>0</code></a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#same-variable-redeclaration">Same variable redeclaration</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#default-behavior-arrayprototypesort">Default behavior Array.prototype.sort()</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#resolve-wont-return-promise-instance">resolve() won't return Promise instance</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-is-undefined"><code>{}{}</code> is undefined</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#arguments-binding"><code>arguments</code> binding</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#an-alert-from-hell">An <code>alert</code> from hell</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#an-infinite-timeout">An infinite timeout</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#a-settimeout-object">A <code>setTimeout</code> object</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#double-dot">Double dot</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#extra-newness">Extra Newness</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#why-you-should-use-semicolons">Why you should use semicolons</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#split-a-string-by-a-space">Split a string by a space</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#a-stringified-string">A stringified string</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#non-strict-comparison-of-a-number-to-true">Non-strict comparison of a number to <code>true</code></a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-other-resources">📚 Other resources</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-supporting">🤝 Supporting</a></li>
<li><a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-license">🎓 License</a></li>
</ul>
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- prettier-ignore-end -->
<h1>💪🏻 Motivation</h1>
<blockquote>
<p>Just for fun</p>
<p>— <em><a href="https://en.wikipedia.org/wiki/Just_for_Fun"><strong>“Just for Fun: The Story of an Accidental Revolutionary”</strong></a>, Linus Torvalds</em></p>
</blockquote>
<p>The primary goal of this list is to collect some crazy examples and explain how they work, if possible. Just because it's fun to learn something that we didn't know before.</p>
<p>If you are a beginner, you can use these notes to get a deeper dive into JavaScript. I hope these notes will motivate you to spend more time reading the specification.</p>
<p>If you are a professional developer, you can consider these examples as a great reference for all of the quirks and unexpected edges of our beloved JavaScript.</p>
<p>In any case, just read this. You're probably going to find something new.</p>
<blockquote>
<p><strong>⚠️ Note:</strong> If you enjoy reading this document, please, <a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-supporting">consider supporting the author of this collection</a>.</p>
</blockquote>
<h1>✍🏻 Notation</h1>
<p><strong><code>// -></code></strong> is used to show the result of an expression. For example:</p>
<pre><code class="language-js">1 + 1; // -> 2
</code></pre>
<p><strong><code>// ></code></strong> means the result of <code>console.log</code> or another output. For example:</p>
<pre><code class="language-js">console.log("hello, world!"); // > hello, world!
</code></pre>
<p><strong><code>//</code></strong> is just a comment used for explanations. Example:</p>
<pre><code class="language-js">// Assigning a function to foo constant
const foo = function() {};
</code></pre>
<h1>👀 Examples</h1>
<h2><code>[]</code> is equal <code>![]</code></h2>
<p>Array is equal not array:</p>
<pre><code class="language-js">[] == ![]; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<p>The abstract equality operator converts both sides to numbers to compare them, and both sides become the number <code>0</code> for different reasons. Arrays are truthy, so on the right, the opposite of a truthy value is <code>false</code>, which is then coerced to <code>0</code>. On the left, however, an empty array is coerced to a number without becoming a boolean first, and empty arrays are coerced to <code>0</code>, despite being truthy.</p>
<p>Here is how this expression simplifies:</p>
<pre><code class="language-js">+[] == +![];
0 == +false;
0 == 0;
true;
</code></pre>
<p>See also <a href="https://raw.githubusercontent.com/denysdovhan/wtfjs/master/#-is-truthy-but-not-true"><code>[]</code> is truthy, but not <code>true</code></a>.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-logical-not-operator"><strong>12.5.9</strong> Logical NOT Operator (<code>!</code>)</a></li>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h2><code>true</code> is not equal <code>![]</code>, but not equal <code>[]</code> too</h2>
<p>Array is not equal <code>true</code>, but not Array is not equal <code>true</code> too; Array is equal <code>false</code>, not Array is equal <code>false</code> too:</p>
<pre><code class="language-js">true == []; // -> false
true == ![]; // -> false
false == []; // -> true
false == ![]; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<pre><code class="language-js">true == []; // -> false
true == ![]; // -> false
// According to the specification
true == []; // -> false
toNumber(true); // -> 1
toNumber([]); // -> 0
1 == 0; // -> false
true == ![]; // -> false
![]; // -> false
true == false; // -> false
</code></pre>
<pre><code class="language-js">false == []; // -> true
false == ![]; // -> true
// According to the specification
false == []; // -> true
toNumber(false); // -> 0
toNumber([]); // -> 0
0 == 0; // -> true
false == ![]; // -> true
![]; // -> false
false == false; // -> true
</code></pre>
<ul>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h2>true is false</h2>
<pre><code class="language-js">!!"false" == !!"true"; // -> true
!!"false" === !!"true"; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<p>Consider this step-by-step:</p>
<pre><code class="language-js">// true is 'truthy' and represented by value 1 (number), 'true' in string form is NaN.
true == "true"; // -> false
false == "false"; // -> false
// 'false' is not the empty string, so it's a truthy value
!!"false"; // -> true
!!"true"; // -> true
</code></pre>
<ul>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h2>baNaNa</h2>
<pre><code class="language-js">"b" + "a" + +"a" + "a"; // -> 'baNaNa'
</code></pre>
<p>This is an old-school joke in JavaScript, but remastered. Here's the original one:</p>
<pre><code class="language-js">"foo" + +"bar"; // -> 'fooNaN'
</code></pre>
<h3>💡 Explanation:</h3>
<p>The expression is evaluated as <code>'foo' + (+'bar')</code>, which converts <code>'bar'</code> to not a number.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-addition-operator-plus"><strong>12.8.3</strong> The Addition Operator (<code>+</code>)</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-unary-plus-operator">12.5.6 Unary + Operator</a></li>
</ul>
<h2><code>NaN</code> is not a <code>NaN</code></h2>
<pre><code class="language-js">NaN === NaN; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>The specification strictly defines the logic behind this behavior:</p>
<blockquote>
<ol>
<li>If <code>Type(x)</code> is different from <code>Type(y)</code>, return <strong>false</strong>.</li>
<li>If <code>Type(x)</code> is Number, then
<ol>
<li>If <code>x</code> is <strong>NaN</strong>, return <strong>false</strong>.</li>
<li>If <code>y</code> is <strong>NaN</strong>, return <strong>false</strong>.</li>
<li>… … …</li>
</ol> </li>
</ol>
<p>— <a href="https://www.ecma-international.org/ecma-262/#sec-strict-equality-comparison"><strong>7.2.14</strong> Strict Equality Comparison</a></p>
</blockquote>
<p>Following the definition of <code>NaN</code> from the IEEE:</p>
<blockquote>
<p>Four mutually exclusive relations are possible: less than, equal, greater than, and unordered. The last case arises when at least one operand is NaN. Every NaN shall compare unordered with everything, including itself.</p>
<p>— <a href="https://stackoverflow.com/questions/1565164/1573715#1573715">“What is the rationale for all comparisons returning false for IEEE754 NaN values?”</a> at StackOverflow</p>
</blockquote>
<h2><code>Object.is()</code> and <code>===</code> weird cases</h2>
<p><code>Object.is()</code> determines if two values have the same value or not. It works similar to the <code>===</code> operator but there are a few weird cases:</p>
<pre><code class="language-javascript">Object.is(NaN, NaN); // -> true
NaN === NaN; // -> false
Object.is(-0, 0); // -> false
-0 === 0; // -> true
Object.is(NaN, 0 / 0); // -> true
NaN === 0 / 0; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>In JavaScript lingo, <code>NaN</code> and <code>NaN</code> are the same value but they're not strictly equal. <code>NaN === NaN</code> being false is apparently due to historical reasons so it would probably be better to accept it as it is.</p>
<p>Similarly, <code>-0</code> and <code>0</code> are strictly equal, but they're not the same value.</p>
<p>For more details about <code>NaN === NaN</code>, see the above case.</p>
<ul>
<li><a href="https://tc39.es/ecma262/#sec-object.is">Here are the TC39 specs about Object.is</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness">Equality comparisons and sameness</a> on MDN</li>
</ul>
<h2>It's a fail</h2>
<p>You would not believe, but …</p>
<pre><code class="language-js">(![] + [])[+[]] +
(![] + [])[+!+[]] +
([![]] + [][[]])[+!+[] + [+[]]] +
(![] + [])[!+[] + !+[]];
// -> 'fail'
</code></pre>
<h3>💡 Explanation:</h3>
<p>By breaking that mass of symbols into pieces, we notice that the following pattern occurs often:</p>
<pre><code class="language-js">![] + []; // -> 'false'
![]; // -> false
</code></pre>
<p>So we try adding <code>[]</code> to <code>false</code>. But due to a number of internal function calls (<code>binary + Operator</code> -> <code>ToPrimitive</code> -> <code>[[DefaultValue]]</code>) we end up converting the right operand to a string:</p>
<pre><code class="language-js">![] + [].toString(); // 'false'
</code></pre>
<p>Thinking of a string as an array we can access its first character via <code>[0]</code>:</p>
<pre><code class="language-js">"false"[0]; // -> 'f'
</code></pre>
<p>The rest is obvious, but the <code>i</code> is tricky. The <code>i</code> in <code>fail</code> is grabbed by generating the string <code>'falseundefined'</code> and grabbing the element on index <code>['10']</code>.</p>
<p>More examples:</p>
<pre><code class="language-js">+![] // -> 0
+!![] // -> 1
!![] // -> true
![] // -> false
[][[]] // -> undefined
+!![] / +![] // -> Infinity
[] + {} // -> "[object Object]"
+{} // -> NaN
</code></pre>
<ul>
<li><a href="http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html">Brainfuck beware: JavaScript is after you!</a></li>
<li><a href="https://bluewings.github.io/en/writing-a-sentence-without-using-the-alphabet/#weird-javascript-generator">Writing a sentence without using the Alphabet</a> — generate any phrase using JavaScript</li>
</ul>
<h2><code>[]</code> is truthy, but not <code>true</code></h2>
<p>An array is a truthy value, however, it's not equal to <code>true</code>.</p>
<pre><code class="language-js">!![] // -> true
[] == true // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>Here are links to the corresponding sections in the ECMA-262 specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-logical-not-operator"><strong>12.5.9</strong> Logical NOT Operator (<code>!</code>)</a></li>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h2><code>null</code> is falsy, but not <code>false</code></h2>
<p>Despite the fact that <code>null</code> is a falsy value, it's not equal to <code>false</code>.</p>
<pre><code class="language-js">!!null; // -> false
null == false; // -> false
</code></pre>
<p>At the same time, other falsy values, like <code>0</code> or <code>''</code> are equal to <code>false</code>.</p>
<pre><code class="language-js">0 == false; // -> true
"" == false; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<p>The explanation is the same as for previous example. Here's the corresponding link:</p>
<ul>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h2><code>document.all</code> is an object, but it is undefined</h2>
<blockquote>
<p>⚠️ This is part of the Browser API and won't work in a Node.js environment ⚠️</p>
</blockquote>
<p>Despite the fact that <code>document.all</code> is an array-like object and it gives access to the DOM nodes in the page, it responds to the <code>typeof</code> function as <code>undefined</code>.</p>
<pre><code class="language-js">document.all instanceof Object; // -> true
typeof document.all; // -> 'undefined'
</code></pre>
<p>At the same time, <code>document.all</code> is not equal to <code>undefined</code>.</p>
<pre><code class="language-js">document.all === undefined; // -> false
document.all === null; // -> false
</code></pre>
<p>But at the same time:</p>
<pre><code class="language-js">document.all == null; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<blockquote>
<p><code>document.all</code> used to be a way to access DOM elements, in particular with old versions of IE. While it has never been a standard it was broadly used in the old age JS code. When the standard progressed with new APIs (such as <code>document.getElementById</code>) this API call became obsolete and the standard committee had to decide what to do with it. Because of its broad use they decided to keep the API but introduce a willful violation of the JavaScript specification. The reason why it responds to <code>false</code> when using the <a href="https://www.ecma-international.org/ecma-262/#sec-strict-equality-comparison">Strict Equality Comparison</a> with <code>undefined</code> while <code>true</code> when using the <a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison">Abstract Equality Comparison</a> is due to the willful violation of the specification that explicitly allows that.</p>
<p>— <a href="https://html.spec.whatwg.org/multipage/obsolete.html#dom-document-all">“Obsolete features - document.all”</a> at WhatWG - HTML spec — <a href="https://github.com/getify/You-Dont-Know-JS/raw/0d79079b61dad953bbfde817a5893a49f7e889fb/types%20%26%20grammar/ch4.md#falsy-objects">“Chapter 4 - ToBoolean - Falsy values”</a> at YDKJS - Types & Grammar</p>
</blockquote>
<h2>Minimal value is greater than zero</h2>
<p><code>Number.MIN_VALUE</code> is the smallest number, which is greater than zero:</p>
<pre><code class="language-js">Number.MIN_VALUE > 0; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<blockquote>
<p><code>Number.MIN_VALUE</code> is <code>5e-324</code>, i.e. the smallest positive number that can be represented within float precision, i.e. that's as close as you can get to zero. It defines the best resolution that floats can give you.</p>
<p>Now the overall smallest value is <code>Number.NEGATIVE_INFINITY</code> although it's not really numeric in a strict sense.</p>
<p>— <a href="https://stackoverflow.com/questions/26614728/why-is-0-less-than-number-min-value-in-javascript">“Why is <code>0</code> less than <code>Number.MIN_VALUE</code> in JavaScript?”</a> at StackOverflow</p>
</blockquote>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-number.min_value"><strong>20.1.2.9</strong> Number.MIN_VALUE</a></li>
</ul>
<h2>function is not a function</h2>
<blockquote>
<p>⚠️ A bug present in V8 v5.5 or lower (Node.js <=7) ⚠️</p>
</blockquote>
<p>All of you know about the annoying <em>undefined is not a function</em>, but what about this?</p>
<pre><code class="language-js">// Declare a class which extends null
class Foo extends null {}
// -> [Function: Foo]
new Foo() instanceof null;
// > TypeError: function is not a function
// > at … … …
</code></pre>
<h3>💡 Explanation:</h3>
<p>This is not a part of the specification. It's just a bug that has now been fixed, so there shouldn't be a problem with it in the future.</p>
<h3>Super constructor null of Foo is not a constructor</h3>
<p>It's continuation of story with previous bug in modern environment (tested with Chrome 71 and Node.js v11.8.0).</p>
<pre><code class="language-js">class Foo extends null {}
new Foo() instanceof null;
// > TypeError: Super constructor null of Foo is not a constructor
</code></pre>
<h3>💡 Explanation:</h3>
<p>This is not a bug because:</p>
<pre><code class="language-js">Object.getPrototypeOf(Foo.prototype); // -> null
</code></pre>
<p>If the class has no constructor the call from prototype chain. But in the parent has no constructor. Just in case, I’ll clarify that <code>null</code> is an object:</p>
<pre><code class="language-js">typeof null === "object";
</code></pre>
<p>Therefore, you can inherit from it (although in the world of the OOP for such terms would have beaten me). So you can't call the null constructor. If you change this code:</p>
<pre><code class="language-js">class Foo extends null {
constructor() {
console.log("something");
}
}
</code></pre>
<p>You see the error:</p>
<pre><code>ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
</code></pre>
<p>And if you add <code>super</code>:</p>
<pre><code class="language-js">class Foo extends null {
constructor() {
console.log(111);
super();
}
}
</code></pre>
<p>JS throws an error:</p>
<pre><code>TypeError: Super constructor null of Foo is not a constructor
</code></pre>
<ul>
<li><a href="https://github.com/denysdovhan/wtfjs/pull/102#discussion_r259143582">An explanation of this issue</a> by <a href="https://github.com/geekjob">@geekjob</a></li>
</ul>
<h2>Adding arrays</h2>
<p>What if you try to add two arrays?</p>
<pre><code class="language-js">[1, 2, 3] + [4, 5, 6]; // -> '1,2,34,5,6'
</code></pre>
<h3>💡 Explanation:</h3>
<p>The concatenation happens. Step-by-step, it looks like this:</p>
<pre><code class="language-js">[1, 2, 3] +
[4, 5, 6][
// call toString()
(1, 2, 3)
].toString() +
[4, 5, 6].toString();
// concatenation
"1,2,3" + "4,5,6";
// ->
("1,2,34,5,6");
</code></pre>
<h2>Trailing commas in array</h2>
<p>You've created an array with 4 empty elements. Despite all, you'll get an array with three elements, because of trailing commas:</p>
<pre><code class="language-js">let a = [, , ,];
a.length; // -> 3
a.toString(); // -> ',,'
</code></pre>
<h3>💡 Explanation:</h3>
<blockquote>
<p><strong>Trailing commas</strong> (sometimes called "final commas") can be useful when adding new elements, parameters, or properties to JavaScript code. If you want to add a new property, you can simply add a new line without modifying the previously last line if that line already uses a trailing comma. This makes version-control diffs cleaner and editing code might be less troublesome.</p>
<p>— <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas">Trailing commas</a> at MDN</p>
</blockquote>
<h2>Array equality is a monster</h2>
<p>Array equality is a monster in JS, as you can see below:</p>
<pre><code class="language-js">[] == '' // -> true
[] == 0 // -> true
[''] == '' // -> true
[0] == 0 // -> true
[0] == '' // -> false
[''] == 0 // -> true
[null] == '' // true
[null] == 0 // true
[undefined] == '' // true
[undefined] == 0 // true
[[]] == 0 // true
[[]] == '' // true
[[[[[[]]]]]] == '' // true
[[[[[[]]]]]] == 0 // true
[[[[[[ null ]]]]]] == 0 // true
[[[[[[ null ]]]]]] == '' // true
[[[[[[ undefined ]]]]]] == 0 // true
[[[[[[ undefined ]]]]]] == '' // true
</code></pre>
<h3>💡 Explanation:</h3>
<p>You should watch very carefully for the above examples! The behaviour is described in section <a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a> of the specification.</p>
<h2><code>undefined</code> and <code>Number</code></h2>
<p>If we don't pass any arguments into the <code>Number</code> constructor, we'll get <code>0</code>. The value <code>undefined</code> is assigned to formal arguments when there are no actual arguments, so you might expect that <code>Number</code> without arguments takes <code>undefined</code> as a value of its parameter. However, when we pass <code>undefined</code>, we will get <code>NaN</code>.</p>
<pre><code class="language-js">Number(); // -> 0
Number(undefined); // -> NaN
</code></pre>
<h3>💡 Explanation:</h3>
<p>According to the specification:</p>
<ol>
<li>If no arguments were passed to this function's invocation, let <code>n</code> be <code>+0</code>.</li>
<li>Else, let <code>n</code> be ? <code>ToNumber(value)</code>.</li>
<li>In case of <code>undefined</code>, <code>ToNumber(undefined)</code> should return <code>NaN</code>.</li>
</ol>
<p>Here's the corresponding section:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-number-constructor"><strong>20.1.1</strong> The Number Constructor</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-tonumber"><strong>7.1.3</strong> ToNumber(<code>argument</code>)</a></li>
</ul>
<h2><code>parseInt</code> is a bad guy</h2>
<p><code>parseInt</code> is famous by its quirks:</p>
<pre><code class="language-js">parseInt("f*ck"); // -> NaN
parseInt("f*ck", 16); // -> 15
</code></pre>
<p><strong>💡 Explanation:</strong> This happens because <code>parseInt</code> will continue parsing character-by-character until it hits a character it doesn't know. The <code>f</code> in <code>'f*ck'</code> is the hexadecimal digit <code>15</code>.</p>
<p>Parsing <code>Infinity</code> to integer is something…</p>
<pre><code class="language-js">//
parseInt("Infinity", 10); // -> NaN
// ...
parseInt("Infinity", 18); // -> NaN...
parseInt("Infinity", 19); // -> 18
// ...
parseInt("Infinity", 23); // -> 18...
parseInt("Infinity", 24); // -> 151176378
// ...
parseInt("Infinity", 29); // -> 385849803
parseInt("Infinity", 30); // -> 13693557269
// ...
parseInt("Infinity", 34); // -> 28872273981
parseInt("Infinity", 35); // -> 1201203301724
parseInt("Infinity", 36); // -> 1461559270678...
parseInt("Infinity", 37); // -> NaN
</code></pre>
<p>Be careful with parsing <code>null</code> too:</p>
<pre><code class="language-js">parseInt(null, 24); // -> 23
</code></pre>
<p><strong>💡 Explanation:</strong></p>
<blockquote>
<p>It's converting <code>null</code> to the string <code>"null"</code> and trying to convert it. For radixes 0 through 23, there are no numerals it can convert, so it returns NaN. At 24, <code>"n"</code>, the 14th letter, is added to the numeral system. At 31, <code>"u"</code>, the 21st letter, is added and the entire string can be decoded. At 37 on there is no longer any valid numeral set that can be generated and <code>NaN</code> is returned.</p>
<p>— <a href="https://stackoverflow.com/questions/6459758/parseintnull-24-23-wait-what">“parseInt(null, 24) === 23… wait, what?”</a> at StackOverflow</p>
</blockquote>
<p>Don't forget about octals:</p>
<pre><code class="language-js">parseInt("06"); // 6
parseInt("08"); // 8 if support ECMAScript 5
parseInt("08"); // 0 if not support ECMAScript 5
</code></pre>
<p><strong>💡 Explanation:</strong> If the input string begins with "0", radix is eight (octal) or 10 (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 specifies that 10 (decimal) is used, but not all browsers support this yet. For this reason always specify a radix when using <code>parseInt</code>.</p>
<p><code>parseInt</code> always convert input to string:</p>
<pre><code class="language-js">parseInt({ toString: () => 2, valueOf: () => 1 }); // -> 2
Number({ toString: () => 2, valueOf: () => 1 }); // -> 1
</code></pre>
<p>Be careful while parsing floating point values</p>
<pre><code class="language-js">parseInt(0.000001); // -> 0
parseInt(0.0000001); // -> 1
parseInt(1 / 1999999); // -> 5
</code></pre>
<p><strong>💡 Explanation:</strong> <code>ParseInt</code> takes a string argument and returns an integer of the specified radix. <code>ParseInt</code> also strips anything after and including the first non-digit in the string parameter. <code>0.000001</code> is converted to a string <code>"0.000001"</code> and the <code>parseInt</code> returns <code>0</code>. When <code>0.0000001</code> is converted to a string it is treated as <code>"1e-7"</code> and hence <code>parseInt</code> returns <code>1</code>. <code>1/1999999</code> is interpreted as <code>5.00000250000125e-7</code> and <code>parseInt</code> returns <code>5</code>.</p>
<h2>Math with <code>true</code> and <code>false</code></h2>
<p>Let's do some math:</p>
<pre><code class="language-js">true + true; // -> 2
(true + true) * (true + true) - true; // -> 3
</code></pre>
<p>Hmmm… 🤔</p>
<h3>💡 Explanation:</h3>
<p>We can coerce values to numbers with the <code>Number</code> constructor. It's quite obvious that <code>true</code> will be coerced to <code>1</code>:</p>
<pre><code class="language-js">Number(true); // -> 1
</code></pre>
<p>The unary plus operator attempts to convert its value into a number. It can convert string representations of integers and floats, as well as the non-string values <code>true</code>, <code>false</code>, and <code>null</code>. If it cannot parse a particular value, it will evaluate to <code>NaN</code>. That means we can coerce <code>true</code> to <code>1</code> easier:</p>
<pre><code class="language-js">+true; // -> 1
</code></pre>
<p>When you're performing addition or multiplication, the <code>ToNumber</code> method is invoked. According to the specification, this method returns:</p>
<blockquote>
<p>If <code>argument</code> is <strong>true</strong>, return <strong>1</strong>. If <code>argument</code> is <strong>false</strong>, return <strong>+0</strong>.</p>
</blockquote>
<p>That's why we can add boolean values as regular numbers and get correct results.</p>
<p>Corresponding sections:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-unary-plus-operator"><strong>12.5.6</strong> Unary <code>+</code> Operator</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-addition-operator-plus"><strong>12.8.3</strong> The Addition Operator (<code>+</code>)</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-tonumber"><strong>7.1.3</strong> ToNumber(<code>argument</code>)</a></li>
</ul>
<h2>HTML comments are valid in JavaScript</h2>
<p>You will be impressed, but <code><!--</code> (which is known as HTML comment) is a valid comment in JavaScript.</p>
<pre><code class="language-js">// valid comment
<!-- valid comment too
</code></pre>
<h3>💡 Explanation:</h3>
<p>Impressed? HTML-like comments were intended to allow browsers that didn't understand the <code><script></code> tag to degrade gracefully. These browsers, e.g. Netscape 1.x are no longer popular. So there is really no point in putting HTML comments in your script tags anymore.</p>
<p>Since Node.js is based on the V8 engine, HTML-like comments are supported by the Node.js runtime too. Moreover, they're a part of the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-html-like-comments"><strong>B.1.3</strong> HTML-like Comments</a></li>
</ul>
<h2><code>NaN</code> is <del>not</del> a number</h2>
<p>Type of <code>NaN</code> is a <code>'number'</code>:</p>
<pre><code class="language-js">typeof NaN; // -> 'number'
</code></pre>
<h3>💡 Explanation:</h3>
<p>Explanations of how <code>typeof</code> and <code>instanceof</code> operators work:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-typeof-operator"><strong>12.5.5</strong> The <code>typeof</code> Operator</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-instanceofoperator"><strong>12.10.4</strong> Runtime Semantics: InstanceofOperator(<code>O</code>,<code>C</code>)</a></li>
</ul>
<h2><code>[]</code> and <code>null</code> are objects</h2>
<pre><code class="language-js">typeof []; // -> 'object'
typeof null; // -> 'object'
// however
null instanceof Object; // false
</code></pre>
<h3>💡 Explanation:</h3>
<p>The behavior of <code>typeof</code> operator is defined in this section of the specification:</p>
<ul>
<li><a href="https://262.ecma-international.org/12.0/#sec-typeof-operator"><strong>13.5.3</strong> The <code>typeof</code> Operator</a></li>
</ul>
<p>According to the specification, the <code>typeof</code> operator returns a string according to <a href="https://262.ecma-international.org/12.0/#table-typeof-operator-results">Table 37: <code>typeof</code> Operator Results</a>. For <code>null</code>, ordinary, standard exotic and non-standard exotic objects, which do not implement <code>[[Call]]</code>, it returns the string <code>"object"</code>.</p>
<p>However, you can check the type of an object by using the <code>toString</code> method.</p>
<pre><code class="language-js">Object.prototype.toString.call([]);
// -> '[object Array]'
Object.prototype.toString.call(new Date());
// -> '[object Date]'
Object.prototype.toString.call(null);
// -> '[object Null]'
</code></pre>
<h2>Magically increasing numbers</h2>
<pre><code class="language-js">999999999999999; // -> 999999999999999
9999999999999999; // -> 10000000000000000
10000000000000000; // -> 10000000000000000
10000000000000000 + 1; // -> 10000000000000000
10000000000000000 + 1.1; // -> 10000000000000002
</code></pre>
<h3>💡 Explanation:</h3>
<p>This is caused by IEEE 754-2008 standard for Binary Floating-Point Arithmetic. At this scale, it rounds to the nearest even number. Read more:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-ecmascript-language-types-number-type"><strong>6.1.6</strong> The Number Type</a></li>
<li><a href="https://en.wikipedia.org/wiki/IEEE_754">IEEE 754</a> on Wikipedia</li>
</ul>
<h2>Precision of <code>0.1 + 0.2</code></h2>
<p>A well-known joke. An addition of <code>0.1</code> and <code>0.2</code> is deadly precise:</p>
<pre><code class="language-js">0.1 + 0.2; // -> 0.30000000000000004
0.1 + 0.2 === 0.3; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>The answer for the <a href="https://stackoverflow.com/questions/588004/is-floating-point-math-broken">”Is floating point math broken?”</a> question on StackOverflow:</p>
<blockquote>
<p>The constants <code>0.2</code> and <code>0.3</code> in your program will also be approximations to their true values. It happens that the closest <code>double</code> to <code>0.2</code> is larger than the rational number <code>0.2</code> but that the closest <code>double</code> to <code>0.3</code> is smaller than the rational number <code>0.3</code>. The sum of <code>0.1</code> and <code>0.2</code> winds up being larger than the rational number <code>0.3</code> and hence disagreeing with the constant in your code.</p>
</blockquote>
<p>This problem is so known that there is even a website called <a href="http://0.30000000000000004.com/">0.30000000000000004.com</a>. It occurs in every language that uses floating-point math, not just JavaScript.</p>
<h2>Patching numbers</h2>
<p>You can add your own methods to wrapper objects like <code>Number</code> or <code>String</code>.</p>
<pre><code class="language-js">Number.prototype.isOne = function() {
return Number(this) === 1;
};
(1.0).isOne(); // -> true
(1).isOne(); // -> true
(2.0).isOne(); // -> false
(7).isOne(); // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>Obviously, you can extend the <code>Number</code> object like any other object in JavaScript. However, it's not recommended if the behavior of the defined method is not a part of the specification. Here is the list of <code>Number</code>'s properties:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-number-objects"><strong>20.1</strong> Number Objects</a></li>
</ul>
<h2>Comparison of three numbers</h2>
<pre><code class="language-js">1 < 2 < 3; // -> true
3 > 2 > 1; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>Why does this work that way? Well, the problem is in the first part of an expression. Here's how it works:</p>
<pre><code class="language-js">1 < 2 < 3; // 1 < 2 -> true
true < 3; // true -> 1
1 < 3; // -> true
3 > 2 > 1; // 3 > 2 -> true
true > 1; // true -> 1
1 > 1; // -> false
</code></pre>
<p>We can fix this with <em>Greater than or equal operator (<code>>=</code>)</em>:</p>
<pre><code class="language-js">3 > 2 >= 1; // true
</code></pre>
<p>Read more about Relational operators in the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-relational-operators"><strong>12.10</strong> Relational Operators</a></li>
</ul>
<h2>Funny math</h2>
<p>Often the results of arithmetic operations in JavaScript might be quite unexpected. Consider these examples:</p>
<pre><code class="language-js"> 3 - 1 // -> 2
3 + 1 // -> 4
'3' - 1 // -> 2
'3' + 1 // -> '31'
'' + '' // -> ''
[] + [] // -> ''
{} + [] // -> 0
[] + {} // -> '[object Object]'
{} + {} // -> '[object Object][object Object]'
'222' - -'111' // -> 333
[4] * [4] // -> 16
[] * [] // -> 0
[4, 4] * [4, 4] // NaN
</code></pre>
<h3>💡 Explanation:</h3>
<p>What's happening in the first four examples? Here's a small table to understand addition in JavaScript:</p>
<pre><code>Number + Number -> addition
Boolean + Number -> addition
Boolean + Boolean -> addition
Number + String -> concatenation
String + Boolean -> concatenation
String + String -> concatenation
</code></pre>
<p>What about other examples? A <code>ToPrimitive</code> and <code>ToString</code> methods are being implicitly called for <code>[]</code> and <code>{}</code> before addition. Read more about evaluation process in the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-addition-operator-plus"><strong>12.8.3</strong> The Addition Operator (<code>+</code>)</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-toprimitive"><strong>7.1.1</strong> ToPrimitive(<code>input</code> [,<code>PreferredType</code>])</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-tostring"><strong>7.1.12</strong> ToString(<code>argument</code>)</a></li>
</ul>
<p>Notably, <code>{} + []</code> here is the exception. The reason why it differs from <code>[] + {}</code> is that, without parenthesis, it is interpreted as a code block and then a unary +, converting <code>[]</code> into a number. It sees the following:</p>
<pre><code class="language-js">{
// a code block here
}
+[]; // -> 0
</code></pre>
<p>To get the same output as <code>[] + {}</code> we can wrap it in parenthesis.</p>
<pre><code class="language-js">({} + []); // -> [object Object]
</code></pre>
<h2>Addition of RegExps</h2>
<p>Did you know you can add numbers like this?</p>
<pre><code class="language-js">// Patch a toString method
RegExp.prototype.toString =
function() {
return this.source;
} /
7 /
-/5/; // -> 2
</code></pre>
<h3>💡 Explanation:</h3>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-get-regexp.prototype.source"><strong>21.2.5.10</strong> get RegExp.prototype.source</a></li>
</ul>
<h2>Strings aren't instances of <code>String</code></h2>
<pre><code class="language-js">"str"; // -> 'str'
typeof "str"; // -> 'string'
"str" instanceof String; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>The <code>String</code> constructor returns a string:</p>
<pre><code class="language-js">typeof String("str"); // -> 'string'
String("str"); // -> 'str'
String("str") == "str"; // -> true
</code></pre>
<p>Let's try with a <code>new</code>:</p>
<pre><code class="language-js">new String("str") == "str"; // -> true
typeof new String("str"); // -> 'object'
</code></pre>
<p>Object? What's that?</p>
<pre><code class="language-js">new String("str"); // -> [String: 'str']
</code></pre>
<p>More information about the String constructor in the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-string-constructor"><strong>21.1.1</strong> The String Constructor</a></li>
</ul>
<h2>Calling functions with backticks</h2>
<p>Let's declare a function which logs all params into the console:</p>
<pre><code class="language-js">function f(...args) {
return args;
}
</code></pre>
<p>No doubt, you know you can call this function like this:</p>
<pre><code class="language-js">f(1, 2, 3); // -> [ 1, 2, 3 ]
</code></pre>
<p>But did you know you can call any function with backticks?</p>
<pre><code class="language-js">f`true is ${true}, false is ${false}, array is ${[1, 2, 3]}`;
// -> [ [ 'true is ', ', false is ', ', array is ', '' ],
// -> true,
// -> false,
// -> [ 1, 2, 3 ] ]
</code></pre>
<h3>💡 Explanation:</h3>
<p>Well, this is not magic at all if you're familiar with <em>Tagged template literals</em>. In the example above, <code>f</code> function is a tag for template literal. Tags before template literal allow you to parse template literals with a function. The first argument of a tag function contains an array of string values. The remaining arguments are related to the expressions. Example:</p>
<pre><code class="language-js">function template(strings, ...keys) {
// do something with strings and keys…
}
</code></pre>
<p>This is the <a href="http://mxstbr.blog/2016/11/styled-components-magic-explained/">magic behind</a> famous library called <a href="https://www.styled-components.com/">💅 styled-components</a>, which is popular in the React community.</p>
<p>Link to the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-tagged-templates"><strong>12.3.7</strong> Tagged Templates</a></li>
</ul>
<h2>Call call call</h2>
<blockquote>
<p>Found by <a href="http://twitter.com/cramforce">@cramforce</a></p>
</blockquote>
<pre><code class="language-js">console.log.call.call.call.call.call.apply(a => a, [1, 2]);
</code></pre>
<h3>💡 Explanation:</h3>
<p>Attention, it could break your mind! Try to reproduce this code in your head: we're applying the <code>call</code> method using the <code>apply</code> method. Read more:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-function.prototype.call"><strong>19.2.3.3</strong> Function.prototype.call(<code>thisArg</code>, ...<code>args</code>)</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-function.prototype.apply">**19.2.3.1 ** Function.prototype.apply(<code>thisArg</code>, <code>argArray</code>)</a></li>
</ul>
<h2>A <code>constructor</code> property</h2>
<pre><code class="language-js">const c = "constructor";
c[c][c]('console.log("WTF?")')(); // > WTF?
</code></pre>
<h3>💡 Explanation:</h3>
<p>Let's consider this example step-by-step:</p>
<pre><code class="language-js">// Declare a new constant which is a string 'constructor'
const c = "constructor";
// c is a string
c; // -> 'constructor'
// Getting a constructor of string
c[c]; // -> [Function: String]
// Getting a constructor of constructor
c[c][c]; // -> [Function: Function]
// Call the Function constructor and pass
// the body of new function as an argument
c[c][c]('console.log("WTF?")'); // -> [Function: anonymous]
// And then call this anonymous function
// The result is console-logging a string 'WTF?'
c[c][c]('console.log("WTF?")')(); // > WTF?
</code></pre>
<p>An <code>Object.prototype.constructor</code> returns a reference to the <code>Object</code> constructor function that created the instance object. In case with strings it is <code>String</code>, in case with numbers it is <code>Number</code> and so on.</p>
<ul>
<li><a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor"><code>Object.prototype.constructor</code></a> at MDN</li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-object.prototype.constructor"><strong>19.1.3.1</strong> Object.prototype.constructor</a></li>
</ul>
<h2>Object as a key of object's property</h2>
<pre><code class="language-js">{ [{}]: {} } // -> { '[object Object]': {} }
</code></pre>
<h3>💡 Explanation:</h3>
<p>Why does this work so? Here we're using a <em>Computed property name</em>. When you pass an object between those brackets, it coerces object to a string, so we get the property key <code>'[object Object]'</code> and the value <code>{}</code>.</p>
<p>We can make "brackets hell" like this:</p>
<pre><code class="language-js">({ [{}]: { [{}]: {} } }[{}][{}]); // -> {}
// structure:
// {
// '[object Object]': {
// '[object Object]': {}
// }
// }
</code></pre>
<p>Read more about object literals here:</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a> at MDN</li>
<li><a href="http://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer"><strong>12.2.6</strong> Object Initializer</a></li>
</ul>
<h2>Accessing prototypes with <code>__proto__</code></h2>
<p>As we know, primitives don't have prototypes. However, if we try to get a value of <code>__proto__</code> for primitives, we would get this:</p>
<pre><code class="language-js">(1).__proto__.__proto__.__proto__; // -> null
</code></pre>
<h3>💡 Explanation:</h3>
<p>This happens because when something doesn't have a prototype, it will be wrapped into a wrapper object using the <code>ToObject</code> method. So, step-by-step:</p>
<pre><code class="language-js">(1).__proto__; // -> [Number: 0]
(1).__proto__.__proto__; // -> {}
(1).__proto__.__proto__.__proto__; // -> null
</code></pre>
<p>Here is more information about <code>__proto__</code>:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-object.prototype.__proto__"><strong>B.2.2.1</strong> Object.prototype.<strong>proto</strong></a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-toobject"><strong>7.1.13</strong> ToObject(<code>argument</code>)</a></li>
</ul>
<h2><code>`${{Object}}`</code></h2>
<p>What is the result of the expression below?</p>
<pre><code class="language-js">`${{ Object }}`;
</code></pre>
<p>The answer is:</p>
<pre><code class="language-js">// -> '[object Object]'
</code></pre>
<h3>💡 Explanation:</h3>
<p>We defined an object with a property <code>Object</code> using <em>Shorthand property notation</em>:</p>
<pre><code class="language-js">{
Object: Object;
}
</code></pre>
<p>Then we've passed this object to the template literal, so the <code>toString</code> method calls for that object. That's why we get the string <code>'[object Object]'</code>.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-template-literals"><strong>12.2.9</strong> Template Literals</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a> at MDN</li>
</ul>
<h2>Destructuring with default values</h2>
<p>Consider this example:</p>
<pre><code class="language-js">let x,
{ x: y = 1 } = { x };
y;
</code></pre>
<p>The example above is a great task for an interview. What the value of <code>y</code>? The answer is:</p>
<pre><code class="language-js">// -> 1
</code></pre>
<h3>💡 Explanation:</h3>
<pre><code class="language-js">let x,
{ x: y = 1 } = { x };
y;
// ↑ ↑ ↑ ↑
// 1 3 2 4
</code></pre>
<p>With the example above:</p>
<ol>
<li>We declare <code>x</code> with no value, so it's <code>undefined</code>.</li>
<li>Then we pack the value of <code>x</code> into the object property <code>x</code>.</li>
<li>Then we extract the value of <code>x</code> using destructuring and want to assign it to <code>y</code>. If the value is not defined, then we're going to use <code>1</code> as the default value.</li>
<li>Return the value of <code>y</code>.</li>
</ol>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a> at MDN</li>
</ul>
<h2>Dots and spreading</h2>
<p>Interesting examples could be composed with spreading of arrays. Consider this:</p>
<pre><code class="language-js">[...[..."..."]].length; // -> 3
</code></pre>
<h3>💡 Explanation:</h3>
<p>Why <code>3</code>? When we use the <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-array-initializer">spread operator</a>, the <code>@@iterator</code> method is called, and the returned iterator is used to obtain the values to be iterated. The default iterator for string spreads a string into characters. After spreading, we pack these characters into an array. Then we spread this array again and pack it back to an array.</p>
<p>A <code>'...'</code> string consists with three <code>.</code> characters, so the length of resulting array is <code>3</code>.</p>
<p>Now, step-by-step:</p>
<pre><code class="language-js">[...'...'] // -> [ '.', '.', '.' ]
[...[...'...']] // -> [ '.', '.', '.' ]
[...[...'...']].length // -> 3
</code></pre>
<p>Obviously, we can spread and wrap the elements of an array as many times as we want:</p>
<pre><code class="language-js">[...'...'] // -> [ '.', '.', '.' ]
[...[...'...']] // -> [ '.', '.', '.' ]
[...[...[...'...']]] // -> [ '.', '.', '.' ]
[...[...[...[...'...']]]] // -> [ '.', '.', '.' ]
// and so on …
</code></pre>
<h2>Labels</h2>
<p>Not many programmers know about labels in JavaScript. They are kind of interesting:</p>
<pre><code class="language-js">foo: {
console.log("first");
break foo;
console.log("second");
}
// > first
// -> undefined
</code></pre>
<h3>💡 Explanation:</h3>
<p>The labeled statement is used with <code>break</code> or <code>continue</code> statements. You can use a label to identify a loop, and then use the <code>break</code> or <code>continue</code> statements to indicate whether a program should interrupt the loop or continue its execution.</p>
<p>In the example above, we identify a label <code>foo</code>. After that <code>console.log('first');</code> executes and then we interrupt the execution.</p>
<p>Read more about labels in JavaScript:</p>
<ul>
<li><a href="https://tc39.github.io/ecma262/#sec-labelled-statements"><strong>13.13</strong> Labelled Statements</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label">Labeled statements</a> at MDN</li>
</ul>
<h2>Nested labels</h2>
<pre><code class="language-js">a: b: c: d: e: f: g: 1, 2, 3, 4, 5; // -> 5
</code></pre>
<h3>💡 Explanation:</h3>
<p>Similar to previous examples, follow these links:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-comma-operator"><strong>12.16</strong> Comma Operator (<code>,</code>)</a></li>
<li><a href="https://tc39.github.io/ecma262/#sec-labelled-statements"><strong>13.13</strong> Labelled Statements</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label">Labeled statements</a> at MDN</li>
</ul>
<h2>Insidious <code>try..catch</code></h2>
<p>What will this expression return? <code>2</code> or <code>3</code>?</p>
<pre><code class="language-js">(() => {
try {
return 2;
} finally {
return 3;
}
})();
</code></pre>
<p>The answer is <code>3</code>. Surprised?</p>
<h3>💡 Explanation:</h3>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-try-statement"><strong>13.15</strong> The <code>try</code> Statement</a></li>
</ul>
<h2>Is this multiple inheritance?</h2>
<p>Take a look at the example below:</p>
<pre><code class="language-js">new class F extends (String, Array) {}(); // -> F []
</code></pre>
<p>Is this a multiple inheritance? Nope.</p>
<h3>💡 Explanation:</h3>
<p>The interesting part is the value of the <code>extends</code> clause (<code>(String, Array)</code>). The grouping operator always returns its last argument, so <code>(String, Array)</code> is actually just <code>Array</code>. That means we've just created a class which extends <code>Array</code>.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-class-definitions"><strong>14.5</strong> Class Definitions</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-comma-operator"><strong>12.16</strong> Comma Operator (<code>,</code>)</a></li>
</ul>
<h2>A generator which yields itself</h2>
<p>Consider this example of a generator which yields itself:</p>
<pre><code class="language-js">(function* f() {
yield f;
})().next();
// -> { value: [GeneratorFunction: f], done: false }
</code></pre>
<p>As you can see, the returned value is an object with its <code>value</code> equal to <code>f</code>. In that case, we can do something like this:</p>
<pre><code class="language-js">(function* f() {
yield f;
})()
.next()
.value()
.next()(
// -> { value: [GeneratorFunction: f], done: false }
// and again
function* f() {
yield f;
}
)()
.next()
.value()
.next()
.value()
.next()(
// -> { value: [GeneratorFunction: f], done: false }
// and again
function* f() {
yield f;
}
)()
.next()
.value()
.next()
.value()
.next()
.value()
.next();
// -> { value: [GeneratorFunction: f], done: false }
// and so on
// …
</code></pre>
<h3>💡 Explanation:</h3>
<p>To understand why this works that way, read these sections of the specification:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-control-abstraction-objects"><strong>25</strong> Control Abstraction Objects</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-generator-objects"><strong>25.3</strong> Generator Objects</a></li>
</ul>
<h2>A class of class</h2>
<p>Consider this obfuscated syntax playing:</p>
<pre><code class="language-js">typeof new class {
class() {}
}(); // -> 'object'
</code></pre>
<p>It seems like we're declaring a class inside of class. Should be an error, however, we get the string <code>'object'</code>.</p>
<h3>💡 Explanation:</h3>
<p>Since ECMAScript 5 era, <em>keywords</em> are allowed as <em>property names</em>. So think about it as this simple object example:</p>
<pre><code class="language-js">const foo = {
class: function() {}
};
</code></pre>
<p>And ES6 standardized shorthand method definitions. Also, classes can be anonymous. So if we drop <code>: function</code> part, we're going to get:</p>
<pre><code class="language-js">class {
class() {}
}
</code></pre>
<p>The result of a default class is always a simple object. And its typeof should return <code>'object'</code>.</p>
<p>Read more here:</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-method-definitions"><strong>14.3</strong> Method Definitions</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-class-definitions"><strong>14.5</strong> Class Definitions</a></li>
</ul>
<h2>Non-coercible objects</h2>
<p>With well-known symbols, there's a way to get rid of type coercion. Take a look:</p>
<pre><code class="language-js">function nonCoercible(val) {
if (val == null) {
throw TypeError("nonCoercible should not be called with null or undefined");
}
const res = Object(val);
res[Symbol.toPrimitive] = () => {
throw TypeError("Trying to coerce non-coercible object");
};
return res;
}
</code></pre>
<p>Now we can use this like this:</p>
<pre><code class="language-js">// objects
const foo = nonCoercible({ foo: "foo" });
foo * 10; // -> TypeError: Trying to coerce non-coercible object
foo + "evil"; // -> TypeError: Trying to coerce non-coercible object
// strings
const bar = nonCoercible("bar");
bar + "1"; // -> TypeError: Trying to coerce non-coercible object
bar.toString() + 1; // -> bar1
bar === "bar"; // -> false
bar.toString() === "bar"; // -> true
bar == "bar"; // -> TypeError: Trying to coerce non-coercible object
// numbers
const baz = nonCoercible(1);
baz == 1; // -> TypeError: Trying to coerce non-coercible object
baz === 1; // -> false
baz.valueOf() === 1; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<ul>
<li><a href="https://gist.github.com/chicoxyzzy/5dd24608e886adf5444499896dff1197">A gist by Sergey Rubanov</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-well-known-symbols"><strong>6.1.5.1</strong> Well-Known Symbols</a></li>
</ul>
<h2>Tricky arrow functions</h2>
<p>Consider the example below:</p>
<pre><code class="language-js">let f = () => 10;
f(); // -> 10
</code></pre>
<p>Okay, fine, but what about this:</p>
<pre><code class="language-js">let f = () => {};
f(); // -> undefined
</code></pre>
<h3>💡 Explanation:</h3>
<p>You might expect <code>{}</code> instead of <code>undefined</code>. This is because the curly braces are part of the syntax of the arrow functions, so <code>f</code> will return undefined. It is however possible to return the <code>{}</code> object directly from an arrow function, by enclosing the return value with brackets.</p>
<pre><code class="language-js">let f = () => ({});
f(); // -> {}
</code></pre>
<h2>Arrow functions can not be a constructor</h2>
<p>Consider the example below:</p>
<pre><code class="language-js">let f = function() {
this.a = 1;
};
new f(); // -> f { 'a': 1 }
</code></pre>
<p>Now, try do to the same with an arrow function:</p>
<pre><code class="language-js">let f = () => {
this.a = 1;
};
new f(); // -> TypeError: f is not a constructor
</code></pre>
<h3>💡 Explanation:</h3>
<p>Arrow functions cannot be used as constructors and will throw an error when used with <code>new</code>. Because they have a lexical <code>this</code>, and do not have a <code>prototype</code> property, so it would not make much sense.</p>
<h2><code>arguments</code> and arrow functions</h2>
<p>Consider the example below:</p>
<pre><code class="language-js">let f = function() {
return arguments;
};
f("a"); // -> { '0': 'a' }
</code></pre>
<p>Now, try do to the same with an arrow function:</p>
<pre><code class="language-js">let f = () => arguments;
f("a"); // -> Uncaught ReferenceError: arguments is not defined
</code></pre>
<h3>💡 Explanation:</h3>
<p>Arrow functions are a lightweight version of regular functions with a focus on being short and lexical <code>this</code>. At the same time arrow functions do not provide a binding for the <code>arguments</code> object. As a valid alternative use the <code>rest parameters</code> to achieve the same result:</p>
<pre><code class="language-js">let f = (...args) => args;
f("a");
</code></pre>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Arrow functions</a> at MDN.</li>
</ul>
<h2>Tricky return</h2>
<p><code>return</code> statement is also tricky. Consider this:</p>
<!-- prettier-ignore-start -->
<pre><code class="language-js">(function() {
return
{
b: 10;
}
})(); // -> undefined
</code></pre>
<!-- prettier-ignore-end -->
<h3>💡 Explanation:</h3>
<p><code>return</code> and the returned expression must be in the same line:</p>
<pre><code class="language-js">(function() {
return {
b: 10
};
})(); // -> { b: 10 }
</code></pre>
<p>This is because of a concept called Automatic Semicolon Insertion, which automagically inserts semicolons after most newlines. In the first example, there is a semicolon inserted between the <code>return</code> statement and the object literal, so the function returns <code>undefined</code> and the object literal is never evaluated.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-rules-of-automatic-semicolon-insertion"><strong>11.9.1</strong> Rules of Automatic Semicolon Insertion</a></li>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-return-statement"><strong>13.10</strong> The <code>return</code> Statement</a></li>
</ul>
<h2>Chaining assignments on object</h2>
<pre><code class="language-js">var foo = { n: 1 };
var bar = foo;
foo.x = foo = { n: 2 };
foo.x; // -> undefined
foo; // -> {n: 2}
bar; // -> {n: 1, x: {n: 2}}
</code></pre>
<p>From right to left, <code>{n: 2}</code> is assigned to foo, and the result of this assignment <code>{n: 2}</code> is assigned to foo.x, that's why bar is <code>{n: 1, x: {n: 2}}</code> as bar is a reference to foo. But why foo.x is undefined while bar.x is not ?</p>
<h3>💡 Explanation:</h3>
<p>Foo and bar references the same object <code>{n: 1}</code>, and lvalues are resolved before assignations. <code>foo = {n: 2}</code> is creating a new object, and so foo is updated to reference that new object. The trick here is foo in <code>foo.x = ...</code> as a lvalue was resolved beforehand and still reference the old <code>foo = {n: 1}</code> object and update it by adding the x value. After that chain assignments, bar still reference the old foo object, but foo reference the new <code>{n: 2}</code> object, where x is not existing.</p>
<p>It's equivalent to:</p>
<pre><code class="language-js">var foo = { n: 1 };
var bar = foo;
foo = { n: 2 }; // -> {n: 2}
bar.x = foo; // -> {n: 1, x: {n: 2}}
// bar.x point to the address of the new foo object
// it's not equivalent to: bar.x = {n: 2}
</code></pre>
<h2>Accessing object properties with arrays</h2>
<pre><code class="language-js">var obj = { property: 1 };
var array = ["property"];
obj[array]; // -> 1
// this also works with nested arrays
var nestedArray = [[[[[[[[[["property"]]]]]]]]]];
obj[nestedArray]; // -> 1
</code></pre>
<p>What about pseudo-multidimensional arrays?</p>
<pre><code class="language-js">var map = {};
var x = 1;
var y = 2;
var z = 3;
map[[x, y, z]] = true;
map[[x + 10, y, z]] = true;
map["1,2,3"]; // -> true
map["11,2,3"]; // -> true
</code></pre>
<h3>💡 Explanation:</h3>
<p>The brackets <code>[]</code> operator converts the passed expression using <code>toString</code>. Converting a one-element array to a string is akin to converting the contained element to the string:</p>
<pre><code class="language-js">["property"].toString(); // -> 'property'
</code></pre>
<h2><code>Number.toFixed()</code> display different numbers</h2>
<p><code>Number.toFixed()</code> can behave a bit strange in different browsers. Check out this example:</p>
<pre><code class="language-js">(0.7875).toFixed(3);
// Firefox: -> 0.787
// Chrome: -> 0.787
// IE11: -> 0.788
(0.7876).toFixed(3);
// Firefox: -> 0.788
// Chrome: -> 0.788
// IE11: -> 0.788
</code></pre>
<h3>💡 Explanation:</h3>
<p>While your first instinct may be that IE11 is correct and Firefox/Chrome are wrong, the reality is that Firefox/Chrome are more directly obeying standards for numbers (IEEE-754 Floating Point), while IE11 is minutely disobeying them in (what is probably) an effort to give clearer results.</p>
<p>You can see why this occurs with a few quick tests:</p>
<pre><code class="language-js">// Confirm the odd result of rounding a 5 down
(0.7875).toFixed(3); // -> 0.787
// It looks like it's just a 5 when you expand to the
// limits of 64-bit (double-precision) float accuracy
(0.7875).toFixed(14); // -> 0.78750000000000
// But what if you go beyond the limit?
(0.7875).toFixed(20); // -> 0.78749999999999997780
</code></pre>
<p>Floating point numbers are not stored as a list of decimal digits internally, but through a more complicated methodology that produces tiny inaccuracies that are usually rounded away by toString and similar calls, but are actually present internally.</p>
<p>In this case, that "5" on the end was actually an extremely tiny fraction below a true 5. Rounding it at any reasonable length will render it as a 5... but it is actually not a 5 internally.</p>
<p>IE11, however, will report the value input with only zeros appended to the end even in the toFixed(20) case, as it seems to be forcibly rounding the value to reduce the troubles from hardware limits.</p>
<p>See for reference <code>NOTE 2</code> on the ECMA-262 definition for <code>toFixed</code>.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262//#sec-number.prototype.tofixed"><strong>20.1.3.3</strong> Number.prototype.toFixed (<code>fractionDigits</code>)</a></li>
</ul>
<h2><code>Math.max()</code> less than <code>Math.min()</code></h2>
<p>I find this example hilarious:</p>
<pre><code class="language-js">Math.min() > Math.max(); // -> true
Math.min() < Math.max(); // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>This is a simple one. Let's consider each part of this expression separately:</p>
<pre><code class="language-js">Math.min(); // -> Infinity
Math.max(); // -> -Infinity
Infinity > -Infinity; // -> true
</code></pre>
<p>Why so? Well, <code>Math.max()</code> is not the same thing as <code>Number.MAX_VALUE</code>. It does not return the largest possible number.</p>
<p><code>Math.max</code> takes arguments, tries to convert the to numbers, compares each one and then returns the largest remaining. If no arguments are given, the result is −∞. If any value is <code>NaN</code>, the result is <code>NaN</code>.</p>
<p>The opposite is happening for <code>Math.min</code>. <code>Math.min</code> returns ∞, if no arguments are given.</p>
<ul>
<li><a href="https://262.ecma-international.org/5.1/#sec-15.8.2.11"><strong>15.8.2.11</strong> Math.max</a></li>
<li><a href="https://262.ecma-international.org/5.1/#sec-15.8.2.12"><strong>15.8.2.11</strong> Math.min</a></li>
<li><a href="https://charlieharvey.org.uk/page/why_math_max_is_less_than_math_min">Why is <code>Math.max()</code> less than <code>Math.min()</code>?</a> by Charlie Harvey</li>
</ul>
<h2>Comparing <code>null</code> to <code>0</code></h2>
<p>The following expressions seem to introduce a contradiction:</p>
<pre><code class="language-js">null == 0; // -> false
null > 0; // -> false
null >= 0; // -> true
</code></pre>
<p>How can <code>null</code> be neither equal to nor greater than <code>0</code>, if <code>null >= 0</code> is actually <code>true</code>? (This also works with less than in the same way.)</p>
<h3>💡 Explanation:</h3>
<p>The way these three expressions are evaluated are all different and are responsible for producing this unexpected behavior.</p>
<p>First, the abstract equality comparison <code>null == 0</code>. Normally, if this operator can't compare the values on either side properly, it converts both to numbers and compares the numbers. Then, you might expect the following behavior:</p>
<pre><code class="language-js">// This is not what happens
(null == 0 + null) == +0;
0 == 0;
true;
</code></pre>
<p>However, according to a close reading of the spec, the number conversion doesn't actually happen on a side that is <code>null</code> or <code>undefined</code>. Therefore, if you have <code>null</code> on one side of the equal sign, the other side must be <code>null</code> or <code>undefined</code> for the expression to return <code>true</code>. Since this is not the case, <code>false</code> is returned.</p>
<p>Next, the relational comparison <code>null > 0</code>. The algorithm here, unlike that of the abstract equality operator, <em>will</em> convert <code>null</code> to a number. Therefore, we get this behavior:</p>
<pre><code class="language-js">null > 0
+null = +0
0 > 0
false
</code></pre>
<p>Finally, the relational comparison <code>null >= 0</code>. You could argue that this expression should be the result of <code>null > 0 || null == 0</code>; if this were the case, then the above results would mean that this would also be <code>false</code>. However, the <code>>=</code> operator in fact works in a very different way, which is basically to take the opposite of the <code><</code> operator. Because our example with the greater than operator above also holds for the less than operator, that means this expression is actually evaluated like so:</p>
<pre><code class="language-js">null >= 0;
!(null < 0);
!(+null < +0);
!(0 < 0);
!false;
true;
</code></pre>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-abstract-relational-comparison"><strong>7.2.12</strong> Abstract Relational Comparison</a></li>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
<li><a href="https://blog.campvanilla.com/javascript-the-curious-case-of-null-0-7b131644e274">An in-depth explanation</a></li>
</ul>
<h2>Same variable redeclaration</h2>
<p>JS allows to redeclare variables:</p>
<pre><code class="language-js">a;
a;
// This is also valid
a, a;
</code></pre>
<p>Works also in strict mode:</p>
<pre><code class="language-js">var a, a, a;
var a;
var a;
</code></pre>
<h3>💡 Explanation:</h3>
<p>All definitions are merged into one definition.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-variable-statement"><strong>13.3.2</strong> Variable Statement</a></li>
</ul>
<h2>Default behavior Array.prototype.sort()</h2>
<p>Imagine that you need to sort an array of numbers.</p>
<pre><code class="language-js">[10, 1, 3].sort(); // -> [ 1, 10, 3 ]
</code></pre>
<h3>💡 Explanation:</h3>
<p>The default sort order is built upon converting the elements into strings, then comparing their sequences of UTF-16 code units values.</p>
<ul>
<li><a href="https://www.ecma-international.org/ecma-262/#sec-array.prototype.sort"><strong>22.1.3.25</strong> Array.prototype.sort ( comparefn )</a></li>
</ul>
<h3>Hint</h3>
<p>Pass <code>compareFn</code> if you try to sort anything but string.</p>
<pre><code class="language-js">[10, 1, 3].sort((a, b) => a - b); // -> [ 1, 3, 10 ]
</code></pre>
<h2>resolve() won't return Promise instance</h2>
<pre><code class="language-js">const theObject = {
a: 7
};
const thePromise = new Promise((resolve, reject) => {
resolve(theObject);
}); // Promise instance object
thePromise.then(value => {
console.log(value === theObject); // > true
console.log(value); // > { a: 7 }
});
</code></pre>
<p>The <code>value</code> which is resolved from <code>thePromise</code> is exactly <code>theObject</code>.</p>
<p>How about input another <code>Promise</code> into the <code>resolve</code> function?</p>
<pre><code class="language-js">const theObject = new Promise((resolve, reject) => {
resolve(7);
}); // Promise instance object
const thePromise = new Promise((resolve, reject) => {
resolve(theObject);
}); // Promise instance object
thePromise.then(value => {
console.log(value === theObject); // > false
console.log(value); // > 7
});
</code></pre>
<h3>💡 Explanation:</h3>
<blockquote>
<p>This function flattens nested layers of promise-like objects (e.g. a promise that resolves to a promise that resolves to something) into a single layer.</p>
</blockquote>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve">Promise.resolve() on MDN</a></li>
</ul>
<p>The specification is <a href="https://tc39.es/ecma262/#sec-promise-resolve-functions">ECMAScript 25.6.1.3.2 Promise Resolve Functions</a>. But it is not quite human-friendly.</p>
<h2><code>{}{}</code> is undefined</h2>
<p>Write them in the console. They will return the value defined in the last object.</p>
<pre><code class="language-js">{}{}; // -> undefined
{}{}{}; // -> undefined
{}{}{}{}; // -> undefined
{foo: 'bar'}{}; // -> 'bar'
{}{foo: 'bar'}; // -> 'bar'
{}{foo: 'bar'}{}; // -> 'bar'
{a: 'b'}{c:' d'}{}; // -> 'd'
{a: 'b', c: 'd'}{}; // > SyntaxError: Unexpected token ':'
({}{}); // > SyntaxError: Unexpected token '{'
</code></pre>
<h3>💡 Explanation:</h3>
<p>When inspecting each <code>{}</code>, they returns undefined. If you inspect <code>{foo: 'bar'}{}</code>, you will find <code>{foo: 'bar'}</code> is <code>'bar'</code>.</p>
<p>There are two meanings for <code>{}</code>: an object or a block. For example, the <code>{}</code> in <code>() => {}</code> means block. So we need to use <code>() => ({})</code> to return an object.</p>
<p>Let's use <code>{foo: 'bar'}</code> as a block. Write this snippet in your console:</p>
<pre><code class="language-js">if (true) {
foo: "bar";
} // -> 'bar'
</code></pre>
<p>Surprisingly, it behaviors the same! You can guess here that <code>{foo: 'bar'}{}</code> is a block.</p>
<h2><code>arguments</code> binding</h2>
<p>Consider this function:</p>
<pre><code class="language-js">function a(x) {
arguments[0] = "hello";
console.log(x);
}
a(); // > undefined
a(1); // > "hello"
</code></pre>
<h3>💡 Explanation:</h3>
<p><code>arguments</code> is an Array-like object that contains the values of the arguments passed to that function. When no arguments are passed, then there's no <code>x</code> to override.</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments">The arguments object</a> on MDN</li>
</ul>
<h2>An <code>alert</code> from hell</h2>
<p>This on is literally from hell:</p>
<pre><code class="language-js">[666]["\155\141\160"]["\143\157\156\163\164\162\165\143\164\157\162"](
"\141\154\145\162\164(666)"
)(666); // alert(666)
</code></pre>
<h3>💡 Explanation:</h3>
<p>This one is based on octal escape sequences and multiple strings.</p>
<p>Any character with a character code lower than 256 (i.e. any character in the extended ASCII range) can be escaped using its octal-encoded character code, prefixed with <code>\</code>. An example above is basically and <code>alert</code> ecoded by octal escape sequances.</p>
<ul>
<li><a href="https://twitter.com/aemkei/status/897172907222237185">Martin Kleppe tweet about it</a></li>
<li><a href="https://mathiasbynens.be/notes/javascript-escapes#octal">JavaScript character escape sequences</a></li>
<li><a href="https://davidwalsh.name/multiline-javascript-strings">Multi-Line JavaScript Strings</a></li>
</ul>
<h2>An infinite timeout</h2>
<p>Guess what would happen if we set an infinite timeout?</p>
<pre><code class="language-js">setTimeout(() => console.log("called"), Infinity); // -> <timeoutId>
// > 'called'
</code></pre>
<p>It will executed immediately instead of infinity delay.</p>
<h3>💡 Explanation:</h3>
<p>Usually, runtime stores the delay as a 32-bit signed integer internally. This causes an integer overflow, resulting in the timeout being executed immediately.</p>
<p>For example, in Node.js we will get this warning:</p>
<pre><code>(node:1731) TimeoutOverflowWarning: Infinity does not fit into a 32-bit signed integer.
Timeout duration was set to 1.
(Use `node --trace-warnings ...` to show where the warning was created)
</code></pre>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout">WindowOrWorkerGlobalScope.setTimeout()</a> on MDN</li>
<li><a href="https://nodejs.org/api/timers.html#timers_settimeout_callback_delay_args">Node.js Documentation on Timers</a></li>
<li><a href="https://www.w3.org/TR/2011/WD-html5-20110525/timers.html">Timers</a> on W3C</li>
</ul>
<h2>A <code>setTimeout</code> object</h2>
<p>Guess what would happen if we set an callback that's not a function to <code>setTimeout</code>?</p>
<pre><code class="language-js">setTimeout(123, 100); // -> <timeoutId>
// > 'called'
</code></pre>
<p>This is fine.</p>
<pre><code class="language-js">setTimeout('{a: 1}', 100); // -> <timeoutId>
// > 'called'
</code></pre>
<p>This is also fine.</p>
<pre><code class="language-js">setTimeout({a: 1}, 100); // -> <timeoutId>
// > 'Uncaught SyntaxError: Unexpected identifier setTimeout (async) (anonymous) @ VM__:1'
</code></pre>
<p>This throws an <strong>SyntaxError</strong>.</p>
<p>Note that this can easily happen if your function returns an object and you call it here instead of passing it! What if the content - policy is set to <code>self</code>?</p>
<pre><code class="language-js">setTimeout(123, 100); // -> <timeoutId>
// > console.error("[Report Only] Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'report-sample' 'self' ")
</code></pre>
<p>The console refuses to run it at all!</p>
<h3>💡 Explanation:</h3>
<p><code>WindowOrWorkerGlobalScope.setTimeout()</code> can be called with <code>code</code> as first argument, which will be passed on to <code>eval</code>, which is bad. Eval will coerce her input to String, and evaluate what is produced, so Objects becomes <code>'[object Object]'</code> which has hmmm ... an <code>'Unexpected identifier'</code>!</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval()</a> on MDN (don't use this)</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout">WindowOrWorkerGlobalScope.setTimeout()</a> on MDN</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy">Content Security Policy</a></li>
<li><a href="https://www.w3.org/TR/2011/WD-html5-20110525/timers.html">Timers</a> on W3C</li>
</ul>
<h2>Double dot</h2>
<p>Let's try to coerce a number to a string:</p>
<pre><code class="language-js">27.toString() // > Uncaught SyntaxError: Invalid or unexpected token
</code></pre>
<p>Maybe we should try with two dots?</p>
<pre><code class="language-js">27..toString(); // -> '27'
</code></pre>
<p>But why doesn't first example work?</p>
<h3>💡 Explanation:</h3>
<p>It's just a language grammar limitation.</p>
<p>The <code>.</code> character presents an ambiguity. It can be understood to be the member operator, or a decimal, depending on its placement.</p>
<p>The specification's interpretation of the <code>.</code> character in that particular position is that it will be a decimal. This is defined by the numeric literal syntax of ECMAScript.</p>
<p>You must always use parenthesis or an addition dot to make such expression valid.</p>
<pre><code class="language-js">(27).toString(); // -> '27'
// or
27..toString(); // -> '27'
</code></pre>
<ul>
<li><a href="https://stackoverflow.com/questions/6853865/usage-of-tostring-in-javascript/6853910#6853910">Usage of toString in JavaScript</a> on StackOverflow</li>
<li><a href="https://stackoverflow.com/questions/13149282/why-does-10-tostring-work-but-10-tostring-does-not/13149301#13149301">Why does 10..toString() work, but 10.toString() does not?</a></li>
</ul>
<h2>Extra Newness</h2>
<p>I present this as an oddity for your amusement.</p>
<pre><code class="language-js">class Foo extends Function {
constructor(val) {
super();
this.prototype.val = val;
}
}
new new Foo(":D")().val; // -> ':D'
</code></pre>
<h3>💡 Explanation:</h3>
<p>Constructors in JavaScript are just functions with some special treatment. By extending Function using the class syntax you create a class that, when instantiated, is now a function, which you can then additionally instantiate.</p>
<p>While not exhaustively tested, I believe the last statement can be analyzed thus:</p>
<pre><code class="language-js">new new Foo(":D")().val(new newFooInstance()).val;
veryNewFooInstance.val;
// -> ':D'
</code></pre>
<p>As a tiny addendum, doing <code>new Function('return "bar";')</code> of course creates a function with the body <code>return "bar";</code>. Since <code>super()</code> in the constructor of our <code>Foo</code> class is calling <code>Function</code>'s constructor, it should come as no surprise now to see that we can additionally manipulate things in there.</p>
<pre><code class="language-js">class Foo extends Function {
constructor(val) {
super(`
this.val = arguments[0];
`);
this.prototype.val = val;
}
}
var foo = new new Foo(":D")("D:");
foo.val; // -> 'D:'
delete foo.val; // remove the instance prop 'val', deferring back to the prototype's 'val'.
foo.val; // -> ':D'
</code></pre>
<ul>
<li><a href="https://github.com/denysdovhan/wtfjs/issues/78">Class Extends Function: Extra Newness</a></li>
</ul>
<h2>Why you should use semicolons</h2>
<p>Writing some standard JavaScript… and then BOOM!</p>
<pre><code class="language-js">class SomeClass {
["array"] = []
["string"] = "str"
}
new SomeClass().array; // -> 'str'
</code></pre>
<p>What the …?</p>
<h3>💡 Explanation:</h3>
<p>Once again, this is all thanks to the Automatic Semicolon Insertion.</p>
<p>An example above is basically the same as:</p>
<pre><code class="language-js">class SomeClass {
["array"] = ([]["string"] = "str");
}
</code></pre>
<p>You basically assign a string <code>str</code> into an <code>array</code> property.</p>
<ul>
<li><a href="https://twitter.com/SeaRyanC/status/1148726605222535168">An original tweet with an example</a> by Ryan Cavanaugh</li>
<li><a href="https://github.com/tc39/notes/raw/master/meetings/2017-09/sept-26.md">TC39 meeting when they debated about it</a></li>
</ul>
<h2>Split a string by a space</h2>
<p>Have you ever tried to split a string by a space?</p>
<pre><code class="language-js">"".split(""); // -> []
// but…
"".split(" "); // -> [""]
</code></pre>
<h3>💡 Explanation:</h3>
<p>This is expected behaviour. Its responsibility is to divide the input string every time a separator occurs in that input string. When you pass in an empty string it'll never find a separator and thus return that string.</p>
<p>Let's quote the specification:</p>
<blockquote>
<p>The substrings are determined by searching from left to right for occurrences of <code>separator</code>; these occurrences are not part of any String in the returned array, but serve to divide up the String value.</p>
</blockquote>
<ul>
<li><a href="https://tc39.es/ecma262/#sec-string.prototype.split"><strong>22.1.3.21</strong> String.prototype.split</a></li>
<li><a href="https://twitter.com/SeaRyanC/status/1331656278104440833">An original tween with an example</a> by Ryan Cavanaugh</li>
<li><a href="https://twitter.com/kl13nt/status/1331742810932916227?s=20">A tween with an explanation</a> by Nabil Tharwat</li>
</ul>
<h2>A stringified string</h2>
<p>This caused a bug that I've been solving for a few days:</p>
<pre><code class="language-js">JSON.stringify("production") === "production"; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>Let's see what <code>JSON.stringify</code> is returning:</p>
<pre><code class="language-js">JSON.stringify("production"); // -> '"production"'
</code></pre>
<p>It is actually a stringified string, so it's true:</p>
<pre><code class="language-js">'"production"' === "production"; // -> false
</code></pre>
<ul>
<li><a href="https://www.json.org/json-en.html">ECMA-404 The JSON Data Interchange Standard.</a></li>
</ul>
<h2>Non-strict comparison of a number to <code>true</code></h2>
<pre><code class="language-js">1 == true; // -> true
// but…
Boolean(1.1); // -> true
1.1 == true; // -> false
</code></pre>
<h3>💡 Explanation:</h3>
<p>According to the specification:</p>
<blockquote>
<p>The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:</p>
<ol start="4">
<li>If <code>Type(x)</code> is Number and <code>Type(y)</code> is String, return the result of the comparison <code>x == ! ToNumber(y)</code>.</li>
</ol>
</blockquote>
<p>So this comparison is performed like this:</p>
<pre><code class="language-js">1 == true;
1 == Number(true);
1 == 1; // -> true
// but…
1.1 == true;
1.1 == Number(true);
1.1 == 1; // -> false
</code></pre>
<ul>
<li><a href="https://262.ecma-international.org/11.0/index.html#sec-abstract-equality-comparison"><strong>7.2.15</strong> Abstract Equality Comparison</a></li>
</ul>
<h1>📚 Other resources</h1>
<ul>
<li><a href="http://wtfjs.com/">wtfjs.com</a> — a collection of those very special irregularities, inconsistencies and just plain painfully unintuitive moments for the language of the web.</li>
<li><a href="https://www.destroyallsoftware.com/talks/wat">Wat</a> — A lightning talk by Gary Bernhardt from CodeMash 2012</li>
<li><a href="https://www.youtube.com/watch?v=2pL28CcEijU">What the... JavaScript?</a> — Kyle Simpsons talk for Forward 2 attempts to “pull out the crazy” from JavaScript. He wants to help you produce cleaner, more elegant, more readable code, then inspire people to contribute to the open source community.</li>
<li><a href="http://zero.milosz.ca/">Zeros in JavaScript</a> — a comparison table of <code>==</code>, <code>===</code>, <code>+</code> and <code>*</code> in JavaScript.</li>
</ul>
<h1>🤝 Supporting</h1>
<p>Hi! I work on this project in my spare time, in addition to my primary job. I hope you enjoy reading it. If you do, please, consider supporting me 🙏.</p>
<p>Every single donation is important. Your donation is gonna make a clear statement: My work is valued.</p>
<p><strong>🙏 Thank you for your support! 🙏</strong></p>
<table>
<thead>
<tr>
<th>Service</th>
<th align="center">Link</th>
<th align="center">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Patreon</strong></td>
<td align="center"><a href="https://patreon.com/denysdovhan">Become a patron</a></td>
<td align="center"><a href="https://patreon.com/denysdovhan"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" width="120px"></a></td>
</tr>
<tr>
<td><strong>BuyMeACoffee</strong></td>
<td align="center"><a href="https://patreon.com/denysdovhan">Buy me a cup of ☕️ or 🥤</a></td>
<td align="center"><a href="https://buymeacoffee.com/denysdovhan"><img src="https://cdn.buymeacoffee.com/buttons/default-black.png" width="120px"></a></td>
</tr>
<tr>
<td><strong>Bitcoin</strong></td>
<td align="center"><code>1EJsKs6rPsqa7QLoVLpe3wgcdL9Q8WmDxE</code></td>
<td align="center"><img src="https://user-images.githubusercontent.com/3459374/107130426-0ae4f800-68d6-11eb-9b86-15bf33467615.png" width="120px"></td>
</tr>
<tr>
<td><strong>Ethereum</strong></td>
<td align="center"><code>0x6aF39C917359897ae6969Ad682C14110afe1a0a1</code></td>
<td align="center"><img src="https://user-images.githubusercontent.com/3459374/107130370-55b24000-68d5-11eb-93f5-075355c7fcd4.png" width="120px"></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>⚠️ Note:</strong> I live in Ukraine and services like PayPal and Stripe don't work with Ukrainian bank accounts. This means there's no way for me to set up GitHub Sponsors, OpenCollective, or services relied on them. Sorry, those are the only ways you can support me for now.</p>
</blockquote>
<h1>🎓 License</h1>
<p><a href="http://www.wtfpl.net"><img src="https://img.shields.io/badge/License-WTFPL%202.0-lightgrey.svg?style=flat-square" alt="CC 4.0"></a></p>
<p>© <a href="http://denysdovhan.com">Denys Dovhan</a></p>
+
+
\ No newline at end of file
diff --git a/jest-snapshot/daily/index.xml b/jest-snapshot/daily/index.xml
index 7d6c10b9df5..c6fa8910dbd 100644
--- a/jest-snapshot/daily/index.xml
+++ b/jest-snapshot/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jest Snapshot Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:07Z
+ 2024-12-01T01:33:11Z
Daily Trending of Jest Snapshot in GitHub
\ No newline at end of file
diff --git a/jest-snapshot/monthly/index.xml b/jest-snapshot/monthly/index.xml
new file mode 100644
index 00000000000..dfe311aa2cb
--- /dev/null
+++ b/jest-snapshot/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jest Snapshot Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:52Z
+ Monthly Trending of Jest Snapshot in GitHub
+
+
\ No newline at end of file
diff --git a/jest-snapshot/weekly/index.xml b/jest-snapshot/weekly/index.xml
new file mode 100644
index 00000000000..e34a281b352
--- /dev/null
+++ b/jest-snapshot/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jest Snapshot Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:49Z
+ Weekly Trending of Jest Snapshot in GitHub
+
+
\ No newline at end of file
diff --git a/jflex/daily/index.xml b/jflex/daily/index.xml
index 18412794c97..7d871572028 100644
--- a/jflex/daily/index.xml
+++ b/jflex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JFlex Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:08Z
+ 2024-12-01T01:33:10Z
Daily Trending of JFlex in GitHub
\ No newline at end of file
diff --git a/jflex/monthly/index.xml b/jflex/monthly/index.xml
new file mode 100644
index 00000000000..7b81189791d
--- /dev/null
+++ b/jflex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JFlex Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:52Z
+ Monthly Trending of JFlex in GitHub
+
+
\ No newline at end of file
diff --git a/jflex/weekly/index.xml b/jflex/weekly/index.xml
new file mode 100644
index 00000000000..07780651b2f
--- /dev/null
+++ b/jflex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JFlex Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:50Z
+ Weekly Trending of JFlex in GitHub
+
+
\ No newline at end of file
diff --git a/jinja/daily/index.xml b/jinja/daily/index.xml
index 41c849f4e51..e9621cf0abe 100644
--- a/jinja/daily/index.xml
+++ b/jinja/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jinja Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:31:38Z
+ 2024-12-01T01:32:33Z
Daily Trending of Jinja in GitHub
\ No newline at end of file
diff --git a/jinja/monthly/index.xml b/jinja/monthly/index.xml
new file mode 100644
index 00000000000..3d2559a4ffa
--- /dev/null
+++ b/jinja/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jinja Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:13Z
+ Monthly Trending of Jinja in GitHub
+
+
\ No newline at end of file
diff --git a/jinja/weekly/index.xml b/jinja/weekly/index.xml
new file mode 100644
index 00000000000..715e3add1d2
--- /dev/null
+++ b/jinja/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jinja Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:12Z
+ Weekly Trending of Jinja in GitHub
+
+
\ No newline at end of file
diff --git a/jison-lex/daily/index.xml b/jison-lex/daily/index.xml
index 523bfc9cc6b..67669828694 100644
--- a/jison-lex/daily/index.xml
+++ b/jison-lex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jison Lex Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:09Z
+ 2024-12-01T01:33:12Z
Daily Trending of Jison Lex in GitHub
\ No newline at end of file
diff --git a/jison-lex/monthly/index.xml b/jison-lex/monthly/index.xml
new file mode 100644
index 00000000000..82da9aacff5
--- /dev/null
+++ b/jison-lex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jison Lex Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:53Z
+ Monthly Trending of Jison Lex in GitHub
+
+
\ No newline at end of file
diff --git a/jison-lex/weekly/index.xml b/jison-lex/weekly/index.xml
new file mode 100644
index 00000000000..d9a889bc89b
--- /dev/null
+++ b/jison-lex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jison Lex Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:51Z
+ Weekly Trending of Jison Lex in GitHub
+
+
\ No newline at end of file
diff --git a/jison/daily/index.xml b/jison/daily/index.xml
index df4ff4f3cf5..3df9d65b8df 100644
--- a/jison/daily/index.xml
+++ b/jison/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jison Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:08Z
+ 2024-12-01T01:33:11Z
Daily Trending of Jison in GitHub
\ No newline at end of file
diff --git a/jison/monthly/index.xml b/jison/monthly/index.xml
new file mode 100644
index 00000000000..5d4141377f8
--- /dev/null
+++ b/jison/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jison Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:52Z
+ Monthly Trending of Jison in GitHub
+
+
\ No newline at end of file
diff --git a/jison/weekly/index.xml b/jison/weekly/index.xml
new file mode 100644
index 00000000000..5923248244d
--- /dev/null
+++ b/jison/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jison Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:50Z
+ Weekly Trending of Jison in GitHub
+
+
\ No newline at end of file
diff --git a/jolie/daily/index.xml b/jolie/daily/index.xml
index 7ea088284e0..d4019d85006 100644
--- a/jolie/daily/index.xml
+++ b/jolie/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jolie Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:10Z
+ 2024-12-01T01:33:12Z
Daily Trending of Jolie in GitHub
\ No newline at end of file
diff --git a/jolie/monthly/index.xml b/jolie/monthly/index.xml
new file mode 100644
index 00000000000..b3e5b61fd2e
--- /dev/null
+++ b/jolie/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jolie Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:53Z
+ Monthly Trending of Jolie in GitHub
+
+
\ No newline at end of file
diff --git a/jolie/weekly/index.xml b/jolie/weekly/index.xml
new file mode 100644
index 00000000000..c74748a2992
--- /dev/null
+++ b/jolie/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jolie Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:52Z
+ Weekly Trending of Jolie in GitHub
+
+
\ No newline at end of file
diff --git a/jq/daily/index.xml b/jq/daily/index.xml
index 748f91ec86d..643c5731d09 100644
--- a/jq/daily/index.xml
+++ b/jq/daily/index.xml
@@ -1,7 +1,7 @@
GitHub jq Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:09Z
+ 2024-12-01T01:33:12Z
Daily Trending of jq in GitHub
\ No newline at end of file
diff --git a/jq/monthly/index.xml b/jq/monthly/index.xml
new file mode 100644
index 00000000000..8a1d9e823ec
--- /dev/null
+++ b/jq/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub jq Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:54Z
+ Monthly Trending of jq in GitHub
+
+
\ No newline at end of file
diff --git a/jq/weekly/index.xml b/jq/weekly/index.xml
new file mode 100644
index 00000000000..9d0f9f2a7c7
--- /dev/null
+++ b/jq/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub jq Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:51Z
+ Weekly Trending of jq in GitHub
+
+
\ No newline at end of file
diff --git a/json-with-comments/daily/index.xml b/json-with-comments/daily/index.xml
index 80c8938ef32..359e806a053 100644
--- a/json-with-comments/daily/index.xml
+++ b/json-with-comments/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JSON with Comments Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:11Z
+ 2024-12-01T01:33:13Z
Daily Trending of JSON with Comments in GitHub
\ No newline at end of file
diff --git a/json-with-comments/monthly/index.xml b/json-with-comments/monthly/index.xml
new file mode 100644
index 00000000000..6fc48d6a2f8
--- /dev/null
+++ b/json-with-comments/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON with Comments Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:55Z
+ Monthly Trending of JSON with Comments in GitHub
+
+
\ No newline at end of file
diff --git a/json-with-comments/weekly/index.xml b/json-with-comments/weekly/index.xml
new file mode 100644
index 00000000000..720b977ba52
--- /dev/null
+++ b/json-with-comments/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON with Comments Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:54Z
+ Weekly Trending of JSON with Comments in GitHub
+
+
\ No newline at end of file
diff --git a/json/daily/index.xml b/json/daily/index.xml
index 71d3fd63ba4..d94f9a4e4ee 100644
--- a/json/daily/index.xml
+++ b/json/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JSON Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:10Z
+ 2024-12-01T01:33:13Z
Daily Trending of JSON in GitHub
\ No newline at end of file
diff --git a/json/monthly/index.xml b/json/monthly/index.xml
new file mode 100644
index 00000000000..25cd51bab77
--- /dev/null
+++ b/json/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:54Z
+ Monthly Trending of JSON in GitHub
+
+
\ No newline at end of file
diff --git a/json/weekly/index.xml b/json/weekly/index.xml
new file mode 100644
index 00000000000..c402cd995da
--- /dev/null
+++ b/json/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:52Z
+ Weekly Trending of JSON in GitHub
+
+
\ No newline at end of file
diff --git a/json5/daily/index.xml b/json5/daily/index.xml
index 66b108821f3..65bc8a9eda2 100644
--- a/json5/daily/index.xml
+++ b/json5/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JSON5 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:12Z
+ 2024-12-01T01:33:14Z
Daily Trending of JSON5 in GitHub
\ No newline at end of file
diff --git a/json5/monthly/index.xml b/json5/monthly/index.xml
new file mode 100644
index 00000000000..f9b7792391b
--- /dev/null
+++ b/json5/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON5 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:55Z
+ Monthly Trending of JSON5 in GitHub
+
+
\ No newline at end of file
diff --git a/json5/weekly/index.xml b/json5/weekly/index.xml
new file mode 100644
index 00000000000..99444a0baf9
--- /dev/null
+++ b/json5/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSON5 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:53Z
+ Weekly Trending of JSON5 in GitHub
+
+
\ No newline at end of file
diff --git a/jsoniq/daily/index.xml b/jsoniq/daily/index.xml
index 2dbc5c1111c..711d519c913 100644
--- a/jsoniq/daily/index.xml
+++ b/jsoniq/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JSONiq Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:11Z
+ 2024-12-01T01:33:14Z
Daily Trending of JSONiq in GitHub
\ No newline at end of file
diff --git a/jsoniq/monthly/index.xml b/jsoniq/monthly/index.xml
new file mode 100644
index 00000000000..4198b5dc491
--- /dev/null
+++ b/jsoniq/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSONiq Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:56Z
+ Monthly Trending of JSONiq in GitHub
+
+
\ No newline at end of file
diff --git a/jsoniq/weekly/index.xml b/jsoniq/weekly/index.xml
new file mode 100644
index 00000000000..37552ef4d66
--- /dev/null
+++ b/jsoniq/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSONiq Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:53Z
+ Weekly Trending of JSONiq in GitHub
+
+
\ No newline at end of file
diff --git a/jsonld/daily/index.xml b/jsonld/daily/index.xml
index c2e96434cf1..886f2b97528 100644
--- a/jsonld/daily/index.xml
+++ b/jsonld/daily/index.xml
@@ -1,7 +1,7 @@
GitHub JSONLD Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:11Z
+ 2024-12-01T01:33:14Z
Daily Trending of JSONLD in GitHub
\ No newline at end of file
diff --git a/jsonld/monthly/index.xml b/jsonld/monthly/index.xml
new file mode 100644
index 00000000000..2e462086ed5
--- /dev/null
+++ b/jsonld/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSONLD Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:55Z
+ Monthly Trending of JSONLD in GitHub
+
+
\ No newline at end of file
diff --git a/jsonld/weekly/index.xml b/jsonld/weekly/index.xml
new file mode 100644
index 00000000000..907293419f3
--- /dev/null
+++ b/jsonld/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub JSONLD Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:54Z
+ Weekly Trending of JSONLD in GitHub
+
+
\ No newline at end of file
diff --git a/jsonnet/daily/index.xml b/jsonnet/daily/index.xml
index 4baf023d838..a6f8ab45be6 100644
--- a/jsonnet/daily/index.xml
+++ b/jsonnet/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Jsonnet Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:13Z
+ 2024-12-01T01:33:16Z
Daily Trending of Jsonnet in GitHub
\ No newline at end of file
diff --git a/jsonnet/monthly/index.xml b/jsonnet/monthly/index.xml
new file mode 100644
index 00000000000..f24bb11e5bd
--- /dev/null
+++ b/jsonnet/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jsonnet Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:57Z
+ Monthly Trending of Jsonnet in GitHub
+
+
\ No newline at end of file
diff --git a/jsonnet/weekly/index.xml b/jsonnet/weekly/index.xml
new file mode 100644
index 00000000000..0bcf625dfb7
--- /dev/null
+++ b/jsonnet/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Jsonnet Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:55Z
+ Weekly Trending of Jsonnet in GitHub
+
+
\ No newline at end of file
diff --git a/julia/daily/index.xml b/julia/daily/index.xml
index 621df23f7ba..05ca1a0d9c0 100644
--- a/julia/daily/index.xml
+++ b/julia/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Julia Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:13Z
+ 2024-12-01T01:33:16Z
Daily Trending of Julia in GitHub
\ No newline at end of file
diff --git a/julia/monthly/index.xml b/julia/monthly/index.xml
new file mode 100644
index 00000000000..7779c2e7d3b
--- /dev/null
+++ b/julia/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Julia Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:57Z
+ Monthly Trending of Julia in GitHub
+
+
\ No newline at end of file
diff --git a/julia/weekly/index.xml b/julia/weekly/index.xml
new file mode 100644
index 00000000000..e3ce57fd04c
--- /dev/null
+++ b/julia/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Julia Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:55Z
+ Weekly Trending of Julia in GitHub
+
+
\ No newline at end of file
diff --git a/jupyter-notebook/daily/index.xml b/jupyter-notebook/daily/index.xml
index 7703aafd9fe..c380d62ff1e 100644
--- a/jupyter-notebook/daily/index.xml
+++ b/jupyter-notebook/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Jupyter Notebook Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:14Z
+ 2024-12-01T01:33:17Z
Daily Trending of Jupyter Notebook in GitHub
+
+ Zefan-Cai/KVCache-Factory
+ 2024-12-01T01:33:17Z
+ tag:github.com,2024-12-01:/Zefan-Cai/KVCache-Factory
+
+ <p>Unified KV Cache Compression Methods for Auto-Regressive Models</p><hr><p><img src="https://raw.githubusercontent.com/Zefan-Cai/KVCache-Factory/main/assets/logo.png" alt="# KVCache-Facroty"></p>
<h2>News</h2>
<ul>
<li> <p>[2024-11-28] Çhange the name to KVCache-Factory! The target of our project is now a unified framework of KV Cache compression of diverse models.</p> </li>
<li> <p>[2024-06-25] Support multi-GPUs inference with big LLMs now! Try out PyramidKV on LlaMa-3-70B-Instruct!</p> </li>
<li> <p>[2024-06-10] Support PyramidKV, SnapKV, H2O and StreamingLLM at Flash Attention v2, Sdpa Attention now! If your devices (i.e., V100, 3090) does not support Flash Attention v2, you can set attn_implementation=sdpa to try PyramidKV at Sdpa Attention!</p> </li>
</ul>
<h2>TODO:</h2>
<ul>
<li><input type="checkbox" checked disabled> <p>Support implementation of Streaming LLM, H2O and SnapKV</p> </li>
<li><input type="checkbox" checked disabled> <p>Support Mistral model</p> </li>
<li><input type="checkbox" checked disabled> <p>Support implementation of Needle</p> </li>
<li><input type="checkbox" checked disabled> <p>Support KV cache compression without Flash Attention v2 (i.e. Sdpa Attention) for V100</p> </li>
<li><input type="checkbox" checked disabled> <p>Support multi-GPU inference for 70B LlaMa-3</p> </li>
<li><input type="checkbox" disabled> <p>Introduce new functions to support kv cache budget allocation (i.e., supports for percentage.)</p> </li>
<li><input type="checkbox" disabled> <p>Support Mixtral</p> </li>
<li><input type="checkbox" disabled> <p>Support Batch Inference</p> </li>
<li><input type="checkbox" disabled> <p>Support KV cache compression at decoding stage</p> </li>
</ul>
<h2>Performence</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/Zefan-Cai/KVCache-Factory/main/figs/Result.png" width="100%"> <br> </p>
<p align="center"> <img src="https://raw.githubusercontent.com/Zefan-Cai/KVCache-Factory/main/figs/Needle.png" width="80%"> <br> </p>
<h2>Visualization: Inefficient Attention</h2>
<p>The Llama model attention map with 3 documents is represented as follows:</p>
<p align="center"> <img src="https://raw.githubusercontent.com/Zefan-Cai/KVCache-Factory/main/figs/attention_pattern.png" width="100%"> <br> </p>
<p>we provide a notebook <code>visualization.ipynb</code> to reproduce the visualization result of each Llama-2-7b-hf model layer for a given 3 document.</p>
<p>Model attention maps for different layers would be stored at <code>./attention</code></p>
<h2>Requirements</h2>
<pre><code class="language-python">transformers >= 4.41
flash-attn >= 2.4.0.post1
</code></pre>
<h2>Installation</h2>
<pre><code class="language-python">
git clone https://github.com/Zefan-Cai/PyramidKV.git
cd PyramidKV
pip install -r requirements.txt .
</code></pre>
<h2>Inference</h2>
<p>We support inference code on <code>LongBench</code> to repuduce our result.</p>
<p>Please refer to <code>scripts/scripts_longBench/eval.sh</code> to modify the parameters according to your requirements.</p>
<p>Our codebase support Flash Attention v2, Sdpa Attention, etc. The results presented in our paper in based on Flash Attention v2.</p>
<pre><code class="language-bash">export CUDA_VISIBLE_DEVICES=$1
method=$2 # Support PyramidKV, SnapKV, H2O, StreamingLLM
max_capacity_prompts=64 # 128,2048 in paper
attn_implementation=$3 # Support "flash_attention_2", "sdpa", "eager".
source_path=$4
model_path=$5
save_dir=${source_path}"results_long_bench" # path to result save_dir
python3 run_longbench.py \
--method ${method} \
--model_path ${model_path} \
--max_capacity_prompts ${max_capacity_prompts} \
--attn_implementation ${attn_implementation} \
--save_dir ${save_dir} \
--use_cache True
</code></pre>
<ul>
<li>CUDA_VISIBLE_DEVICES: For multi-GPU inference for big LLMs, just need to specify CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7. For single GPU inference, just need to specify CUDA_VISIBLE_DEVICES=0.</li>
<li>model_path: Path to your model. Support "Llama-3-8B-Instruct" for now.</li>
<li>method: Support <code>PyramidKV</code>, <code>SnapKV</code>, <code>StreamingLLM</code>, <code>H2O</code>.</li>
<li>max_capacity_prompts: Selected KV Size in each layer. (e.g. 128, 2048 in paper). When method is "PyramidKV", given that the total number of KV remains unchanged, the specific KV length for each layer will be modified accordingly</li>
<li>save_dir: Path to your dir to save LongBench result.</li>
</ul>
<p>After modifying parameters, run:</p>
<pre><code class="language-bash">
sh scripts/scripts_longBench/eval.sh
</code></pre>
<h2>Needle in haystack</h2>
<p>We support inference code on <code>Needle in haystack</code> to repuduce our result.</p>
<p>Please refer to <code>scripts/scripts_needle/eval.sh</code> to modify the parameters according to your requirements.</p>
<p>Our codebase support Flash Attention v2, Sdpa Attention, etc. The results presented in our paper in based on Flash Attention v2.</p>
<pre><code>
METHOD='pyramidkv' # ['full', 'pyramidkv', 'snapkv', 'streamingllm', 'h2o']
MAX_CAPACITY_PROMPT=96 # [64, 96, 128, 256, 512, 1024, 2048, ...]
attn_implementation="flash_attention_2" # Support "flash_attention_2", "sdpa", "".
TAG=test
# For Llama3-8b
(
python -u run_needle_in_haystack.py --s_len 1000 --e_len 8001\
--model_provider LLaMA3 \
--model_name /mnt/workspace/zhiyuanhu/yuliang/models/llama3-8b_raw \
--attn_implementation ${attn_implementation} \
--step 100 \
--method $METHOD \
--max_capacity_prompt $MAX_CAPACITY_PROMPT \
--model_version LlaMA3_${METHOD}_${MAX_CAPACITY_PROMPT}_${TAG}
) 2>&1 | tee results_needle/logs/LlaMA3_${METHOD}_${MAX_CAPACITY_PROMPT}_${TAG}.log
</code></pre>
<ul>
<li>Both LLaMA3 and Mistral2 inference support on single GPU.</li>
<li>model_provider: LLaMA3 or Mistral2</li>
<li>model_name: Path to your model. Support "Llama-3-8B-Instruct" "Mistral-7B-Instruct-v0.2" and for now.</li>
<li>step: The increase of context length.</li>
<li>method: Support <code>PyramidKV</code>, <code>SnapKV</code>, <code>StreamingLLM</code>, <code>H2O</code>.</li>
<li>max_capacity_prompt: Selected KV Size in each layer. (e.g. 128, 2048 in paper). When method is "PyramidKV", given that the total number of KV remains unchanged, the specific KV length for each layer will be modified accordingly</li>
</ul>
<p>To reproduce our results, run</p>
<pre><code>bash scripts/scripts_needle/eval.sh
</code></pre>
<p>After inference, run</p>
<p><code>python scripts/scripts_needle/visualize.py</code></p>
<p>to draw the img, you should change <code>FOLDER_PATH</code> in <code>visualize.py</code> to your output path (the argument of <code>--model_version</code> in <code>eval.sh</code>).</p>
<h2>Citation</h2>
<p>If you find <strong>PyramidKV</strong> useful for your research and applications, please kindly cite using this BibTeX:</p>
<pre><code class="language-latex">@article{cai2024pyramidkv,
title={Pyramidkv: Dynamic kv cache compression based on pyramidal information funneling},
author={Cai, Zefan and Zhang, Yichi and Gao, Bofei and Liu, Yuliang and Liu, Tianyu and Lu, Keming and Xiong, Wayne and Dong, Yue and Chang, Baobao and Hu, Junjie and Xiao Wen},
journal={arXiv preprint arXiv:2406.02069},
year={2024}
}
</code></pre>
<pre><code class="language-latex">@article{fu2024not,
title={Not All Heads Matter: A Head-Level KV Cache Compression Method with Integrated Retrieval and Reasoning},
author={Fu, Yu and Cai, Zefan and Asi, Abedelkadir and Xiong, Wayne and Dong, Yue and Xiao, Wen},
journal={arXiv preprint arXiv:2410.19258},
year={2024}
}
</code></pre>
<h2>Acknowledgement</h2>
<p>Thanks <strong>[SnapKV]</strong> <a href="https://github.com/FasterDecoding/SnapKV">SnapKV: LLM Knows What You are Looking for Before Generation</a> for providing open-source code to support the expansion of this project.</p>
+
\ No newline at end of file
diff --git a/jupyter-notebook/monthly/index.xml b/jupyter-notebook/monthly/index.xml
new file mode 100644
index 00000000000..35ab3bc0d12
--- /dev/null
+++ b/jupyter-notebook/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Jupyter Notebook Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:54:58Z
+ Monthly Trending of Jupyter Notebook in GitHub
+
+
+ langchain-ai/langchain
+ 2024-12-01T01:54:58Z
+ tag:github.com,2024-12-01:/langchain-ai/langchain
+
+ <p>🦜🔗 Build context-aware reasoning applications</p><hr><h1>🦜️🔗 LangChain</h1>
<p>⚡ Build context-aware reasoning applications ⚡</p>
<p><a href="https://github.com/langchain-ai/langchain/releases"><img src="https://img.shields.io/github/release/langchain-ai/langchain?style=flat-square" alt="Release Notes"></a> <a href="https://github.com/langchain-ai/langchain/actions/workflows/check_diffs.yml"><img src="https://github.com/langchain-ai/langchain/actions/workflows/check_diffs.yml/badge.svg?sanitize=true" alt="CI"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/pypi/l/langchain-core?style=flat-square" alt="PyPI - License"></a> <a href="https://pypistats.org/packages/langchain-core"><img src="https://img.shields.io/pypi/dm/langchain-core?style=flat-square" alt="PyPI - Downloads"></a> <a href="https://star-history.com/#langchain-ai/langchain"><img src="https://img.shields.io/github/stars/langchain-ai/langchain?style=flat-square" alt="GitHub star chart"></a> <a href="https://github.com/langchain-ai/langchain/issues"><img src="https://img.shields.io/github/issues-raw/langchain-ai/langchain?style=flat-square" alt="Open Issues"></a> <a href="https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/langchain-ai/langchain"><img src="https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode&style=flat-square" alt="Open in Dev Containers"></a> <a href="https://codespaces.new/langchain-ai/langchain"><img src="https://github.com/codespaces/badge.svg?sanitize=true" alt="Open in GitHub Codespaces"></a> <a href="https://twitter.com/langchainai"><img src="https://img.shields.io/twitter/url/https/twitter.com/langchainai.svg?style=social&label=Follow%20%40LangChainAI" alt="Twitter"></a></p>
<p>Looking for the JS/TS library? Check out <a href="https://github.com/langchain-ai/langchainjs">LangChain.js</a>.</p>
<p>To help you ship LangChain apps to production faster, check out <a href="https://smith.langchain.com">LangSmith</a>. <a href="https://smith.langchain.com">LangSmith</a> is a unified developer platform for building, testing, and monitoring LLM applications. Fill out <a href="https://www.langchain.com/contact-sales">this form</a> to speak with our sales team.</p>
<h2>Quick Install</h2>
<p>With pip:</p>
<pre><code class="language-bash">pip install langchain
</code></pre>
<p>With conda:</p>
<pre><code class="language-bash">conda install langchain -c conda-forge
</code></pre>
<h2>🤔 What is LangChain?</h2>
<p><strong>LangChain</strong> is a framework for developing applications powered by large language models (LLMs).</p>
<p>For these applications, LangChain simplifies the entire application lifecycle:</p>
<ul>
<li><strong>Open-source libraries</strong>: Build your applications using LangChain's open-source <a href="https://python.langchain.com/docs/concepts/#langchain-expression-language-lcel">building blocks</a>, <a href="https://python.langchain.com/docs/concepts/">components</a>, and <a href="https://python.langchain.com/docs/integrations/providers/">third-party integrations</a>. Use <a href="https://langchain-ai.github.io/langgraph/">LangGraph</a> to build stateful agents with first-class streaming and human-in-the-loop support.</li>
<li><strong>Productionization</strong>: Inspect, monitor, and evaluate your apps with <a href="https://docs.smith.langchain.com/">LangSmith</a> so that you can constantly optimize and deploy with confidence.</li>
<li><strong>Deployment</strong>: Turn your LangGraph applications into production-ready APIs and Assistants with <a href="https://langchain-ai.github.io/langgraph/cloud/">LangGraph Cloud</a>.</li>
</ul>
<h3>Open-source libraries</h3>
<ul>
<li><strong><code>langchain-core</code></strong>: Base abstractions and LangChain Expression Language.</li>
<li><strong><code>langchain-community</code></strong>: Third party integrations.
<ul>
<li>Some integrations have been further split into <strong>partner packages</strong> that only rely on <strong><code>langchain-core</code></strong>. Examples include <strong><code>langchain_openai</code></strong> and <strong><code>langchain_anthropic</code></strong>.</li>
</ul> </li>
<li><strong><code>langchain</code></strong>: Chains, agents, and retrieval strategies that make up an application's cognitive architecture.</li>
<li><strong><a href="https://langchain-ai.github.io/langgraph/"><code>LangGraph</code></a></strong>: A library for building robust and stateful multi-actor applications with LLMs by modeling steps as edges and nodes in a graph. Integrates smoothly with LangChain, but can be used without it. To learn more about LangGraph, check out our first LangChain Academy course, <em>Introduction to LangGraph</em>, available <a href="https://academy.langchain.com/courses/intro-to-langgraph">here</a>.</li>
</ul>
<h3>Productionization:</h3>
<ul>
<li><strong><a href="https://docs.smith.langchain.com/">LangSmith</a></strong>: A developer platform that lets you debug, test, evaluate, and monitor chains built on any LLM framework and seamlessly integrates with LangChain.</li>
</ul>
<h3>Deployment:</h3>
<ul>
<li><strong><a href="https://langchain-ai.github.io/langgraph/cloud/">LangGraph Cloud</a></strong>: Turn your LangGraph applications into production-ready APIs and Assistants.</li>
</ul>
<p><img src="https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/static/svg/langchain_stack_112024.svg#gh-light-mode-only" alt="Diagram outlining the hierarchical organization of the LangChain framework, displaying the interconnected parts across multiple layers." title="LangChain Architecture Overview"> <img src="https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/static/svg/langchain_stack_112024_dark.svg#gh-dark-mode-only" alt="Diagram outlining the hierarchical organization of the LangChain framework, displaying the interconnected parts across multiple layers." title="LangChain Architecture Overview"></p>
<h2>🧱 What can you build with LangChain?</h2>
<p><strong>❓ Question answering with RAG</strong></p>
<ul>
<li><a href="https://python.langchain.com/docs/tutorials/rag/">Documentation</a></li>
<li>End-to-end Example: <a href="https://chat.langchain.com">Chat LangChain</a> and <a href="https://github.com/langchain-ai/chat-langchain">repo</a></li>
</ul>
<p><strong>🧱 Extracting structured output</strong></p>
<ul>
<li><a href="https://python.langchain.com/docs/tutorials/extraction/">Documentation</a></li>
<li>End-to-end Example: <a href="https://github.com/langchain-ai/langchain-extract/">SQL Llama2 Template</a></li>
</ul>
<p><strong>🤖 Chatbots</strong></p>
<ul>
<li><a href="https://python.langchain.com/docs/tutorials/chatbot/">Documentation</a></li>
<li>End-to-end Example: <a href="https://weblangchain.vercel.app">Web LangChain (web researcher chatbot)</a> and <a href="https://github.com/langchain-ai/weblangchain">repo</a></li>
</ul>
<p>And much more! Head to the <a href="https://python.langchain.com/docs/tutorials/">Tutorials</a> section of the docs for more.</p>
<h2>🚀 How does LangChain help?</h2>
<p>The main value props of the LangChain libraries are:</p>
<ol>
<li><strong>Components</strong>: composable building blocks, tools and integrations for working with language models. Components are modular and easy-to-use, whether you are using the rest of the LangChain framework or not</li>
<li><strong>Off-the-shelf chains</strong>: built-in assemblages of components for accomplishing higher-level tasks</li>
</ol>
<p>Off-the-shelf chains make it easy to get started. Components make it easy to customize existing chains and build new ones.</p>
<h2>LangChain Expression Language (LCEL)</h2>
<p>LCEL is a key part of LangChain, allowing you to build and organize chains of processes in a straightforward, declarative manner. It was designed to support taking prototypes directly into production without needing to alter any code. This means you can use LCEL to set up everything from basic "prompt + LLM" setups to intricate, multi-step workflows.</p>
<ul>
<li><strong><a href="https://python.langchain.com/docs/concepts/#langchain-expression-language-lcel">Overview</a></strong>: LCEL and its benefits</li>
<li><strong><a href="https://python.langchain.com/docs/concepts/#runnable-interface">Interface</a></strong>: The standard Runnable interface for LCEL objects</li>
<li><strong><a href="https://python.langchain.com/docs/how_to/#langchain-expression-language-lcel">Primitives</a></strong>: More on the primitives LCEL includes</li>
<li><strong><a href="https://python.langchain.com/docs/how_to/lcel_cheatsheet/">Cheatsheet</a></strong>: Quick overview of the most common usage patterns</li>
</ul>
<h2>Components</h2>
<p>Components fall into the following <strong>modules</strong>:</p>
<p><strong>📃 Model I/O</strong></p>
<p>This includes <a href="https://python.langchain.com/docs/concepts/#prompt-templates">prompt management</a>, <a href="https://python.langchain.com/docs/concepts/#example-selectors">prompt optimization</a>, a generic interface for <a href="https://python.langchain.com/docs/concepts/#chat-models">chat models</a> and <a href="https://python.langchain.com/docs/concepts/#llms">LLMs</a>, and common utilities for working with <a href="https://python.langchain.com/docs/concepts/#output-parsers">model outputs</a>.</p>
<p><strong>📚 Retrieval</strong></p>
<p>Retrieval Augmented Generation involves <a href="https://python.langchain.com/docs/concepts/#document-loaders">loading data</a> from a variety of sources, <a href="https://python.langchain.com/docs/concepts/#text-splitters">preparing it</a>, then <a href="https://python.langchain.com/docs/concepts/#retrievers">searching over (a.k.a. retrieving from)</a> it for use in the generation step.</p>
<p><strong>🤖 Agents</strong></p>
<p>Agents allow an LLM autonomy over how a task is accomplished. Agents make decisions about which Actions to take, then take that Action, observe the result, and repeat until the task is complete. LangChain provides a <a href="https://python.langchain.com/docs/concepts/#agents">standard interface for agents</a>, along with <a href="https://github.com/langchain-ai/langgraph">LangGraph</a> for building custom agents.</p>
<h2>📖 Documentation</h2>
<p>Please see <a href="https://python.langchain.com">here</a> for full documentation, which includes:</p>
<ul>
<li><a href="https://python.langchain.com/docs/introduction/">Introduction</a>: Overview of the framework and the structure of the docs.</li>
<li><a href="https://python.langchain.com/docs/tutorials/">Tutorials</a>: If you're looking to build something specific or are more of a hands-on learner, check out our tutorials. This is the best place to get started.</li>
<li><a href="https://python.langchain.com/docs/how_to/">How-to guides</a>: Answers to “How do I….?” type questions. These guides are goal-oriented and concrete; they're meant to help you complete a specific task.</li>
<li><a href="https://python.langchain.com/docs/concepts/">Conceptual guide</a>: Conceptual explanations of the key parts of the framework.</li>
<li><a href="https://api.python.langchain.com">API Reference</a>: Thorough documentation of every class and method.</li>
</ul>
<h2>🌐 Ecosystem</h2>
<ul>
<li><a href="https://docs.smith.langchain.com/">🦜🛠️ LangSmith</a>: Trace and evaluate your language model applications and intelligent agents to help you move from prototype to production.</li>
<li><a href="https://langchain-ai.github.io/langgraph/">🦜🕸️ LangGraph</a>: Create stateful, multi-actor applications with LLMs. Integrates smoothly with LangChain, but can be used without it.</li>
<li><a href="https://langchain-ai.github.io/langgraph/concepts/#langgraph-platform">🦜🕸️ LangGraph Platform</a>: Deploy LLM applications built with LangGraph into production.</li>
</ul>
<h2>💁 Contributing</h2>
<p>As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.</p>
<p>For detailed information on how to contribute, see <a href="https://python.langchain.com/docs/contributing/">here</a>.</p>
<h2>🌟 Contributors</h2>
<p><a href="https://github.com/langchain-ai/langchain/graphs/contributors"><img src="https://contrib.rocks/image?repo=langchain-ai/langchain&max=2000" alt="langchain contributors"></a></p>
+
+
+ facebookresearch/segment-anything
+ 2024-12-01T01:54:58Z
+ tag:github.com,2024-12-01:/facebookresearch/segment-anything
+
+ <p>The repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.</p><hr><h2>Latest updates -- SAM 2: Segment Anything in Images and Videos</h2>
<p>Please check out our new release on <a href="https://github.com/facebookresearch/segment-anything-2"><strong>Segment Anything Model 2 (SAM 2)</strong></a>.</p>
<ul>
<li>SAM 2 code: <a href="https://github.com/facebookresearch/segment-anything-2">https://github.com/facebookresearch/segment-anything-2</a></li>
<li>SAM 2 demo: <a href="https://sam2.metademolab.com/">https://sam2.metademolab.com/</a></li>
<li>SAM 2 paper: <a href="https://arxiv.org/abs/2408.00714">https://arxiv.org/abs/2408.00714</a></li>
</ul>
<p><img src="https://github.com/facebookresearch/segment-anything-2/raw/main/assets/model_diagram.png?raw=true" alt="SAM 2 architecture"></p>
<p><strong>Segment Anything Model 2 (SAM 2)</strong> is a foundation model towards solving promptable visual segmentation in images and videos. We extend SAM to video by considering images as a video with a single frame. The model design is a simple transformer architecture with streaming memory for real-time video processing. We build a model-in-the-loop data engine, which improves model and data via user interaction, to collect <a href="https://ai.meta.com/datasets/segment-anything-video"><strong>our SA-V dataset</strong></a>, the largest video segmentation dataset to date. SAM 2 trained on our data provides strong performance across a wide range of tasks and visual domains.</p>
<h1>Segment Anything</h1>
<p><strong><a href="https://ai.facebook.com/research/">Meta AI Research, FAIR</a></strong></p>
<p><a href="https://alexander-kirillov.github.io/">Alexander Kirillov</a>, <a href="https://ericmintun.github.io/">Eric Mintun</a>, <a href="https://nikhilaravi.com/">Nikhila Ravi</a>, <a href="https://hanzimao.me/">Hanzi Mao</a>, Chloe Rolland, Laura Gustafson, <a href="https://tetexiao.com">Tete Xiao</a>, <a href="https://www.spencerwhitehead.com/">Spencer Whitehead</a>, Alex Berg, Wan-Yen Lo, <a href="https://pdollar.github.io/">Piotr Dollar</a>, <a href="https://www.rossgirshick.info/">Ross Girshick</a></p>
<p>[<a href="https://ai.facebook.com/research/publications/segment-anything/"><code>Paper</code></a>] [<a href="https://segment-anything.com/"><code>Project</code></a>] [<a href="https://segment-anything.com/demo"><code>Demo</code></a>] [<a href="https://segment-anything.com/dataset/index.html"><code>Dataset</code></a>] [<a href="https://ai.facebook.com/blog/segment-anything-foundation-model-image-segmentation/"><code>Blog</code></a>] [<a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/#citing-segment-anything"><code>BibTeX</code></a>]</p>
<p><img src="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/assets/model_diagram.png?raw=true" alt="SAM design"></p>
<p>The <strong>Segment Anything Model (SAM)</strong> produces high quality object masks from input prompts such as points or boxes, and it can be used to generate masks for all objects in an image. It has been trained on a <a href="https://segment-anything.com/dataset/index.html">dataset</a> of 11 million images and 1.1 billion masks, and has strong zero-shot performance on a variety of segmentation tasks.</p>
<p float="left"> <img src="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/assets/masks1.png?raw=true" width="37.25%"> <img src="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/assets/masks2.jpg?raw=true" width="61.5%"> </p>
<h2>Installation</h2>
<p>The code requires <code>python>=3.8</code>, as well as <code>pytorch>=1.7</code> and <code>torchvision>=0.8</code>. Please follow the instructions <a href="https://pytorch.org/get-started/locally/">here</a> to install both PyTorch and TorchVision dependencies. Installing both PyTorch and TorchVision with CUDA support is strongly recommended.</p>
<p>Install Segment Anything:</p>
<pre><code>pip install git+https://github.com/facebookresearch/segment-anything.git
</code></pre>
<p>or clone the repository locally and install with</p>
<pre><code>git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything; pip install -e .
</code></pre>
<p>The following optional dependencies are necessary for mask post-processing, saving masks in COCO format, the example notebooks, and exporting the model in ONNX format. <code>jupyter</code> is also required to run the example notebooks.</p>
<pre><code>pip install opencv-python pycocotools matplotlib onnxruntime onnx
</code></pre>
<h2><a name="GettingStarted"></a>Getting Started</h2>
<p>First download a <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/#model-checkpoints">model checkpoint</a>. Then the model can be used in just a few lines to get masks from a given prompt:</p>
<pre><code>from segment_anything import SamPredictor, sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
predictor = SamPredictor(sam)
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
</code></pre>
<p>or generate masks for an entire image:</p>
<pre><code>from segment_anything import SamAutomaticMaskGenerator, sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(<your_image>)
</code></pre>
<p>Additionally, masks can be generated for images from the command line:</p>
<pre><code>python scripts/amg.py --checkpoint <path/to/checkpoint> --model-type <model_type> --input <image_or_folder> --output <path/to/output>
</code></pre>
<p>See the examples notebooks on <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/predictor_example.ipynb">using SAM with prompts</a> and <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/automatic_mask_generator_example.ipynb">automatically generating masks</a> for more details.</p>
<p float="left"> <img src="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/assets/notebook1.png?raw=true" width="49.1%"> <img src="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/assets/notebook2.png?raw=true" width="48.9%"> </p>
<h2>ONNX Export</h2>
<p>SAM's lightweight mask decoder can be exported to ONNX format so that it can be run in any environment that supports ONNX runtime, such as in-browser as showcased in the <a href="https://segment-anything.com/demo">demo</a>. Export the model with</p>
<pre><code>python scripts/export_onnx_model.py --checkpoint <path/to/checkpoint> --model-type <model_type> --output <path/to/output>
</code></pre>
<p>See the <a href="https://github.com/facebookresearch/segment-anything/raw/main/notebooks/onnx_model_example.ipynb">example notebook</a> for details on how to combine image preprocessing via SAM's backbone with mask prediction using the ONNX model. It is recommended to use the latest stable version of PyTorch for ONNX export.</p>
<h3>Web demo</h3>
<p>The <code>demo/</code> folder has a simple one page React app which shows how to run mask prediction with the exported ONNX model in a web browser with multithreading. Please see <a href="https://github.com/facebookresearch/segment-anything/raw/main/demo/README.md"><code>demo/README.md</code></a> for more details.</p>
<h2><a name="Models"></a>Model Checkpoints</h2>
<p>Three model versions of the model are available with different backbone sizes. These models can be instantiated by running</p>
<pre><code>from segment_anything import sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
</code></pre>
<p>Click the links below to download the checkpoint for the corresponding model type.</p>
<ul>
<li><strong><code>default</code> or <code>vit_h</code>: <a href="https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth">ViT-H SAM model.</a></strong></li>
<li><code>vit_l</code>: <a href="https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth">ViT-L SAM model.</a></li>
<li><code>vit_b</code>: <a href="https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth">ViT-B SAM model.</a></li>
</ul>
<h2>Dataset</h2>
<p>See <a href="https://ai.facebook.com/datasets/segment-anything/">here</a> for an overview of the datastet. The dataset can be downloaded <a href="https://ai.facebook.com/datasets/segment-anything-downloads/">here</a>. By downloading the datasets you agree that you have read and accepted the terms of the SA-1B Dataset Research License.</p>
<p>We save masks per image as a json file. It can be loaded as a dictionary in python in the below format.</p>
<pre><code class="language-python">{
"image" : image_info,
"annotations" : [annotation],
}
image_info {
"image_id" : int, # Image id
"width" : int, # Image width
"height" : int, # Image height
"file_name" : str, # Image filename
}
annotation {
"id" : int, # Annotation id
"segmentation" : dict, # Mask saved in COCO RLE format.
"bbox" : [x, y, w, h], # The box around the mask, in XYWH format
"area" : int, # The area in pixels of the mask
"predicted_iou" : float, # The model's own prediction of the mask's quality
"stability_score" : float, # A measure of the mask's quality
"crop_box" : [x, y, w, h], # The crop of the image used to generate the mask, in XYWH format
"point_coords" : [[x, y]], # The point coordinates input to the model to generate the mask
}
</code></pre>
<p>Image ids can be found in sa_images_ids.txt which can be downloaded using the above <a href="https://ai.facebook.com/datasets/segment-anything-downloads/">link</a> as well.</p>
<p>To decode a mask in COCO RLE format into binary:</p>
<pre><code>from pycocotools import mask as mask_utils
mask = mask_utils.decode(annotation["segmentation"])
</code></pre>
<p>See <a href="https://github.com/cocodataset/cocoapi/raw/master/PythonAPI/pycocotools/mask.py">here</a> for more instructions to manipulate masks stored in RLE format.</p>
<h2>License</h2>
<p>The model is licensed under the <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/LICENSE">Apache 2.0 license</a>.</p>
<h2>Contributing</h2>
<p>See <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/CONTRIBUTING.md">contributing</a> and the <a href="https://raw.githubusercontent.com/facebookresearch/segment-anything/main/CODE_OF_CONDUCT.md">code of conduct</a>.</p>
<h2>Contributors</h2>
<p>The Segment Anything project was made possible with the help of many contributors (alphabetical):</p>
<p>Aaron Adcock, Vaibhav Aggarwal, Morteza Behrooz, Cheng-Yang Fu, Ashley Gabriel, Ahuva Goldstand, Allen Goodman, Sumanth Gurram, Jiabo Hu, Somya Jain, Devansh Kukreja, Robert Kuo, Joshua Lane, Yanghao Li, Lilian Luong, Jitendra Malik, Mallika Malhotra, William Ngan, Omkar Parkhi, Nikhil Raina, Dirk Rowe, Neil Sejoor, Vanessa Stark, Bala Varadarajan, Bram Wasti, Zachary Winstrom</p>
<h2>Citing Segment Anything</h2>
<p>If you use SAM or SA-1B in your research, please use the following BibTeX entry.</p>
<pre><code>@article{kirillov2023segany,
title={Segment Anything},
author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
journal={arXiv:2304.02643},
year={2023}
}
</code></pre>
+
+
+ datawhalechina/self-llm
+ 2024-12-01T01:54:58Z
+ tag:github.com,2024-12-01:/datawhalechina/self-llm
+
+ <p>《开源大模型食用指南》基于Linux环境快速部署开源大模型,更适合中国宝宝的部署教程</p><hr><div align="center">
<img src="https://raw.githubusercontent.com/datawhalechina/self-llm/master/images/head-img.png">
<h1>开源大模型食用指南</h1>
</div>
<p> 本项目是一个围绕开源大模型、针对国内初学者、基于 Linux 平台的中国宝宝专属大模型教程,针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导,简化开源大模型的部署、使用和应用流程,让更多的普通学生、研究者更好地使用开源大模型,帮助开源、自由的大模型更快融入到普通学习者的生活中。</p>
<p> 本项目的主要内容包括:</p>
<ol>
<li>基于 Linux 平台的开源 LLM 环境配置指南,针对不同模型要求提供不同的详细环境配置步骤;</li>
<li>针对国内外主流开源 LLM 的部署使用教程,包括 LLaMA、ChatGLM、InternLM 等;</li>
<li>开源 LLM 的部署应用指导,包括命令行调用、在线 Demo 部署、LangChain 框架集成等;</li>
<li>开源 LLM 的全量微调、高效微调方法,包括分布式全量微调、LoRA、ptuning 等。</li>
</ol>
<p> <strong>项目的主要内容就是教程,让更多的学生和未来的从业者了解和熟悉开源大模型的食用方法!任何人都可以提出issue或是提交PR,共同构建维护这个项目。</strong></p>
<p> 想要深度参与的同学可以联系我们,我们会将你加入到项目的维护者中。</p>
<blockquote>
<p> <em><strong>学习建议:本项目的学习建议是,先学习环境配置,然后再学习模型的部署使用,最后再学习微调。因为环境配置是基础,模型的部署使用是基础,微调是进阶。初学者可以选择Qwen1.5,InternLM2,MiniCPM等模型优先学习。</strong></em></p>
</blockquote>
<blockquote>
<p>注:如果有同学希望了解大模型的模型构成,以及从零手写RAG、Agent和Eval等任务,可以学习Datawhale的另一个项目<a href="https://github.com/datawhalechina/tiny-universe">Tiny-Universe</a>,大模型是当下深度学习领域的热点,但现有的大部分大模型教程只在于教给大家如何调用api完成大模型的应用,而很少有人能够从原理层面讲清楚模型结构、RAG、Agent 以及 Eval。所以该仓库会提供全部手写,不采用调用api的形式,完成大模型的 RAG 、 Agent 、Eval 任务。</p>
</blockquote>
<blockquote>
<p>注:考虑到有同学希望在学习本项目之前,希望学习大模型的理论部分,如果想要进一步深入学习 LLM 的理论基础,并在理论的基础上进一步认识、应用 LLM,可以参考 Datawhale 的 <a href="https://github.com/datawhalechina/so-large-lm.git">so-large-llm</a>课程。</p>
</blockquote>
<blockquote>
<p>注:如果有同学在学习本课程之后,想要自己动手开发大模型应用。同学们可以参考 Datawhale 的 <a href="https://github.com/datawhalechina/llm-universe">动手学大模型应用开发</a> 课程,该项目是一个面向小白开发者的大模型应用开发教程,旨在基于阿里云服务器,结合个人知识库助手项目,向同学们完整的呈现大模型应用开发流程。</p>
</blockquote>
<h2>项目意义</h2>
<p> 什么是大模型?</p>
<blockquote>
<p>大模型(LLM)狭义上指基于深度学习算法进行训练的自然语言处理(NLP)模型,主要应用于自然语言理解和生成等领域,广义上还包括机器视觉(CV)大模型、多模态大模型和科学计算大模型等。</p>
</blockquote>
<p> 百模大战正值火热,开源 LLM 层出不穷。如今国内外已经涌现了众多优秀开源 LLM,国外如 LLaMA、Alpaca,国内如 ChatGLM、BaiChuan、InternLM(书生·浦语)等。开源 LLM 支持用户本地部署、私域微调,每一个人都可以在开源 LLM 的基础上打造专属于自己的独特大模型。</p>
<p> 然而,当前普通学生和用户想要使用这些大模型,需要具备一定的技术能力,才能完成模型的部署和使用。对于层出不穷又各有特色的开源 LLM,想要快速掌握一个开源 LLM 的应用方法,是一项比较有挑战的任务。</p>
<p> 本项目旨在首先基于核心贡献者的经验,实现国内外主流开源 LLM 的部署、使用与微调教程;在实现主流 LLM 的相关部分之后,我们希望充分聚集共创者,一起丰富这个开源 LLM 的世界,打造更多、更全面特色 LLM 的教程。星火点点,汇聚成海。</p>
<p> <em><strong>我们希望成为 LLM 与普罗大众的阶梯,以自由、平等的开源精神,拥抱更恢弘而辽阔的 LLM 世界。</strong></em></p>
<h2>项目受众</h2>
<p> 本项目适合以下学习者:</p>
<ul>
<li>想要使用或体验 LLM,但无条件获得或使用相关 API;</li>
<li>希望长期、低成本、大量应用 LLM;</li>
<li>对开源 LLM 感兴趣,想要亲自上手开源 LLM;</li>
<li>NLP 在学,希望进一步学习 LLM;</li>
<li>希望结合开源 LLM,打造领域特色的私域 LLM;</li>
<li>以及最广大、最普通的学生群体。</li>
</ul>
<h2>项目规划及进展</h2>
<p> 本项目拟围绕开源 LLM 应用全流程组织,包括环境配置及使用、部署应用、微调等,每个部分覆盖主流及特点开源 LLM:</p>
<h3>Example 系列</h3>
<ul>
<li> <p><a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/examples/Chat-%E5%AC%9B%E5%AC%9B/readme.md">Chat-嬛嬛</a>: Chat-甄嬛是利用《甄嬛传》剧本中所有关于甄嬛的台词和语句,基于LLM进行LoRA微调得到的模仿甄嬛语气的聊天语言模型。</p> </li>
<li> <p><a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/examples/Tianji-%E5%A4%A9%E6%9C%BA/readme.md">Tianji-天机</a>:天机是一款基于人情世故社交场景,涵盖提示词工程 、智能体制作、 数据获取与模型微调、RAG 数据清洗与使用等全流程的大语言模型系统应用教程。</p> </li>
</ul>
<h3>已支持模型</h3>
<ul>
<li> <p><a href="https://github.com/QwenLM/Qwen2.5-Coder">Qwen2.5-Coder</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/01-Qwen2.5-Coder-7B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2.5-Coder-7B-Instruct FastApi部署调用</a> @赵文恺</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/02-Qwen2.5-7B-Instruct%20Langchain%20%E6%8E%A5%E5%85%A5.md">Qwen2.5-Coder-7B-Instruct Langchian接入</a> @杨晨旭</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/03-Qwen2.5-Coder-7B-Instruct%20WebDemo%E9%83%A8%E7%BD%B2.md">Qwen2.5-Coder-7B-Instruct WebDemo 部署</a> @王泽宇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/04-Qwen2.5-Coder-7B-Instruct%20vLLM%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2.5-Coder-7B-Instruct vLLM 部署</a> @王泽宇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/Qwen2.5-Coder-7B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen2.5-Coder-7B-Instruct Lora 微调</a> @荞麦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5-Coder/05-Qwen2.5-Coder-7B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83%20SwanLab%20%E5%8F%AF%E8%A7%86%E5%8C%96%E8%AE%B0%E5%BD%95%E7%89%88.md">Qwen2.5-Coder-7B-Instruct Lora 微调 SwanLab 可视化记录版</a> @杨卓</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen2-VL">Qwen2-vl</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2-VL/01-Qwen2-VL-2B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2-vl-2B FastApi 部署调用</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2-VL/02-Qwen2-VL-2B-Instruct%20Web%20Demo%E9%83%A8%E7%BD%B2.md">Qwen2-vl-2B WebDemo 部署</a> @赵伟</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2-VL/03-Qwen2-VL-2B-Instruct%20vLLM%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2-vl-2B vLLM 部署</a> @荞麦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2-VL/04-Qwen2-VL-2B%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen2-vl-2B Lora 微调</a> @李柯辰</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2-VL/05-Qwen2-VL-2B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83%20SwanLab%20%E5%8F%AF%E8%A7%86%E5%8C%96%E8%AE%B0%E5%BD%95%E7%89%88.md">Qwen2-vl-2B Lora 微调 SwanLab 可视化记录版</a> @林泽毅</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen2.5">Qwen2.5</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/01-Qwen2.5-7B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2.5-7B-Instruct FastApi 部署调用</a> @娄天奥</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/02-Qwen2.5-7B-Instruct%20Langchain%20%E6%8E%A5%E5%85%A5.md">Qwen2.5-7B-Instruct langchain 接入</a> @娄天奥</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/03-Qwen2.5-7B-Instruct%20vLLM%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2.5-7B-Instruct vLLM 部署调用</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/04-Qwen2_5-7B-Instruct%20WebDemo%E9%83%A8%E7%BD%B2.md">Qwen2.5-7B-Instruct WebDemo 部署</a> @高立业</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/05-Qwen2.5-7B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen2.5-7B-Instruct Lora 微调</a> @左春生</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/06-Qwen2.5-7B-Instruct%20o1-like%20%E6%8E%A8%E7%90%86%E9%93%BE%E5%AE%9E%E7%8E%B0.md">Qwen2.5-7B-Instruct o1-like 推理链实现</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2.5/07-Qwen2.5-7B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83%20SwanLab%E5%8F%AF%E8%A7%86%E5%8C%96%E8%AE%B0%E5%BD%95%E7%89%88.md">Qwen2.5-7B-Instruct Lora 微调 SwanLab 可视化记录版</a> @林泽毅</li>
</ul> </li>
<li> <p><a href="https://machinelearning.apple.com/research/openelm">Apple OpenELM</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/OpenELM/01-OpenELM-3B-Instruct%20FastApi%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">OpenELM-3B-Instruct FastApi 部署调用</a> @王泽宇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/OpenELM/02-OpenELM-3B-Instruct%20Lora%E5%BE%AE%E8%B0%83.md">OpenELM-3B-Instruct Lora 微调</a> @王泽宇</li>
</ul> </li>
<li> <p><a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct">Llama3_1-8B-Instruct</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Llama3_1/01-Llama3_1-8B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Llama3_1-8B-Instruct FastApi 部署调用</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Llama3_1/02-Llama3_1-8B-Instruct%20langchain%E6%8E%A5%E5%85%A5.md">Llama3_1-8B-Instruct langchain 接入</a> @张晋</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Llama3_1/03-Llama3_1-8B-Instruct%20WebDemo%E9%83%A8%E7%BD%B2.md">Llama3_1-8B-Instruct WebDemo 部署</a> @张晋</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Llama3_1/04-Llama3_1-8B--Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">Llama3_1-8B-Instruct Lora 微调</a> @不要葱姜蒜</li>
</ul> </li>
<li> <p><a href="https://huggingface.co/google/gemma-2-9b-it">Gemma-2-9b-it</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma2/01-Gemma-2-9b-it%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Gemma-2-9b-it FastApi 部署调用</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma2/02-Gemma-2-9b-it%20langchain%20%E6%8E%A5%E5%85%A5.md">Gemma-2-9b-it langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma2/03-Gemma-2-9b-it%20WebDemo%20%E9%83%A8%E7%BD%B2.md">Gemma-2-9b-it WebDemo 部署</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma2/04-Gemma-2-9b-it%20peft%20lora%E5%BE%AE%E8%B0%83.md">Gemma-2-9b-it Peft Lora 微调</a> @不要葱姜蒜</li>
</ul> </li>
<li> <p><a href="https://github.com/IEIT-Yuan/Yuan-2.0">Yuan2.0</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0/01-Yuan2.0-2B%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Yuan2.0-2B FastApi 部署调用</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0/02-Yuan2.0-2B%20Langchain%20%E6%8E%A5%E5%85%A5.md">Yuan2.0-2B Langchain 接入</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0/03-Yuan2.0-2B%20WebDemo%E9%83%A8%E7%BD%B2.md">Yuan2.0-2B WebDemo部署</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0/04-Yuan2.0-2B%20vLLM%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Yuan2.0-2B vLLM部署调用</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0/05-Yuan2.0-2B%20Lora%E5%BE%AE%E8%B0%83.md">Yuan2.0-2B Lora微调</a> @张帆</li>
</ul> </li>
<li> <p><a href="https://github.com/IEIT-Yuan/Yuan2.0-M32">Yuan2.0-M32</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0-M32/01-Yuan2.0-M32%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Yuan2.0-M32 FastApi 部署调用</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0-M32/02-Yuan2.0-M32%20Langchain%20%E6%8E%A5%E5%85%A5.md">Yuan2.0-M32 Langchain 接入</a> @张帆</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yuan2.0-M32/03-Yuan2.0-M32%20WebDemo%E9%83%A8%E7%BD%B2.md">Yuan2.0-M32 WebDemo部署</a> @张帆</li>
</ul> </li>
<li> <p><a href="https://github.com/deepseek-ai/DeepSeek-Coder-V2">DeepSeek-Coder-V2</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek-Coder-V2/01-DeepSeek-Coder-V2-Lite-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">DeepSeek-Coder-V2-Lite-Instruct FastApi 部署调用</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek-Coder-V2/02-DeepSeek-Coder-V2-Lite-Instruct%20%E6%8E%A5%E5%85%A5%20LangChain.md">DeepSeek-Coder-V2-Lite-Instruct langchain 接入</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek-Coder-V2/03-DeepSeek-Coder-V2-Lite-Instruct%20WebDemo%20%E9%83%A8%E7%BD%B2.md">DeepSeek-Coder-V2-Lite-Instruct WebDemo 部署</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek-Coder-V2/04-DeepSeek-Coder-V2-Lite-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">DeepSeek-Coder-V2-Lite-Instruct Lora 微调</a> @余洋</li>
</ul> </li>
<li> <p><a href="https://github.com/bilibili/Index-1.9B">哔哩哔哩 Index-1.9B</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/bilibili_Index-1.9B/01-Index-1.9B-chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Index-1.9B-Chat FastApi 部署调用</a> @邓恺俊</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/bilibili_Index-1.9B/02-Index-1.9B-Chat%20%E6%8E%A5%E5%85%A5%20LangChain.md">Index-1.9B-Chat langchain 接入</a> @张友东</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/bilibili_Index-1.9B/03-Index-1.9B-chat%20WebDemo%E9%83%A8%E7%BD%B2.md">Index-1.9B-Chat WebDemo 部署</a> @九月</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/bilibili_Index-1.9B/04-Index-1.9B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">Index-1.9B-Chat Lora 微调</a> @姜舒凡</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen2">Qwen2</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2/01-Qwen2-7B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2-7B-Instruct FastApi 部署调用</a> @康婧淇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2/02-Qwen2-7B-Instruct%20Langchain%20%E6%8E%A5%E5%85%A5.md">Qwen2-7B-Instruct langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2/03-Qwen2-7B-Instruct%20WebDemo%E9%83%A8%E7%BD%B2.md">Qwen2-7B-Instruct WebDemo 部署</a> @三水</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2/04-Qwen2-7B-Instruct%20vLLM%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen2-7B-Instruct vLLM 部署调用</a> @姜舒凡</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen2/05-Qwen2-7B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen2-7B-Instruct Lora 微调</a> @散步</li>
</ul> </li>
<li> <p><a href="https://github.com/THUDM/GLM-4.git">GLM-4</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/GLM-4/01-GLM-4-9B-chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">GLM-4-9B-chat FastApi 部署调用</a> @张友东</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/GLM-4/02-GLM-4-9B-chat%20langchain%20%E6%8E%A5%E5%85%A5.md">GLM-4-9B-chat langchain 接入</a> @谭逸珂</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/GLM-4/03-GLM-4-9B-Chat%20WebDemo.md">GLM-4-9B-chat WebDemo 部署</a> @何至轩</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/GLM-4/04-GLM-4-9B-Chat%20vLLM%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">GLM-4-9B-chat vLLM 部署</a> @王熠明</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/GLM-4/05-GLM-4-9B-chat%20Lora%20%E5%BE%AE%E8%B0%83.md">GLM-4-9B-chat Lora 微调</a> @肖鸿儒</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen1.5.git">Qwen 1.5</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/01-Qwen1.5-7B-Chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen1.5-7B-chat FastApi 部署调用</a> @颜鑫</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/02-Qwen1.5-7B-Chat%20%E6%8E%A5%E5%85%A5langchain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">Qwen1.5-7B-chat langchain 接入</a> @颜鑫</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/03-Qwen1.5-7B-Chat%20WebDemo.md">Qwen1.5-7B-chat WebDemo 部署</a> @颜鑫</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/04-Qwen1.5-7B-chat%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen1.5-7B-chat Lora 微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/05-Qwen1.5-7B-Chat-GPTQ-Int4%20%20WebDemo.md">Qwen1.5-72B-chat-GPTQ-Int4 部署环境</a> @byx020119</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/06-Qwen1.5-MoE-A2.7B.md">Qwen1.5-MoE-chat Transformers 部署调用</a> @丁悦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/07-Qwen1.5-7B-Chat%20vLLM%20%E6%8E%A8%E7%90%86%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen1.5-7B-chat vLLM推理部署</a> @高立业</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen1.5/08-Qwen1.5-7B-chat%20LoRA%E5%BE%AE%E8%B0%83%E6%8E%A5%E5%85%A5%E5%AE%9E%E9%AA%8C%E7%AE%A1%E7%90%86.md">Qwen1.5-7B-chat Lora 微调 接入SwanLab实验管理平台</a> @黄柏特</li>
</ul> </li>
<li> <p><a href="https://huggingface.co/google/gemma-7b-it">谷歌-Gemma</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma/01-Gemma-2B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">gemma-2b-it FastApi 部署调用 </a> @东东</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma/02-Gemma-2B-Instruct%20langchain%20%E6%8E%A5%E5%85%A5.md">gemma-2b-it langchain 接入 </a> @东东</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma/03-Gemma-2B-Instruct%20WebDemo%20%E9%83%A8%E7%BD%B2.md">gemma-2b-it WebDemo 部署 </a> @东东</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Gemma/04-Gemma-2B-Instruct%20Lora%E5%BE%AE%E8%B0%83.md">gemma-2b-it Peft Lora 微调 </a> @东东</li>
</ul> </li>
<li> <p><a href="https://huggingface.co/microsoft/Phi-3-mini-4k-instruct">phi-3</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/phi-3/01-Phi-3-mini-4k-instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Phi-3-mini-4k-instruct FastApi 部署调用</a> @郑皓桦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/phi-3/02-Phi-3-mini-4k-instruct%20langchain%20%E6%8E%A5%E5%85%A5.md">Phi-3-mini-4k-instruct langchain 接入</a> @郑皓桦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/phi-3/03-Phi-3-mini-4k-instruct%20WebDemo%E9%83%A8%E7%BD%B2.md">Phi-3-mini-4k-instruct WebDemo 部署</a> @丁悦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/phi-3/04-Phi-3-mini-4k-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">Phi-3-mini-4k-instruct Lora 微调</a> @丁悦</li>
</ul> </li>
<li> <p><a href="https://github.com/thu-coai/CharacterGLM-6B">CharacterGLM-6B</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/CharacterGLM/01-CharacterGLM-6B%20Transformer%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">CharacterGLM-6B Transformers 部署调用</a> @孙健壮</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/CharacterGLM/02-CharacterGLM-6B%20FastApi%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">CharacterGLM-6B FastApi 部署调用</a> @孙健壮</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/CharacterGLM/03-CharacterGLM-6B-chat.md">CharacterGLM-6B webdemo 部署</a> @孙健壮</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/CharacterGLM/04-CharacterGLM-6B%20Lora%E5%BE%AE%E8%B0%83.md">CharacterGLM-6B Lora 微调</a> @孙健壮</li>
</ul> </li>
<li> <p><a href="https://github.com/meta-llama/llama3.git">LLaMA3-8B-Instruct</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/LLaMA3/01-LLaMA3-8B-Instruct%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">LLaMA3-8B-Instruct FastApi 部署调用</a> @高立业</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/LLaMA3/02-LLaMA3-8B-Instruct%20langchain%20%E6%8E%A5%E5%85%A5.md">LLaMA3-8B-Instruct langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/LLaMA3/03-LLaMA3-8B-Instruct%20WebDemo%20%E9%83%A8%E7%BD%B2.md">LLaMA3-8B-Instruct WebDemo 部署</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/LLaMA3/04-LLaMA3-8B-Instruct%20Lora%20%E5%BE%AE%E8%B0%83.md">LLaMA3-8B-Instruct Lora 微调</a> @高立业</li>
</ul> </li>
<li> <p><a href="https://modelscope.cn/models/xverse/XVERSE-7B-Chat/summary">XVERSE-7B-Chat</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/XVERSE/01-XVERSE-7B-chat%20Transformers%E6%8E%A8%E7%90%86.md">XVERSE-7B-Chat transformers 部署调用</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/XVERSE/02-XVERSE-7B-chat%20FastAPI%E9%83%A8%E7%BD%B2.md">XVERSE-7B-Chat FastApi 部署调用</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/XVERSE/03-XVERSE-7B-chat%20langchain%20%E6%8E%A5%E5%85%A5.md">XVERSE-7B-Chat langchain 接入</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/XVERSE/04-XVERSE-7B-chat%20WebDemo%20%E9%83%A8%E7%BD%B2.md">XVERSE-7B-Chat WebDemo 部署</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/XVERSE/05-XVERSE-7B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">XVERSE-7B-Chat Lora 微调</a> @郭志航</li>
</ul> </li>
<li> <p><a href="https://github.com/OpenNLPLab/TransnormerLLM.git">TransNormerLLM</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/TransNormer/01-TransNormer-7B%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">TransNormerLLM-7B-Chat FastApi 部署调用</a> @王茂霖</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/TransNormer/02-TransNormer-7B%20%E6%8E%A5%E5%85%A5langchain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">TransNormerLLM-7B-Chat langchain 接入</a> @王茂霖</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/TransNormer/03-TransNormer-7B%20WebDemo.md">TransNormerLLM-7B-Chat WebDemo 部署</a> @王茂霖</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/TransNormer/04-TrasnNormer-7B%20Lora%20%E5%BE%AE%E8%B0%83.md">TransNormerLLM-7B-Chat Lora 微调</a> @王茂霖</li>
</ul> </li>
<li> <p><a href="https://github.com/vivo-ai-lab/BlueLM.git">BlueLM Vivo 蓝心大模型</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BlueLM/01-BlueLM-7B-Chat%20FastApi%20%E9%83%A8%E7%BD%B2.md">BlueLM-7B-Chat FatApi 部署调用</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BlueLM/02-BlueLM-7B-Chat%20langchain%20%E6%8E%A5%E5%85%A5.md">BlueLM-7B-Chat langchain 接入</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BlueLM/03-BlueLM-7B-Chat%20WebDemo%20%E9%83%A8%E7%BD%B2.md">BlueLM-7B-Chat WebDemo 部署</a> @郭志航</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BlueLM/04-BlueLM-7B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">BlueLM-7B-Chat Lora 微调</a> @郭志航</li>
</ul> </li>
<li> <p><a href="https://github.com/InternLM/InternLM">InternLM2</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM2/01-InternLM2-7B-chat%20FastAPI%E9%83%A8%E7%BD%B2.md">InternLM2-7B-chat FastApi 部署调用</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM2/02-InternLM2-7B-chat%20langchain%20%E6%8E%A5%E5%85%A5.md">InternLM2-7B-chat langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM2/03-InternLM2-7B-chat%20WebDemo%20%E9%83%A8%E7%BD%B2.md">InternLM2-7B-chat WebDemo 部署</a> @郑皓桦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM2/04-InternLM2-7B-chat%20Xtuner%20Qlora%20%E5%BE%AE%E8%B0%83.md">InternLM2-7B-chat Xtuner Qlora 微调</a> @郑皓桦</li>
</ul> </li>
<li> <p><a href="https://github.com/deepseek-ai/DeepSeek-LLM">DeepSeek 深度求索</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/01-DeepSeek-7B-chat%20FastApi.md">DeepSeek-7B-chat FastApi 部署调用</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/02-DeepSeek-7B-chat%20langchain.md">DeepSeek-7B-chat langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/03-DeepSeek-7B-chat%20WebDemo.md">DeepSeek-7B-chat WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/04-DeepSeek-7B-chat%20Lora%20%E5%BE%AE%E8%B0%83.md">DeepSeek-7B-chat Lora 微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/05-DeepSeek-7B-chat%204bits%E9%87%8F%E5%8C%96%20Qlora%20%E5%BE%AE%E8%B0%83.md">DeepSeek-7B-chat 4bits量化 Qlora 微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/06-DeepSeek-MoE-16b-chat%20Transformer%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">DeepSeek-MoE-16b-chat Transformers 部署调用</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/06-DeepSeek-MoE-16b-chat%20FastApi.md">DeepSeek-MoE-16b-chat FastApi 部署调用</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/07-deepseek_fine_tune.ipynb">DeepSeek-coder-6.7b finetune colab</a> @Swiftie</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/DeepSeek/08-deepseek_web_demo.ipynb">Deepseek-coder-6.7b webdemo colab</a> @Swiftie</li>
</ul> </li>
<li> <p><a href="https://github.com/OpenBMB/MiniCPM.git">MiniCPM</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/MiniCPM/MiniCPM-2B-chat%20transformers%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">MiniCPM-2B-chat transformers 部署调用</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/MiniCPM/MiniCPM-2B-chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">MiniCPM-2B-chat FastApi 部署调用</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/MiniCPM/MiniCPM-2B-chat%20langchain%E6%8E%A5%E5%85%A5.md">MiniCPM-2B-chat langchain 接入</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/MiniCPM/MiniCPM-2B-chat%20WebDemo%E9%83%A8%E7%BD%B2.md">MiniCPM-2B-chat webdemo 部署</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/MiniCPM/MiniCPM-2B-chat%20Lora%20&&%20Full%20%E5%BE%AE%E8%B0%83.md">MiniCPM-2B-chat Lora && Full 微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> 官方友情链接:<a href="https://modelbest.feishu.cn/wiki/D2tFw8Pcsi5CIzkaHNacLK64npg">面壁小钢炮MiniCPM教程</a> @OpenBMB</li>
<li><input type="checkbox" checked disabled> 官方友情链接:<a href="https://github.com/OpenBMB/MiniCPM-CookBook">MiniCPM-Cookbook</a> @OpenBMB</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen-Audio.git">Qwen-Audio</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen-Audio/01-Qwen-Audio-chat%20FastApi.md">Qwen-Audio FastApi 部署调用</a> @陈思州</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen-Audio/02-Qwen-Audio-chat%20WebDemo.md">Qwen-Audio WebDemo</a> @陈思州</li>
</ul> </li>
<li> <p><a href="https://github.com/QwenLM/Qwen.git">Qwen</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/01-Qwen-7B-Chat%20Transformers%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen-7B-chat Transformers 部署调用</a> @李娇娇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/02-Qwen-7B-Chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Qwen-7B-chat FastApi 部署调用</a> @李娇娇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/03-Qwen-7B-Chat%20WebDemo.md">Qwen-7B-chat WebDemo</a> @李娇娇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/04-Qwen-7B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">Qwen-7B-chat Lora 微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/05-Qwen-7B-Chat%20Ptuning%20%E5%BE%AE%E8%B0%83.md">Qwen-7B-chat ptuning 微调</a> @肖鸿儒</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/06-Qwen-7B-chat%20%E5%85%A8%E9%87%8F%E5%BE%AE%E8%B0%83.md">Qwen-7B-chat 全量微调</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/07-Qwen-7B-Chat%20%E6%8E%A5%E5%85%A5langchain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">Qwen-7B-Chat 接入langchain搭建知识库助手</a> @李娇娇</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/08-Qwen-7B-Chat%20Lora%20%E4%BD%8E%E7%B2%BE%E5%BA%A6%E5%BE%AE%E8%B0%83.md">Qwen-7B-chat 低精度训练</a> @肖鸿儒</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Qwen/09-Qwen-1_8B-chat%20CPU%20%E9%83%A8%E7%BD%B2%20.md">Qwen-1_8B-chat CPU 部署</a> @散步</li>
</ul> </li>
<li> <p><a href="https://github.com/01-ai/Yi.git">Yi 零一万物</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yi/01-Yi-6B-Chat%20FastApi%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Yi-6B-chat FastApi 部署调用</a> @李柯辰</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yi/02-Yi-6B-Chat%20%E6%8E%A5%E5%85%A5langchain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">Yi-6B-chat langchain接入</a> @李柯辰</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yi/03-Yi-6B-chat%20WebDemo.md">Yi-6B-chat WebDemo</a> @肖鸿儒</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Yi/04-Yi-6B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">Yi-6B-chat Lora 微调</a> @李娇娇</li>
</ul> </li>
<li> <p><a href="https://www.baichuan-ai.com/home">Baichuan 百川智能</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/BaiChuan/01-Baichuan2-7B-chat%2BFastApi%2B%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">Baichuan2-7B-chat FastApi 部署调用</a> @惠佳豪</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BaiChuan/02-Baichuan-7B-chat%2BWebDemo.md">Baichuan2-7B-chat WebDemo</a> @惠佳豪</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BaiChuan/03-Baichuan2-7B-chat%E6%8E%A5%E5%85%A5LangChain%E6%A1%86%E6%9E%B6.md">Baichuan2-7B-chat 接入 LangChain 框架</a> @惠佳豪</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/BaiChuan/04-Baichuan2-7B-chat%2Blora%2B%E5%BE%AE%E8%B0%83.md">Baichuan2-7B-chat Lora 微调</a> @惠佳豪</li>
</ul> </li>
<li> <p><a href="https://github.com/InternLM/InternLM.git">InternLM</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/01-InternLM-Chat-7B%20Transformers%20%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">InternLM-Chat-7B Transformers 部署调用</a> @小罗</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/02-internLM-Chat-7B%20FastApi.md">InternLM-Chat-7B FastApi 部署调用</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/03-InternLM-Chat-7B.md">InternLM-Chat-7B WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/04-Lagent+InternLM-Chat-7B-V1.1.md">Lagent+InternLM-Chat-7B-V1.1 WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/05-%E6%B5%A6%E8%AF%AD%E7%81%B5%E7%AC%94%E5%9B%BE%E6%96%87%E7%90%86%E8%A7%A3&%E5%88%9B%E4%BD%9C.md">浦语灵笔图文理解&创作 WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/InternLM/06-InternLM%E6%8E%A5%E5%85%A5LangChain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">InternLM-Chat-7B 接入 LangChain 框架</a> @Logan Zou</li>
</ul> </li>
<li> <p><a href="https://hf-mirror.com/FlagAlpha/Atom-7B-Chat">Atom (llama2)</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Atom/01-Atom-7B-chat-WebDemo.md">Atom-7B-chat WebDemo</a> @Kailigithub</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Atom/02-Atom-7B-Chat%20Lora%20%E5%BE%AE%E8%B0%83.md">Atom-7B-chat Lora 微调</a> @Logan Zou</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Atom/03-Atom-7B-Chat%20%E6%8E%A5%E5%85%A5langchain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">Atom-7B-Chat 接入langchain搭建知识库助手</a> @陈思州</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/Atom/04-Atom-7B-chat%20%E5%85%A8%E9%87%8F%E5%BE%AE%E8%B0%83.md">Atom-7B-chat 全量微调</a> @Logan Zou</li>
</ul> </li>
<li> <p><a href="https://github.com/THUDM/ChatGLM3.git">ChatGLM3</a></p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/01-ChatGLM3-6B%20Transformer%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">ChatGLM3-6B Transformers 部署调用</a> @丁悦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/02-ChatGLM3-6B%20FastApi%E9%83%A8%E7%BD%B2%E8%B0%83%E7%94%A8.md">ChatGLM3-6B FastApi 部署调用</a> @丁悦</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/03-ChatGLM3-6B-chat.md">ChatGLM3-6B chat WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/04-ChatGLM3-6B-Code-Interpreter.md">ChatGLM3-6B Code Interpreter WebDemo</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/05-ChatGLM3-6B%E6%8E%A5%E5%85%A5LangChain%E6%90%AD%E5%BB%BA%E7%9F%A5%E8%AF%86%E5%BA%93%E5%8A%A9%E6%89%8B.md">ChatGLM3-6B 接入 LangChain 框架</a> @Logan Zou</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/ChatGLM/06-ChatGLM3-6B-Lora%E5%BE%AE%E8%B0%83.md">ChatGLM3-6B Lora 微调</a> @肖鸿儒</li>
</ul> </li>
</ul>
<h3>通用环境配置</h3>
<ul>
<li><input type="checkbox" checked disabled> <p><a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/01-pip%E3%80%81conda%E6%8D%A2%E6%BA%90.md">pip、conda 换源</a> @不要葱姜蒜</p> </li>
<li><input type="checkbox" checked disabled> <p><a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/02-AutoDL%E5%BC%80%E6%94%BE%E7%AB%AF%E5%8F%A3.md">AutoDL 开放端口</a> @不要葱姜蒜</p> </li>
<li> <p>模型下载</p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/03-%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD.md">hugging face</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/General-Setting/03-%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD.md">hugging face</a> 镜像下载 @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/03-%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD.md">modelscope</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/03-%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD.md">git-lfs</a> @不要葱姜蒜</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/03-%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD.md">Openxlab</a></li>
</ul> </li>
<li> <p>Issue && PR</p>
<ul>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/04-Issue&PR&update.md">Issue 提交</a> @肖鸿儒</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/04-Issue&PR&update.md">PR 提交</a> @肖鸿儒</li>
<li><input type="checkbox" checked disabled> <a href="https://raw.githubusercontent.com/datawhalechina/self-llm/master/models/General-Setting/04-Issue&PR&update.md">fork更新</a> @肖鸿儒</li>
</ul> </li>
</ul>
<h2>致谢</h2>
<h3>核心贡献者</h3>
<ul>
<li><a href="https://github.com/KMnO4-zx">宋志学(不要葱姜蒜)-项目负责人</a> (Datawhale成员-中国矿业大学(北京))</li>
<li><a href="https://github.com/Hongru0306">肖鸿儒</a> (Datawhale成员-同济大学)</li>
<li><a href="https://github.com/acwwt">郭志航</a>(内容创作者)</li>
<li><a href="https://github.com/zhangfanTJU">张帆</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/Tsumugii24">姜舒凡</a>(内容创作者-鲸英助教)</li>
<li><a href="https://github.com/Aphasia0515">李娇娇</a> (Datawhale成员)</li>
<li><a href="https://github.com/dingyue772">丁悦</a> (Datawhale-鲸英助教)</li>
<li><a href="https://github.com/logan-zou">邹雨衡-项目负责人</a> (Datawhale成员-对外经济贸易大学)</li>
<li><a href="https://github.com/L4HeyXiao">惠佳豪</a> (Datawhale-宣传大使)</li>
<li><a href="https://github.com/mlw67">王茂霖</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/Caleb-Sun-jz">孙健壮</a>(内容创作者-对外经济贸易大学)</li>
<li><a href="https://github.com/LucaChen">东东</a>(内容创作者-谷歌开发者机器学习技术专家)</li>
<li><a href="https://github.com/0-yy-0">高立业</a>(内容创作者-DataWhale成员)</li>
<li><a href="https://github.com/moyitech">王泽宇</a>(内容创作者-太原理工大学-鲸英助教)</li>
<li><a href="https://github.com/Kailigithub">Kailigithub</a> (Datawhale成员)</li>
<li><a href="https://github.com/BaiYu96">郑皓桦</a> (内容创作者)</li>
<li><a href="https://github.com/Joe-2002">李柯辰</a> (Datawhale成员)</li>
<li><a href="https://github.com/Zeyi-Lin">林泽毅</a>(内容创作者-SwanLab产品负责人)</li>
<li><a href="https://github.com/jjyaoao">陈思州</a> (Datawhale成员)</li>
<li><a href="https://github.com/sanbuphy">散步</a> (Datawhale成员)</li>
<li><a href="https://github.com/thomas-yanxin">颜鑫</a> (Datawhale成员)</li>
<li><a href="https://github.com/yeyeyeyeeeee">荞麦</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/cswangxiaowei">Swiftie</a> (小米NLP算法工程师)</li>
<li><a href="https://github.com/KashiwaByte">黄柏特</a>(内容创作者-西安电子科技大学)</li>
<li><a href="https://github.com/AXYZdong">张友东</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/YangYu-NUAA">余洋</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/Jin-Zhang-Yaoguang">张晋</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/lta155">娄天奥</a>(内容创作者-中国科学院大学-鲸英助教)</li>
<li><a href="https://github.com/LinChentang">左春生</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/little1d">杨卓</a>(内容创作者-西安电子科技大学-鲸英助教)</li>
<li><a href="https://github.com/lyj11111111">小罗</a> (内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/LikeGiver">谭逸珂</a>(内容创作者-对外经济贸易大学)</li>
<li><a href="https://github.com/Bald0Wang">王熠明</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/pod2c">何至轩</a>(内容创作者-鲸英助教)</li>
<li><a href="https://github.com/jodie-kang">康婧淇</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/sssanssss">三水</a>(内容创作者-鲸英助教)</li>
<li><a href="https://github.com/chg0901">九月</a>(内容创作者-Datawhale意向成员)</li>
<li><a href="https://github.com/Kedreamix">邓恺俊</a>(内容创作者-Datawhale成员)</li>
<li><a href="https://github.com/langlibai66">杨晨旭</a>(内容创作者-太原理工大学-鲸英助教)</li>
<li><a href="https://github.com/XiLinky">赵文恺</a>(内容创作者-太原理工大学-鲸英助教)</li>
<li><a href="https://github.com/2710932616">赵伟</a>(内容创作者-鲸英助教)</li>
</ul>
<blockquote>
<p>注:排名根据贡献程度排序</p>
</blockquote>
<h3>其他</h3>
<ul>
<li>特别感谢<a href="https://github.com/Sm1les">@Sm1les</a>对本项目的帮助与支持</li>
<li>部分lora代码和讲解参考仓库:<a href="https://github.com/zyds/transformers-code.git">https://github.com/zyds/transformers-code.git</a></li>
<li>如果有任何想法可以联系我们 DataWhale 也欢迎大家多多提出 issue</li>
<li>特别感谢以下为教程做出贡献的同学!</li>
</ul>
<div align="center" style="margin-top: 30px;">
<a href="https://github.com/datawhalechina/self-llm/graphs/contributors"> <img src="https://contrib.rocks/image?repo=datawhalechina/self-llm"> </a>
</div>
<h3>Star History</h3>
<div align="center" style="margin-top: 30px;">
<img src="https://raw.githubusercontent.com/datawhalechina/self-llm/master/images/star-history-2024825.png">
</div>
+
+
\ No newline at end of file
diff --git a/jupyter-notebook/weekly/index.xml b/jupyter-notebook/weekly/index.xml
new file mode 100644
index 00000000000..85d41603f5d
--- /dev/null
+++ b/jupyter-notebook/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Jupyter Notebook Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:43:58Z
+ Weekly Trending of Jupyter Notebook in GitHub
+
+
+ facebookresearch/sam2
+ 2024-12-01T01:43:58Z
+ tag:github.com,2024-12-01:/facebookresearch/sam2
+
+ <p>The repository provides code for running inference with the Meta Segment Anything Model 2 (SAM 2), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.</p><hr><h1>SAM 2: Segment Anything in Images and Videos</h1>
<p><strong><a href="https://ai.meta.com/research/">AI at Meta, FAIR</a></strong></p>
<p><a href="https://nikhilaravi.com/">Nikhila Ravi</a>, <a href="https://gabeur.github.io/">Valentin Gabeur</a>, <a href="https://scholar.google.com/citations?user=E8DVVYQAAAAJ&hl=en">Yuan-Ting Hu</a>, <a href="https://ronghanghu.com/">Ronghang Hu</a>, <a href="https://scholar.google.com/citations?user=4LWx24UAAAAJ&hl=en">Chaitanya Ryali</a>, <a href="https://scholar.google.com/citations?user=VeTSl0wAAAAJ&hl=en">Tengyu Ma</a>, <a href="https://hkhedr.com/">Haitham Khedr</a>, <a href="https://scholar.google.de/citations?user=Tpt57v0AAAAJ&hl=en">Roman Rädle</a>, <a href="https://scholar.google.com/citations?hl=fr&user=n-SnMhoAAAAJ">Chloe Rolland</a>, <a href="https://scholar.google.com/citations?user=c8IpF9gAAAAJ&hl=en">Laura Gustafson</a>, <a href="https://ericmintun.github.io/">Eric Mintun</a>, <a href="https://junting.github.io/">Junting Pan</a>, <a href="https://scholar.google.co.in/citations?user=m34oaWEAAAAJ&hl=en">Kalyan Vasudev Alwala</a>, <a href="https://www.nicolascarion.com/">Nicolas Carion</a>, <a href="https://chaoyuan.org/">Chao-Yuan Wu</a>, <a href="https://www.rossgirshick.info/">Ross Girshick</a>, <a href="https://pdollar.github.io/">Piotr Dollár</a>, <a href="https://feichtenhofer.github.io/">Christoph Feichtenhofer</a></p>
<p>[<a href="https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/"><code>Paper</code></a>] [<a href="https://ai.meta.com/sam2"><code>Project</code></a>] [<a href="https://sam2.metademolab.com/"><code>Demo</code></a>] [<a href="https://ai.meta.com/datasets/segment-anything-video"><code>Dataset</code></a>] [<a href="https://ai.meta.com/blog/segment-anything-2"><code>Blog</code></a>] [<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/#citing-sam-2"><code>BibTeX</code></a>]</p>
<p><img src="https://raw.githubusercontent.com/facebookresearch/sam2/main/assets/model_diagram.png?raw=true" alt="SAM 2 architecture"></p>
<p><strong>Segment Anything Model 2 (SAM 2)</strong> is a foundation model towards solving promptable visual segmentation in images and videos. We extend SAM to video by considering images as a video with a single frame. The model design is a simple transformer architecture with streaming memory for real-time video processing. We build a model-in-the-loop data engine, which improves model and data via user interaction, to collect <a href="https://ai.meta.com/datasets/segment-anything-video"><strong>our SA-V dataset</strong></a>, the largest video segmentation dataset to date. SAM 2 trained on our data provides strong performance across a wide range of tasks and visual domains.</p>
<p><img src="https://raw.githubusercontent.com/facebookresearch/sam2/main/assets/sa_v_dataset.jpg?raw=true" alt="SA-V dataset"></p>
<h2>Latest updates</h2>
<p><strong>09/30/2024 -- SAM 2.1 Developer Suite (new checkpoints, training code, web demo) is released</strong></p>
<ul>
<li>A new suite of improved model checkpoints (denoted as <strong>SAM 2.1</strong>) are released. See <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/#model-description">Model Description</a> for details.
<ul>
<li>To use the new SAM 2.1 checkpoints, you need the latest model code from this repo. If you have installed an earlier version of this repo, please first uninstall the previous version via <code>pip uninstall SAM-2</code>, pull the latest code from this repo (with <code>git pull</code>), and then reinstall the repo following <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/#installation">Installation</a> below.</li>
</ul> </li>
<li>The training (and fine-tuning) code has been released. See <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/training/README.md"><code>training/README.md</code></a> on how to get started.</li>
<li>The frontend + backend code for the SAM 2 web demo has been released. See <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/demo/README.md"><code>demo/README.md</code></a> for details.</li>
</ul>
<h2>Installation</h2>
<p>SAM 2 needs to be installed first before use. The code requires <code>python>=3.10</code>, as well as <code>torch>=2.3.1</code> and <code>torchvision>=0.18.1</code>. Please follow the instructions <a href="https://pytorch.org/get-started/locally/">here</a> to install both PyTorch and TorchVision dependencies. You can install SAM 2 on a GPU machine using:</p>
<pre><code class="language-bash">git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
</code></pre>
<p>If you are installing on Windows, it's strongly recommended to use <a href="https://learn.microsoft.com/en-us/windows/wsl/install">Windows Subsystem for Linux (WSL)</a> with Ubuntu.</p>
<p>To use the SAM 2 predictor and run the example notebooks, <code>jupyter</code> and <code>matplotlib</code> are required and can be installed by:</p>
<pre><code class="language-bash">pip install -e ".[notebooks]"
</code></pre>
<p>Note:</p>
<ol>
<li>It's recommended to create a new Python environment via <a href="https://www.anaconda.com/">Anaconda</a> for this installation and install PyTorch 2.3.1 (or higher) via <code>pip</code> following <a href="https://pytorch.org/">https://pytorch.org/</a>. If you have a PyTorch version lower than 2.3.1 in your current environment, the installation command above will try to upgrade it to the latest PyTorch version using <code>pip</code>.</li>
<li>The step above requires compiling a custom CUDA kernel with the <code>nvcc</code> compiler. If it isn't already available on your machine, please install the <a href="https://developer.nvidia.com/cuda-toolkit-archive">CUDA toolkits</a> with a version that matches your PyTorch CUDA version.</li>
<li>If you see a message like <code>Failed to build the SAM 2 CUDA extension</code> during installation, you can ignore it and still use SAM 2 (some post-processing functionality may be limited, but it doesn't affect the results in most cases).</li>
</ol>
<p>Please see <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/INSTALL.md"><code>INSTALL.md</code></a> for FAQs on potential issues and solutions.</p>
<h2>Getting Started</h2>
<h3>Download Checkpoints</h3>
<p>First, we need to download a model checkpoint. All the model checkpoints can be downloaded by running:</p>
<pre><code class="language-bash">cd checkpoints && \
./download_ckpts.sh && \
cd ..
</code></pre>
<p>or individually from:</p>
<ul>
<li><a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt">sam2.1_hiera_tiny.pt</a></li>
<li><a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt">sam2.1_hiera_small.pt</a></li>
<li><a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt">sam2.1_hiera_base_plus.pt</a></li>
<li><a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt">sam2.1_hiera_large.pt</a></li>
</ul>
<p>(note that these are the improved checkpoints denoted as SAM 2.1; see <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/#model-description">Model Description</a> for details.)</p>
<p>Then SAM 2 can be used in a few lines as follows for image and video prediction.</p>
<h3>Image prediction</h3>
<p>SAM 2 has all the capabilities of <a href="https://github.com/facebookresearch/segment-anything">SAM</a> on static images, and we provide image prediction APIs that closely resemble SAM for image use cases. The <code>SAM2ImagePredictor</code> class has an easy interface for image prompting.</p>
<pre><code class="language-python">import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
</code></pre>
<p>Please refer to the examples in <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/notebooks/image_predictor_example.ipynb">image_predictor_example.ipynb</a> (also in Colab <a href="https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/image_predictor_example.ipynb">here</a>) for static image use cases.</p>
<p>SAM 2 also supports automatic mask generation on images just like SAM. Please see <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/notebooks/automatic_mask_generator_example.ipynb">automatic_mask_generator_example.ipynb</a> (also in Colab <a href="https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/automatic_mask_generator_example.ipynb">here</a>) for automatic mask generation in images.</p>
<h3>Video prediction</h3>
<p>For promptable segmentation and tracking in videos, we provide a video predictor with APIs for example to add prompts and propagate masklets throughout a video. SAM 2 supports video inference on multiple objects and uses an inference state to keep track of the interactions in each video.</p>
<pre><code class="language-python">import torch
from sam2.build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# add new prompts and instantly get the output on the same frame
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# propagate the prompts to get masklets throughout the video
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
</code></pre>
<p>Please refer to the examples in <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/notebooks/video_predictor_example.ipynb">video_predictor_example.ipynb</a> (also in Colab <a href="https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/video_predictor_example.ipynb">here</a>) for details on how to add click or box prompts, make refinements, and track multiple objects in videos.</p>
<h2>Load from 🤗 Hugging Face</h2>
<p>Alternatively, models can also be loaded from <a href="https://huggingface.co/models?search=facebook/sam2">Hugging Face</a> (requires <code>pip install huggingface_hub</code>).</p>
<p>For image prediction:</p>
<pre><code class="language-python">import torch
from sam2.sam2_image_predictor import SAM2ImagePredictor
predictor = SAM2ImagePredictor.from_pretrained("facebook/sam2-hiera-large")
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
</code></pre>
<p>For video prediction:</p>
<pre><code class="language-python">import torch
from sam2.sam2_video_predictor import SAM2VideoPredictor
predictor = SAM2VideoPredictor.from_pretrained("facebook/sam2-hiera-large")
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# add new prompts and instantly get the output on the same frame
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# propagate the prompts to get masklets throughout the video
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
</code></pre>
<h2>Model Description</h2>
<h3>SAM 2.1 checkpoints</h3>
<p>The table below shows the improved SAM 2.1 checkpoints released on September 29, 2024.</p>
<table>
<thead>
<tr>
<th align="center"><strong>Model</strong></th>
<th align="center"><strong>Size (M)</strong></th>
<th align="center"><strong>Speed (FPS)</strong></th>
<th align="center"><strong>SA-V test (J&F)</strong></th>
<th align="center"><strong>MOSE val (J&F)</strong></th>
<th align="center"><strong>LVOS v2 (J&F)</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">sam2.1_hiera_tiny <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2.1/sam2.1_hiera_t.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt">checkpoint</a>)</td>
<td align="center">38.9</td>
<td align="center">47.2</td>
<td align="center">76.5</td>
<td align="center">71.8</td>
<td align="center">77.3</td>
</tr>
<tr>
<td align="center">sam2.1_hiera_small <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2.1/sam2.1_hiera_s.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt">checkpoint</a>)</td>
<td align="center">46</td>
<td align="center">43.3 (53.0 compiled*)</td>
<td align="center">76.6</td>
<td align="center">73.5</td>
<td align="center">78.3</td>
</tr>
<tr>
<td align="center">sam2.1_hiera_base_plus <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2.1/sam2.1_hiera_b+.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt">checkpoint</a>)</td>
<td align="center">80.8</td>
<td align="center">34.8 (43.8 compiled*)</td>
<td align="center">78.2</td>
<td align="center">73.7</td>
<td align="center">78.2</td>
</tr>
<tr>
<td align="center">sam2.1_hiera_large <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2.1/sam2.1_hiera_l.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt">checkpoint</a>)</td>
<td align="center">224.4</td>
<td align="center">24.2 (30.2 compiled*)</td>
<td align="center">79.5</td>
<td align="center">74.6</td>
<td align="center">80.6</td>
</tr>
</tbody>
</table>
<h3>SAM 2 checkpoints</h3>
<p>The previous SAM 2 checkpoints released on July 29, 2024 can be found as follows:</p>
<table>
<thead>
<tr>
<th align="center"><strong>Model</strong></th>
<th align="center"><strong>Size (M)</strong></th>
<th align="center"><strong>Speed (FPS)</strong></th>
<th align="center"><strong>SA-V test (J&F)</strong></th>
<th align="center"><strong>MOSE val (J&F)</strong></th>
<th align="center"><strong>LVOS v2 (J&F)</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">sam2_hiera_tiny <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2/sam2_hiera_t.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt">checkpoint</a>)</td>
<td align="center">38.9</td>
<td align="center">47.2</td>
<td align="center">75.0</td>
<td align="center">70.9</td>
<td align="center">75.3</td>
</tr>
<tr>
<td align="center">sam2_hiera_small <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2/sam2_hiera_s.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt">checkpoint</a>)</td>
<td align="center">46</td>
<td align="center">43.3 (53.0 compiled*)</td>
<td align="center">74.9</td>
<td align="center">71.5</td>
<td align="center">76.4</td>
</tr>
<tr>
<td align="center">sam2_hiera_base_plus <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2/sam2_hiera_b+.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt">checkpoint</a>)</td>
<td align="center">80.8</td>
<td align="center">34.8 (43.8 compiled*)</td>
<td align="center">74.7</td>
<td align="center">72.8</td>
<td align="center">75.8</td>
</tr>
<tr>
<td align="center">sam2_hiera_large <br> (<a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2/sam2_hiera_l.yaml">config</a>, <a href="https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt">checkpoint</a>)</td>
<td align="center">224.4</td>
<td align="center">24.2 (30.2 compiled*)</td>
<td align="center">76.0</td>
<td align="center">74.6</td>
<td align="center">79.8</td>
</tr>
</tbody>
</table>
<p>* Compile the model by setting <code>compile_image_encoder: True</code> in the config.</p>
<h2>Segment Anything Video Dataset</h2>
<p>See <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/sav_dataset/README.md">sav_dataset/README.md</a> for details.</p>
<h2>Training SAM 2</h2>
<p>You can train or fine-tune SAM 2 on custom datasets of images, videos, or both. Please check the training <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/training/README.md">README</a> on how to get started.</p>
<h2>Web demo for SAM 2</h2>
<p>We have released the frontend + backend code for the SAM 2 web demo (a locally deployable version similar to <a href="https://sam2.metademolab.com/demo">https://sam2.metademolab.com/demo</a>). Please see the web demo <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/demo/README.md">README</a> for details.</p>
<h2>License</h2>
<p>The SAM 2 model checkpoints, SAM 2 demo code (front-end and back-end), and SAM 2 training code are licensed under <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/LICENSE">Apache 2.0</a>, however the <a href="https://github.com/rsms/inter?tab=OFL-1.1-1-ov-file">Inter Font</a> and <a href="https://github.com/googlefonts/noto-emoji">Noto Color Emoji</a> used in the SAM 2 demo code are made available under the <a href="https://openfontlicense.org/open-font-license-official-text/">SIL Open Font License, version 1.1</a>.</p>
<h2>Contributing</h2>
<p>See <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/CONTRIBUTING.md">contributing</a> and the <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/CODE_OF_CONDUCT.md">code of conduct</a>.</p>
<h2>Contributors</h2>
<p>The SAM 2 project was made possible with the help of many contributors (alphabetical):</p>
<p>Karen Bergan, Daniel Bolya, Alex Bosenberg, Kai Brown, Vispi Cassod, Christopher Chedeau, Ida Cheng, Luc Dahlin, Shoubhik Debnath, Rene Martinez Doehner, Grant Gardner, Sahir Gomez, Rishi Godugu, Baishan Guo, Caleb Ho, Andrew Huang, Somya Jain, Bob Kamma, Amanda Kallet, Jake Kinney, Alexander Kirillov, Shiva Koduvayur, Devansh Kukreja, Robert Kuo, Aohan Lin, Parth Malani, Jitendra Malik, Mallika Malhotra, Miguel Martin, Alexander Miller, Sasha Mitts, William Ngan, George Orlin, Joelle Pineau, Kate Saenko, Rodrick Shepard, Azita Shokrpour, David Soofian, Jonathan Torres, Jenny Truong, Sagar Vaze, Meng Wang, Claudette Ward, Pengchuan Zhang.</p>
<p>Third-party code: we use a GPU-based connected component algorithm adapted from <a href="https://github.com/zsef123/Connected_components_PyTorch"><code>cc_torch</code></a> (with its license in <a href="https://raw.githubusercontent.com/facebookresearch/sam2/main/LICENSE_cctorch"><code>LICENSE_cctorch</code></a>) as an optional post-processing step for the mask predictions.</p>
<h2>Citing SAM 2</h2>
<p>If you use SAM 2 or the SA-V dataset in your research, please use the following BibTeX entry.</p>
<pre><code class="language-bibtex">@article{ravi2024sam2,
title={SAM 2: Segment Anything in Images and Videos},
author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
journal={arXiv preprint arXiv:2408.00714},
url={https://arxiv.org/abs/2408.00714},
year={2024}
}
</code></pre>
+
+
+ IBM/data-prep-kit
+ 2024-12-01T01:43:58Z
+ tag:github.com,2024-12-01:/IBM/data-prep-kit
+
+ <p>Open source project for data preparation of LLM application builders</p><hr><h1 align="center">Data Prep Kit</h1>
<div align="center">
<!--? [![Status](https://img.shields.io/badge/status-active-success.svg)]() ?-->
<!--? [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/IBM/data-prep-kit/issues) ?-->
<!--? [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/IBM/data-prep-kit/pulls) ?-->
</div>
<p>Data Prep Kit is a community project to democratize and accelerate unstructured data preparation for LLM app developers. With the explosive growth of LLM-enabled use cases, developers are faced with the enormous challenge of preparing use case-specific unstructured data to fine-tune, instruct-tune the LLMs or to build RAG applications for LLMs. As the variety of use cases grow, so does the need to support:</p>
<ul>
<li>New ways of transforming the data to enhance the performance of the resulting LLMs for each specific use case.</li>
<li>A large variety in the scale of data to be processed, from laptop-scale to datacenter-scale</li>
<li>Support for different data modalities including language, code, vision, multimodal etc</li>
</ul>
<p>Data Prep Kit offers implementations of commonly needed data preparation steps, called <em>modules</em> or <em>transforms</em>, for both Code and Language modalities, with vision to extend to images, speech and multimodal data. The goal is to offer high-level APIs for developers to quickly get started in working with their data, without needing expertise in the underlying runtimes and frameworks.</p>
<p><img src="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/Data-prep-kit-diagram.png" alt="alt text"></p>
<h2>📝 Table of Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/#about">About</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/#gettingstarted">Getting Started</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/#laptop_cluster">Scaling transforms from laptop to cluster</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/repo.md">Repository Use and Navigation</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/CONTRIBUTING.md">How to Contribute</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/resources.md">Resources (papers, talks, presentations and tutorials)</a></li>
<li><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/#citations">Citations</a></li>
</ul>
<h2>📖 About <a name="about"></a></h2>
<p>Data Prep Kit is a toolkit for streamlining data preparation for developers looking to build LLM-enabled applications via fine-tuning, RAG or instruction-tuning. Data Prep Kit contributes a set of modules that the developer can get started with to easily build data pipelines suitable for their use case. These modules have been tested while producing pre-training datasets for the <a href="https://huggingface.co/ibm-granite">Granite open source LLM models</a>.</p>
<p>The modules are built on common frameworks (for Spark and Ray), called the <em>data processing library</em> that allows the developers to build new custom modules that readily scale across a variety of runtimes.</p>
<p>Features of the toolkit:</p>
<ul>
<li>It aims to accelerate unstructured data prep for the "long tail" of LLM use cases.</li>
<li>It offers a growing set of <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms">module</a> implementations across multiple runtimes, targeting laptop-scale to datacenter-scale processing.</li>
<li>It provides a growing set of <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples">sample data processing pipelines</a> that can be used for real enterprise use cases.</li>
<li>It provides the <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/data-processing-lib/ray">Data processing library</a> to enable contribution of new custom modules targeting new use cases.</li>
<li>It uses <a href="https://www.kubeflow.org/docs/components/pipelines/v1/introduction/">Kubeflow Pipelines</a>-based <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/doc/simple_transform_pipeline.md">workflow automation</a>.</li>
</ul>
<p>Data modalities supported <em>today</em>: Code and Natural Language.</p>
<h2>🚀 Getting Started <a name="gettingstarted"></a></h2>
<h3>Fastest way to experience Data Prep Kit</h3>
<p>With no setup necessary, let's use a Google Colab friendly notebook to try Data Prep Kit. This is a simple transform to extract content from PDF files: <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/Run_your_first_transform_colab.ipynb">examples/notebooks/Run_your_first_transform_colab.ipynb</a> | <a href="https://colab.research.google.com/github/IBM/data-prep-kit/blob/dev/examples/notebooks/Run_your_first_transform_colab.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Open In Colab"></a>. (<a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/google-colab.md">Here</a> are some tips for running Data Prep Kit transforms on Google Colab. For this simple example, these tips are either already taken care of, or are not needed.)</p>
<h3>Create a Virtual Environment</h3>
<p>To run on a local machine, follow these steps to quickly set up and deploy the Data Prep Kit in your virtual Python environment.</p>
<pre><code class="language-bash">conda create -n data-prep-kit -y python=3.11
conda activate data-prep-kit
python --version
</code></pre>
<p>Check if the python version is 3.11.</p>
<p>If you are using a linux system, install gcc using the below commands:</p>
<pre><code class="language-bash">conda install gcc_linux-64
conda install gxx_linux-64
</code></pre>
<p>Next, install the data prep toolkit library. This library installs both the python and ray versions of the transforms. For better management of dependencies, it is recommended to install the same tagged version of both the library and the transform.</p>
<pre><code class="language-bash">pip3 install 'data-prep-toolkit[ray]==0.2.2.dev1'
pip3 install 'data-prep-toolkit-transforms[ray,all]==0.2.2.dev1'
pip3 install jupyterlab ipykernel ipywidgets
## install custom kernel
python -m ipykernel install --user --name=data-prep-kit --display-name "dataprepkit"
</code></pre>
<p>Test, your installation. If you are able to import these data-prep-kit libraries successfully in python, your installation has succeeded.</p>
<pre><code class="language-bash">## start python interpreter
$ python
# import DPK libraries
>>> from data_processing_ray.runtime.ray import RayTransformLauncher
>>> from data_processing.runtime.pure_python import PythonTransformLauncher
</code></pre>
<p>If there are no errors, you are good to go!</p>
<h3>Run your first transform locally</h3>
<p>Let's try the same simple transform to extract content from PDF files on a local machine.</p>
<p><strong>Local Notebook versions</strong></p>
<p>You can try either one or both of the following two versions:</p>
<ul>
<li>Option 1: Pure python notebook: <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/Run_your_first_transform_python.ipynb">examples/notebooks/Run_your_first_transform_python.ipynb</a> - easiest to get started</li>
<li>Option 2: Ray version: This one uses Ray framework for parallel execution while still allowing local processing - <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/Run_your_first_transform_ray.ipynb">examples/notebooks/Run_your_first_transform_ray.ipynb</a></li>
</ul>
<p>To run the notebooks, launch jupyter from the same virtual environment you created using the command below.</p>
<p><code>jupyter lab</code></p>
<p>After opening the jupyter notebook, change the kernel to <code>dataprepkit</code>, so all libraries will be properly loaded.</p>
<p>Explore more examples <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks">here</a>.</p>
<h3>Run your first data prep pipeline</h3>
<p>Now that you have run a single transform, the next step is to explore how to put these transforms together to run a data prep pipeline for an end to end use case like fine tuning a model or building a RAG application. This <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/fine%20tuning/code/sample-notebook.ipynb">notebook</a> gives an example of how to build an end to end data prep pipeline for fine tuning for code LLMs. Similarly, this <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/fine%20tuning/language/demo_with_launcher.ipynb">notebook</a> is a fine tuning example of an end-to-end sample data pipeline designed for processing language datasets. You can also explore how to build a RAG pipeline <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples/notebooks/rag">here</a>.</p>
<h3>Current list of transforms</h3>
<p>The matrix below shows the the combination of modules and supported runtimes. All the modules can be accessed <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms">here</a> and can be combined to form data processing pipelines, as shown in the <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/examples">examples</a> folder.</p>
<table>
<thead>
<tr>
<th align="left">Modules</th>
<th align="center">Python-only</th>
<th align="center">Ray</th>
<th align="center">Spark</th>
<th align="center">KFP on Ray</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><strong>Data Ingestion</strong></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/code2parquet/python/README.md">Code (from zip) to Parquet</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/pdf2parquet/python/README.md">PDF to Parquet</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/html2parquet/python/README.md">HTML to Parquet</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/web2parquet/README.md">Web to Parquet</a></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><strong>Universal (Code & Language)</strong></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/ededup/ray/README.md">Exact dedup filter</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/fdedup/ray/README.md">Fuzzy dedup filter</a></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/doc_id/ray/README.md">Unique ID annotation</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/filter/python/README.md">Filter on annotations</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/profiler/ray/README.md">Profiler</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/resize/python/README.md">Resize</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/hap/python/README.md">HAP</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/tokenization/python/README.md">Tokenizer</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><strong>Language-only</strong></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/lang_id/python/README.md">Language identification</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/doc_quality/python/README.md">Document quality</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/doc_chunk/python/README.md">Document chunking for RAG</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/text_encoder/python/README.md">Text encoder</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/language/pii_redactor/python/README.md">PII Annotator/Redactor</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><strong>Code-only</strong></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/proglang_select/python/README.md">Programming language annotation</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/code_quality/python/README.md">Code quality annotation</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/malware/python/README.md">Malware annotation</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/header_cleanser/python/README.md">Header cleanser</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/repo_level_ordering/ray/README.md">Semantic file ordering</a></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="left"><a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/license_select/python/README.md">License Select Annotation</a></td>
<td align="center"><span>✅</span></td>
<td align="center"><span>✅</span></td>
<td align="center"></td>
<td align="center"><span>✅</span></td>
</tr>
</tbody>
</table>
<p>Contributors are welcome to add new modules to expand to other data modalities as well as add runtime support for existing modules!</p>
<h3>Add your own transform</h3>
<p>At the core of the framework, is a data processing library, that provides a systematic way to implement the data processing modules. The library is python-based and enables the application of "transforms" to a one or more input data files to produce one or more output data files. We use the popular <a href="https://arrow.apache.org/docs/python/parquet.html">parquet</a> format to store the data (code or language). Every parquet file follows a set <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/code/code2parquet/python/README.md">schema</a>. A user can use one or more transforms (or modules) as discussed above to process their data. A transform can follow one of the two patterns: annotator or filter.</p>
<ul>
<li> <p><strong>Annotator</strong> An annotator transform adds information during the processing by adding one more columns to the parquet files. The annotator design also allows a user to verify the results of the processing before the actual filtering of the data.</p> </li>
<li> <p><strong>Filter</strong> A filter transform processes the data and outputs the transformed data, e.g., exact deduplication. A general purpose <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/filter">SQL-based filter transform</a> enables a powerful mechanism for identifying columns and rows of interest for downstream processing.</p> </li>
</ul>
<p>For a new module to be added, a user can pick the right design based on the processing to be applied. More details <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms">here</a>.</p>
<p>One can leverage Python-based processing logic and the Data Processing Library to easily build and contribute new transforms. We have provided an <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/transforms/universal/noop">example transform</a> that can serve as a template to add new simple transforms. Follow the step by step <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/data-processing-lib/doc/simplest-transform-tutorial.md">tutorial</a> to help you add your own new transform.</p>
<p>For a deeper understanding of the library's architecture, its transforms, and available runtimes, we encourage the reader to consult the comprehensive <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/data-processing-lib/doc/overview.md">overview document</a> alongside dedicated sections on <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/data-processing-lib/doc/transforms.md">transforms</a> and <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/data-processing-lib/doc/transform-runtimes.md">runtimes</a>.</p>
<p>Additionally, check out our <a href="https://www.youtube.com/watch?v=0WUMG6HIgMg">video tutorial</a> for a visual, example-driven guide on adding custom modules.</p>
<h2>💻 -> 🖥️☁️ From laptop to cluster <a name="laptop_cluster"></a></h2>
<p>Data-prep-kit provides the flexibility to transition your projects from proof-of-concept (PoC) stage to full-scale production mode, offering all the necessary tools to run your data transformations at high volume. In this section, we enable you how to run your transforms at scale and how to automate them.</p>
<h3>Scaling of Transforms</h3>
<p>To enable processing of large data volumes leveraging multi-mode clusters, <a href="https://docs.ray.io/en/latest/index.html">Ray</a> or <a href="https://spark.apache.org">Spark</a> wrappers are provided, to readily scale out the Python implementations.</p>
<p>A generalized workflow is shown <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/data-processing.md">here</a>.</p>
<h3>Automation</h3>
<p>The toolkit also supports transform execution automation based on <a href="https://www.kubeflow.org/docs/components/pipelines/v1/introduction/">Kubeflow pipelines</a> (KFP), tested on a locally deployed <a href="https://kind.sigs.k8s.io/">Kind cluster</a> and external OpenShift clusters. There is an automation to create a Kind cluster and deploy all required components on it. The KFP implementation is based on the <a href="https://docs.ray.io/en/master/cluster/kubernetes/getting-started.html">KubeRay Operator</a> for creating and managing the Ray cluster and <a href="https://github.com/ray-project/kuberay/tree/master/apiserver">KubeRay API server</a> to interact with the KubeRay operator. An additional <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/kfp_support_lib">framework</a> along with several <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/kfp_ray_components">kfp components</a> is used to simplify the pipeline implementation.</p>
<p>A simple transform pipeline <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/doc/simple_transform_pipeline.md">tutorial</a> explains the pipeline creation and execution. In addition, if you want to combine several transformers in a single pipeline, you can look at <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/doc/multi_transform_pipeline.md">multi-steps pipeline</a></p>
<p>When you finish working with the cluster, and want to clean up or destroy it. See the <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/kfp/doc/setup.md#cleanup">clean up the cluster</a></p>
<h3>Run your first transform using command line options</h3>
<p>You can run transforms via docker image or using virtual environments. This <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/quick-start/run-transform-venv.md">document</a> shows how to run a transform using virtual environment. You can follow this <a href="https://raw.githubusercontent.com/IBM/data-prep-kit/dev/doc/quick-start/run-transform-image.md">document</a> to run using docker image.</p>
<h2>Citations <a name="citations"></a></h2>
<p>If you use Data Prep Kit in your research, please cite our paper:</p>
<pre><code class="language-bash">@misc{wood2024dataprepkitgettingdataready,
title={Data-Prep-Kit: getting your data ready for LLM application development},
author={David Wood and Boris Lublinsky and Alexy Roytman and Shivdeep Singh
and Constantin Adam and Abdulhamid Adebayo and Sungeun An and Yuan Chi Chang
and Xuan-Hong Dang and Nirmit Desai and Michele Dolfi and Hajar Emami-Gohari
and Revital Eres and Takuya Goto and Dhiraj Joshi and Yan Koyfman
and Mohammad Nassar and Hima Patel and Paramesvaran Selvam and Yousaf Shah
and Saptha Surendran and Daiki Tsuzuku and Petros Zerfos and Shahrokh Daijavad},
year={2024},
eprint={2409.18164},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2409.18164},
}
</code></pre>
+
+
+ DataExpert-io/data-engineer-handbook
+ 2024-12-01T01:43:58Z
+ tag:github.com,2024-12-01:/DataExpert-io/data-engineer-handbook
+
+ <p>This is a repo with links to everything you'd ever want to learn about data engineering</p><hr><h1>The Data Engineering Handbook</h1>
<p>This repo has all the resources you need to become an amazing data engineer!</p>
<h2>Getting started</h2>
<p>If you are new to data engineering, start by following this <a href="https://blog.dataengineer.io/p/the-2024-breaking-into-data-engineering">2024 breaking into data engineering roadmap</a></p>
<p>If you are here for the <a href="https://youtu.be/myhe0LXpCeo">6-week free YouTube boot camp</a> you can check out</p>
<ul>
<li><a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/bootcamp/introduction.md">introduction</a></li>
<li><a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/bootcamp/software.md">software needed</a></li>
</ul>
<p>For more applied learning:</p>
<ul>
<li>Check out the <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/projects.md">projects</a> section for more hands-on examples!</li>
<li>Check out the <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/interviews.md">interviews</a> section for more advice on how to pass data engineering interviews!</li>
<li>Check out the <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/books.md">books</a> section for a list of high quality data engineering books</li>
<li>Check out the <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/communities.md">communities</a> section for a list of high quality data engineering communities to join</li>
<li>Check out the <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/newsletters.md">newsletter</a> section to learn via email</li>
</ul>
<h2>Resources</h2>
<h3>Great <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/books.md">list of over 25 books</a></h3>
<p>Top 3 must read books are:</p>
<ul>
<li><a href="https://www.amazon.com/Fundamentals-Data-Engineering-Robust-Systems/dp/1098108302/">Fundamentals of Data Engineering</a></li>
<li><a href="https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321/">Designing Data-Intensive Applications</a></li>
<li><a href="https://www.amazon.com/Designing-Machine-Learning-Systems-Production-Ready/dp/1098107969">Designing Machine Learning Systems</a></li>
</ul>
<h3>Great <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/communities.md">list of over 10 communities to join</a>:</h3>
<p>Top must-join communities for DE:</p>
<ul>
<li><a href="https://discord.gg/JGumAXncAK">DataExpert.io Community Discord</a></li>
<li><a href="https://datatalks.club/slack">Data Talks Club Slack</a></li>
<li><a href="https://www.dataengineerthings.org/aboutus/">Data Engineer Things Community</a></li>
</ul>
<p>Top must-join communities for ML:</p>
<ul>
<li><a href="https://discord.com/invite/ezzszrRZvT">AdalFlow Discord</a></li>
<li><a href="https://discord.gg/dzh728c5t3">Chip Huyen MLOps Discord</a></li>
</ul>
<h3>Companies:</h3>
<ul>
<li>Orchestration
<ul>
<li><a href="https://www.mage.ai">Mage</a></li>
<li><a href="https://www.astronomer.io">Astronomer</a></li>
<li><a href="https://www.prefect.io">Prefect</a></li>
<li><a href="https://www.dagster.io">Dagster</a></li>
<li><a href="https://airflow.apache.org/">Airflow</a></li>
<li><a href="https://kestra.io/">Kestra</a></li>
<li><a href="https://www.shipyardapp.com/">Shipyard</a></li>
<li><a href="https://github.com/dagworks-inc/hamilton">Hamilton</a></li>
</ul> </li>
<li>Data Lake / Cloud
<ul>
<li><a href="https://www.tabular.io">Tabular</a></li>
<li><a href="https://www.microsoft.com">Microsoft</a></li>
<li><a href="https://www.databricks.com/company/about-us">Databricks</a></li>
<li><a href="https://www.onehouse.ai">Onehouse</a></li>
<li><a href="https://delta.io/">Delta Lake</a></li>
</ul> </li>
<li>Data Warehouse
<ul>
<li><a href="https://www.snowflake.com/en/">Snowflake</a></li>
<li><a href="https://www.firebolt.io/">Firebolt</a></li>
</ul> </li>
<li>Data Quality
<ul>
<li><a href="https://www.getdbt.com/">dbt</a></li>
<li><a href="https://www.gable.ai">Gable</a></li>
<li><a href="https://www.greatexpectations.io">Great Expectations</a></li>
<li><a href="https://streamdal.com">Streamdal</a></li>
<li><a href="https://coalesce.io/">Coalesce</a></li>
<li><a href="https://www.soda.io/">Soda</a></li>
<li><a href="https://dqops.com/">DQOps</a></li>
<li><a href="https://hedda.io">HEDDA.IO</a></li>
</ul> </li>
<li>Education Companies
<ul>
<li><a href="https://www.dataexpert.io">DataExpert.io</a></li>
<li><a href="https://www.learndataengineering.com">LearnDataEngineering.com</a></li>
<li><a href="https://www.algoexpert.io">AlgoExpert</a></li>
<li><a href="https://www.bytebytego.com">ByteByteGo</a></li>
</ul> </li>
<li>Analytics / Visualization
<ul>
<li><a href="https://www.preset.io">Preset</a></li>
<li><a href="https://www.starburst.io">Starburst</a></li>
<li><a href="https://www.metabase.com/">Metabase</a></li>
<li><a href="https://lookerstudio.google.com/overview">Looker Studio</a></li>
<li><a href="https://www.tableau.com/">Tableau</a></li>
<li><a href="https://powerbi.microsoft.com/">Power BI</a></li>
<li><a href="https://hex.ai/">Hex</a></li>
<li><a href="https://superset.apache.org/">Apache Superset</a></li>
<li><a href="https://evidence.dev">Evidence</a></li>
</ul> </li>
<li>Data Integration
<ul>
<li><a href="https://cube.dev">Cube</a></li>
<li><a href="https://www.fivetran.com">Fivetran</a></li>
<li><a href="https://airbyte.io">Airbyte</a></li>
<li><a href="https://dlthub.com/">dlt</a></li>
<li><a href="https://slingdata.io/">Sling</a></li>
<li><a href="https://meltano.com/">Meltano</a></li>
</ul> </li>
<li>Modern OLAP
<ul>
<li><a href="https://druid.apache.org/">Apache Druid</a></li>
<li><a href="https://clickhouse.com/">ClickHouse</a></li>
<li><a href="https://pinot.apache.org/">Apache Pinot</a></li>
<li><a href="https://kylin.apache.org/">Apache Kylin</a></li>
<li><a href="https://duckdb.org/">DuckDB</a></li>
<li><a href="https://questdb.io/">QuestDB</a></li>
<li><a href="https://www.starrocks.io/">StarRocks</a></li>
</ul> </li>
<li>LLM application library
<ul>
<li><a href="https://github.com/SylphAI-Inc/AdalFlow">AdalFlow</a></li>
<li><a href="https://github.com/langchain-ai/langchain">LangChain</a></li>
<li><a href="https://github.com/run-llama/llama_index">LlamaIndex</a></li>
</ul> </li>
<li>Real-Time Data
<ul>
<li><a href="https://aggregations.io">Aggregations.io</a></li>
<li><a href="https://www.responsive.dev/">Responsive</a></li>
<li><a href="https://risingwave.com/">RisingWave</a></li>
<li><a href="https://www.striim.com/">Striim</a></li>
</ul> </li>
</ul>
<h3>Data Engineering blogs of companies:</h3>
<ul>
<li><a href="https://netflixtechblog.com/tagged/big-data">Netflix</a></li>
<li><a href="https://www.uber.com/blog/houston/data/?uclick_id=b2f43229-f3f4-4bae-bd5d-10a05db2f70c">Uber</a></li>
<li><a href="https://www.databricks.com/blog/category/engineering/data-engineering">Databricks</a></li>
<li><a href="https://medium.com/airbnb-engineering/data/home">Airbnb</a></li>
<li><a href="https://aws.amazon.com/blogs/big-data/">Amazon AWS Blog</a></li>
<li><a href="https://techcommunity.microsoft.com/t5/data-architecture-blog/bg-p/DataArchitectureBlog">Microsoft Data Architecture Blogs</a></li>
<li><a href="https://blog.fabric.microsoft.com/">Microsoft Fabric Blog</a></li>
<li><a href="https://blogs.oracle.com/datawarehousing/">Oracle</a></li>
<li><a href="https://engineering.fb.com/category/data-infrastructure/">Meta</a></li>
<li><a href="https://www.onehouse.ai/blog">Onehouse</a></li>
</ul>
<h3>Data Engineering Whitepapers:</h3>
<ul>
<li><a href="https://ibimapublishing.com/articles/CIBIMA/2011/695619/695619.pdf">A Five-Layered Business Intelligence Architecture</a></li>
<li><a href="https://www.cidrdb.org/cidr2021/papers/cidr2021_paper17.pdf">Lakehouse:A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics</a></li>
<li><a href="https://link.springer.com/chapter/10.1007/978-3-030-23381-5_5">Big Data Quality: A Data Quality Profiling Model</a></li>
<li><a href="https://arxiv.org/abs/2310.08697">The Data Lakehouse: Data Warehousing and More</a></li>
<li><a href="https://dl.acm.org/doi/10.5555/1863103.1863113">Spark: Cluster Computing with Working Sets</a></li>
<li><a href="https://research.google/pubs/the-google-file-system/">The Google File System</a></li>
<li><a href="https://www.onehouse.ai/whitepaper/onehouse-universal-data-lakehouse-whitepaper">Building a Universal Data Lakehouse</a></li>
<li><a href="https://arxiv.org/abs/2401.09621">XTable in Action: Seamless Interoperability in Data Lakes</a></li>
<li><a href="https://research.google/pubs/mapreduce-simplified-data-processing-on-large-clusters/">MapReduce: Simplified Data Processing on Large Clusters</a></li>
</ul>
<h2>Social Media Accounts</h2>
<p>Here's the mostly comprehensive list of data engineering creators: <strong>(You have to have at least 5k followers somewhere to be added!)</strong></p>
<table>
<thead>
<tr>
<th>Name</th>
<th><img src="https://upload.wikimedia.org/wikipedia/commons/4/42/YouTube_icon_%282013-2017%29.png" width="50"><br> YouTube</th>
<th><img src="https://upload.wikimedia.org/wikipedia/commons/c/ca/LinkedIn_logo_initials.png" width="50" height="50"> <br> LinkedIn</th>
<th><img src="https://icon2.cleanpng.com/20240402/kzp/transparent-x-logo-woman-black-and-white-photography-street-fa-woman-in-dark-clothing-walking-determinedly660c4b50383a25.14507568.webp" width="50"><br> X/Twitter</th>
<th><img src="https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png" width="50"> <br> Instagram</th>
<th><img src="https://icon2.cleanpng.com/20240214/kxl/transparent-tiktok-logo-tiktok-logo-blue-and-pink-lettering-re-retro-style-tiktok-logo-evoking-1950s-1710878265139.webp" width="50"> <br> TikTok</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zach Wilson</td>
<td><a href="https://www.youtube.com/@eczachly_">Data with Zach</a> (70k+)</td>
<td><a href="https://www.linkedin.com/in/eczachly">Zach Wilson</a> (400k+)</td>
<td><a href="https://www.twitter.com/EcZachly">EcZachly</a> (30k+)</td>
<td><a href="https://www.instagram.com/eczachly">eczachly</a> (150k+)</td>
<td><a href="https://www.tiktok.com/@eczachly">@eczachly</a> (70k+)</td>
</tr>
<tr>
<td>Shashank Mishra</td>
<td><a href="https://www.youtube.com/@shashank_mishra">E-learning Bridge</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/shashank219/">Shashank Mishra</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Seattle Data Guy</td>
<td><a href="https://www.youtube.com/c/SeattleDataGuy">Seattle Data Guy</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/benjaminrogojan">Ben Rogojan</a> (100k+)</td>
<td><a href="https://www.twitter.com/SeattleDataGuy">SeattleDataGuy</a> (10k+)</td>
<td></td>
<td></td>
</tr>
<tr>
<td>TrendyTech</td>
<td><a href="https://www.youtube.com/c/TrendytechInsights">TrendyTech</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/bigdatabysumit/">Sumit Mittal</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Darshil Parmar</td>
<td><a href="https://www.youtube.com/@DarshilParmar">Darshil Parmar</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/darshil-parmar/">Darshil Parmar</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Andreas Kretz</td>
<td><a href="https://www.youtube.com/c/andreaskayy">Andreas Kretz</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/andreas-kretz">Andreas Kretz</a> (100k+)</td>
<td></td>
<td><a href="https://www.instagram.com/learndataengineering">learndataengineering</a> (5k+)</td>
<td></td>
</tr>
<tr>
<td>ByteByteGo</td>
<td><a href="https://www.youtube.com/c/ByteByteGo">ByteByteGo</a> (1m+)</td>
<td><a href="https://www.linkedin.com/in/alexxubyte">Alex Xu</a> (100k+)</td>
<td><a href="https://twitter.com/alexxubyte/">alexxubyte</a> (100k+)</td>
<td></td>
<td></td>
</tr>
<tr>
<td>The Ravit Show</td>
<td><a href="https://youtube.com/@theravitshow">The Ravit Show</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Guy in a Cube</td>
<td><a href="https://www.youtube.com/@GuyInACube">Guy in a Cube</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Adam Marczak</td>
<td><a href="https://www.youtube.com/@AdamMarczakYT">Adam Marczak</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>nullQueries</td>
<td><a href="https://www.youtube.com/@nullQueries">nullQueries</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>TECHTFQ by Thoufiq</td>
<td><a href="https://www.youtube.com/@techTFQ">TECHTFQ by Thoufiq</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>SQLBI</td>
<td><a href="https://www.youtube.com/@SQLBI">SQLBI</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/sqlbi">Marco Russo</a> (50k+)</td>
<td><a href="https://x.com/marcorus">marcorus</a> (10k+)</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Azure Lib</td>
<td><a href="https://www.youtube.com/@azurelib-academy">Azure Lib</a> (10k+)</td>
<td><a href="https://www.linkedin.com/in/deepak-goyal-93805a17/">Deepak Goyal</a> (100k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Advancing Analytics</td>
<td><a href="https://www.youtube.com/@AdvancingAnalytics">Advancing Analytics</a> (10k+)</td>
<td><a href="https://www.linkedin.com/in/simon-whiteley-uk/">Simon Whiteley</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Kahan Data Solutions</td>
<td><a href="https://www.youtube.com/@KahanDataSolutions">Kahan Data Solutions</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Ankit Bansal</td>
<td><a href="https://youtube.com/@ankitbansal6">Ankit Bansal</a> (10k+)</td>
<td><a href="https://www.linkedin.com/in/ankitbansal6/">Ankit Bansal</a> (50k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Mr. K Talks Tech</td>
<td><a href="https://www.youtube.com/channel/UCzdOan4AmF65PmLLks8Lmww">Mr. K Talks Tech</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Li Yin</td>
<td></td>
<td><a href="https://www.linkedin.com/in/li-yin-ai/">Li Yin</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Jaco van Gelder</td>
<td></td>
<td><a href="https://www.linkedin.com/in/jwvangelder/">Jaco van Gelder</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Joseph Machado</td>
<td></td>
<td><a href="https://www.linkedin.com/in/josephmachado1991/">Joseph Machado</a> (10k+)</td>
<td><a href="https://twitter.com/startdataeng">startdataeng</a> (5k+)</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Eric Roby</td>
<td></td>
<td><a href="https://www.linkedin.com/in/codingwithroby/">Eric Roby</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Simon Späti</td>
<td></td>
<td><a href="https://www.linkedin.com/in/sspaeti/">Simon Späti</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Dipankar Mazumdar</td>
<td></td>
<td><a href="https://www.linkedin.com/in/dipankar-mazumdar/">Dipankar Mazumdar</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Daniel Ciocirlan</td>
<td></td>
<td><a href="https://www.linkedin.com/in/danielciocirlan">Daniel Ciocirlan</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Hugo Lu</td>
<td></td>
<td><a href="https://www.linkedin.com/in/hugo-lu-confirmed/">Hugo Lu</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Tobias Macey</td>
<td></td>
<td><a href="https://www.linkedin.com/in/tmacey">Tobias Macey</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Marcos Ortiz</td>
<td></td>
<td><a href="https://www.linkedin.com/in/mlortiz">Marcos Ortiz</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Julien Hurault</td>
<td></td>
<td><a href="https://www.linkedin.com/in/julienhuraultanalytics/">Julien Hurault</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Alex Freberg</td>
<td><a href="https://www.youtube.com/@AlexTheAnalyst">Alex The Analyst</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/alex-freberg/">Alex Freberg</a> (100k+)</td>
<td></td>
<td></td>
<td><a href="https://www.tiktok.com/@alex_the_analyst">@alex_the_analyst</a> (10k+)</td>
</tr>
<tr>
<td>Marc Lamberti</td>
<td></td>
<td><a href="https://www.linkedin.com/in/marclamberti">Marc Lamberti</a> (50k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Chip Huyen</td>
<td></td>
<td><a href="https://www.linkedin.com/in/chiphuyen/">Chip Huyen</a> (250k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Alex Merced</td>
<td><a href="https://www.youtube.com/@alexmerceddata_">Alex Merced Data</a></td>
<td><a href="https://www.linkedin.com/in/alexmerced">Alex Merced</a> (30k+)</td>
<td><a href="https://www.twitter.com/amdatalakehouse">@amdatalakehouse</a></td>
<td><a href="https://www.instagram.com/alexmercedcoder">@alexmercedcoder</a></td>
<td></td>
</tr>
<tr>
<td>John Kutay</td>
<td><a href="https://www.youtube.com/watch?v=7K09lxNbF3Q&list=PL1EXPn7cSg91KLnk2P26Fh8OnGrh6eFmx&pp=iAQB">John Kutay</a></td>
<td><a href="https://www.linkedin.com/in/johnkutay/">John Kutay</a> (5k+)</td>
<td><a href="https://x.com/JohnKutay">@JohnKutay</a></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Lakshmi Sontenam</td>
<td></td>
<td><a href="https://www.linkedin.com/in/shivaga9esh">Lakshmi Sontenam</a> (9.5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Hassaan Akbar</td>
<td></td>
<td><a href="https://www.linkedin.com/in/ehassaan">Hassaan Akbar</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Samuel Focht</td>
<td><a href="https://www.youtube.com/@PythonBasics">Python Basics </a> (10k+)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Constantin Lungu</td>
<td></td>
<td><a href="https://www.linkedin.com/in/constantin-lungu-668b8756">Constantin Lungu</a> (10k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Ijaz Ali</td>
<td></td>
<td><a href="https://www.linkedin.com/in/ijaz-ali-6aaa87122/">Ijaz Ali</a> (24K+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Subhankar</td>
<td></td>
<td><a href="https://www.linkedin.com/in/subhankarumass/">Subhankar</a> (5k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Ankur Ranjan</td>
<td><a href="https://www.youtube.com/@TheBigDataShow">Big Data Show</a> (100k+)</td>
<td><a href="https://www.linkedin.com/in/thebigdatashow/">Ankur Ranjan</a> (48k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Lenny</td>
<td></td>
<td><a href="https://www.linkedin.com/in/lennyardiles/">Lenny A</a> (6k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Mehdi Ouazza</td>
<td><a href="https://www.youtube.com/@mehdio">Mehdio DataTV</a> (3k+)</td>
<td><a href="https://www.linkedin.com/in/mehd-io/">Mehdi Ouazza</a> (20k+)</td>
<td><a href="https://x.com/mehd_io">mehd_io</a></td>
<td></td>
<td><a href="https://www.tiktok.com/@mehdio_datatv">@mehdio_datatv</a></td>
</tr>
<tr>
<td>ITVersity</td>
<td><a href="https://www.youtube.com/@itversity">ITVersity</a> (67k+)</td>
<td><a href="https://www.linkedin.com/in/durga0gadiraju/">Durga Gadiraju</a> (48k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Arnaud Milleker</td>
<td></td>
<td><a href="https://www.linkedin.com/in/arnaudmilleker/">Arnaud Milleker</a> (7k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Soumil Shah</td>
<td>[Soumil Shah] (<a href="https://www.youtube.com/@SoumilShah">https://www.youtube.com/@SoumilShah</a>) (50k)</td>
<td><a href="https://www.linkedin.com/in/shah-soumil/">Soumil Shah</a> (8k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Ananth Packkildurai</td>
<td></td>
<td><a href="https://www.linkedin.com/in/ananthdurai/">Ananth Packkildurai</a> (18k+)</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h3>Great Podcasts</h3>
<ul>
<li><a href="https://www.dataengineeringshow.com/">The Data Engineering Show</a></li>
<li><a href="https://www.dataengineeringpodcast.com/">Data Engineering Podcast</a></li>
<li><a href="https://www.datatopics.io/">DataTopics</a></li>
<li><a href="https://podcasts.apple.com/us/podcast/the-engineering-side-of-data/id1566999533">The Data Engineering Side Of Data</a></li>
<li><a href="https://www.ascend.io/dataaware-podcast/">DataWare</a></li>
<li><a href="https://www.deezer.com/us/show/5293247">The Data Coffee Break Podcast</a></li>
<li><a href="https://datastackshow.com/">The Datastack show</a></li>
<li><a href="https://www.intricity.com/learningcenter/podcast">Intricity101 Data Sharks Podcast</a></li>
<li><a href="https://www.rittmananalytics.com/drilltodetail/">Drill to Detail with Mark Rittman</a></li>
<li><a href="https://analyticshour.io/">Analytics Power Hour</a></li>
<li><a href="https://listen.casted.us/public/127/Catalog-%26-Cocktails-2fcf8728">Catalog & cocktails</a></li>
<li><a href="https://datatalks.club/podcast.html">Datatalks</a></li>
<li><a href="https://www.databricks.com/discover/data-brew">Data Brew by Databricks</a></li>
<li><a href="https://rise-of-the-data-cloud.simplecast.com/">The Data Cloud Podcast by Snowflake</a></li>
<li><a href="https://www.striim.com/podcast/">What's New in Data</a></li>
<li><a href="https://www.datastax.com/resources/podcast/open-source-data">Open||Source||Data by Datastax</a></li>
<li><a href="https://developer.confluent.io/podcast/">Streaming Audio by confluent</a></li>
<li><a href="https://podcasts.apple.com/us/podcast/the-data-scientist-show/id1584430381">The Data Scientist Show</a></li>
<li><a href="https://podcast.mlops.community/">MLOps.community</a></li>
<li><a href="https://open.spotify.com/show/3Km3lBNzJpc1nOTJUtbtMh">Monday Morning Data Chat</a></li>
<li><a href="https://www.thoughtspot.com/data-chief/podcast">The Data Chief</a></li>
</ul>
<h3>Great <a href="https://raw.githubusercontent.com/DataExpert-io/data-engineer-handbook/main/newsletters.md">list of 20+ newsletters</a></h3>
<p>Top must follow newsletters for data engineering:</p>
<ul>
<li><a href="https://blog.dataengineer.io">DataEngineer.io Newsletter</a></li>
<li><a href="https://joereis.substack.com">Joe Reis</a></li>
<li><a href="https://www.startdataengineering.com">Start Data Engineering</a></li>
<li><a href="https://www.dataengineeringweekly.com">Data Engineering Weekly</a></li>
</ul>
<h3>Glossaries:</h3>
<ul>
<li><a href="https://www.ssp.sh/brain/data-engineering/">Data Engineering Vault</a></li>
<li><a href="https://glossary.airbyte.com/">Airbyte Data Glossary</a></li>
<li><a href="https://dataengineering.wiki/Index">Data Engineering Wiki by Reddit</a></li>
<li><a href="https://www.secoda.co/glossary/">Seconda Glossary</a></li>
<li><a href="https://www.databricks.com/glossary">Glossary Databricks</a></li>
<li><a href="https://airtable.com/shrGh8BqZbkfkbrfk/tbluZ3ayLHC3CKsDb">Airtable Glossary</a></li>
<li><a href="https://dagster.io/glossary">Data Engineering Glossary by Dagster</a></li>
</ul>
<h3>Design Patterns</h3>
<ul>
<li><a href="https://www.github.com/DataExpert-io/cumulative-table-design">Cumulative Table Design</a></li>
<li><a href="https://www.github.com/EcZachly/microbatch-hourly-deduped-tutorial">Microbatch Deduplication</a></li>
<li><a href="https://www.github.com/EcZachly/little-book-of-pipelines">The Little Book of Pipelines</a></li>
<li><a href="https://datadeveloperplatform.org/architecture/">Data Developer Platform</a></li>
</ul>
<h3>Courses / Academies</h3>
<ul>
<li><a href="https://www.dataexpert.io">DataExpert.io course</a> use code <strong>HANDBOOK10</strong> for a discount!</li>
<li><a href="https://www.learndataengineering.com">LearnDataEngineering.com</a></li>
<li><a href="https://www.technicalfreelanceracademy.com/">Technical Freelancer Academy</a> Use code <strong>zwtech</strong> for a discount!</li>
<li><a href="https://www.edx.org/learn/data-engineering/ibm-data-engineering-basics-for-everyone">IBM Data Engineering for Everyone</a></li>
<li><a href="https://www.qwiklabs.com/">Qwiklabs</a></li>
<li><a href="https://www.datacamp.com/">DataCamp</a></li>
<li><a href="https://www.udemy.com/user/shruti-mantri-5/">Udemy Courses from Shruti Mantri</a></li>
<li><a href="https://rockthejvm.com/">Rock the JVM</a> teaches Spark (in Scala), Flink and others</li>
<li><a href="https://datatalks.club/">Data Engineering Zoomcamp by DataTalksClub</a></li>
<li><a href="https://josephmachado.podia.com/efficient-data-processing-in-spark">Efficient Data Processing in Spark</a></li>
<li><a href="https://www.scaler.com/">Scaler</a></li>
<li><a href="https://www.datateams.ai/">DataTeams - Data Engingeer hiring platform</a></li>
<li><a href="https://danielblanco.dev/links">Udemy Courses from Daniel Blanco</a></li>
</ul>
<h3>Certifications Courses</h3>
<ul>
<li><a href="https://cloud.google.com/certification/data-engineer">Google Cloud Certified - Professional Data Engineer</a></li>
<li><a href="https://www.databricks.com/learn/certification/apache-spark-developer-associate">Databricks - Certified Associate Developer for Apache Spark</a></li>
<li><a href="https://www.databricks.com/learn/certification/data-engineer-associate">Databricks - Data Engineer Associate</a></li>
<li><a href="https://www.databricks.com/learn/certification/data-engineer-professional">Databricks - Data Engineer Professional</a></li>
<li><a href="https://learn.microsoft.com/en-us/credentials/certifications/exams/dp-203/?tab=tab-learning-paths">Exam DP-203: Data Engineering on Microsoft Azure</a></li>
<li><a href="https://learn.microsoft.com/credentials/certifications/fabric-analytics-engineer-associate/">Microsoft Fabric Analytics Engineer Associate</a></li>
<li><a href="https://aws.amazon.com/certification/certified-data-engineer-associate/">AWS Certified Data Engineer - Associate</a></li>
</ul>
+
+
\ No newline at end of file
diff --git a/kaitai-struct/daily/index.xml b/kaitai-struct/daily/index.xml
index 5822787d112..1fc7b1c7154 100644
--- a/kaitai-struct/daily/index.xml
+++ b/kaitai-struct/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Kaitai Struct Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:20Z
+ 2024-12-01T01:33:20Z
Daily Trending of Kaitai Struct in GitHub
\ No newline at end of file
diff --git a/kaitai-struct/monthly/index.xml b/kaitai-struct/monthly/index.xml
new file mode 100644
index 00000000000..1a974485b7b
--- /dev/null
+++ b/kaitai-struct/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kaitai Struct Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:02Z
+ Monthly Trending of Kaitai Struct in GitHub
+
+
\ No newline at end of file
diff --git a/kaitai-struct/weekly/index.xml b/kaitai-struct/weekly/index.xml
new file mode 100644
index 00000000000..4804b160f21
--- /dev/null
+++ b/kaitai-struct/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kaitai Struct Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:02Z
+ Weekly Trending of Kaitai Struct in GitHub
+
+
\ No newline at end of file
diff --git a/kakounescript/daily/index.xml b/kakounescript/daily/index.xml
index 2c64439eecf..ead7358e1c7 100644
--- a/kakounescript/daily/index.xml
+++ b/kakounescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub KakouneScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:19Z
+ 2024-12-01T01:33:20Z
Daily Trending of KakouneScript in GitHub
\ No newline at end of file
diff --git a/kakounescript/monthly/index.xml b/kakounescript/monthly/index.xml
new file mode 100644
index 00000000000..38a4830011e
--- /dev/null
+++ b/kakounescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KakouneScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:02Z
+ Monthly Trending of KakouneScript in GitHub
+
+
\ No newline at end of file
diff --git a/kakounescript/weekly/index.xml b/kakounescript/weekly/index.xml
new file mode 100644
index 00000000000..1166391cc79
--- /dev/null
+++ b/kakounescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KakouneScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:02Z
+ Weekly Trending of KakouneScript in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-layout/daily/index.xml b/kicad-layout/daily/index.xml
index c5814485d03..f6f43e8561b 100644
--- a/kicad-layout/daily/index.xml
+++ b/kicad-layout/daily/index.xml
@@ -1,7 +1,7 @@
GitHub KiCad Layout Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:22Z
+ 2024-12-01T01:33:22Z
Daily Trending of KiCad Layout in GitHub
\ No newline at end of file
diff --git a/kicad-layout/monthly/index.xml b/kicad-layout/monthly/index.xml
new file mode 100644
index 00000000000..97ac311b5f2
--- /dev/null
+++ b/kicad-layout/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Layout Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:04Z
+ Monthly Trending of KiCad Layout in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-layout/weekly/index.xml b/kicad-layout/weekly/index.xml
new file mode 100644
index 00000000000..ba9648f042c
--- /dev/null
+++ b/kicad-layout/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Layout Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:05Z
+ Weekly Trending of KiCad Layout in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-legacy-layout/daily/index.xml b/kicad-legacy-layout/daily/index.xml
index 3ea0dd38a6f..31e60b4b07f 100644
--- a/kicad-legacy-layout/daily/index.xml
+++ b/kicad-legacy-layout/daily/index.xml
@@ -1,7 +1,7 @@
GitHub KiCad Legacy Layout Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:21Z
+ 2024-12-01T01:33:22Z
Daily Trending of KiCad Legacy Layout in GitHub
\ No newline at end of file
diff --git a/kicad-legacy-layout/monthly/index.xml b/kicad-legacy-layout/monthly/index.xml
new file mode 100644
index 00000000000..abe6294e5ce
--- /dev/null
+++ b/kicad-legacy-layout/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Legacy Layout Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:04Z
+ Monthly Trending of KiCad Legacy Layout in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-legacy-layout/weekly/index.xml b/kicad-legacy-layout/weekly/index.xml
new file mode 100644
index 00000000000..e52421fa64a
--- /dev/null
+++ b/kicad-legacy-layout/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Legacy Layout Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:04Z
+ Weekly Trending of KiCad Legacy Layout in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-schematic/daily/index.xml b/kicad-schematic/daily/index.xml
index ca0470aaa8d..8f9315e7021 100644
--- a/kicad-schematic/daily/index.xml
+++ b/kicad-schematic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub KiCad Schematic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:21Z
+ 2024-12-01T01:33:22Z
Daily Trending of KiCad Schematic in GitHub
\ No newline at end of file
diff --git a/kicad-schematic/monthly/index.xml b/kicad-schematic/monthly/index.xml
new file mode 100644
index 00000000000..7a1956a7d21
--- /dev/null
+++ b/kicad-schematic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Schematic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:03Z
+ Monthly Trending of KiCad Schematic in GitHub
+
+
\ No newline at end of file
diff --git a/kicad-schematic/weekly/index.xml b/kicad-schematic/weekly/index.xml
new file mode 100644
index 00000000000..6e9d1f64003
--- /dev/null
+++ b/kicad-schematic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KiCad Schematic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:04Z
+ Weekly Trending of KiCad Schematic in GitHub
+
+
\ No newline at end of file
diff --git a/kit/daily/index.xml b/kit/daily/index.xml
index c6eeeb4495a..22b94fe4346 100644
--- a/kit/daily/index.xml
+++ b/kit/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Kit Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:23Z
+ 2024-12-01T01:33:23Z
Daily Trending of Kit in GitHub
\ No newline at end of file
diff --git a/kit/monthly/index.xml b/kit/monthly/index.xml
new file mode 100644
index 00000000000..1b2bf940b8f
--- /dev/null
+++ b/kit/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kit Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:05Z
+ Monthly Trending of Kit in GitHub
+
+
\ No newline at end of file
diff --git a/kit/weekly/index.xml b/kit/weekly/index.xml
new file mode 100644
index 00000000000..ccf0e790a22
--- /dev/null
+++ b/kit/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kit Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:05Z
+ Weekly Trending of Kit in GitHub
+
+
\ No newline at end of file
diff --git a/kotlin/daily/index.xml b/kotlin/daily/index.xml
index ce187de1f17..83d8960f12b 100644
--- a/kotlin/daily/index.xml
+++ b/kotlin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Kotlin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:26Z
+ 2024-12-01T01:33:26Z
Daily Trending of Kotlin in GitHub
\ No newline at end of file
diff --git a/kotlin/monthly/index.xml b/kotlin/monthly/index.xml
new file mode 100644
index 00000000000..ca2c85861b2
--- /dev/null
+++ b/kotlin/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Kotlin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:08Z
+ Monthly Trending of Kotlin in GitHub
+
+
+ deniscerri/ytdlnis
+ 2024-12-01T01:55:08Z
+ tag:github.com,2024-12-01:/deniscerri/ytdlnis
+
+ <p>Android Video/Audio Downloader app using yt-dlp</p><hr><h1 align="center"> <img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/icon.png" width="25%"> <br> YTDLnis </h1>
<div align="center">
English |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-sq.md">Shqip</a> |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-az.md">Azərbaycanca</a> |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-id.md">Indonesia</a> |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-pt.md">Português</a> |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-es.md">Español</a> |
<a href="https://github.com/deniscerri/ytdlnis/raw/main/README-ja.md">Japanese</a>
</div>
<h3 align="center"> YTDLnis is a free and open source video/audio downloader using yt-dlp for Android 7.0 and above. </h3>
<h4 align="center"> Created by Denis Çerri </h4>
<div align="center">
<p><a href="https://github.com/deniscerri/ytdlnis/releases/latest"><img src="https://custom-icon-badges.herokuapp.com/badge/Download-blue?style=for-the-badge&logo=download&logoColor=white" alt="Github Download"></a> <a href="https://android.izzysoft.de/repo/apk/com.deniscerri.ytdl"><img src="https://custom-icon-badges.herokuapp.com/badge/IzzyOnDroid%20Repo-red?style=for-the-badge&logo=download&logoColor=white" alt="IzzyOnDroid Repo"></a> <a href="https://ytdlnis.en.uptodown.com/android/download"><img src="https://custom-icon-badges.herokuapp.com/badge/UpToDown-green?style=for-the-badge&logo=download&logoColor=white" alt="UpToDown"></a></p>
<p><img src="https://github.com/deniscerri/ytdlnis/actions/workflows/android.yml/badge.svg?branch=main&event=pull" alt="CI"> <a href="https://github.com/deniscerri/ytdlnis/releases"><img src="https://img.shields.io/github/release/deniscerri/ytdlnis.svg?maxAge=3600&include_prereleases&label=preview" alt="preview release"></a> <a href="https://github.com/deniscerri/ytdlnis/releases"><img src="https://img.shields.io/github/downloads/deniscerri/ytdlnis/total?style=flat-square" alt="downloads"></a> <a href="https://hosted.weblate.org/engage/ytdlnis/?utm_source=widget"><img src="https://hosted.weblate.org/widgets/ytdlnis/-/svg-badge.svg?sanitize=true" alt="Translation status"></a> <a href="https://discord.gg/WW3KYWxAPm"><img src="https://img.shields.io/badge/Discord-YTDLnis-blueviolet?style=flat-square&logo=discord" alt="community"></a> <a href="https://t.me/ytdlnis"><img src="https://img.shields.io/badge/Telegram-YTDLnis-blue?style=flat-square&logo=telegram" alt="community"></a> <a href="https://t.me/ytdlnisupdates"><img src="https://img.shields.io/badge/Telegram-Updates-red?style=flat-square&logo=telegram" alt="community"></a></p>
<h3>The links above are the only trusted sources of YTDLnis. Everything else is not related to me.</h3>
</div>
<h2>💡 Features:</h2>
<ul>
<li>download audio/video files from more than <a href="https://github.com/yt-dlp/yt-dlp/raw/master/supportedsites.md">1000 websites</a></li>
<li>process playlists
<ul>
<li>edit every playlist item separately just like in a normal download item.</li>
<li>select a common format for all items and/or select multiple audio formats in case you are downloading them as a video</li>
<li>select a download path for all items</li>
<li>select a filename template for all items</li>
<li>batch update download type to audio/video/custom command in one click</li>
</ul> </li>
<li>queue downloads and schedule them by date and time
<ul>
<li>you can also schedule multiple items at the same time</li>
</ul> </li>
<li>download multiple items at the same time</li>
<li>use custom commands and templates or go full yt-dlp mode with a built in terminal
<ul>
<li>you can backup and restore templates, so you can share with your buddies</li>
</ul> </li>
<li>COOKIES support. Log in with your accounts and download private/unavailable videos, unlock premium formats etc.</li>
<li>cut videos based on timestamps and video chapters (This yt-dlp feature is experimental on the original project)
<ul>
<li>you can make unlimited cuts</li>
</ul> </li>
<li>remove sponsorblock elements from the item
<ul>
<li>embed them as a chapters in your video</li>
</ul> </li>
<li>embed subtitles/metadata/chapters etc</li>
<li>modify metadata such as title and author</li>
<li>split item into separate files depending on its chapters</li>
<li>select different download formats</li>
<li>bottom card right from the share menu, no need to open the app
<ul>
<li>you can create a txt file and fill it with links/playlists/search queries separate by a new line and the app will process them</li>
</ul> </li>
<li>search or insert a link from the app
<ul>
<li>you can stack searches so you can process them at the same time</li>
</ul> </li>
<li>log downloads in case of problems</li>
<li>re-download cancelled or failed downloads
<ul>
<li>you can use gestures to swipe left to redownload and right to delete</li>
<li>you can long click the redownload button in the details sheet to show the download card for more functionality</li>
</ul> </li>
<li>incognito mode when you don't want to save a download history or logs</li>
<li>quick download mode
<ul>
<li>download immediately without having to wait for data to process. Turn off the bottom card and it will instantly start</li>
</ul> </li>
<li>open / share downloaded files right from the finished notification</li>
<li>most yt-dlp features are implemented, suggestions are welcome</li>
<li>Material You interface</li>
<li>Theming options</li>
<li>Backup and restore features. (Almost everything can be backed up)</li>
<li>MVVM Architecture w/ WorkManager</li>
</ul>
<h2>📲 Screenshots</h2>
<div>
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/08.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/09.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/10.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/11.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/12.png" width="30%">
<img src="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/fastlane/metadata/android/en-US/images/phoneScreenshots/13.png" width="90%">
</div>
<h2>💬 Contact</h2>
<p>Join our <a href="https://t.me/ytdlnis">Telegram Channel</a> or <a href="https://discord.gg/WW3KYWxAPm">Discord</a> for discussion, announcements, and releases!</p>
<h2>🔑 Connect with ReVanced and LibreTube</h2>
<p>The App's package name is "com.deniscerri.ytdl"</p>
<h2>📝 Help Translate on Weblate</h2>
<a href="https://hosted.weblate.org/engage/ytdlnis/"> <img src="https://hosted.weblate.org/widgets/ytdlnis/-/strings/open-graph.png" alt="Translation status"> </a>
<a href="https://hosted.weblate.org/engage/ytdlnis/"> <img src="https://hosted.weblate.org/widgets/ytdlnis/-/multi-auto.svg?sanitize=true" alt="Translation status"> </a>
<h2>✔️🤖 Connect with Tasker / Macrodroid etc</h2>
<p>You can use intents on apps like tasker or macrodroid to push commands to the app to run a download without user interaction Accepted variables:</p>
<p><b>TYPE</b> -> it can be: audio,video,command <br> <b>BACKGROUND</b> -> it can be: true,false. If its true the app won't show the download card no matter what and run the download in the background <br> <b>COMMAND</b> -> if your preferred type is audio/video or you set the TYPE variable as one of them, this will be appended to your Extra Commands string. If the type is command, the whole command you wrote here will be used for the download <br></p>
<h3>Tasker Example of downloading an audio in the background</h3>
<ol>
<li>Create Send Intent task</li>
<li>Action: android.intent.action.SEND</li>
<li>Cat: Default</li>
<li>Mime Type: text/*</li>
<li>Extra: android.intent.extra.TEXT:url (instead of url write the url of the video you want to download)</li>
<li>Extra: TYPE:audio</li>
<li>Extra: BACKGROUND:true</li>
</ol>
<h2>😇 Contributing</h2>
<p>If you would like to contribute. Please read the <a href="https://raw.githubusercontent.com/deniscerri/ytdlnis/main/CONTRIBUTING.MD">Contributing</a> section.</p>
<h2>📄 License</h2>
<p><a href="https://github.com/deniscerri/ytdlnis/raw/main/LICENSE">GNU GPL v3.0</a></p>
<p>⚠️ Warning <br></p>
<p>Except for the source code licensed under the GPLv3 license, all other parties are prohibited from using the 'YTDLnis' name as a downloader app, and the same is true for its derivatives. Derivatives include but are not limited to forks and unofficial builds.</p>
<h2>🙏 Thanks</h2>
<ul>
<li><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a> and its contributors for making this tool possible. Without it this app wouldn't exist.</li>
<li><a href="https://github.com/yausername/youtubedl-android">youtubedl-android</a> for porting yt-dlp to android</li>
<li><a href="https://github.com/yausername/dvd">dvd</a> for showing how to implement youtubedl-android</li>
<li><a href="https://github.com/JunkFood02/Seal">seal</a> for certain design elements and features i wanted to use aswell in this app when i started developing</li>
<li><a href="https://github.com/decipher3114">decipher3114</a> for the app icon</li>
</ul>
<p>and alot of other internet forum strangers.</p>
+
+
+ firebase/quickstart-android
+ 2024-12-01T01:55:08Z
+ tag:github.com,2024-12-01:/firebase/quickstart-android
+
+ <p>Firebase Quickstart Samples for Android</p><hr><h1>Firebase Quickstarts for Android</h1>
<p>A collection of quickstart samples demonstrating the Firebase APIs on Android. For more information, see <a href="https://firebase.google.com">https://firebase.google.com</a>.</p>
<h2>Samples</h2>
<p>You can open each of the following samples as an Android Studio project, and run them on a mobile device or a virtual device (AVD). When doing so you need to add each sample app you wish to try to a Firebase project on the <a href="https://console.firebase.google.com">Firebase console</a>. You can add multiple sample apps to the same Firebase project. There's no need to create separate projects for each app.</p>
<p>To add a sample app to a Firebase project, use the <code>applicationId</code> value specified in the <code>app/build.gradle</code> file of the app as the Android package name. Download the generated <code>google-services.json</code> file, and copy it to the <code>app/</code> directory of the sample you wish to run.</p>
<ul>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/admob/README.md">Admob</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/analytics/README.md">Analytics</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/appdistribution/README.md">App Distribution</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/app-indexing/README.md">App-Indexing</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/auth/README.md">Auth</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/config/README.md">Config</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/crash/README.md">Crash</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/database/README.md">Database</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/firestore/README.md">Firestore</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/functions/README.md">Functions</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/dynamiclinks/README.md">Dynamic Links</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/inappmessaging/README.md">In-App Messaging</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/messaging/README.md">Messaging</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/mlkit/README.md">ML Kit</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/mlkit-langid/README.md">ML Kit LanguageID</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/mlkit-smartreply/README.md">ML Kit Smart Reply</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/mlkit-translate/README.md">ML Kit Translate</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/perf/README.md">Performance Monitoring</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/storage/README.md">Storage</a></li>
<li><a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/vertexai/README.md">Vertex AI</a></li>
</ul>
<h2>How to make contributions?</h2>
<p>Please read and follow the steps in the <a href="https://raw.githubusercontent.com/firebase/quickstart-android/master/CONTRIBUTING.md">CONTRIBUTING.md</a></p>
<p><a href="https://github.com/firebase/quickstart-android/actions"><img src="https://github.com/firebase/quickstart-android/workflows/Android%20CI/badge.svg?sanitize=true" alt="Actions Status"></a> <a href="https://ossbot.computer/samscore.html"><img src="https://ossbot.computer/samscorebadge?org=firebase&repo=quickstart-android" alt="SAM Score"></a></p>
+
+
+ bitwarden/android
+ 2024-12-01T01:55:08Z
+ tag:github.com,2024-12-01:/bitwarden/android
+
+ <p>Bitwarden mobile app for Android.</p><hr><h1>Bitwarden Android</h1>
<h2>Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/bitwarden/android/main/#compatibility">Compatibility</a></li>
<li><a href="https://raw.githubusercontent.com/bitwarden/android/main/#setup">Setup</a></li>
<li><a href="https://raw.githubusercontent.com/bitwarden/android/main/#dependencies">Dependencies</a></li>
</ul>
<h2>Compatibility</h2>
<ul>
<li><strong>Minimum SDK</strong>: 29</li>
<li><strong>Target SDK</strong>: 35</li>
<li><strong>Device Types Supported</strong>: Phone and Tablet</li>
<li><strong>Orientations Supported</strong>: Portrait and Landscape</li>
</ul>
<h2>Setup</h2>
<ol>
<li> <p>Clone the repository:</p> <pre><code class="language-sh">$ git clone https://github.com/bitwarden/android
</code></pre> </li>
<li> <p>Create a <code>user.properties</code> file in the root directory of the project and add the following properties:</p>
<ul>
<li><code>gitHubToken</code>: A "classic" Github Personal Access Token (PAT) with the <code>read:packages</code> scope (ex: <code>gitHubToken=gph_xx...xx</code>). These can be generated by going to the <a href="https://github.com/settings/tokens">Github tokens page</a>. See <a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-gradle-registry#authenticating-to-github-packages">the Github Packages user documentation concerning authentication</a> for more details.</li>
<li><code>localSdk</code>: A boolean value to determine if the SDK should be loaded from the local maven artifactory (ex: <code>localSdk=true</code>). This is particularly useful when developing new SDK capabilities. Review <a href="https://contributing.bitwarden.com/getting-started/sdk/#linking-the-sdk-to-clients">Linking SDK to clients</a> for more details.</li>
</ul> </li>
<li> <p>Setup the code style formatter:</p> <p>All code must follow the guidelines described in the <a href="https://raw.githubusercontent.com/bitwarden/android/main/docs/STYLE_AND_BEST_PRACTICES.md">Code Style Guidelines document</a>. To aid in adhering to these rules, all contributors should apply <code>docs/bitwarden-style.xml</code> as their code style scheme. In IntelliJ / Android Studio:</p>
<ul>
<li>Navigate to <code>Preferences > Editor > Code Style</code>.</li>
<li>Hit the <code>Manage</code> button next to <code>Scheme</code>.</li>
<li>Select <code>Import</code>.</li>
<li>Find the <code>bitwarden-style.xml</code> file in the project's <code>docs/</code> directory.</li>
<li>Import "from" <code>BitwardenStyle</code> "to" <code>BitwardenStyle</code>.</li>
<li>Hit <code>Apply</code> and <code>OK</code> to save the changes and exit Preferences.</li>
</ul> <p>Note that in some cases you may need to restart Android Studio for the changes to take effect.</p> <p>All code should be formatted before submitting a pull request. This can be done manually but it can also be helpful to create a macro with a custom keyboard binding to auto-format when saving. In Android Studio on OS X:</p>
<ul>
<li>Select <code>Edit > Macros > Start Macro Recording</code></li>
<li>Select <code>Code > Optimize Imports</code></li>
<li>Select <code>Code > Reformat Code</code></li>
<li>Select <code>File > Save All</code></li>
<li>Select <code>Edit > Macros > Stop Macro Recording</code></li>
</ul> <p>This can then be mapped to a set of keys by navigating to <code>Android Studio > Preferences</code> and editing the macro under <code>Keymap</code> (ex : shift + command + s).</p> <p>Please avoid mixing formatting and logical changes in the same commit/PR. When possible, fix any large formatting issues in a separate PR before opening one to make logical changes to the same code. This helps others focus on the meaningful code changes when reviewing the code.</p> </li>
</ol>
<h2>Dependencies</h2>
<h3>Application Dependencies</h3>
<p>The following is a list of all third-party dependencies included as part of the application beyond the standard Android SDK.</p>
<ul>
<li> <p><strong>AndroidX Appcompat</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/appcompat">https://developer.android.com/jetpack/androidx/releases/appcompat</a></li>
<li>Purpose: Allows access to new APIs on older API versions.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Autofill</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/autofill">https://developer.android.com/jetpack/androidx/releases/autofill</a></li>
<li>Purpose: Allows access to tools for building inline autofill UI.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Biometrics</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/biometric">https://developer.android.com/jetpack/androidx/releases/biometric</a></li>
<li>Purpose: Authenticate with biometrics or device credentials.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Browser</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/browser">https://developer.android.com/jetpack/androidx/releases/browser</a></li>
<li>Purpose: Displays webpages with the user's default browser.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX CameraX Camera2</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/camera">https://developer.android.com/jetpack/androidx/releases/camera</a></li>
<li>Purpose: Display and capture images for barcode scanning.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Compose</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/compose">https://developer.android.com/jetpack/androidx/releases/compose</a></li>
<li>Purpose: A Kotlin-based declarative UI framework.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Core SplashScreen</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/core">https://developer.android.com/jetpack/androidx/releases/core</a></li>
<li>Purpose: Backwards compatible SplashScreen API implementation.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Credentials</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/credentials">https://developer.android.com/jetpack/androidx/releases/credentials</a></li>
<li>Purpose: Unified access to user's credentials.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Lifecycle</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/lifecycle">https://developer.android.com/jetpack/androidx/releases/lifecycle</a></li>
<li>Purpose: Lifecycle aware components and tooling.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Room</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/room">https://developer.android.com/jetpack/androidx/releases/room</a></li>
<li>Purpose: A convenient SQLite-based persistence layer for Android.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX Security</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/security">https://developer.android.com/jetpack/androidx/releases/security</a></li>
<li>Purpose: Safely manage keys and encrypt files and sharedpreferences.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>AndroidX WorkManager</strong></p>
<ul>
<li><a href="https://developer.android.com/jetpack/androidx/releases/work">https://developer.android.com/jetpack/androidx/releases/work</a></li>
<li>Purpose: The WorkManager is used to schedule deferrable, asynchronous tasks that must be run reliably.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Dagger Hilt</strong></p>
<ul>
<li><a href="https://github.com/google/dagger">https://github.com/google/dagger</a></li>
<li>Purpose: Dependency injection framework.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Firebase Cloud Messaging</strong></p>
<ul>
<li><a href="https://github.com/firebase/firebase-android-sdk">https://github.com/firebase/firebase-android-sdk</a></li>
<li>Purpose: Allows for push notification support. (<strong>NOTE:</strong> This dependency is not included in builds distributed via F-Droid.)</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Firebase Crashlytics</strong></p>
<ul>
<li><a href="https://github.com/firebase/firebase-android-sdk">https://github.com/firebase/firebase-android-sdk</a></li>
<li>Purpose: SDK for crash and non-fatal error reporting. (<strong>NOTE:</strong> This dependency is not included in builds distributed via F-Droid.)</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Glide</strong></p>
<ul>
<li><a href="https://github.com/bumptech/glide">https://github.com/bumptech/glide</a></li>
<li>Purpose: Image loading and caching.</li>
<li>License: BSD, part MIT and Apache 2.0</li>
</ul> </li>
<li> <p><strong>kotlinx.collections.immutable</strong></p>
<ul>
<li><a href="https://github.com/Kotlin/kotlinx.collections.immutable">https://github.com/Kotlin/kotlinx.collections.immutable</a></li>
<li>Purpose: Immutable collection interfaces and implementation prototypes for Kotlin.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>kotlinx.coroutines</strong></p>
<ul>
<li><a href="https://github.com/Kotlin/kotlinx.coroutines">https://github.com/Kotlin/kotlinx.coroutines</a></li>
<li>Purpose: Kotlin coroutines library for asynchronous and reactive code.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>kotlinx.serialization</strong></p>
<ul>
<li><a href="https://github.com/Kotlin/kotlinx.serialization/">https://github.com/Kotlin/kotlinx.serialization/</a></li>
<li>Purpose: JSON serialization library for Kotlin.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>kotlinx.serialization converter</strong></p>
<ul>
<li><a href="https://github.com/square/retrofit/tree/trunk/retrofit-converters/kotlinx-serialization">https://github.com/square/retrofit/tree/trunk/retrofit-converters/kotlinx-serialization</a></li>
<li>Purpose: Converter for Retrofit 2 and kotlinx.serialization.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>OkHttp 3</strong></p>
<ul>
<li><a href="https://github.com/square/okhttp">https://github.com/square/okhttp</a></li>
<li>Purpose: An HTTP client used by the library to intercept and log traffic.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Retrofit 2</strong></p>
<ul>
<li><a href="https://github.com/square/retrofit">https://github.com/square/retrofit</a></li>
<li>Purpose: A networking layer interface.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Timber</strong></p>
<ul>
<li><a href="https://github.com/JakeWharton/timber">https://github.com/JakeWharton/timber</a></li>
<li>Purpose: Extensible logging library for Android.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>zxcvbn4j</strong></p>
<ul>
<li><a href="https://github.com/nulab/zxcvbn4j">https://github.com/nulab/zxcvbn4j</a></li>
<li>Purpose: Password strength estimation.</li>
<li>License: MIT</li>
</ul> </li>
<li> <p><strong>ZXing</strong></p>
<ul>
<li><a href="https://github.com/zxing/zxing">https://github.com/zxing/zxing</a></li>
<li>Purpose: Barcode scanning and generation.</li>
<li>License: Apache 2.0</li>
</ul> </li>
</ul>
<h3>Development Environment Dependencies</h3>
<p>The following is a list of additional third-party dependencies used as part of the local development environment. This includes test-related artifacts as well as tools related to code quality and linting. These are not present in the final packaged application.</p>
<ul>
<li> <p><strong>detekt</strong></p>
<ul>
<li><a href="https://github.com/detekt/detekt">https://github.com/detekt/detekt</a></li>
<li>Purpose: A static code analysis tool for the Kotlin programming language.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>JUnit 5</strong></p>
<ul>
<li><a href="https://github.com/junit-team/junit5">https://github.com/junit-team/junit5</a></li>
<li>Purpose: Unit Testing framework for testing application code.</li>
<li>License: Eclipse Public License 2.0</li>
</ul> </li>
<li> <p><strong>MockK</strong></p>
<ul>
<li><a href="https://github.com/mockk/mockk">https://github.com/mockk/mockk</a></li>
<li>Purpose: Kotlin-friendly mocking library.</li>
<li>License: Apache 2.0</li>
</ul> </li>
<li> <p><strong>Robolectric</strong></p>
<ul>
<li><a href="https://github.com/robolectric/robolectric">https://github.com/robolectric/robolectric</a></li>
<li>Purpose: A unit testing framework for code directly depending on the Android framework.</li>
<li>License: MIT</li>
</ul> </li>
<li> <p><strong>Turbine</strong></p>
<ul>
<li><a href="https://github.com/cashapp/turbine">https://github.com/cashapp/turbine</a></li>
<li>Purpose: A small testing library for kotlinx.coroutine's Flow.</li>
<li>License: Apache 2.0</li>
</ul> </li>
</ul>
<h3>CI/CD Dependencies</h3>
<p>The following is a list of additional third-party dependencies used as part of the CI/CD workflows. These are not present in the final packaged application.</p>
<ul>
<li> <p><strong>Fastlane</strong></p>
<ul>
<li><a href="https://fastlane.tools/">https://fastlane.tools/</a></li>
<li>Purpose: Automates building, signing, and distributing applications.</li>
<li>License: MIT</li>
</ul> </li>
<li> <p><strong>Kover</strong></p>
<ul>
<li><a href="https://github.com/Kotlin/kotlinx-kover">https://github.com/Kotlin/kotlinx-kover</a></li>
<li>Purpose: Kotlin code coverage toolset.</li>
<li>License: Apache 2.0</li>
</ul> </li>
</ul>
+
+
\ No newline at end of file
diff --git a/kotlin/weekly/index.xml b/kotlin/weekly/index.xml
new file mode 100644
index 00000000000..398a97d1c70
--- /dev/null
+++ b/kotlin/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Kotlin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:08Z
+ Weekly Trending of Kotlin in GitHub
+
+
+ oxyroid/M3UAndroid
+ 2024-12-01T01:44:08Z
+ tag:github.com,2024-12-01:/oxyroid/M3UAndroid
+
+ <p>FOSS Player, which made of jetpack compose. Android 8.0 and above supported.</p><hr><h1>M3UAndroid</h1>
<p><a href="https://t.me/m3u_android"><img src="https://img.shields.io/badge/Telegram-2CA5E0?style=flat&logo=telegram&logoColor=white"></a></p>
<p>M3U is a FREE stream media player on android devices, which made of jetpack compose. Android 8.0 and above supported.</p>
<h3>Device support</h3>
<p>Most Android devices, including smartphones, TVs, and tablets.</p>
<h3>Screenshots</h3>
<div align="center">
<img src="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/.github/images/phone/deviceframes.png">
<img src="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/.github/images/tv/playlist.png">
</div>
<div style="display:flex;">
<img src="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/.github/images/tv/foryou.png" width="45%" style="flex:1">
<img src="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/.github/images/tv/player.png" width="45%" style="flex:1">
</div>
<h3>📢 Translations Wanted 📢</h3>
<p>Please submit a pull request if you want to help with translation.</p>
<p>Official:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/i18n/src/main/res/values">English</a></li>
<li><a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/i18n/src/main/res/values-zh-rCN">Simplified Chinese</a></li>
<li>(You can also provide better translations for the above languages via pull requests)</li>
</ul>
<p>From PRs:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/i18n/src/main/res/values-es-rES">Spanish</a>, thanks <a href="https://github.com/sguinetti/M3UAndroid">@sguinetti</a></li>
<li><a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/i18n/src/main/res/values-ro-rRO">Romanian</a>, thanks <a href="https://github.com/iboboc/M3UAndroid">@iboboc</a></li>
<li><a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/i18n/src/main/res/values-pt-rBR">Brazilian Portuguese</a>, thanks <a href="https://github.com/Suburbanno">@Suburbanno</a></li>
</ul>
<h3>Introduce</h3>
<ul>
<li><a href="https://t.me/m3u_android/176">Basic</a></li>
</ul>
<h3>Features</h3>
<ul>
<li>Playlist Management.</li>
<li>Streaming media analysis capabilities.</li>
<li>Xtream support.</li>
<li>DLNA screencast.</li>
<li>i18n (Internationalization).</li>
</ul>
<h3>Android Development</h3>
<p>M3U is an app that attempts to use the latest libraries and tools. As a summary:</p>
<ul>
<li>Entirely written in Kotlin.</li>
<li>UI completely written in Jetpack Compose.</li>
<li>Material3 design system.</li>
<li>Uses Kotlin Coroutines throughout.</li>
<li>Uses many of the Architecture Components, including: Room, Lifecycle, Navigation.</li>
<li>Uses Hilt for dependency injection.</li>
<li>Uses Lint Checks for code scanning.</li>
<li>Uses KSP & KotlinPoet for Code Generating.</li>
<li>FFmepg-kit & ExoPlayer.</li>
</ul>
<h3>Installation</h3>
<p><a href="https://github.com/oxyroid/M3UAndroid/releases/latest"><img src="https://github.com/oxyroid/M3UAndroid/assets/5572928/c407b17c-f64f-4486-ade1-6048eb177e67" alt="Get it on GitHub" height="80"></a> <a href="https://f-droid.org/packages/com.m3u.androidApp"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80"></a> <a href="https://apt.izzysoft.de/fdroid/index/apk/com.m3u.androidApp"><img src="https://github.com/oxyroid/M3UAndroid/assets/5572928/4ba5a44a-c5e4-4634-a7aa-b8dda0992ba2" alt="Get it on IzzyOnDroid" height="80"></a></p>
<blockquote>
<p>Get the SNAPSHOT package <a href="https://nightly.link/oxyroid/M3UAndroid/workflows/android/master/artifact.zip">here</a></p>
</blockquote>
<h3>Community</h3>
<p>You can join the <a href="https://t.me/m3u_android">Telegram Channel</a> for update information and <strong>alpha & beta packages</strong>.</p>
<p>You can also join the <a href="https://t.me/m3u_android_chat">Telegram Group</a> for discussing.</p>
<h3>Contributing</h3>
<p>View this <a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/CONTRIBUTING.md">file</a> to learn about how to contribute this repository.</p>
<p>Refer to the <a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/RULES.md">file</a> to learn about the Code Specification of this repository.</p>
<h3>Star History</h3>
<a href="https://star-history.com/#oxyroid/M3UAndroid&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oxyroid/M3UAndroid&type=Date&theme=dark">
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oxyroid/M3UAndroid&type=Date">
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oxyroid/M3UAndroid&type=Date">
</picture> </a>
<h3>License</h3>
<p>M3UAndroid is distributed under the terms of the Apache License (Version 2.0). See the <a href="https://raw.githubusercontent.com/oxyroid/M3UAndroid/master/LICENSE">license</a> for more information.</p>
+
+
\ No newline at end of file
diff --git a/krl/daily/index.xml b/krl/daily/index.xml
index c56eeeb3a6b..daa54f8a2ce 100644
--- a/krl/daily/index.xml
+++ b/krl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub KRL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:23Z
+ 2024-12-01T01:33:24Z
Daily Trending of KRL in GitHub
\ No newline at end of file
diff --git a/krl/monthly/index.xml b/krl/monthly/index.xml
new file mode 100644
index 00000000000..0bab9547e2b
--- /dev/null
+++ b/krl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KRL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:05Z
+ Monthly Trending of KRL in GitHub
+
+
\ No newline at end of file
diff --git a/krl/weekly/index.xml b/krl/weekly/index.xml
new file mode 100644
index 00000000000..d65986ec1ca
--- /dev/null
+++ b/krl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub KRL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:06Z
+ Weekly Trending of KRL in GitHub
+
+
\ No newline at end of file
diff --git a/kusto/daily/index.xml b/kusto/daily/index.xml
index e1f036d9a8a..2961327ae91 100644
--- a/kusto/daily/index.xml
+++ b/kusto/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Kusto Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:22Z
+ 2024-12-01T01:33:24Z
Daily Trending of Kusto in GitHub
\ No newline at end of file
diff --git a/kusto/monthly/index.xml b/kusto/monthly/index.xml
new file mode 100644
index 00000000000..fddce4e7ed8
--- /dev/null
+++ b/kusto/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kusto Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:05Z
+ Monthly Trending of Kusto in GitHub
+
+
\ No newline at end of file
diff --git a/kusto/weekly/index.xml b/kusto/weekly/index.xml
new file mode 100644
index 00000000000..9ad2d2650a8
--- /dev/null
+++ b/kusto/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Kusto Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:06Z
+ Weekly Trending of Kusto in GitHub
+
+
\ No newline at end of file
diff --git a/kvlang/daily/index.xml b/kvlang/daily/index.xml
index 2e4e9d40412..9c5e705e18b 100644
--- a/kvlang/daily/index.xml
+++ b/kvlang/daily/index.xml
@@ -1,7 +1,7 @@
GitHub kvlang Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:28Z
+ 2024-12-01T01:33:30Z
Daily Trending of kvlang in GitHub
\ No newline at end of file
diff --git a/kvlang/monthly/index.xml b/kvlang/monthly/index.xml
new file mode 100644
index 00000000000..a8d33935d7c
--- /dev/null
+++ b/kvlang/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub kvlang Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:10Z
+ Monthly Trending of kvlang in GitHub
+
+
\ No newline at end of file
diff --git a/kvlang/weekly/index.xml b/kvlang/weekly/index.xml
new file mode 100644
index 00000000000..c42fd55bbd8
--- /dev/null
+++ b/kvlang/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub kvlang Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:11Z
+ Weekly Trending of kvlang in GitHub
+
+
\ No newline at end of file
diff --git a/labview/daily/index.xml b/labview/daily/index.xml
index 02446941841..efee686c013 100644
--- a/labview/daily/index.xml
+++ b/labview/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LabVIEW Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:29Z
+ 2024-12-01T01:33:30Z
Daily Trending of LabVIEW in GitHub
\ No newline at end of file
diff --git a/labview/monthly/index.xml b/labview/monthly/index.xml
new file mode 100644
index 00000000000..3eea0d80eb4
--- /dev/null
+++ b/labview/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LabVIEW Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:11Z
+ Monthly Trending of LabVIEW in GitHub
+
+
\ No newline at end of file
diff --git a/labview/weekly/index.xml b/labview/weekly/index.xml
new file mode 100644
index 00000000000..5502d8ac3a3
--- /dev/null
+++ b/labview/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LabVIEW Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:10Z
+ Weekly Trending of LabVIEW in GitHub
+
+
\ No newline at end of file
diff --git a/lark/daily/index.xml b/lark/daily/index.xml
index dfa6f01031c..d9e62fcc425 100644
--- a/lark/daily/index.xml
+++ b/lark/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Lark Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:29Z
+ 2024-12-01T01:33:30Z
Daily Trending of Lark in GitHub
\ No newline at end of file
diff --git a/lark/monthly/index.xml b/lark/monthly/index.xml
new file mode 100644
index 00000000000..b338d02036a
--- /dev/null
+++ b/lark/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lark Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:11Z
+ Monthly Trending of Lark in GitHub
+
+
\ No newline at end of file
diff --git a/lark/weekly/index.xml b/lark/weekly/index.xml
new file mode 100644
index 00000000000..80dc9ca07fc
--- /dev/null
+++ b/lark/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lark Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:11Z
+ Weekly Trending of Lark in GitHub
+
+
\ No newline at end of file
diff --git a/lasso/daily/index.xml b/lasso/daily/index.xml
index be5c9f2e290..98702ea2633 100644
--- a/lasso/daily/index.xml
+++ b/lasso/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Lasso Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:29Z
+ 2024-12-01T01:33:31Z
Daily Trending of Lasso in GitHub
\ No newline at end of file
diff --git a/lasso/monthly/index.xml b/lasso/monthly/index.xml
new file mode 100644
index 00000000000..6c2e87d9309
--- /dev/null
+++ b/lasso/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lasso Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:11Z
+ Monthly Trending of Lasso in GitHub
+
+
\ No newline at end of file
diff --git a/lasso/weekly/index.xml b/lasso/weekly/index.xml
new file mode 100644
index 00000000000..5517f4fa22a
--- /dev/null
+++ b/lasso/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lasso Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:11Z
+ Weekly Trending of Lasso in GitHub
+
+
\ No newline at end of file
diff --git a/latte/daily/index.xml b/latte/daily/index.xml
index 05434df8464..53b3a56cbee 100644
--- a/latte/daily/index.xml
+++ b/latte/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Latte Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:30Z
+ 2024-12-01T01:33:31Z
Daily Trending of Latte in GitHub
\ No newline at end of file
diff --git a/latte/monthly/index.xml b/latte/monthly/index.xml
new file mode 100644
index 00000000000..a607b232e3a
--- /dev/null
+++ b/latte/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Latte Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:12Z
+ Monthly Trending of Latte in GitHub
+
+
\ No newline at end of file
diff --git a/latte/weekly/index.xml b/latte/weekly/index.xml
new file mode 100644
index 00000000000..85a0a6c3a15
--- /dev/null
+++ b/latte/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Latte Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:12Z
+ Weekly Trending of Latte in GitHub
+
+
\ No newline at end of file
diff --git a/lean/daily/index.xml b/lean/daily/index.xml
index 6fd955a2139..e421a5a9f95 100644
--- a/lean/daily/index.xml
+++ b/lean/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Lean Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:31Z
+ 2024-12-01T01:33:33Z
Daily Trending of Lean in GitHub
\ No newline at end of file
diff --git a/lean/monthly/index.xml b/lean/monthly/index.xml
new file mode 100644
index 00000000000..77712299234
--- /dev/null
+++ b/lean/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lean Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:13Z
+ Monthly Trending of Lean in GitHub
+
+
\ No newline at end of file
diff --git a/lean/weekly/index.xml b/lean/weekly/index.xml
new file mode 100644
index 00000000000..6e3b29b1580
--- /dev/null
+++ b/lean/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lean Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:13Z
+ Weekly Trending of Lean in GitHub
+
+
\ No newline at end of file
diff --git a/less/daily/index.xml b/less/daily/index.xml
index bb958f2d30e..4914e28122b 100644
--- a/less/daily/index.xml
+++ b/less/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Less Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:31Z
+ 2024-12-01T01:33:32Z
Daily Trending of Less in GitHub
\ No newline at end of file
diff --git a/less/monthly/index.xml b/less/monthly/index.xml
new file mode 100644
index 00000000000..3557af9f1a5
--- /dev/null
+++ b/less/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Less Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:13Z
+ Monthly Trending of Less in GitHub
+
+
\ No newline at end of file
diff --git a/less/weekly/index.xml b/less/weekly/index.xml
new file mode 100644
index 00000000000..afdf2cb5b60
--- /dev/null
+++ b/less/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Less Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:13Z
+ Weekly Trending of Less in GitHub
+
+
\ No newline at end of file
diff --git a/lex/daily/index.xml b/lex/daily/index.xml
index bc25b5f53d5..f0ddb4a66e4 100644
--- a/lex/daily/index.xml
+++ b/lex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Lex Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:33Z
+ 2024-12-01T01:33:33Z
Daily Trending of Lex in GitHub
\ No newline at end of file
diff --git a/lex/monthly/index.xml b/lex/monthly/index.xml
new file mode 100644
index 00000000000..5acd077e581
--- /dev/null
+++ b/lex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lex Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:14Z
+ Monthly Trending of Lex in GitHub
+
+
\ No newline at end of file
diff --git a/lex/weekly/index.xml b/lex/weekly/index.xml
new file mode 100644
index 00000000000..d6b4b9aa283
--- /dev/null
+++ b/lex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Lex Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:14Z
+ Weekly Trending of Lex in GitHub
+
+
\ No newline at end of file
diff --git a/lfe/daily/index.xml b/lfe/daily/index.xml
index 90c1c6041d5..6817eaf1d5f 100644
--- a/lfe/daily/index.xml
+++ b/lfe/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LFE Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:32Z
+ 2024-12-01T01:33:34Z
Daily Trending of LFE in GitHub
\ No newline at end of file
diff --git a/lfe/monthly/index.xml b/lfe/monthly/index.xml
new file mode 100644
index 00000000000..051a779dba9
--- /dev/null
+++ b/lfe/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LFE Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:14Z
+ Monthly Trending of LFE in GitHub
+
+
\ No newline at end of file
diff --git a/lfe/weekly/index.xml b/lfe/weekly/index.xml
new file mode 100644
index 00000000000..039b4d83b8a
--- /dev/null
+++ b/lfe/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LFE Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:14Z
+ Weekly Trending of LFE in GitHub
+
+
\ No newline at end of file
diff --git a/ligolang/daily/index.xml b/ligolang/daily/index.xml
index b01ceb76d6a..e412b602c67 100644
--- a/ligolang/daily/index.xml
+++ b/ligolang/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LigoLANG Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:32Z
+ 2024-12-01T01:33:34Z
Daily Trending of LigoLANG in GitHub
\ No newline at end of file
diff --git a/ligolang/monthly/index.xml b/ligolang/monthly/index.xml
new file mode 100644
index 00000000000..c9ba3e50010
--- /dev/null
+++ b/ligolang/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LigoLANG Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:15Z
+ Monthly Trending of LigoLANG in GitHub
+
+
\ No newline at end of file
diff --git a/ligolang/weekly/index.xml b/ligolang/weekly/index.xml
new file mode 100644
index 00000000000..ed453e0dcb5
--- /dev/null
+++ b/ligolang/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LigoLANG Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:15Z
+ Weekly Trending of LigoLANG in GitHub
+
+
\ No newline at end of file
diff --git a/lilypond/daily/index.xml b/lilypond/daily/index.xml
index 797aaa89b8f..fcd08a28a14 100644
--- a/lilypond/daily/index.xml
+++ b/lilypond/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LilyPond Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:32Z
+ 2024-12-01T01:33:34Z
Daily Trending of LilyPond in GitHub
\ No newline at end of file
diff --git a/lilypond/monthly/index.xml b/lilypond/monthly/index.xml
new file mode 100644
index 00000000000..4c18e12e946
--- /dev/null
+++ b/lilypond/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LilyPond Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:14Z
+ Monthly Trending of LilyPond in GitHub
+
+
\ No newline at end of file
diff --git a/lilypond/weekly/index.xml b/lilypond/weekly/index.xml
new file mode 100644
index 00000000000..c91a16203eb
--- /dev/null
+++ b/lilypond/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LilyPond Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:14Z
+ Weekly Trending of LilyPond in GitHub
+
+
\ No newline at end of file
diff --git a/limbo/daily/index.xml b/limbo/daily/index.xml
index ef73e817d70..96e007a7ebd 100644
--- a/limbo/daily/index.xml
+++ b/limbo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Limbo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:34Z
+ 2024-12-01T01:33:35Z
Daily Trending of Limbo in GitHub
\ No newline at end of file
diff --git a/limbo/monthly/index.xml b/limbo/monthly/index.xml
new file mode 100644
index 00000000000..746a1887e33
--- /dev/null
+++ b/limbo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Limbo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:16Z
+ Monthly Trending of Limbo in GitHub
+
+
\ No newline at end of file
diff --git a/limbo/weekly/index.xml b/limbo/weekly/index.xml
new file mode 100644
index 00000000000..77a1fef5f12
--- /dev/null
+++ b/limbo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Limbo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:16Z
+ Weekly Trending of Limbo in GitHub
+
+
\ No newline at end of file
diff --git a/linker-script/daily/index.xml b/linker-script/daily/index.xml
index 17dffecba72..83e6757feb9 100644
--- a/linker-script/daily/index.xml
+++ b/linker-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Linker Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:33Z
+ 2024-12-01T01:33:36Z
Daily Trending of Linker Script in GitHub
\ No newline at end of file
diff --git a/linker-script/monthly/index.xml b/linker-script/monthly/index.xml
new file mode 100644
index 00000000000..8034c308f2e
--- /dev/null
+++ b/linker-script/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Linker Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:16Z
+ Monthly Trending of Linker Script in GitHub
+
+
\ No newline at end of file
diff --git a/linker-script/weekly/index.xml b/linker-script/weekly/index.xml
new file mode 100644
index 00000000000..15a8967f5e8
--- /dev/null
+++ b/linker-script/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Linker Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:16Z
+ Weekly Trending of Linker Script in GitHub
+
+
\ No newline at end of file
diff --git a/linux-kernel-module/daily/index.xml b/linux-kernel-module/daily/index.xml
index 73176f7c279..95e5cad5e9d 100644
--- a/linux-kernel-module/daily/index.xml
+++ b/linux-kernel-module/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Linux Kernel Module Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:34Z
+ 2024-12-01T01:33:35Z
Daily Trending of Linux Kernel Module in GitHub
\ No newline at end of file
diff --git a/linux-kernel-module/monthly/index.xml b/linux-kernel-module/monthly/index.xml
new file mode 100644
index 00000000000..6e385b5a43b
--- /dev/null
+++ b/linux-kernel-module/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Linux Kernel Module Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:15Z
+ Monthly Trending of Linux Kernel Module in GitHub
+
+
\ No newline at end of file
diff --git a/linux-kernel-module/weekly/index.xml b/linux-kernel-module/weekly/index.xml
new file mode 100644
index 00000000000..b6fa7e4d67e
--- /dev/null
+++ b/linux-kernel-module/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Linux Kernel Module Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:15Z
+ Weekly Trending of Linux Kernel Module in GitHub
+
+
\ No newline at end of file
diff --git a/liquid/daily/index.xml b/liquid/daily/index.xml
index 7e014a4fd0b..5aa70b5cb42 100644
--- a/liquid/daily/index.xml
+++ b/liquid/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Liquid Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:34Z
+ 2024-12-01T01:33:36Z
Daily Trending of Liquid in GitHub
\ No newline at end of file
diff --git a/liquid/monthly/index.xml b/liquid/monthly/index.xml
new file mode 100644
index 00000000000..1a8de43528a
--- /dev/null
+++ b/liquid/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Liquid Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:16Z
+ Monthly Trending of Liquid in GitHub
+
+
\ No newline at end of file
diff --git a/liquid/weekly/index.xml b/liquid/weekly/index.xml
new file mode 100644
index 00000000000..152081ff56b
--- /dev/null
+++ b/liquid/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Liquid Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:16Z
+ Weekly Trending of Liquid in GitHub
+
+
\ No newline at end of file
diff --git a/literate-agda/daily/index.xml b/literate-agda/daily/index.xml
index 4246592b9c8..78828883bb7 100644
--- a/literate-agda/daily/index.xml
+++ b/literate-agda/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Literate Agda Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:36Z
+ 2024-12-01T01:33:37Z
Daily Trending of Literate Agda in GitHub
\ No newline at end of file
diff --git a/literate-agda/monthly/index.xml b/literate-agda/monthly/index.xml
new file mode 100644
index 00000000000..06d9213ceb2
--- /dev/null
+++ b/literate-agda/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate Agda Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:17Z
+ Monthly Trending of Literate Agda in GitHub
+
+
\ No newline at end of file
diff --git a/literate-agda/weekly/index.xml b/literate-agda/weekly/index.xml
new file mode 100644
index 00000000000..5fe83297d67
--- /dev/null
+++ b/literate-agda/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate Agda Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:17Z
+ Weekly Trending of Literate Agda in GitHub
+
+
\ No newline at end of file
diff --git a/literate-coffeescript/daily/index.xml b/literate-coffeescript/daily/index.xml
index cd27ac81f9a..58abc70f8d6 100644
--- a/literate-coffeescript/daily/index.xml
+++ b/literate-coffeescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Literate CoffeeScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:36Z
+ 2024-12-01T01:33:38Z
Daily Trending of Literate CoffeeScript in GitHub
\ No newline at end of file
diff --git a/literate-coffeescript/monthly/index.xml b/literate-coffeescript/monthly/index.xml
new file mode 100644
index 00000000000..f87476eb8d8
--- /dev/null
+++ b/literate-coffeescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate CoffeeScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:18Z
+ Monthly Trending of Literate CoffeeScript in GitHub
+
+
\ No newline at end of file
diff --git a/literate-coffeescript/weekly/index.xml b/literate-coffeescript/weekly/index.xml
new file mode 100644
index 00000000000..6d9a4d8e770
--- /dev/null
+++ b/literate-coffeescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate CoffeeScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:18Z
+ Weekly Trending of Literate CoffeeScript in GitHub
+
+
\ No newline at end of file
diff --git a/literate-haskell/daily/index.xml b/literate-haskell/daily/index.xml
index 8c0b79fdf42..eea745edb8b 100644
--- a/literate-haskell/daily/index.xml
+++ b/literate-haskell/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Literate Haskell Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:35Z
+ 2024-12-01T01:33:37Z
Daily Trending of Literate Haskell in GitHub
\ No newline at end of file
diff --git a/literate-haskell/monthly/index.xml b/literate-haskell/monthly/index.xml
new file mode 100644
index 00000000000..f88e9eec00b
--- /dev/null
+++ b/literate-haskell/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate Haskell Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:17Z
+ Monthly Trending of Literate Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/literate-haskell/weekly/index.xml b/literate-haskell/weekly/index.xml
new file mode 100644
index 00000000000..59ba96b4011
--- /dev/null
+++ b/literate-haskell/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Literate Haskell Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:17Z
+ Weekly Trending of Literate Haskell in GitHub
+
+
\ No newline at end of file
diff --git a/livescript/daily/index.xml b/livescript/daily/index.xml
index 3de06857d18..94d265f6fd7 100644
--- a/livescript/daily/index.xml
+++ b/livescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LiveScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:37Z
+ 2024-12-01T01:33:38Z
Daily Trending of LiveScript in GitHub
\ No newline at end of file
diff --git a/livescript/monthly/index.xml b/livescript/monthly/index.xml
new file mode 100644
index 00000000000..ebded6610f1
--- /dev/null
+++ b/livescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LiveScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:19Z
+ Monthly Trending of LiveScript in GitHub
+
+
\ No newline at end of file
diff --git a/livescript/weekly/index.xml b/livescript/weekly/index.xml
new file mode 100644
index 00000000000..f0798c24e1f
--- /dev/null
+++ b/livescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LiveScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:19Z
+ Weekly Trending of LiveScript in GitHub
+
+
\ No newline at end of file
diff --git a/llvm/daily/index.xml b/llvm/daily/index.xml
index ff24be16bed..2cf3f3b4c0a 100644
--- a/llvm/daily/index.xml
+++ b/llvm/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LLVM Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:45Z
+ 2024-12-01T01:33:39Z
Daily Trending of LLVM in GitHub
\ No newline at end of file
diff --git a/llvm/monthly/index.xml b/llvm/monthly/index.xml
new file mode 100644
index 00000000000..ada70d2e38c
--- /dev/null
+++ b/llvm/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LLVM Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:21Z
+ Monthly Trending of LLVM in GitHub
+
+
\ No newline at end of file
diff --git a/llvm/weekly/index.xml b/llvm/weekly/index.xml
new file mode 100644
index 00000000000..6cf1529faf6
--- /dev/null
+++ b/llvm/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LLVM Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:22Z
+ Weekly Trending of LLVM in GitHub
+
+
\ No newline at end of file
diff --git a/logos/daily/index.xml b/logos/daily/index.xml
index 977d7644b96..bde61102779 100644
--- a/logos/daily/index.xml
+++ b/logos/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Logos Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:37Z
+ 2024-12-01T01:33:39Z
Daily Trending of Logos in GitHub
\ No newline at end of file
diff --git a/logos/monthly/index.xml b/logos/monthly/index.xml
new file mode 100644
index 00000000000..102953308f8
--- /dev/null
+++ b/logos/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Logos Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:20Z
+ Monthly Trending of Logos in GitHub
+
+
\ No newline at end of file
diff --git a/logos/weekly/index.xml b/logos/weekly/index.xml
new file mode 100644
index 00000000000..5d38f174ad8
--- /dev/null
+++ b/logos/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Logos Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:19Z
+ Weekly Trending of Logos in GitHub
+
+
\ No newline at end of file
diff --git a/logtalk/daily/index.xml b/logtalk/daily/index.xml
index 109275c3c5b..350421e2cd0 100644
--- a/logtalk/daily/index.xml
+++ b/logtalk/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Logtalk Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:37Z
+ 2024-12-01T01:33:39Z
Daily Trending of Logtalk in GitHub
\ No newline at end of file
diff --git a/logtalk/monthly/index.xml b/logtalk/monthly/index.xml
new file mode 100644
index 00000000000..9c4a147c8bc
--- /dev/null
+++ b/logtalk/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Logtalk Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:19Z
+ Monthly Trending of Logtalk in GitHub
+
+
\ No newline at end of file
diff --git a/logtalk/weekly/index.xml b/logtalk/weekly/index.xml
new file mode 100644
index 00000000000..a5f9243f64b
--- /dev/null
+++ b/logtalk/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Logtalk Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:19Z
+ Weekly Trending of Logtalk in GitHub
+
+
\ No newline at end of file
diff --git a/lolcode/daily/index.xml b/lolcode/daily/index.xml
index 225fb670464..efa42d1bf10 100644
--- a/lolcode/daily/index.xml
+++ b/lolcode/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LOLCODE Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:45Z
+ 2024-12-01T01:33:41Z
Daily Trending of LOLCODE in GitHub
\ No newline at end of file
diff --git a/lolcode/monthly/index.xml b/lolcode/monthly/index.xml
new file mode 100644
index 00000000000..c1ee7d13b86
--- /dev/null
+++ b/lolcode/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LOLCODE Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:22Z
+ Monthly Trending of LOLCODE in GitHub
+
+
\ No newline at end of file
diff --git a/lolcode/weekly/index.xml b/lolcode/weekly/index.xml
new file mode 100644
index 00000000000..c6ddde61945
--- /dev/null
+++ b/lolcode/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LOLCODE Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:23Z
+ Weekly Trending of LOLCODE in GitHub
+
+
\ No newline at end of file
diff --git a/lookml/daily/index.xml b/lookml/daily/index.xml
index f54369cb73d..62640f55d88 100644
--- a/lookml/daily/index.xml
+++ b/lookml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LookML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:46Z
+ 2024-12-01T01:33:40Z
Daily Trending of LookML in GitHub
\ No newline at end of file
diff --git a/lookml/monthly/index.xml b/lookml/monthly/index.xml
new file mode 100644
index 00000000000..b5fba66f5f7
--- /dev/null
+++ b/lookml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LookML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:22Z
+ Monthly Trending of LookML in GitHub
+
+
\ No newline at end of file
diff --git a/lookml/weekly/index.xml b/lookml/weekly/index.xml
new file mode 100644
index 00000000000..27a5ef747ce
--- /dev/null
+++ b/lookml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LookML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:23Z
+ Weekly Trending of LookML in GitHub
+
+
\ No newline at end of file
diff --git a/loomscript/daily/index.xml b/loomscript/daily/index.xml
index ae0df2ceee7..60c9e8b6bc8 100644
--- a/loomscript/daily/index.xml
+++ b/loomscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LoomScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:46Z
+ 2024-12-01T01:33:41Z
Daily Trending of LoomScript in GitHub
\ No newline at end of file
diff --git a/loomscript/monthly/index.xml b/loomscript/monthly/index.xml
new file mode 100644
index 00000000000..669ddb7b807
--- /dev/null
+++ b/loomscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LoomScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:22Z
+ Monthly Trending of LoomScript in GitHub
+
+
\ No newline at end of file
diff --git a/loomscript/weekly/index.xml b/loomscript/weekly/index.xml
new file mode 100644
index 00000000000..497cdeabbd2
--- /dev/null
+++ b/loomscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LoomScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:22Z
+ Weekly Trending of LoomScript in GitHub
+
+
\ No newline at end of file
diff --git a/lsl/daily/index.xml b/lsl/daily/index.xml
index 0e387f68fac..69672258066 100644
--- a/lsl/daily/index.xml
+++ b/lsl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LSL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:46Z
+ 2024-12-01T01:33:40Z
Daily Trending of LSL in GitHub
\ No newline at end of file
diff --git a/lsl/monthly/index.xml b/lsl/monthly/index.xml
new file mode 100644
index 00000000000..b6995e0b7d5
--- /dev/null
+++ b/lsl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LSL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:21Z
+ Monthly Trending of LSL in GitHub
+
+
\ No newline at end of file
diff --git a/lsl/weekly/index.xml b/lsl/weekly/index.xml
new file mode 100644
index 00000000000..4d363fe05b0
--- /dev/null
+++ b/lsl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LSL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:23Z
+ Weekly Trending of LSL in GitHub
+
+
\ No newline at end of file
diff --git a/ltspice-symbol/daily/index.xml b/ltspice-symbol/daily/index.xml
index 3b7825c921c..9847ae6f5b6 100644
--- a/ltspice-symbol/daily/index.xml
+++ b/ltspice-symbol/daily/index.xml
@@ -1,7 +1,7 @@
GitHub LTspice Symbol Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:48Z
+ 2024-12-01T01:33:42Z
Daily Trending of LTspice Symbol in GitHub
\ No newline at end of file
diff --git a/ltspice-symbol/monthly/index.xml b/ltspice-symbol/monthly/index.xml
new file mode 100644
index 00000000000..f5ef219fa7e
--- /dev/null
+++ b/ltspice-symbol/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LTspice Symbol Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:23Z
+ Monthly Trending of LTspice Symbol in GitHub
+
+
\ No newline at end of file
diff --git a/ltspice-symbol/weekly/index.xml b/ltspice-symbol/weekly/index.xml
new file mode 100644
index 00000000000..dfef5f7ba23
--- /dev/null
+++ b/ltspice-symbol/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub LTspice Symbol Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:25Z
+ Weekly Trending of LTspice Symbol in GitHub
+
+
\ No newline at end of file
diff --git a/lua/daily/index.xml b/lua/daily/index.xml
index ab63fe26b5f..edb40a35cc7 100644
--- a/lua/daily/index.xml
+++ b/lua/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Lua Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:49Z
+ 2024-12-01T01:33:44Z
Daily Trending of Lua in GitHub
\ No newline at end of file
diff --git a/lua/weekly/index.xml b/lua/weekly/index.xml
new file mode 100644
index 00000000000..ea055828582
--- /dev/null
+++ b/lua/weekly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Lua Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:26Z
+ Weekly Trending of Lua in GitHub
+
+
+ karb94/neoscroll.nvim
+ 2024-12-01T01:44:26Z
+ tag:github.com,2024-12-01:/karb94/neoscroll.nvim
+
+ <p>Smooth scrolling neovim plugin written in lua</p><hr><h1>Neoscroll: a smooth scrolling neovim plugin written in lua</h1>
<h2>Demo</h2>
<p><a href="https://user-images.githubusercontent.com/41967813/121818668-7b36c800-cc80-11eb-8c3a-45a4767b8f05.mp4">https://user-images.githubusercontent.com/41967813/121818668-7b36c800-cc80-11eb-8c3a-45a4767b8f05.mp4</a></p>
<h2>Features</h2>
<ul>
<li>Smooth scrolling for window movement commands (mappings optional): <code><C-u></code>, <code><C-d></code>, <code><C-b></code>, <code><C-f></code>, <code><C-y></code>, <code><C-e></code>, <code>zt</code>, <code>zz</code>, <code>zb</code>.</li>
<li>Takes into account folds.</li>
<li>A single scrolling function that accepts either the number of lines or the percentage of the window to scroll.</li>
<li>Scroll any window.</li>
<li>Cursor is hidden while scrolling (optional) for a more pleasing scrolling experience.</li>
<li>Customizable scrolling behaviour.</li>
<li>You can use predefined easing functions for the scrolling animation.</li>
<li>Performance mode that turns off syntax highlighting while scrolling for slower machines or files with heavy regex syntax highlighting.</li>
<li>Cancel scroll by scrolling in the opposite direction.</li>
<li>Simulated "stop on key release" when holding down a key to scroll.</li>
<li>Scroll any window by window-ID</li>
</ul>
<h2>Installation</h2>
<p>You will need neovim 0.5 for this plugin to work. Install it using your favorite plugin manager:</p>
<ul>
<li> <p>With <a href="https://github.com/wbthomason/packer.nvim">Packer</a>: <code>use 'karb94/neoscroll.nvim'</code></p> </li>
<li> <p>With <a href="https://github.com/junegunn/vim-plug">vim-plug</a>: <code>Plug 'karb94/neoscroll.nvim'</code></p> </li>
<li> <p>With <a href="https://github.com/folke/lazy.nvim">lazy.nvim</a>, create the file <code>~/.config/nvim/lua/plugins/neoscroll.lua</code>:</p> <pre><code class="language-lua">return {
"karb94/neoscroll.nvim",
config = function ()
require('neoscroll').setup({})
end
}
</code></pre> </li>
</ul>
<h2>Options</h2>
<p>Read <code>:help neoscroll-options</code> for a detailed description of all the options.</p>
<p><code>setup()</code> with all the options and their default values:</p>
<pre><code class="language-lua">require('neoscroll').setup({
mappings = { -- Keys to be mapped to their corresponding default scrolling animation
'<C-u>', '<C-d>',
'<C-b>', '<C-f>',
'<C-y>', '<C-e>',
'zt', 'zz', 'zb',
},
hide_cursor = true, -- Hide cursor while scrolling
stop_eof = true, -- Stop at <EOF> when scrolling downwards
respect_scrolloff = false, -- Stop scrolling when the cursor reaches the scrolloff margin of the file
cursor_scrolls_alone = true, -- The cursor will keep on scrolling even if the window cannot scroll further
duration_multiplier = 1.0 -- Global duration multiplier
easing = 'linear', -- Default easing function
pre_hook = nil, -- Function to run before the scrolling animation starts
post_hook = nil, -- Function to run after the scrolling animation ends
performance_mode = false, -- Disable "Performance Mode" on all buffers.
ignored_events = { -- Events ignored while scrolling
'WinScrolled', 'CursorMoved'
},
})
</code></pre>
<p>You can map a smaller set of default mappings:</p>
<pre><code class="language-lua">require('neoscroll').setup({ mappings = {'<C-u>', '<C-d>', '<C-b>', '<C-f>'} })
</code></pre>
<p>Or you can disable all default mappings by passing an empty list:</p>
<pre><code class="language-lua">require('neoscroll').setup({ mappings = {} })
</code></pre>
<p>The section below explains how to create your own custom mappings.</p>
<h2>Custom mappings</h2>
<p>You can create your own scrolling mappings using the following lua functions:</p>
<ul>
<li><code>scroll(lines, opts)</code></li>
<li><code>ctrl_u</code></li>
<li><code>ctrl_d</code></li>
<li><code>ctrl_b</code></li>
<li><code>ctrl_f</code></li>
<li><code>zt(opts)</code></li>
<li><code>zz(opts)</code></li>
<li><code>zb(opts)</code></li>
</ul>
<p>Read <code>:help neoscroll.scroll()</code> and <code>:help neoscroll-helper-functions</code> for more details.</p>
<p>You can use the following syntactic sugar in your init.lua to define lua function mappings in normal, visual and select modes:</p>
<pre><code class="language-lua">neoscroll = require('neoscroll')
local keymap = {
["<C-u>"] = function() neoscroll.ctrl_u({ duration = 250 }) end;
["<C-d>"] = function() neoscroll.ctrl_d({ duration = 250 }) end;
["<C-b>"] = function() neoscroll.ctrl_b({ duration = 450 }) end;
["<C-f>"] = function() neoscroll.ctrl_f({ duration = 450 }) end;
["<C-y>"] = function() neoscroll.scroll(-0.1, { move_cursor=false; duration = 100 }) end;
["<C-e>"] = function() neoscroll.scroll(0.1, { move_cursor=false; duration = 100 }) end;
["zt"] = function() neoscroll.zt({ half_win_duration = 250 }) end;
["zz"] = function() neoscroll.zz({ half_win_duration = 250 }) end;
["zb"] = function() neoscroll.zb({ half_win_duration = 250 }) end;
}
local modes = { 'n', 'v', 'x' }
for key, func in pairs(keymap) do
vim.keymap.set(modes, key, func)
end
</code></pre>
<h2>Easing functions</h2>
<p>By default the scrolling animation has a constant speed (linear), i.e. the time between each line scroll is constant. If you want to smooth the start and end of the scrolling animation you can pass the name of one of the easing functions that Neoscroll provides to the <code>scroll()</code> function. You can use any of the following easing functions: <code>linear</code>, <code>quadratic</code>, <code>cubic</code>, <code>quartic</code>, <code>quintic</code>, <code>circular</code>, <code>sine</code>. Neoscroll will then adjust the time between each line scroll using the selected easing function. This dynamic time adjustment can make animations more pleasing to the eye.</p>
<p>To learn more about easing functions here are some useful links:</p>
<ul>
<li><a href="https://docs.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/easing-functions?view=netframeworkdesktop-4.8">Microsoft documentation</a></li>
<li><a href="https://easings.net/">easings.net</a></li>
<li><a href="https://www.febucci.com/2018/08/easing-functions/">febucci.com</a></li>
</ul>
<h3>Examples</h3>
<p>Using the same syntactic sugar introduced in <em>Custom mappings</em> we can write the following config:</p>
<pre><code class="language-lua">neoscroll = require('neoscroll')
neoscroll.setup({
-- Default easing function used in any animation where
-- the `easing` argument has not been explicitly supplied
easing = "quadratic"
})
local keymap = {
-- Use the "sine" easing function
["<C-u>"] = function() neoscroll.ctrl_u({ duration = 250; easing = 'sine' }) end;
["<C-d>"] = function() neoscroll.ctrl_d({ duration = 250; easing = 'sine' }) end;
-- Use the "circular" easing function
["<C-b>"] = function() neoscroll.ctrl_b({ duration = 450; easing = 'circular' }) end;
["<C-f>"] = function() neoscroll.ctrl_f({ duration = 450; easing = 'circular' }) end;
-- When no value is passed the `easing` option supplied in `setup()` is used
["<C-y>"] = function() neoscroll.scroll(-0.1, { move_cursor=false; duration = 100 }) end;
["<C-e>"] = function() neoscroll.scroll(0.1, { move_cursor=false; duration = 100 }) end;
}
local modes = { 'n', 'v', 'x' }
for key, func in pairs(keymap) do
vim.keymap.set(modes, key, func)
end
</code></pre>
<h2><code>pre_hook</code> and <code>post_hook</code> functions</h2>
<p>Set <code>pre_hook</code> and <code>post_hook</code> functions to run custom code before and/or after the scrolling animation. The function will be called with the <code>info</code> parameter which can be optionally passed to <code>scroll()</code> (or any of the provided wrappers). This can be used to conditionally run different hooks for different types of scrolling animations.</p>
<p>For example, if you want to hide the <code>cursorline</code> only for <code><C-d></code>/<code><C-u></code> scrolling animations you can do something like this:</p>
<pre><code class="language-lua">require('neoscroll').setup({
pre_hook = function(info) if info == "cursorline" then vim.wo.cursorline = false end end,
post_hook = function(info) if info == "cursorline" then vim.wo.cursorline = true end end
})
local keymap = {
["<C-u>"] = function() neoscroll.ctrl_u({ duration = 250; info = 'cursorline' }) end;
["<C-d>"] = function() neoscroll.ctrl_d({ duration = 250; info = 'cursorline' }) end;
}
local modes = { 'n', 'v', 'x' }
for key, func in pairs(keymap) do
vim.keymap.set(modes, key, func)
end
</code></pre>
<p>Keep in mind that the <code>info</code> variable is not restricted to a string. It can also be a table with multiple key-pair values.</p>
<h2>Known issues</h2>
<ul>
<li><code><C-u></code>, <code><C-d></code>, <code><C-b></code>, <code><C-f></code> mess up macros (<a href="https://github.com/karb94/neoscroll.nvim/issues/9">issue</a>).</li>
</ul>
<h2>Acknowledgements</h2>
<p>This plugin was inspired by <a href="https://github.com/psliwka/vim-smoothie">vim-smoothie</a> and <a href="https://github.com/cossonleo/neo-smooth-scroll.nvim">neo-smooth-scroll.nvim</a>. Big thank you to their authors!</p>
+
+
+ yetone/avante.nvim
+ 2024-12-01T01:44:26Z
+ tag:github.com,2024-12-01:/yetone/avante.nvim
+
+ <p>Use your Neovim like using Cursor AI IDE!</p><hr><div align="center">
<img alt="logo" width="120" src="https://github.com/user-attachments/assets/2e2f2a58-2b28-4d11-afd1-87b65612b2de">
<h1>avante.nvim</h1>
</div>
<div align="center">
<a href="https://neovim.io/" target="_blank"> <img src="https://img.shields.io/static/v1?style=flat-square&label=Neovim&message=v0.10%2b&logo=neovim&labelColor=282828&logoColor=8faa80&color=414b32" alt="Neovim: v0.10+"> </a>
<a href="https://github.com/yetone/avante.nvim/actions/workflows/ci.yaml" target="_blank"> <img src="https://img.shields.io/github/actions/workflow/status/yetone/avante.nvim/lua.yaml?style=flat-square&logo=lua&logoColor=c7c7c7&label=Lua+CI&labelColor=282828&color=347D39&event=push" alt="Lua CI status"> </a>
<a href="https://github.com/yetone/avante.nvim/actions/workflows/ci.yaml" target="_blank"> <img src="https://img.shields.io/github/actions/workflow/status/yetone/avante.nvim/rust.yaml?style=flat-square&logo=rust&logoColor=c7c7c7&label=Rust+CI&labelColor=282828&color=347D39&event=push" alt="Rust CI status"> </a>
<a href="https://discord.com/invite/wUuZz7VxXD" target="_blank"> <img src="https://img.shields.io/discord/1302530866362323016?style=flat-square&logo=discord&label=Discord&logoColor=ffffff&labelColor=7376CF&color=268165" alt="Discord"> </a>
<a href="https://dotfyle.com/plugins/yetone/avante.nvim"> <img src="https://dotfyle.com/plugins/yetone/avante.nvim/shield?style=flat-square"> </a>
</div>
<p><strong>avante.nvim</strong> is a Neovim plugin designed to emulate the behaviour of the <a href="https://www.cursor.com">Cursor</a> AI IDE. It provides users with AI-driven code suggestions and the ability to apply these recommendations directly to their source files with minimal effort.</p>
<blockquote>
<p>[!NOTE]</p>
<p>🥰 This project is undergoing rapid iterations, and many exciting features will be added successively. Stay tuned!</p>
</blockquote>
<p><a href="https://github.com/user-attachments/assets/510e6270-b6cf-459d-9a2f-15b397d1fe53">https://github.com/user-attachments/assets/510e6270-b6cf-459d-9a2f-15b397d1fe53</a></p>
<p><a href="https://github.com/user-attachments/assets/86140bfd-08b4-483d-a887-1b701d9e37dd">https://github.com/user-attachments/assets/86140bfd-08b4-483d-a887-1b701d9e37dd</a></p>
<h2>Features</h2>
<ul>
<li><strong>AI-Powered Code Assistance</strong>: Interact with AI to ask questions about your current code file and receive intelligent suggestions for improvement or modification.</li>
<li><strong>One-Click Application</strong>: Quickly apply the AI's suggested changes to your source code with a single command, streamlining the editing process and saving time.</li>
</ul>
<h2>Installation</h2>
<p>For building binary if you wish to build from source, then <code>cargo</code> is required. Otherwise <code>curl</code> and <code>tar</code> will be used to get prebuilt binary from GitHub.</p>
<details open>
<summary><a href="https://github.com/folke/lazy.nvim">lazy.nvim</a> (recommended)</summary>
<pre><code class="language-lua">{
"yetone/avante.nvim",
event = "VeryLazy",
lazy = false,
version = false, -- set this if you want to always pull the latest change
opts = {
-- add any opts here
},
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
build = "make",
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
dependencies = {
"stevearc/dressing.nvim",
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
--- The below dependencies are optional,
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
"zbirenbaum/copilot.lua", -- for providers='copilot'
{
-- support for image pasting
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
-- required for Windows users
use_absolute_path = true,
},
},
},
{
-- Make sure to set this up properly if you have lazy=true
'MeanderingProgrammer/render-markdown.nvim',
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
}
</code></pre>
</details>
<details>
<summary>vim-plug</summary>
<pre><code class="language-vim">
" Deps
Plug 'stevearc/dressing.nvim'
Plug 'nvim-lua/plenary.nvim'
Plug 'MunifTanjim/nui.nvim'
" Optional deps
Plug "hrsh7th/nvim-cmp"
Plug 'nvim-tree/nvim-web-devicons' "or Plug 'echasnovski/mini.icons'
Plug 'HakonHarnes/img-clip.nvim'
Plug 'zbirenbaum/copilot.lua'
" Yay, pass source=true if you want to build from source
Plug 'yetone/avante.nvim', { 'branch': 'main', 'do': 'make' }
autocmd! User avante.nvim lua << EOF
require('avante_lib').load()
require('avante').setup()
EOF
</code></pre>
</details>
<details>
<summary><a href="https://github.com/echasnovski/mini.deps">mini.deps</a></summary>
<pre><code class="language-lua">local add, later, now = MiniDeps.add, MiniDeps.later, MiniDeps.now
add({
source = 'yetone/avante.nvim',
monitor = 'main',
depends = {
'stevearc/dressing.nvim',
'nvim-lua/plenary.nvim',
'MunifTanjim/nui.nvim',
'echasnovski/mini.icons'
},
hooks = { post_checkout = function() vim.cmd('make') end }
})
--- optional
add({ source = 'hrsh7th/nvim-cmp' })
add({ source = 'zbirenbaum/copilot.lua' })
add({ source = 'HakonHarnes/img-clip.nvim' })
add({ source = 'MeanderingProgrammer/render-markdown.nvim' })
now(function() require('avante_lib').load() end)
later(function() require('render-markdown').setup({...}) end)
later(function()
require('img-clip').setup({...}) -- config img-clip
require("copilot").setup({...}) -- setup copilot to your liking
require("avante").setup({...}) -- config for avante.nvim
end)
</code></pre>
</details>
<details>
<summary>Lua</summary>
<pre><code class="language-lua">-- deps:
require('cmp').setup ({
-- use recommended settings from above
})
require('img-clip').setup ({
-- use recommended settings from above
})
require('copilot').setup ({
-- use recommended settings from above
})
require('render-markdown').setup ({
-- use recommended settings from above
})
require('avante_lib').load()
require('avante').setup ({
-- Your config here!
})
</code></pre>
<p><strong>NOTE</strong>: For <code>avante.tokenizers</code> and templates to work, make sure to call <code>require('avante_lib').load()</code> somewhere when entering the editor. We will leave the users to decide where it fits to do this, as this varies among configurations. (But we do recommend running this after where you set your colorscheme)</p>
</details>
<blockquote>
<p>[!IMPORTANT]</p>
<p><code>avante.nvim</code> is currently only compatible with Neovim 0.10.1 or later. Please ensure that your Neovim version meets these requirements before proceeding.</p>
</blockquote>
<blockquote>
<p>[!NOTE]</p>
<p>Recommended <strong>Neovim</strong> options:</p>
<pre><code class="language-lua">-- views can only be fully collapsed with the global statusline
vim.opt.laststatus = 3
</code></pre>
</blockquote>
<blockquote>
<p>[!TIP]</p>
<p>Any rendering plugins that support markdown should work with Avante as long as you add the supported filetype <code>Avante</code>. See <a href="https://github.com/yetone/avante.nvim/issues/175">https://github.com/yetone/avante.nvim/issues/175</a> and <a href="https://github.com/yetone/avante.nvim/issues/175#issuecomment-2313749363">this comment</a> for more information.</p>
</blockquote>
<h3>Default setup configuration</h3>
<p><em>See <a href="https://raw.githubusercontent.com/yetone/avante.nvim/main/lua/avante/config.lua">config.lua#L9</a> for the full config</em></p>
<pre><code class="language-lua">{
---@alias Provider "claude" | "openai" | "azure" | "gemini" | "cohere" | "copilot" | string
provider = "claude", -- Recommend using Claude
auto_suggestions_provider = "claude", -- Since auto-suggestions are a high-frequency operation and therefore expensive, it is recommended to specify an inexpensive provider or even a free provider: copilot
claude = {
endpoint = "https://api.anthropic.com",
model = "claude-3-5-sonnet-20241022",
temperature = 0,
max_tokens = 4096,
},
---Specify the special dual_boost mode
---1. enabled: Whether to enable dual_boost mode. Default to false.
---2. first_provider: The first provider to generate response. Default to "openai".
---3. second_provider: The second provider to generate response. Default to "claude".
---4. prompt: The prompt to generate response based on the two reference outputs.
---5. timeout: Timeout in milliseconds. Default to 60000.
---How it works:
--- When dual_boost is enabled, avante will generate two responses from the first_provider and second_provider respectively. Then use the response from the first_provider as provider1_output and the response from the second_provider as provider2_output. Finally, avante will generate a response based on the prompt and the two reference outputs, with the default Provider as normal.
---Note: This is an experimental feature and may not work as expected.
dual_boost = {
enabled = false,
first_provider = "openai",
second_provider = "claude",
prompt = "Based on the two reference outputs below, generate a response that incorporates elements from both but reflects your own judgment and unique perspective. Do not provide any explanation, just give the response directly. Reference Output 1: [{{provider1_output}}], Reference Output 2: [{{provider2_output}}]",
timeout = 60000, -- Timeout in milliseconds
},
behaviour = {
auto_suggestions = false, -- Experimental stage
auto_set_highlight_group = true,
auto_set_keymaps = true,
auto_apply_diff_after_generation = false,
support_paste_from_clipboard = false,
minimize_diff = true, -- Whether to remove unchanged lines when applying a code block
},
mappings = {
--- @class AvanteConflictMappings
diff = {
ours = "co",
theirs = "ct",
all_theirs = "ca",
both = "cb",
cursor = "cc",
next = "]x",
prev = "[x",
},
suggestion = {
accept = "<M-l>",
next = "<M-]>",
prev = "<M-[>",
dismiss = "<C-]>",
},
jump = {
next = "]]",
prev = "[[",
},
submit = {
normal = "<CR>",
insert = "<C-s>",
},
sidebar = {
apply_all = "A",
apply_cursor = "a",
switch_windows = "<Tab>",
reverse_switch_windows = "<S-Tab>",
},
},
hints = { enabled = true },
windows = {
---@type "right" | "left" | "top" | "bottom"
position = "right", -- the position of the sidebar
wrap = true, -- similar to vim.o.wrap
width = 30, -- default % based on available width
sidebar_header = {
enabled = true, -- true, false to enable/disable the header
align = "center", -- left, center, right for title
rounded = true,
},
input = {
prefix = "> ",
height = 8, -- Height of the input window in vertical layout
},
edit = {
border = "rounded",
start_insert = true, -- Start insert mode when opening the edit window
},
ask = {
floating = false, -- Open the 'AvanteAsk' prompt in a floating window
start_insert = true, -- Start insert mode when opening the ask window
border = "rounded",
---@type "ours" | "theirs"
focus_on_apply = "ours", -- which diff to focus after applying
},
},
highlights = {
---@type AvanteConflictHighlights
diff = {
current = "DiffText",
incoming = "DiffAdd",
},
},
--- @class AvanteConflictUserConfig
diff = {
autojump = true,
---@type string | fun(): any
list_opener = "copen",
--- Override the 'timeoutlen' setting while hovering over a diff (see :help timeoutlen).
--- Helps to avoid entering operator-pending mode with diff mappings starting with `c`.
--- Disable by setting to -1.
override_timeoutlen = 500,
},
}
</code></pre>
<h2>Usage</h2>
<p>Given its early stage, <code>avante.nvim</code> currently supports the following basic functionalities:</p>
<blockquote>
<p>[!IMPORTANT]</p>
<p>Avante will only support Claude, and OpenAI (and its variants including azure)out-of-the-box due to its high code quality generation. For all OpenAI-compatible providers, see <a href="https://github.com/yetone/avante.nvim/wiki">wiki</a> for more details.</p>
</blockquote>
<blockquote>
<p>[!IMPORTANT]</p>
<p>Due to the poor performance of other models, avante.nvim only recommends using the claude-3.5-sonnet model. All features can only be guaranteed to work properly on the claude-3.5-sonnet model. We do not accept changes to the code or prompts to accommodate other models. Otherwise, it will greatly increase our maintenance costs. We hope everyone can understand. Thank you!</p>
</blockquote>
<blockquote>
<p>[!IMPORTANT]</p>
<p>For most consistency between neovim session, it is recommended to set the environment variables in your shell file. By default, <code>Avante</code> will prompt you at startup to input the API key for the provider you have selected.</p>
<p>For Claude:</p>
<pre><code class="language-sh">export ANTHROPIC_API_KEY=your-api-key
</code></pre>
<p>For OpenAI:</p>
<pre><code class="language-sh">export OPENAI_API_KEY=your-api-key
</code></pre>
<p>For Azure OpenAI:</p>
<pre><code class="language-sh">export AZURE_OPENAI_API_KEY=your-api-key
</code></pre>
</blockquote>
<ol>
<li>Open a code file in Neovim.</li>
<li>Use the <code>:AvanteAsk</code> command to query the AI about the code.</li>
<li>Review the AI's suggestions.</li>
<li>Apply the recommended changes directly to your code with a simple command or key binding.</li>
</ol>
<p><strong>Note</strong>: The plugin is still under active development, and both its functionality and interface are subject to significant changes. Expect some rough edges and instability as the project evolves.</p>
<h2>Key Bindings</h2>
<p>The following key bindings are available for use with <code>avante.nvim</code>:</p>
<table>
<thead>
<tr>
<th>Key Binding</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><kbd>Leader</kbd><kbd>a</kbd><kbd>a</kbd></td>
<td>show sidebar</td>
</tr>
<tr>
<td><kbd>Leader</kbd><kbd>a</kbd><kbd>r</kbd></td>
<td>refresh sidebar</td>
</tr>
<tr>
<td><kbd>Leader</kbd><kbd>a</kbd><kbd>f</kbd></td>
<td>switch sidebar focus</td>
</tr>
<tr>
<td><kbd>Leader</kbd><kbd>a</kbd><kbd>e</kbd></td>
<td>edit selected blocks</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>o</kbd></td>
<td>choose ours</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>t</kbd></td>
<td>choose theirs</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>a</kbd></td>
<td>choose all theirs</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>0</kbd></td>
<td>choose none</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>b</kbd></td>
<td>choose both</td>
</tr>
<tr>
<td><kbd>c</kbd><kbd>c</kbd></td>
<td>choose cursor</td>
</tr>
<tr>
<td><kbd>]</kbd><kbd>x</kbd></td>
<td>move to previous conflict</td>
</tr>
<tr>
<td><kbd>[</kbd><kbd>x</kbd></td>
<td>move to next conflict</td>
</tr>
<tr>
<td><kbd>[</kbd><kbd>[</kbd></td>
<td>jump to previous codeblocks (results window)</td>
</tr>
<tr>
<td><kbd>]</kbd><kbd>]</kbd></td>
<td>jump to next codeblocks (results windows)</td>
</tr>
</tbody>
</table>
<blockquote>
<p>[!NOTE]</p>
<p>If you are using <code>lazy.nvim</code>, then all keymap here will be safely set, meaning if <code><leader>aa</code> is already binded, then avante.nvim won't bind this mapping. In this case, user will be responsible for setting up their own. See <a href="https://github.com/yetone/avante.nvim/wiki#keymaps-and-api-i-guess">notes on keymaps</a> for more details.</p>
</blockquote>
<h2>Highlight Groups</h2>
<table>
<thead>
<tr>
<th>Highlight Group</th>
<th>Description</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>AvanteTitle</td>
<td>Title</td>
<td></td>
</tr>
<tr>
<td>AvanteReversedTitle</td>
<td>Used for rounded border</td>
<td></td>
</tr>
<tr>
<td>AvanteSubtitle</td>
<td>Selected code title</td>
<td></td>
</tr>
<tr>
<td>AvanteReversedSubtitle</td>
<td>Used for rounded border</td>
<td></td>
</tr>
<tr>
<td>AvanteThirdTitle</td>
<td>Prompt title</td>
<td></td>
</tr>
<tr>
<td>AvanteReversedThirdTitle</td>
<td>Used for rounded border</td>
<td></td>
</tr>
<tr>
<td>AvanteConflictCurrent</td>
<td>Current conflict highlight</td>
<td>Default to <code>Config.highlights.diff.current</code></td>
</tr>
<tr>
<td>AvanteConflictIncoming</td>
<td>Incoming conflict highlight</td>
<td>Default to <code>Config.highlights.diff.incoming</code></td>
</tr>
<tr>
<td>AvanteConflictCurrentLabel</td>
<td>Current conflict label highlight</td>
<td>Default to shade of <code>AvanteConflictCurrent</code></td>
</tr>
<tr>
<td>AvanteConflictIncomingLabel</td>
<td>Incoming conflict label highlight</td>
<td>Default to shade of <code>AvanteConflictIncoming</code></td>
</tr>
<tr>
<td>AvantePopupHint</td>
<td>Usage hints in popup menus</td>
<td></td>
</tr>
<tr>
<td>AvanteInlineHint</td>
<td>The end-of-line hint displayed in visual mode</td>
<td></td>
</tr>
</tbody>
</table>
<p>See <a href="https://raw.githubusercontent.com/yetone/avante.nvim/main/lua/avante/highlights.lua">highlights.lua</a> for more information</p>
<h2>Custom prompts</h2>
<p>By default, <code>avante.nvim</code> provides three different modes to interact with: <code>planning</code>, <code>editing</code>, and <code>suggesting</code>, followed with three different prompts per mode.</p>
<ul>
<li><code>planning</code>: Used with <code>require("avante").toggle()</code> on sidebar</li>
<li><code>editing</code>: Used with <code>require("avante").edit()</code> on selection codeblock</li>
<li><code>suggesting</code>: Used with <code>require("avante").get_suggestion():suggest()</code> on Tab flow.</li>
</ul>
<p>Users can customize the system prompts via <code>Config.system_prompt</code>. We recommend calling this in a custom Autocmds depending on your need:</p>
<pre><code class="language-lua">vim.api.nvim_create_autocmd("User", {
pattern = "ToggleMyPrompt",
callback = function() require("avante.config").override({system_prompt = "MY CUSTOM SYSTEM PROMPT"}) end,
})
vim.keymap.set("n", "<leader>am", function() vim.api.nvim_exec_autocmds("User", { pattern = "ToggleMyPrompt" }) end, { desc = "avante: toggle my prompt" })
</code></pre>
<p>If one wish to custom prompts for each mode, <code>avante.nvim</code> will check for project root based on the given buffer whether it contains the following patterns: <code>*.{mode}.avanterules</code>.</p>
<p>The rules for root hierarchy:</p>
<ul>
<li>lsp workspace folders</li>
<li>lsp root_dir</li>
<li>root pattern of filename of the current buffer</li>
<li>root pattern of cwd</li>
</ul>
<details>
<summary>Example folder structure for custom prompt</summary>
<p>If you have the following structure:</p>
<pre><code class="language-bash">.
├── .git/
├── typescript.planning.avanterules
├── snippets.editing.avanterules
└── src/
</code></pre>
<ul>
<li><code>typescript.planning.avanterules</code> will be used for <code>planning</code> mode</li>
<li><code>snippets.editing.avanterules`` will be used for </code>editing` mode</li>
<li>the default <code>suggesting</code> prompt from <code>avante.nvim</code> will be used for <code>suggesting</code> mode.</li>
</ul>
</details>
<blockquote>
<p>[!important]</p>
<p><code>*.avanterules</code> is a jinja template file, in which will be rendered using <a href="https://github.com/mitsuhiko/minijinja">minijinja</a>. See <a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/templates">templates</a> for example on how to extend current templates.</p>
</blockquote>
<h2>TODOs</h2>
<ul>
<li><input type="checkbox" checked disabled> Chat with current file</li>
<li><input type="checkbox" checked disabled> Apply diff patch</li>
<li><input type="checkbox" checked disabled> Chat with the selected block</li>
<li><input type="checkbox" checked disabled> Slash commands</li>
<li><input type="checkbox" checked disabled> Edit the selected block</li>
<li><input type="checkbox" checked disabled> Smart Tab (Cursor Flow)</li>
<li><input type="checkbox" checked disabled> Chat with project (You can use <code>@codebase</code> to chat with the whole project)</li>
<li><input type="checkbox" disabled> CoT</li>
<li><input type="checkbox" disabled> Chat with selected files</li>
</ul>
<h2>Roadmap</h2>
<ul>
<li><strong>Enhanced AI Interactions</strong>: Improve the depth of AI analysis and recommendations for more complex coding scenarios.</li>
<li><strong>LSP + Tree-sitter + LLM Integration</strong>: Integrate with LSP and Tree-sitter and LLM to provide more accurate and powerful code suggestions and analysis.</li>
</ul>
<h2>Contributing</h2>
<p>Contributions to avante.nvim are welcome! If you're interested in helping out, please feel free to submit pull requests or open issues. Before contributing, ensure that your code has been thoroughly tested.</p>
<p>See <a href="https://github.com/yetone/avante.nvim/wiki">wiki</a> for more recipes and tricks.</p>
<h2>Acknowledgments</h2>
<p>We would like to express our heartfelt gratitude to the contributors of the following open-source projects, whose code has provided invaluable inspiration and reference for the development of avante.nvim:</p>
<table>
<thead>
<tr>
<th>Nvim Plugin</th>
<th>License</th>
<th>Functionality</th>
<th>Location</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/akinsho/git-conflict.nvim">git-conflict.nvim</a></td>
<td>No License</td>
<td>Diff comparison functionality</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/diff.lua">lua/avante/diff.lua</a></td>
</tr>
<tr>
<td><a href="https://github.com/jackMort/ChatGPT.nvim">ChatGPT.nvim</a></td>
<td>Apache 2.0 License</td>
<td>Calculation of tokens count</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/utils/tokens.lua">lua/avante/utils/tokens.lua</a></td>
</tr>
<tr>
<td><a href="https://github.com/HakonHarnes/img-clip.nvim">img-clip.nvim</a></td>
<td>MIT License</td>
<td>Clipboard image support</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/clipboard.lua">lua/avante/clipboard.lua</a></td>
</tr>
<tr>
<td><a href="https://github.com/zbirenbaum/copilot.lua">copilot.lua</a></td>
<td>MIT License</td>
<td>Copilot support</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/providers/copilot.lua">lua/avante/providers/copilot.lua</a></td>
</tr>
<tr>
<td><a href="https://github.com/HiPhish/jinja.vim">jinja.vim</a></td>
<td>MIT License</td>
<td>Template filetype support</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/syntax/jinja.vim">syntax/jinja.vim</a></td>
</tr>
<tr>
<td><a href="https://github.com/olimorris/codecompanion.nvim">codecompanion.nvim</a></td>
<td>MIT License</td>
<td>Secrets logic support</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/providers/init.lua">lua/avante/providers/init.lua</a></td>
</tr>
<tr>
<td><a href="https://github.com/paul-gauthier/aider">aider</a></td>
<td>Apache 2.0 License</td>
<td>Planning mode user prompt</td>
<td><a href="https://github.com/yetone/avante.nvim/raw/main/lua/avante/templates/planning.avanterules">lua/avante/templates/planning.avanterules</a></td>
</tr>
</tbody>
</table>
<p>The high quality and ingenuity of these projects' source code have been immensely beneficial throughout our development process. We extend our sincere thanks and respect to the authors and contributors of these projects. It is the selfless dedication of the open-source community that drives projects like avante.nvim forward.</p>
<h2>License</h2>
<p>avante.nvim is licensed under the Apache 2.0 License. For more details, please refer to the <a href="https://raw.githubusercontent.com/yetone/avante.nvim/main/LICENSE">LICENSE</a> file.</p>
<h1>Star History</h1>
<p align="center"> <a target="_blank" href="https://star-history.com/#yetone/avante.nvim&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=yetone/avante.nvim&type=Date&theme=dark">
<img alt="NebulaGraph Data Intelligence Suite(ngdi)" src="https://api.star-history.com/svg?repos=yetone/avante.nvim&type=Date">
</picture> </a> </p>
+
+
\ No newline at end of file
diff --git a/m/daily/index.xml b/m/daily/index.xml
index 604a706197e..7ce341f1798 100644
--- a/m/daily/index.xml
+++ b/m/daily/index.xml
@@ -1,7 +1,7 @@
GitHub M Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:47Z
+ 2024-12-01T01:33:42Z
Daily Trending of M in GitHub
\ No newline at end of file
diff --git a/m/monthly/index.xml b/m/monthly/index.xml
new file mode 100644
index 00000000000..a76af1ac3e2
--- /dev/null
+++ b/m/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:24Z
+ Monthly Trending of M in GitHub
+
+
\ No newline at end of file
diff --git a/m/weekly/index.xml b/m/weekly/index.xml
new file mode 100644
index 00000000000..d5f2a437a38
--- /dev/null
+++ b/m/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:24Z
+ Weekly Trending of M in GitHub
+
+
\ No newline at end of file
diff --git a/m4/daily/index.xml b/m4/daily/index.xml
index 6f69030bada..b518117c367 100644
--- a/m4/daily/index.xml
+++ b/m4/daily/index.xml
@@ -1,7 +1,7 @@
GitHub M4 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:54Z
+ 2024-12-01T01:33:48Z
Daily Trending of M4 in GitHub
\ No newline at end of file
diff --git a/m4/monthly/index.xml b/m4/monthly/index.xml
new file mode 100644
index 00000000000..f8a364d498b
--- /dev/null
+++ b/m4/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M4 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:30Z
+ Monthly Trending of M4 in GitHub
+
+
\ No newline at end of file
diff --git a/m4/weekly/index.xml b/m4/weekly/index.xml
new file mode 100644
index 00000000000..4851bf57de6
--- /dev/null
+++ b/m4/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M4 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:31Z
+ Weekly Trending of M4 in GitHub
+
+
\ No newline at end of file
diff --git a/m4sugar/daily/index.xml b/m4sugar/daily/index.xml
index 8916c855409..2ce099f7f76 100644
--- a/m4sugar/daily/index.xml
+++ b/m4sugar/daily/index.xml
@@ -1,7 +1,7 @@
GitHub M4Sugar Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:54Z
+ 2024-12-01T01:33:49Z
Daily Trending of M4Sugar in GitHub
\ No newline at end of file
diff --git a/m4sugar/monthly/index.xml b/m4sugar/monthly/index.xml
new file mode 100644
index 00000000000..e84bf0294e2
--- /dev/null
+++ b/m4sugar/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M4Sugar Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:29Z
+ Monthly Trending of M4Sugar in GitHub
+
+
\ No newline at end of file
diff --git a/m4sugar/weekly/index.xml b/m4sugar/weekly/index.xml
new file mode 100644
index 00000000000..412e920b9c5
--- /dev/null
+++ b/m4sugar/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub M4Sugar Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:31Z
+ Weekly Trending of M4Sugar in GitHub
+
+
\ No newline at end of file
diff --git a/macaulay2/daily/index.xml b/macaulay2/daily/index.xml
index d94809ff1e2..d6807a79f7a 100644
--- a/macaulay2/daily/index.xml
+++ b/macaulay2/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Macaulay2 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:54Z
+ 2024-12-01T01:33:48Z
Daily Trending of Macaulay2 in GitHub
\ No newline at end of file
diff --git a/macaulay2/monthly/index.xml b/macaulay2/monthly/index.xml
new file mode 100644
index 00000000000..6b2e42ee011
--- /dev/null
+++ b/macaulay2/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Macaulay2 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:30Z
+ Monthly Trending of Macaulay2 in GitHub
+
+
\ No newline at end of file
diff --git a/macaulay2/weekly/index.xml b/macaulay2/weekly/index.xml
new file mode 100644
index 00000000000..d7db48fbd89
--- /dev/null
+++ b/macaulay2/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Macaulay2 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:30Z
+ Weekly Trending of Macaulay2 in GitHub
+
+
\ No newline at end of file
diff --git a/makefile/daily/index.xml b/makefile/daily/index.xml
index c7c1594eddc..fd0421dc0ac 100644
--- a/makefile/daily/index.xml
+++ b/makefile/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Makefile Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:55Z
+ 2024-12-01T01:33:49Z
Daily Trending of Makefile in GitHub
\ No newline at end of file
diff --git a/makefile/monthly/index.xml b/makefile/monthly/index.xml
new file mode 100644
index 00000000000..fcd2f20da91
--- /dev/null
+++ b/makefile/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Makefile Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:38Z
+ Monthly Trending of Makefile in GitHub
+
+
+ sanjay-kv/Open-source-Practice
+ 2024-12-01T01:55:38Z
+ tag:github.com,2024-12-01:/sanjay-kv/Open-source-Practice
+
+ <p>GSSoC is a 3-month long #OpenSource program by GirlScript Foundation, India.</p><hr>
+
+
+ container-storage-interface/spec
+ 2024-12-01T01:55:38Z
+ tag:github.com,2024-12-01:/container-storage-interface/spec
+
+ <p>Container Storage Interface (CSI) Specification.</p><hr>
+
+
\ No newline at end of file
diff --git a/makefile/weekly/index.xml b/makefile/weekly/index.xml
new file mode 100644
index 00000000000..01d067bb9bf
--- /dev/null
+++ b/makefile/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Makefile Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:32Z
+ Weekly Trending of Makefile in GitHub
+
+
\ No newline at end of file
diff --git a/mako/daily/index.xml b/mako/daily/index.xml
index c600fa70d82..f6f16609878 100644
--- a/mako/daily/index.xml
+++ b/mako/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mako Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:56Z
+ 2024-12-01T01:33:51Z
Daily Trending of Mako in GitHub
\ No newline at end of file
diff --git a/mako/monthly/index.xml b/mako/monthly/index.xml
new file mode 100644
index 00000000000..f91404e23d7
--- /dev/null
+++ b/mako/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mako Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:38Z
+ Monthly Trending of Mako in GitHub
+
+
\ No newline at end of file
diff --git a/mako/weekly/index.xml b/mako/weekly/index.xml
new file mode 100644
index 00000000000..1cd1f988043
--- /dev/null
+++ b/mako/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mako Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:33Z
+ Weekly Trending of Mako in GitHub
+
+
\ No newline at end of file
diff --git a/markdown/monthly/index.xml b/markdown/monthly/index.xml
new file mode 100644
index 00000000000..f77f6d2641f
--- /dev/null
+++ b/markdown/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Markdown Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:48Z
+ Monthly Trending of Markdown in GitHub
+
+
\ No newline at end of file
diff --git a/markdown/weekly/index.xml b/markdown/weekly/index.xml
new file mode 100644
index 00000000000..17838f349d4
--- /dev/null
+++ b/markdown/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Markdown Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:05Z
+ Weekly Trending of Markdown in GitHub
+
+
\ No newline at end of file
diff --git a/marko/daily/index.xml b/marko/daily/index.xml
index f0691955ab6..7321a3464f5 100644
--- a/marko/daily/index.xml
+++ b/marko/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Marko Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:56Z
+ 2024-12-01T01:33:50Z
Daily Trending of Marko in GitHub
\ No newline at end of file
diff --git a/marko/monthly/index.xml b/marko/monthly/index.xml
new file mode 100644
index 00000000000..e6fe8d17d46
--- /dev/null
+++ b/marko/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Marko Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:39Z
+ Monthly Trending of Marko in GitHub
+
+
\ No newline at end of file
diff --git a/marko/weekly/index.xml b/marko/weekly/index.xml
new file mode 100644
index 00000000000..f4cad410d63
--- /dev/null
+++ b/marko/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Marko Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:33Z
+ Weekly Trending of Marko in GitHub
+
+
\ No newline at end of file
diff --git a/mask/daily/index.xml b/mask/daily/index.xml
index 2284312ddb2..bf41aff6bb6 100644
--- a/mask/daily/index.xml
+++ b/mask/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mask Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:32:56Z
+ 2024-12-01T01:33:50Z
Daily Trending of Mask in GitHub
\ No newline at end of file
diff --git a/mask/monthly/index.xml b/mask/monthly/index.xml
new file mode 100644
index 00000000000..0c7f70016cb
--- /dev/null
+++ b/mask/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mask Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:39Z
+ Monthly Trending of Mask in GitHub
+
+
\ No newline at end of file
diff --git a/mask/weekly/index.xml b/mask/weekly/index.xml
new file mode 100644
index 00000000000..44f69f5f9e3
--- /dev/null
+++ b/mask/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mask Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:44:33Z
+ Weekly Trending of Mask in GitHub
+
+
\ No newline at end of file
diff --git a/mathematica/daily/index.xml b/mathematica/daily/index.xml
index 61654e04ae8..91b9b3e67d3 100644
--- a/mathematica/daily/index.xml
+++ b/mathematica/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mathematica Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:07Z
+ 2024-12-01T01:36:24Z
Daily Trending of Mathematica in GitHub
\ No newline at end of file
diff --git a/mathematica/monthly/index.xml b/mathematica/monthly/index.xml
new file mode 100644
index 00000000000..f4a87cafee8
--- /dev/null
+++ b/mathematica/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mathematica Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:50Z
+ Monthly Trending of Mathematica in GitHub
+
+
\ No newline at end of file
diff --git a/mathematica/weekly/index.xml b/mathematica/weekly/index.xml
new file mode 100644
index 00000000000..685440bdd65
--- /dev/null
+++ b/mathematica/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mathematica Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:06Z
+ Weekly Trending of Mathematica in GitHub
+
+
\ No newline at end of file
diff --git a/matlab/daily/index.xml b/matlab/daily/index.xml
index 7db0811eada..8f123ac5ee3 100644
--- a/matlab/daily/index.xml
+++ b/matlab/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MATLAB Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:07Z
+ 2024-12-01T01:36:24Z
Daily Trending of MATLAB in GitHub
\ No newline at end of file
diff --git a/matlab/monthly/index.xml b/matlab/monthly/index.xml
new file mode 100644
index 00000000000..1451b590c27
--- /dev/null
+++ b/matlab/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MATLAB Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:50Z
+ Monthly Trending of MATLAB in GitHub
+
+
\ No newline at end of file
diff --git a/matlab/weekly/index.xml b/matlab/weekly/index.xml
new file mode 100644
index 00000000000..4db6dfe33c6
--- /dev/null
+++ b/matlab/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MATLAB Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:07Z
+ Weekly Trending of MATLAB in GitHub
+
+
\ No newline at end of file
diff --git a/maven-pom/daily/index.xml b/maven-pom/daily/index.xml
index 96bc57af729..1e056cdab25 100644
--- a/maven-pom/daily/index.xml
+++ b/maven-pom/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Maven POM Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:06Z
+ 2024-12-01T01:36:23Z
Daily Trending of Maven POM in GitHub
\ No newline at end of file
diff --git a/maven-pom/monthly/index.xml b/maven-pom/monthly/index.xml
new file mode 100644
index 00000000000..b96759e9cd6
--- /dev/null
+++ b/maven-pom/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Maven POM Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:49Z
+ Monthly Trending of Maven POM in GitHub
+
+
\ No newline at end of file
diff --git a/maven-pom/weekly/index.xml b/maven-pom/weekly/index.xml
new file mode 100644
index 00000000000..3a1a7293510
--- /dev/null
+++ b/maven-pom/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Maven POM Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:06Z
+ Weekly Trending of Maven POM in GitHub
+
+
\ No newline at end of file
diff --git a/max/daily/index.xml b/max/daily/index.xml
index f8c9107a8d9..411462410b4 100644
--- a/max/daily/index.xml
+++ b/max/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Max Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:07Z
+ 2024-12-01T01:36:23Z
Daily Trending of Max in GitHub
\ No newline at end of file
diff --git a/max/monthly/index.xml b/max/monthly/index.xml
new file mode 100644
index 00000000000..79c2194bb90
--- /dev/null
+++ b/max/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Max Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:49Z
+ Monthly Trending of Max in GitHub
+
+
\ No newline at end of file
diff --git a/max/weekly/index.xml b/max/weekly/index.xml
new file mode 100644
index 00000000000..bc94b44a911
--- /dev/null
+++ b/max/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Max Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:06Z
+ Weekly Trending of Max in GitHub
+
+
\ No newline at end of file
diff --git a/maxscript/daily/index.xml b/maxscript/daily/index.xml
index fb14342163b..497d66bc8d6 100644
--- a/maxscript/daily/index.xml
+++ b/maxscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MAXScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:08Z
+ 2024-12-01T01:36:25Z
Daily Trending of MAXScript in GitHub
\ No newline at end of file
diff --git a/maxscript/monthly/index.xml b/maxscript/monthly/index.xml
new file mode 100644
index 00000000000..55e2978d7e2
--- /dev/null
+++ b/maxscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MAXScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:51Z
+ Monthly Trending of MAXScript in GitHub
+
+
\ No newline at end of file
diff --git a/maxscript/weekly/index.xml b/maxscript/weekly/index.xml
new file mode 100644
index 00000000000..cefb6b5b93a
--- /dev/null
+++ b/maxscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MAXScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:08Z
+ Weekly Trending of MAXScript in GitHub
+
+
\ No newline at end of file
diff --git a/mcfunction/daily/index.xml b/mcfunction/daily/index.xml
index ce8a0142b74..0a348df7541 100644
--- a/mcfunction/daily/index.xml
+++ b/mcfunction/daily/index.xml
@@ -1,7 +1,7 @@
GitHub mcfunction Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:08Z
+ 2024-12-01T01:36:25Z
Daily Trending of mcfunction in GitHub
\ No newline at end of file
diff --git a/mcfunction/monthly/index.xml b/mcfunction/monthly/index.xml
new file mode 100644
index 00000000000..e8da96e76cb
--- /dev/null
+++ b/mcfunction/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mcfunction Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:51Z
+ Monthly Trending of mcfunction in GitHub
+
+
\ No newline at end of file
diff --git a/mcfunction/weekly/index.xml b/mcfunction/weekly/index.xml
new file mode 100644
index 00000000000..e97b8e3f04a
--- /dev/null
+++ b/mcfunction/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mcfunction Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:08Z
+ Weekly Trending of mcfunction in GitHub
+
+
\ No newline at end of file
diff --git a/mercury/daily/index.xml b/mercury/daily/index.xml
index 8944fcd1e1a..a5d449f0ab2 100644
--- a/mercury/daily/index.xml
+++ b/mercury/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mercury Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:10Z
+ 2024-12-01T01:36:28Z
Daily Trending of Mercury in GitHub
\ No newline at end of file
diff --git a/mercury/monthly/index.xml b/mercury/monthly/index.xml
new file mode 100644
index 00000000000..34a247a975a
--- /dev/null
+++ b/mercury/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mercury Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:56Z
+ Monthly Trending of Mercury in GitHub
+
+
\ No newline at end of file
diff --git a/mercury/weekly/index.xml b/mercury/weekly/index.xml
new file mode 100644
index 00000000000..f6a624c1159
--- /dev/null
+++ b/mercury/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mercury Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:12Z
+ Weekly Trending of Mercury in GitHub
+
+
\ No newline at end of file
diff --git a/meson/daily/index.xml b/meson/daily/index.xml
index 5a00b2d270f..129dcf05523 100644
--- a/meson/daily/index.xml
+++ b/meson/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Meson Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:11Z
+ 2024-12-01T01:36:28Z
Daily Trending of Meson in GitHub
\ No newline at end of file
diff --git a/meson/monthly/index.xml b/meson/monthly/index.xml
new file mode 100644
index 00000000000..9ca2bdd57ca
--- /dev/null
+++ b/meson/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Meson Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:57Z
+ Monthly Trending of Meson in GitHub
+
+
+ somepaulo/MoreWaita
+ 2024-12-01T01:55:57Z
+ tag:github.com,2024-12-01:/somepaulo/MoreWaita
+
+ <p>An expanded Adwaita-styled companion icon theme with extra icons for popular apps to complement Gnome Shell's original icons.</p><hr>
+
+
\ No newline at end of file
diff --git a/meson/weekly/index.xml b/meson/weekly/index.xml
new file mode 100644
index 00000000000..774971b1e64
--- /dev/null
+++ b/meson/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Meson Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:13Z
+ Weekly Trending of Meson in GitHub
+
+
\ No newline at end of file
diff --git a/metal/daily/index.xml b/metal/daily/index.xml
index c889278b8bf..e4664e5080c 100644
--- a/metal/daily/index.xml
+++ b/metal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Metal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:11Z
+ 2024-12-01T01:36:28Z
Daily Trending of Metal in GitHub
\ No newline at end of file
diff --git a/metal/monthly/index.xml b/metal/monthly/index.xml
new file mode 100644
index 00000000000..36451a69cae
--- /dev/null
+++ b/metal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Metal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:56Z
+ Monthly Trending of Metal in GitHub
+
+
\ No newline at end of file
diff --git a/metal/weekly/index.xml b/metal/weekly/index.xml
new file mode 100644
index 00000000000..3c31cb63bc0
--- /dev/null
+++ b/metal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Metal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:12Z
+ Weekly Trending of Metal in GitHub
+
+
\ No newline at end of file
diff --git a/microsoft-developer-studio-project/daily/index.xml b/microsoft-developer-studio-project/daily/index.xml
index 76d41d6f3ec..60b6756c5f5 100644
--- a/microsoft-developer-studio-project/daily/index.xml
+++ b/microsoft-developer-studio-project/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Microsoft Developer Studio Project Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:13Z
+ 2024-12-01T01:36:29Z
Daily Trending of Microsoft Developer Studio Project in GitHub
\ No newline at end of file
diff --git a/microsoft-developer-studio-project/monthly/index.xml b/microsoft-developer-studio-project/monthly/index.xml
new file mode 100644
index 00000000000..59a209d367f
--- /dev/null
+++ b/microsoft-developer-studio-project/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Microsoft Developer Studio Project Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:58Z
+ Monthly Trending of Microsoft Developer Studio Project in GitHub
+
+
\ No newline at end of file
diff --git a/microsoft-developer-studio-project/weekly/index.xml b/microsoft-developer-studio-project/weekly/index.xml
new file mode 100644
index 00000000000..5e1ef276b77
--- /dev/null
+++ b/microsoft-developer-studio-project/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Microsoft Developer Studio Project Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:14Z
+ Weekly Trending of Microsoft Developer Studio Project in GitHub
+
+
\ No newline at end of file
diff --git a/microsoft-visual-studio-solution/daily/index.xml b/microsoft-visual-studio-solution/daily/index.xml
index 0869f4b5127..54d60a65288 100644
--- a/microsoft-visual-studio-solution/daily/index.xml
+++ b/microsoft-visual-studio-solution/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Microsoft Visual Studio Solution Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:12Z
+ 2024-12-01T01:36:30Z
Daily Trending of Microsoft Visual Studio Solution in GitHub
\ No newline at end of file
diff --git a/microsoft-visual-studio-solution/monthly/index.xml b/microsoft-visual-studio-solution/monthly/index.xml
new file mode 100644
index 00000000000..b119775e77d
--- /dev/null
+++ b/microsoft-visual-studio-solution/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Microsoft Visual Studio Solution Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:58Z
+ Monthly Trending of Microsoft Visual Studio Solution in GitHub
+
+
\ No newline at end of file
diff --git a/microsoft-visual-studio-solution/weekly/index.xml b/microsoft-visual-studio-solution/weekly/index.xml
new file mode 100644
index 00000000000..8c64f3518c0
--- /dev/null
+++ b/microsoft-visual-studio-solution/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Microsoft Visual Studio Solution Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:14Z
+ Weekly Trending of Microsoft Visual Studio Solution in GitHub
+
+
\ No newline at end of file
diff --git a/minid/daily/index.xml b/minid/daily/index.xml
index 29a2f5f34e7..26155b6109e 100644
--- a/minid/daily/index.xml
+++ b/minid/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MiniD Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:12Z
+ 2024-12-01T01:36:30Z
Daily Trending of MiniD in GitHub
\ No newline at end of file
diff --git a/minid/monthly/index.xml b/minid/monthly/index.xml
new file mode 100644
index 00000000000..ed71b78cb69
--- /dev/null
+++ b/minid/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MiniD Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:58Z
+ Monthly Trending of MiniD in GitHub
+
+
\ No newline at end of file
diff --git a/minid/weekly/index.xml b/minid/weekly/index.xml
new file mode 100644
index 00000000000..5de28c1cc30
--- /dev/null
+++ b/minid/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MiniD Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:14Z
+ Weekly Trending of MiniD in GitHub
+
+
\ No newline at end of file
diff --git a/mint/daily/index.xml b/mint/daily/index.xml
index 8fb5eadbee4..55f8db0491e 100644
--- a/mint/daily/index.xml
+++ b/mint/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mint Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:14Z
+ 2024-12-01T01:36:31Z
Daily Trending of Mint in GitHub
\ No newline at end of file
diff --git a/mint/monthly/index.xml b/mint/monthly/index.xml
new file mode 100644
index 00000000000..5ef276656b5
--- /dev/null
+++ b/mint/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mint Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:00Z
+ Monthly Trending of Mint in GitHub
+
+
\ No newline at end of file
diff --git a/mint/weekly/index.xml b/mint/weekly/index.xml
new file mode 100644
index 00000000000..76ca1895852
--- /dev/null
+++ b/mint/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mint Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:16Z
+ Weekly Trending of Mint in GitHub
+
+
\ No newline at end of file
diff --git a/mirah/daily/index.xml b/mirah/daily/index.xml
index 6efeb001561..ad7811b845a 100644
--- a/mirah/daily/index.xml
+++ b/mirah/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mirah Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:15Z
+ 2024-12-01T01:36:32Z
Daily Trending of Mirah in GitHub
\ No newline at end of file
diff --git a/mirah/monthly/index.xml b/mirah/monthly/index.xml
new file mode 100644
index 00000000000..a31f1e3e15d
--- /dev/null
+++ b/mirah/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mirah Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:00Z
+ Monthly Trending of Mirah in GitHub
+
+
\ No newline at end of file
diff --git a/mirah/weekly/index.xml b/mirah/weekly/index.xml
new file mode 100644
index 00000000000..b1f8e4d9e43
--- /dev/null
+++ b/mirah/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mirah Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:15Z
+ Weekly Trending of Mirah in GitHub
+
+
\ No newline at end of file
diff --git a/mirc-script/daily/index.xml b/mirc-script/daily/index.xml
index fb089d6928f..d3489090d67 100644
--- a/mirc-script/daily/index.xml
+++ b/mirc-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub mIRC Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:14Z
+ 2024-12-01T01:36:31Z
Daily Trending of mIRC Script in GitHub
\ No newline at end of file
diff --git a/mirc-script/monthly/index.xml b/mirc-script/monthly/index.xml
new file mode 100644
index 00000000000..4d1f2f9a8b5
--- /dev/null
+++ b/mirc-script/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mIRC Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:00Z
+ Monthly Trending of mIRC Script in GitHub
+
+
\ No newline at end of file
diff --git a/mirc-script/weekly/index.xml b/mirc-script/weekly/index.xml
new file mode 100644
index 00000000000..5fafeaf93a7
--- /dev/null
+++ b/mirc-script/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mIRC Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:16Z
+ Weekly Trending of mIRC Script in GitHub
+
+
\ No newline at end of file
diff --git a/mlir/daily/index.xml b/mlir/daily/index.xml
index 73da68b84a7..8ddb7c32ac8 100644
--- a/mlir/daily/index.xml
+++ b/mlir/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MLIR Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:14Z
+ 2024-12-01T01:36:32Z
Daily Trending of MLIR in GitHub
\ No newline at end of file
diff --git a/mlir/monthly/index.xml b/mlir/monthly/index.xml
new file mode 100644
index 00000000000..516d313a52a
--- /dev/null
+++ b/mlir/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MLIR Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:59Z
+ Monthly Trending of MLIR in GitHub
+
+
\ No newline at end of file
diff --git a/mlir/weekly/index.xml b/mlir/weekly/index.xml
new file mode 100644
index 00000000000..33244cc50b1
--- /dev/null
+++ b/mlir/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MLIR Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:19Z
+ Weekly Trending of MLIR in GitHub
+
+
\ No newline at end of file
diff --git a/modelica/daily/index.xml b/modelica/daily/index.xml
index 8a6636908a5..30b145e71bc 100644
--- a/modelica/daily/index.xml
+++ b/modelica/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Modelica Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:16Z
+ 2024-12-01T01:36:34Z
Daily Trending of Modelica in GitHub
\ No newline at end of file
diff --git a/modelica/monthly/index.xml b/modelica/monthly/index.xml
new file mode 100644
index 00000000000..6995258395f
--- /dev/null
+++ b/modelica/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Modelica Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:02Z
+ Monthly Trending of Modelica in GitHub
+
+
\ No newline at end of file
diff --git a/modelica/weekly/index.xml b/modelica/weekly/index.xml
new file mode 100644
index 00000000000..65a53101312
--- /dev/null
+++ b/modelica/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Modelica Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:21Z
+ Weekly Trending of Modelica in GitHub
+
+
\ No newline at end of file
diff --git a/modula-2/daily/index.xml b/modula-2/daily/index.xml
index aa141e1cd8c..08b0b07b676 100644
--- a/modula-2/daily/index.xml
+++ b/modula-2/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Modula-2 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:16Z
+ 2024-12-01T01:36:33Z
Daily Trending of Modula-2 in GitHub
\ No newline at end of file
diff --git a/modula-2/monthly/index.xml b/modula-2/monthly/index.xml
new file mode 100644
index 00000000000..47ce4807d30
--- /dev/null
+++ b/modula-2/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Modula-2 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:01Z
+ Monthly Trending of Modula-2 in GitHub
+
+
\ No newline at end of file
diff --git a/modula-2/weekly/index.xml b/modula-2/weekly/index.xml
new file mode 100644
index 00000000000..024550d9e5c
--- /dev/null
+++ b/modula-2/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Modula-2 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:20Z
+ Weekly Trending of Modula-2 in GitHub
+
+
\ No newline at end of file
diff --git a/modula-3/daily/index.xml b/modula-3/daily/index.xml
index cfb00baf28d..ee8f9a3c158 100644
--- a/modula-3/daily/index.xml
+++ b/modula-3/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Modula-3 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:15Z
+ 2024-12-01T01:36:33Z
Daily Trending of Modula-3 in GitHub
\ No newline at end of file
diff --git a/modula-3/monthly/index.xml b/modula-3/monthly/index.xml
new file mode 100644
index 00000000000..5320b361328
--- /dev/null
+++ b/modula-3/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Modula-3 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:02Z
+ Monthly Trending of Modula-3 in GitHub
+
+
+ recodehive/Opensource-practice
+ 2024-12-01T01:56:02Z
+ tag:github.com,2024-12-01:/recodehive/Opensource-practice
+
+ <p></p><hr>
+
+
\ No newline at end of file
diff --git a/modula-3/weekly/index.xml b/modula-3/weekly/index.xml
new file mode 100644
index 00000000000..8b7e510f190
--- /dev/null
+++ b/modula-3/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Modula-3 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:20Z
+ Weekly Trending of Modula-3 in GitHub
+
+
\ No newline at end of file
diff --git a/module-management-system/daily/index.xml b/module-management-system/daily/index.xml
index 8c3241f02ee..41e54fd5d73 100644
--- a/module-management-system/daily/index.xml
+++ b/module-management-system/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Module Management System Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:16Z
+ 2024-12-01T01:36:33Z
Daily Trending of Module Management System in GitHub
\ No newline at end of file
diff --git a/module-management-system/monthly/index.xml b/module-management-system/monthly/index.xml
new file mode 100644
index 00000000000..4b773a294e1
--- /dev/null
+++ b/module-management-system/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Module Management System Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:01Z
+ Monthly Trending of Module Management System in GitHub
+
+
\ No newline at end of file
diff --git a/module-management-system/weekly/index.xml b/module-management-system/weekly/index.xml
new file mode 100644
index 00000000000..af39761c538
--- /dev/null
+++ b/module-management-system/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Module Management System Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:20Z
+ Weekly Trending of Module Management System in GitHub
+
+
\ No newline at end of file
diff --git a/monkey-c/daily/index.xml b/monkey-c/daily/index.xml
index ef3d498d8ae..0bc9a3bd6d1 100644
--- a/monkey-c/daily/index.xml
+++ b/monkey-c/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Monkey C Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:18Z
+ 2024-12-01T01:36:34Z
Daily Trending of Monkey C in GitHub
\ No newline at end of file
diff --git a/monkey-c/monthly/index.xml b/monkey-c/monthly/index.xml
new file mode 100644
index 00000000000..4fb8a5a9d03
--- /dev/null
+++ b/monkey-c/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Monkey C Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:03Z
+ Monthly Trending of Monkey C in GitHub
+
+
\ No newline at end of file
diff --git a/monkey-c/weekly/index.xml b/monkey-c/weekly/index.xml
new file mode 100644
index 00000000000..2fd6b3bc0f8
--- /dev/null
+++ b/monkey-c/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Monkey C Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:22Z
+ Weekly Trending of Monkey C in GitHub
+
+
\ No newline at end of file
diff --git a/monkey/daily/index.xml b/monkey/daily/index.xml
index b6aa4e808e3..a4b79dc885d 100644
--- a/monkey/daily/index.xml
+++ b/monkey/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Monkey Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:17Z
+ 2024-12-01T01:36:35Z
Daily Trending of Monkey in GitHub
\ No newline at end of file
diff --git a/monkey/monthly/index.xml b/monkey/monthly/index.xml
new file mode 100644
index 00000000000..ba1e74b3d38
--- /dev/null
+++ b/monkey/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Monkey Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:04Z
+ Monthly Trending of Monkey in GitHub
+
+
\ No newline at end of file
diff --git a/monkey/weekly/index.xml b/monkey/weekly/index.xml
new file mode 100644
index 00000000000..6b33fb266cf
--- /dev/null
+++ b/monkey/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Monkey Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:22Z
+ Weekly Trending of Monkey in GitHub
+
+
\ No newline at end of file
diff --git a/moocode/daily/index.xml b/moocode/daily/index.xml
index c92425a7547..82184ebd041 100644
--- a/moocode/daily/index.xml
+++ b/moocode/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Moocode Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:17Z
+ 2024-12-01T01:36:35Z
Daily Trending of Moocode in GitHub
\ No newline at end of file
diff --git a/moocode/monthly/index.xml b/moocode/monthly/index.xml
new file mode 100644
index 00000000000..484168d348e
--- /dev/null
+++ b/moocode/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Moocode Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:03Z
+ Monthly Trending of Moocode in GitHub
+
+
\ No newline at end of file
diff --git a/moocode/weekly/index.xml b/moocode/weekly/index.xml
new file mode 100644
index 00000000000..7673f599599
--- /dev/null
+++ b/moocode/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Moocode Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:21Z
+ Weekly Trending of Moocode in GitHub
+
+
\ No newline at end of file
diff --git a/moonscript/daily/index.xml b/moonscript/daily/index.xml
index 011fdae4658..a276c5655cd 100644
--- a/moonscript/daily/index.xml
+++ b/moonscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MoonScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:19Z
+ 2024-12-01T01:36:37Z
Daily Trending of MoonScript in GitHub
\ No newline at end of file
diff --git a/moonscript/monthly/index.xml b/moonscript/monthly/index.xml
new file mode 100644
index 00000000000..6d5bb6782fe
--- /dev/null
+++ b/moonscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MoonScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:05Z
+ Monthly Trending of MoonScript in GitHub
+
+
\ No newline at end of file
diff --git a/moonscript/weekly/index.xml b/moonscript/weekly/index.xml
new file mode 100644
index 00000000000..fae08758806
--- /dev/null
+++ b/moonscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MoonScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:23Z
+ Weekly Trending of MoonScript in GitHub
+
+
\ No newline at end of file
diff --git a/motoko/daily/index.xml b/motoko/daily/index.xml
index 898982d52c5..3806f97bab7 100644
--- a/motoko/daily/index.xml
+++ b/motoko/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Motoko Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:19Z
+ 2024-12-01T01:36:36Z
Daily Trending of Motoko in GitHub
\ No newline at end of file
diff --git a/motoko/monthly/index.xml b/motoko/monthly/index.xml
new file mode 100644
index 00000000000..7810d7ff9e9
--- /dev/null
+++ b/motoko/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Motoko Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:04Z
+ Monthly Trending of Motoko in GitHub
+
+
\ No newline at end of file
diff --git a/motoko/weekly/index.xml b/motoko/weekly/index.xml
new file mode 100644
index 00000000000..2366e8b7cc4
--- /dev/null
+++ b/motoko/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Motoko Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:24Z
+ Weekly Trending of Motoko in GitHub
+
+
\ No newline at end of file
diff --git a/motorola-68k-assembly/daily/index.xml b/motorola-68k-assembly/daily/index.xml
index 666f34bfd19..f63a8bb8fc1 100644
--- a/motorola-68k-assembly/daily/index.xml
+++ b/motorola-68k-assembly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Motorola 68K Assembly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:19Z
+ 2024-12-01T01:36:36Z
Daily Trending of Motorola 68K Assembly in GitHub
\ No newline at end of file
diff --git a/motorola-68k-assembly/monthly/index.xml b/motorola-68k-assembly/monthly/index.xml
new file mode 100644
index 00000000000..6e9081adeca
--- /dev/null
+++ b/motorola-68k-assembly/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Motorola 68K Assembly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:05Z
+ Monthly Trending of Motorola 68K Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/motorola-68k-assembly/weekly/index.xml b/motorola-68k-assembly/weekly/index.xml
new file mode 100644
index 00000000000..88c10056164
--- /dev/null
+++ b/motorola-68k-assembly/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Motorola 68K Assembly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:24Z
+ Weekly Trending of Motorola 68K Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/mql4/daily/index.xml b/mql4/daily/index.xml
index a05d8495fc5..bfdce118ec2 100644
--- a/mql4/daily/index.xml
+++ b/mql4/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MQL4 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:21Z
+ 2024-12-01T01:36:39Z
Daily Trending of MQL4 in GitHub
\ No newline at end of file
diff --git a/mql4/monthly/index.xml b/mql4/monthly/index.xml
new file mode 100644
index 00000000000..375b38756bc
--- /dev/null
+++ b/mql4/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MQL4 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:06Z
+ Monthly Trending of MQL4 in GitHub
+
+
\ No newline at end of file
diff --git a/mql4/weekly/index.xml b/mql4/weekly/index.xml
new file mode 100644
index 00000000000..9619ca2899f
--- /dev/null
+++ b/mql4/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MQL4 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:26Z
+ Weekly Trending of MQL4 in GitHub
+
+
\ No newline at end of file
diff --git a/mql5/daily/index.xml b/mql5/daily/index.xml
index 0f442e9edf4..b67456867e6 100644
--- a/mql5/daily/index.xml
+++ b/mql5/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MQL5 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:20Z
+ 2024-12-01T01:36:38Z
Daily Trending of MQL5 in GitHub
\ No newline at end of file
diff --git a/mql5/monthly/index.xml b/mql5/monthly/index.xml
new file mode 100644
index 00000000000..28ce3a96059
--- /dev/null
+++ b/mql5/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MQL5 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:07Z
+ Monthly Trending of MQL5 in GitHub
+
+
\ No newline at end of file
diff --git a/mql5/weekly/index.xml b/mql5/weekly/index.xml
new file mode 100644
index 00000000000..1796017dd90
--- /dev/null
+++ b/mql5/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MQL5 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:25Z
+ Weekly Trending of MQL5 in GitHub
+
+
\ No newline at end of file
diff --git a/mtml/daily/index.xml b/mtml/daily/index.xml
index 9b4b1f2ea89..fac0c8cc2b6 100644
--- a/mtml/daily/index.xml
+++ b/mtml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MTML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:20Z
+ 2024-12-01T01:36:38Z
Daily Trending of MTML in GitHub
\ No newline at end of file
diff --git a/mtml/monthly/index.xml b/mtml/monthly/index.xml
new file mode 100644
index 00000000000..17500793a64
--- /dev/null
+++ b/mtml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MTML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:07Z
+ Monthly Trending of MTML in GitHub
+
+
\ No newline at end of file
diff --git a/mtml/weekly/index.xml b/mtml/weekly/index.xml
new file mode 100644
index 00000000000..f12cc9608a9
--- /dev/null
+++ b/mtml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MTML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:25Z
+ Weekly Trending of MTML in GitHub
+
+
\ No newline at end of file
diff --git a/muf/daily/index.xml b/muf/daily/index.xml
index d214fa984c2..50ed9aa4a75 100644
--- a/muf/daily/index.xml
+++ b/muf/daily/index.xml
@@ -1,7 +1,7 @@
GitHub MUF Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:21Z
+ 2024-12-01T01:36:38Z
Daily Trending of MUF in GitHub
\ No newline at end of file
diff --git a/muf/monthly/index.xml b/muf/monthly/index.xml
new file mode 100644
index 00000000000..5dae165b91e
--- /dev/null
+++ b/muf/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MUF Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:06Z
+ Monthly Trending of MUF in GitHub
+
+
\ No newline at end of file
diff --git a/muf/weekly/index.xml b/muf/weekly/index.xml
new file mode 100644
index 00000000000..e0b69b4d23b
--- /dev/null
+++ b/muf/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub MUF Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:25Z
+ Weekly Trending of MUF in GitHub
+
+
\ No newline at end of file
diff --git a/mupad/daily/index.xml b/mupad/daily/index.xml
index 9542674ed7c..72dc3a3ff12 100644
--- a/mupad/daily/index.xml
+++ b/mupad/daily/index.xml
@@ -1,7 +1,7 @@
GitHub mupad Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:22Z
+ 2024-12-01T01:36:40Z
Daily Trending of mupad in GitHub
\ No newline at end of file
diff --git a/mupad/monthly/index.xml b/mupad/monthly/index.xml
new file mode 100644
index 00000000000..0dde39bbeff
--- /dev/null
+++ b/mupad/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mupad Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:08Z
+ Monthly Trending of mupad in GitHub
+
+
\ No newline at end of file
diff --git a/mupad/weekly/index.xml b/mupad/weekly/index.xml
new file mode 100644
index 00000000000..8c265333c8e
--- /dev/null
+++ b/mupad/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub mupad Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:27Z
+ Weekly Trending of mupad in GitHub
+
+
\ No newline at end of file
diff --git a/muse/daily/index.xml b/muse/daily/index.xml
index 4e96bc9562a..5c238a0a99d 100644
--- a/muse/daily/index.xml
+++ b/muse/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Muse Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:22Z
+ 2024-12-01T01:36:39Z
Daily Trending of Muse in GitHub
\ No newline at end of file
diff --git a/muse/monthly/index.xml b/muse/monthly/index.xml
new file mode 100644
index 00000000000..9f467c69f8d
--- /dev/null
+++ b/muse/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Muse Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:08Z
+ Monthly Trending of Muse in GitHub
+
+
\ No newline at end of file
diff --git a/muse/weekly/index.xml b/muse/weekly/index.xml
new file mode 100644
index 00000000000..eb5ee108698
--- /dev/null
+++ b/muse/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Muse Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:27Z
+ Weekly Trending of Muse in GitHub
+
+
\ No newline at end of file
diff --git a/mustache/daily/index.xml b/mustache/daily/index.xml
index 2abceef5b66..27b8452d154 100644
--- a/mustache/daily/index.xml
+++ b/mustache/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Mustache Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:24Z
+ 2024-12-01T01:36:41Z
Daily Trending of Mustache in GitHub
\ No newline at end of file
diff --git a/mustache/monthly/index.xml b/mustache/monthly/index.xml
new file mode 100644
index 00000000000..d3f2fdcbeff
--- /dev/null
+++ b/mustache/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mustache Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:09Z
+ Monthly Trending of Mustache in GitHub
+
+
\ No newline at end of file
diff --git a/mustache/weekly/index.xml b/mustache/weekly/index.xml
new file mode 100644
index 00000000000..b82f822fb65
--- /dev/null
+++ b/mustache/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Mustache Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:28Z
+ Weekly Trending of Mustache in GitHub
+
+
\ No newline at end of file
diff --git a/myghty/daily/index.xml b/myghty/daily/index.xml
index 1a0d6067d20..25b661d186e 100644
--- a/myghty/daily/index.xml
+++ b/myghty/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Myghty Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:22Z
+ 2024-12-01T01:36:40Z
Daily Trending of Myghty in GitHub
\ No newline at end of file
diff --git a/myghty/monthly/index.xml b/myghty/monthly/index.xml
new file mode 100644
index 00000000000..298a5985f62
--- /dev/null
+++ b/myghty/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Myghty Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:08Z
+ Monthly Trending of Myghty in GitHub
+
+
\ No newline at end of file
diff --git a/myghty/weekly/index.xml b/myghty/weekly/index.xml
new file mode 100644
index 00000000000..ac59659b8c5
--- /dev/null
+++ b/myghty/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Myghty Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:26Z
+ Weekly Trending of Myghty in GitHub
+
+
\ No newline at end of file
diff --git a/nanorc/daily/index.xml b/nanorc/daily/index.xml
index 3864bc6a4ae..f7a3b2c27f1 100644
--- a/nanorc/daily/index.xml
+++ b/nanorc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub nanorc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:25Z
+ 2024-12-01T01:36:42Z
Daily Trending of nanorc in GitHub
\ No newline at end of file
diff --git a/nanorc/monthly/index.xml b/nanorc/monthly/index.xml
new file mode 100644
index 00000000000..4af643be845
--- /dev/null
+++ b/nanorc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub nanorc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:11Z
+ Monthly Trending of nanorc in GitHub
+
+
\ No newline at end of file
diff --git a/nanorc/weekly/index.xml b/nanorc/weekly/index.xml
new file mode 100644
index 00000000000..4a7157e3537
--- /dev/null
+++ b/nanorc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub nanorc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:28Z
+ Weekly Trending of nanorc in GitHub
+
+
\ No newline at end of file
diff --git a/nasl/daily/index.xml b/nasl/daily/index.xml
index 9b7c08d2036..ed0890fcc5f 100644
--- a/nasl/daily/index.xml
+++ b/nasl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NASL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:26Z
+ 2024-12-01T01:36:42Z
Daily Trending of NASL in GitHub
\ No newline at end of file
diff --git a/nasl/monthly/index.xml b/nasl/monthly/index.xml
new file mode 100644
index 00000000000..a10fe51483b
--- /dev/null
+++ b/nasl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NASL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:10Z
+ Monthly Trending of NASL in GitHub
+
+
\ No newline at end of file
diff --git a/nasl/weekly/index.xml b/nasl/weekly/index.xml
new file mode 100644
index 00000000000..27b49cf4881
--- /dev/null
+++ b/nasl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NASL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:29Z
+ Weekly Trending of NASL in GitHub
+
+
\ No newline at end of file
diff --git a/ncl/daily/index.xml b/ncl/daily/index.xml
index d1618e4a868..0ceb005b767 100644
--- a/ncl/daily/index.xml
+++ b/ncl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NCL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:26Z
+ 2024-12-01T01:36:43Z
Daily Trending of NCL in GitHub
\ No newline at end of file
diff --git a/ncl/monthly/index.xml b/ncl/monthly/index.xml
new file mode 100644
index 00000000000..ec662d69f13
--- /dev/null
+++ b/ncl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NCL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:10Z
+ Monthly Trending of NCL in GitHub
+
+
\ No newline at end of file
diff --git a/ncl/weekly/index.xml b/ncl/weekly/index.xml
new file mode 100644
index 00000000000..486ca8d888b
--- /dev/null
+++ b/ncl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NCL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:29Z
+ Weekly Trending of NCL in GitHub
+
+
\ No newline at end of file
diff --git a/nearley/daily/index.xml b/nearley/daily/index.xml
index 6a0378c92af..9e429ec5d09 100644
--- a/nearley/daily/index.xml
+++ b/nearley/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nearley Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:28Z
+ 2024-12-01T01:36:44Z
Daily Trending of Nearley in GitHub
\ No newline at end of file
diff --git a/nearley/monthly/index.xml b/nearley/monthly/index.xml
new file mode 100644
index 00000000000..f62188fe3de
--- /dev/null
+++ b/nearley/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nearley Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:12Z
+ Monthly Trending of Nearley in GitHub
+
+
\ No newline at end of file
diff --git a/nearley/weekly/index.xml b/nearley/weekly/index.xml
new file mode 100644
index 00000000000..162632e8099
--- /dev/null
+++ b/nearley/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nearley Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:31Z
+ Weekly Trending of Nearley in GitHub
+
+
\ No newline at end of file
diff --git a/nemerle/daily/index.xml b/nemerle/daily/index.xml
index 2fa179f1da2..af5aeb98f19 100644
--- a/nemerle/daily/index.xml
+++ b/nemerle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nemerle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:27Z
+ 2024-12-01T01:36:44Z
Daily Trending of Nemerle in GitHub
\ No newline at end of file
diff --git a/nemerle/monthly/index.xml b/nemerle/monthly/index.xml
new file mode 100644
index 00000000000..790da6a096e
--- /dev/null
+++ b/nemerle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nemerle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:11Z
+ Monthly Trending of Nemerle in GitHub
+
+
\ No newline at end of file
diff --git a/nemerle/weekly/index.xml b/nemerle/weekly/index.xml
new file mode 100644
index 00000000000..5f2c1a59348
--- /dev/null
+++ b/nemerle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nemerle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:30Z
+ Weekly Trending of Nemerle in GitHub
+
+
\ No newline at end of file
diff --git a/neon/daily/index.xml b/neon/daily/index.xml
index 27d0b1694ff..442addf2a1d 100644
--- a/neon/daily/index.xml
+++ b/neon/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NEON Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:27Z
+ 2024-12-01T01:36:44Z
Daily Trending of NEON in GitHub
\ No newline at end of file
diff --git a/neon/monthly/index.xml b/neon/monthly/index.xml
new file mode 100644
index 00000000000..9a273ccdf05
--- /dev/null
+++ b/neon/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NEON Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:12Z
+ Monthly Trending of NEON in GitHub
+
+
\ No newline at end of file
diff --git a/neon/weekly/index.xml b/neon/weekly/index.xml
new file mode 100644
index 00000000000..db627f2537b
--- /dev/null
+++ b/neon/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NEON Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:30Z
+ Weekly Trending of NEON in GitHub
+
+
\ No newline at end of file
diff --git a/nesc/daily/index.xml b/nesc/daily/index.xml
index 98b0bfd473f..5afb40243b7 100644
--- a/nesc/daily/index.xml
+++ b/nesc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub nesC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:27Z
+ 2024-12-01T01:36:43Z
Daily Trending of nesC in GitHub
\ No newline at end of file
diff --git a/nesc/monthly/index.xml b/nesc/monthly/index.xml
new file mode 100644
index 00000000000..57ff3ca096a
--- /dev/null
+++ b/nesc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub nesC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:12Z
+ Monthly Trending of nesC in GitHub
+
+
\ No newline at end of file
diff --git a/nesc/weekly/index.xml b/nesc/weekly/index.xml
new file mode 100644
index 00000000000..ce4f5276a30
--- /dev/null
+++ b/nesc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub nesC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:31Z
+ Weekly Trending of nesC in GitHub
+
+
\ No newline at end of file
diff --git a/netlinx+erb/daily/index.xml b/netlinx+erb/daily/index.xml
index 0372d0b6e99..1326fc206dc 100644
--- a/netlinx+erb/daily/index.xml
+++ b/netlinx+erb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NetLinx+ERB Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:28Z
+ 2024-12-01T01:36:46Z
Daily Trending of NetLinx+ERB in GitHub
\ No newline at end of file
diff --git a/netlinx+erb/monthly/index.xml b/netlinx+erb/monthly/index.xml
new file mode 100644
index 00000000000..5388a0e0d19
--- /dev/null
+++ b/netlinx+erb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLinx+ERB Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:13Z
+ Monthly Trending of NetLinx+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/netlinx+erb/weekly/index.xml b/netlinx+erb/weekly/index.xml
new file mode 100644
index 00000000000..c331c6ff13a
--- /dev/null
+++ b/netlinx+erb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLinx+ERB Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:32Z
+ Weekly Trending of NetLinx+ERB in GitHub
+
+
\ No newline at end of file
diff --git a/netlinx/daily/index.xml b/netlinx/daily/index.xml
index a0ce8b91564..91ad1f81979 100644
--- a/netlinx/daily/index.xml
+++ b/netlinx/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NetLinx Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:29Z
+ 2024-12-01T01:36:45Z
Daily Trending of NetLinx in GitHub
\ No newline at end of file
diff --git a/netlinx/monthly/index.xml b/netlinx/monthly/index.xml
new file mode 100644
index 00000000000..e09173997f6
--- /dev/null
+++ b/netlinx/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLinx Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:14Z
+ Monthly Trending of NetLinx in GitHub
+
+
\ No newline at end of file
diff --git a/netlinx/weekly/index.xml b/netlinx/weekly/index.xml
new file mode 100644
index 00000000000..ce54d70cfcc
--- /dev/null
+++ b/netlinx/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLinx Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:32Z
+ Weekly Trending of NetLinx in GitHub
+
+
\ No newline at end of file
diff --git a/netlogo/daily/index.xml b/netlogo/daily/index.xml
index 6d95bb25b19..208aa5d6521 100644
--- a/netlogo/daily/index.xml
+++ b/netlogo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NetLogo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:28Z
+ 2024-12-01T01:36:46Z
Daily Trending of NetLogo in GitHub
\ No newline at end of file
diff --git a/netlogo/monthly/index.xml b/netlogo/monthly/index.xml
new file mode 100644
index 00000000000..0d303b119bf
--- /dev/null
+++ b/netlogo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLogo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:14Z
+ Monthly Trending of NetLogo in GitHub
+
+
\ No newline at end of file
diff --git a/netlogo/weekly/index.xml b/netlogo/weekly/index.xml
new file mode 100644
index 00000000000..399cd0b4429
--- /dev/null
+++ b/netlogo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NetLogo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:32Z
+ Weekly Trending of NetLogo in GitHub
+
+
\ No newline at end of file
diff --git a/newlisp/daily/index.xml b/newlisp/daily/index.xml
index d75b94872ca..4471f035f6b 100644
--- a/newlisp/daily/index.xml
+++ b/newlisp/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NewLisp Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:29Z
+ 2024-12-01T01:36:45Z
Daily Trending of NewLisp in GitHub
\ No newline at end of file
diff --git a/newlisp/monthly/index.xml b/newlisp/monthly/index.xml
new file mode 100644
index 00000000000..b848cc66d2a
--- /dev/null
+++ b/newlisp/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NewLisp Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:13Z
+ Monthly Trending of NewLisp in GitHub
+
+
\ No newline at end of file
diff --git a/newlisp/weekly/index.xml b/newlisp/weekly/index.xml
new file mode 100644
index 00000000000..459036dab29
--- /dev/null
+++ b/newlisp/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NewLisp Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:33Z
+ Weekly Trending of NewLisp in GitHub
+
+
\ No newline at end of file
diff --git a/nextflow/daily/index.xml b/nextflow/daily/index.xml
index 97ddae26a4c..eaaab9d931f 100644
--- a/nextflow/daily/index.xml
+++ b/nextflow/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nextflow Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:30Z
+ 2024-12-01T01:36:47Z
Daily Trending of Nextflow in GitHub
\ No newline at end of file
diff --git a/nextflow/monthly/index.xml b/nextflow/monthly/index.xml
new file mode 100644
index 00000000000..c9d75903c52
--- /dev/null
+++ b/nextflow/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nextflow Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:16Z
+ Monthly Trending of Nextflow in GitHub
+
+
\ No newline at end of file
diff --git a/nextflow/weekly/index.xml b/nextflow/weekly/index.xml
new file mode 100644
index 00000000000..5709a723ca6
--- /dev/null
+++ b/nextflow/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Nextflow Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:35Z
+ Weekly Trending of Nextflow in GitHub
+
+
+ nf-core/rnavar
+ 2024-12-01T01:47:35Z
+ tag:github.com,2024-12-01:/nf-core/rnavar
+
+ <p>gatk4 RNA variant calling pipeline</p><hr>
+
+
+ nf-core/clipseq
+ 2024-12-01T01:47:35Z
+ tag:github.com,2024-12-01:/nf-core/clipseq
+
+ <p>CLIP sequencing analysis pipeline for QC, pre-mapping, genome mapping, UMI deduplication, and multiple peak-calling options.</p><hr>
+
+
+ nf-core/spatialvi
+ 2024-12-01T01:47:35Z
+ tag:github.com,2024-12-01:/nf-core/spatialvi
+
+ <p>Pipeline for processing spatially-resolved gene counts with spatial coordinates and image data. Designed for 10x Genomics Visium transcriptomics.</p><hr>
+
+
\ No newline at end of file
diff --git a/nginx/daily/index.xml b/nginx/daily/index.xml
index adb3e3c50a1..9019b1adaf5 100644
--- a/nginx/daily/index.xml
+++ b/nginx/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nginx Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:30Z
+ 2024-12-01T01:36:47Z
Daily Trending of Nginx in GitHub
\ No newline at end of file
diff --git a/nginx/monthly/index.xml b/nginx/monthly/index.xml
new file mode 100644
index 00000000000..84b5eb497b9
--- /dev/null
+++ b/nginx/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nginx Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:15Z
+ Monthly Trending of Nginx in GitHub
+
+
\ No newline at end of file
diff --git a/nginx/weekly/index.xml b/nginx/weekly/index.xml
new file mode 100644
index 00000000000..174aadc3d68
--- /dev/null
+++ b/nginx/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nginx Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:34Z
+ Weekly Trending of Nginx in GitHub
+
+
\ No newline at end of file
diff --git a/nim/daily/index.xml b/nim/daily/index.xml
index 25b9a4a236c..3f49890edfa 100644
--- a/nim/daily/index.xml
+++ b/nim/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nim Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:31Z
+ 2024-12-01T01:36:48Z
Daily Trending of Nim in GitHub
\ No newline at end of file
diff --git a/nim/monthly/index.xml b/nim/monthly/index.xml
new file mode 100644
index 00000000000..c55e18dba79
--- /dev/null
+++ b/nim/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nim Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:15Z
+ Monthly Trending of Nim in GitHub
+
+
\ No newline at end of file
diff --git a/nim/weekly/index.xml b/nim/weekly/index.xml
new file mode 100644
index 00000000000..055f25a61f1
--- /dev/null
+++ b/nim/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nim Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:34Z
+ Weekly Trending of Nim in GitHub
+
+
\ No newline at end of file
diff --git a/ninja/daily/index.xml b/ninja/daily/index.xml
index 6affef70eb2..4a5d2112dac 100644
--- a/ninja/daily/index.xml
+++ b/ninja/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ninja Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:30Z
+ 2024-12-01T01:36:47Z
Daily Trending of Ninja in GitHub
\ No newline at end of file
diff --git a/ninja/monthly/index.xml b/ninja/monthly/index.xml
new file mode 100644
index 00000000000..c4e953ab26c
--- /dev/null
+++ b/ninja/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ninja Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:15Z
+ Monthly Trending of Ninja in GitHub
+
+
\ No newline at end of file
diff --git a/ninja/weekly/index.xml b/ninja/weekly/index.xml
new file mode 100644
index 00000000000..e1bbe3de1fc
--- /dev/null
+++ b/ninja/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ninja Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:33Z
+ Weekly Trending of Ninja in GitHub
+
+
\ No newline at end of file
diff --git a/nit/daily/index.xml b/nit/daily/index.xml
index 8cd394d3d02..421a1ffc54e 100644
--- a/nit/daily/index.xml
+++ b/nit/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nit Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:32Z
+ 2024-12-01T01:36:49Z
Daily Trending of Nit in GitHub
\ No newline at end of file
diff --git a/nit/monthly/index.xml b/nit/monthly/index.xml
new file mode 100644
index 00000000000..0390b40ce70
--- /dev/null
+++ b/nit/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nit Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:17Z
+ Monthly Trending of Nit in GitHub
+
+
\ No newline at end of file
diff --git a/nit/weekly/index.xml b/nit/weekly/index.xml
new file mode 100644
index 00000000000..2bfcb4ab60c
--- /dev/null
+++ b/nit/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nit Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:36Z
+ Weekly Trending of Nit in GitHub
+
+
\ No newline at end of file
diff --git a/nix/daily/index.xml b/nix/daily/index.xml
index 59b4c2a7d1d..89d2cd68708 100644
--- a/nix/daily/index.xml
+++ b/nix/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nix Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:35Z
+ 2024-12-01T01:36:51Z
Daily Trending of Nix in GitHub
\ No newline at end of file
diff --git a/nix/monthly/index.xml b/nix/monthly/index.xml
new file mode 100644
index 00000000000..4fdc0739f73
--- /dev/null
+++ b/nix/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Nix Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:21Z
+ Monthly Trending of Nix in GitHub
+
+
+ MarceColl/zen-browser-flake
+ 2024-12-01T01:56:21Z
+ tag:github.com,2024-12-01:/MarceColl/zen-browser-flake
+
+ <p>Nix Flake for the Zen Browser</p><hr>
+
+
+ oddlama/nix-topology
+ 2024-12-01T01:56:21Z
+ tag:github.com,2024-12-01:/oddlama/nix-topology
+
+ <p>🍁 Generate infrastructure and network diagrams directly from your NixOS configurations</p><hr>
+
+
+ lilyinstarlight/nixos-cosmic
+ 2024-12-01T01:56:21Z
+ tag:github.com,2024-12-01:/lilyinstarlight/nixos-cosmic
+
+ <p>Flake for using COSMIC on NixOS</p><hr>
+
+
\ No newline at end of file
diff --git a/nix/weekly/index.xml b/nix/weekly/index.xml
new file mode 100644
index 00000000000..ce352192f56
--- /dev/null
+++ b/nix/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nix Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:41Z
+ Weekly Trending of Nix in GitHub
+
+
\ No newline at end of file
diff --git a/nl/daily/index.xml b/nl/daily/index.xml
index aacb467354b..009060809c0 100644
--- a/nl/daily/index.xml
+++ b/nl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:32Z
+ 2024-12-01T01:36:49Z
Daily Trending of NL in GitHub
\ No newline at end of file
diff --git a/nl/monthly/index.xml b/nl/monthly/index.xml
new file mode 100644
index 00000000000..30265389779
--- /dev/null
+++ b/nl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:16Z
+ Monthly Trending of NL in GitHub
+
+
\ No newline at end of file
diff --git a/nl/weekly/index.xml b/nl/weekly/index.xml
new file mode 100644
index 00000000000..805c4de2996
--- /dev/null
+++ b/nl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:35Z
+ Weekly Trending of NL in GitHub
+
+
\ No newline at end of file
diff --git a/npm-config/daily/index.xml b/npm-config/daily/index.xml
index fa716a85905..eb6838bd6b5 100644
--- a/npm-config/daily/index.xml
+++ b/npm-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NPM Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:36Z
+ 2024-12-01T01:36:52Z
Daily Trending of NPM Config in GitHub
\ No newline at end of file
diff --git a/npm-config/monthly/index.xml b/npm-config/monthly/index.xml
new file mode 100644
index 00000000000..e233cc9b7ef
--- /dev/null
+++ b/npm-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NPM Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:22Z
+ Monthly Trending of NPM Config in GitHub
+
+
\ No newline at end of file
diff --git a/npm-config/weekly/index.xml b/npm-config/weekly/index.xml
new file mode 100644
index 00000000000..fba05aa9f5e
--- /dev/null
+++ b/npm-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NPM Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:43Z
+ Weekly Trending of NPM Config in GitHub
+
+
\ No newline at end of file
diff --git a/nsis/daily/index.xml b/nsis/daily/index.xml
index 7c84d270156..7a68780be6e 100644
--- a/nsis/daily/index.xml
+++ b/nsis/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NSIS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:37Z
+ 2024-12-01T01:36:53Z
Daily Trending of NSIS in GitHub
\ No newline at end of file
diff --git a/nsis/monthly/index.xml b/nsis/monthly/index.xml
new file mode 100644
index 00000000000..e83ca82a968
--- /dev/null
+++ b/nsis/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NSIS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:23Z
+ Monthly Trending of NSIS in GitHub
+
+
\ No newline at end of file
diff --git a/nsis/weekly/index.xml b/nsis/weekly/index.xml
new file mode 100644
index 00000000000..d4ad90ac8dd
--- /dev/null
+++ b/nsis/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NSIS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:43Z
+ Weekly Trending of NSIS in GitHub
+
+
\ No newline at end of file
diff --git a/nu/daily/index.xml b/nu/daily/index.xml
index 5319647c4e4..6ba7399db53 100644
--- a/nu/daily/index.xml
+++ b/nu/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nu Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:36Z
+ 2024-12-01T01:36:53Z
Daily Trending of Nu in GitHub
\ No newline at end of file
diff --git a/nu/monthly/index.xml b/nu/monthly/index.xml
new file mode 100644
index 00000000000..1bb9181504c
--- /dev/null
+++ b/nu/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nu Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:22Z
+ Monthly Trending of Nu in GitHub
+
+
\ No newline at end of file
diff --git a/nu/weekly/index.xml b/nu/weekly/index.xml
new file mode 100644
index 00000000000..4a5fc995c78
--- /dev/null
+++ b/nu/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nu Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:42Z
+ Weekly Trending of Nu in GitHub
+
+
\ No newline at end of file
diff --git a/numpy/daily/index.xml b/numpy/daily/index.xml
index 576ee1d000d..a789bed2548 100644
--- a/numpy/daily/index.xml
+++ b/numpy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NumPy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:38Z
+ 2024-12-01T01:36:54Z
Daily Trending of NumPy in GitHub
\ No newline at end of file
diff --git a/numpy/monthly/index.xml b/numpy/monthly/index.xml
new file mode 100644
index 00000000000..0095e6ea34a
--- /dev/null
+++ b/numpy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NumPy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:24Z
+ Monthly Trending of NumPy in GitHub
+
+
\ No newline at end of file
diff --git a/numpy/weekly/index.xml b/numpy/weekly/index.xml
new file mode 100644
index 00000000000..e489b9c23dd
--- /dev/null
+++ b/numpy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NumPy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:44Z
+ Weekly Trending of NumPy in GitHub
+
+
\ No newline at end of file
diff --git a/nunjucks/daily/index.xml b/nunjucks/daily/index.xml
index da76573d533..0cd40102fa4 100644
--- a/nunjucks/daily/index.xml
+++ b/nunjucks/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Nunjucks Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:38Z
+ 2024-12-01T01:36:55Z
Daily Trending of Nunjucks in GitHub
\ No newline at end of file
diff --git a/nunjucks/monthly/index.xml b/nunjucks/monthly/index.xml
new file mode 100644
index 00000000000..8d6ed55542f
--- /dev/null
+++ b/nunjucks/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nunjucks Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:24Z
+ Monthly Trending of Nunjucks in GitHub
+
+
\ No newline at end of file
diff --git a/nunjucks/weekly/index.xml b/nunjucks/weekly/index.xml
new file mode 100644
index 00000000000..012aa7f3484
--- /dev/null
+++ b/nunjucks/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Nunjucks Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:45Z
+ Weekly Trending of Nunjucks in GitHub
+
+
\ No newline at end of file
diff --git a/nwscript/daily/index.xml b/nwscript/daily/index.xml
index 477d737b72b..0d5d785e2c7 100644
--- a/nwscript/daily/index.xml
+++ b/nwscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub NWScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:37Z
+ 2024-12-01T01:36:54Z
Daily Trending of NWScript in GitHub
\ No newline at end of file
diff --git a/nwscript/monthly/index.xml b/nwscript/monthly/index.xml
new file mode 100644
index 00000000000..b7aed31c550
--- /dev/null
+++ b/nwscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NWScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:23Z
+ Monthly Trending of NWScript in GitHub
+
+
\ No newline at end of file
diff --git a/nwscript/weekly/index.xml b/nwscript/weekly/index.xml
new file mode 100644
index 00000000000..6eb2bf7b18e
--- /dev/null
+++ b/nwscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub NWScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:44Z
+ Weekly Trending of NWScript in GitHub
+
+
\ No newline at end of file
diff --git a/objdump/daily/index.xml b/objdump/daily/index.xml
index 231ea551199..207f0864075 100644
--- a/objdump/daily/index.xml
+++ b/objdump/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ObjDump Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:41Z
+ 2024-12-01T01:36:57Z
Daily Trending of ObjDump in GitHub
\ No newline at end of file
diff --git a/objdump/monthly/index.xml b/objdump/monthly/index.xml
new file mode 100644
index 00000000000..9feff726f3b
--- /dev/null
+++ b/objdump/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ObjDump Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:27Z
+ Monthly Trending of ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/objdump/weekly/index.xml b/objdump/weekly/index.xml
new file mode 100644
index 00000000000..550b4d61827
--- /dev/null
+++ b/objdump/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ObjDump Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:48Z
+ Weekly Trending of ObjDump in GitHub
+
+
\ No newline at end of file
diff --git a/object-data-instance-notation/daily/index.xml b/object-data-instance-notation/daily/index.xml
index da8e1249b97..5efc9d23ca9 100644
--- a/object-data-instance-notation/daily/index.xml
+++ b/object-data-instance-notation/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Object Data Instance Notation Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:41Z
+ 2024-12-01T01:36:57Z
Daily Trending of Object Data Instance Notation in GitHub
\ No newline at end of file
diff --git a/object-data-instance-notation/monthly/index.xml b/object-data-instance-notation/monthly/index.xml
new file mode 100644
index 00000000000..0af95217aa2
--- /dev/null
+++ b/object-data-instance-notation/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Object Data Instance Notation Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:27Z
+ Monthly Trending of Object Data Instance Notation in GitHub
+
+
\ No newline at end of file
diff --git a/object-data-instance-notation/weekly/index.xml b/object-data-instance-notation/weekly/index.xml
new file mode 100644
index 00000000000..b23450794c8
--- /dev/null
+++ b/object-data-instance-notation/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Object Data Instance Notation Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:47Z
+ Weekly Trending of Object Data Instance Notation in GitHub
+
+
\ No newline at end of file
diff --git a/objective-c++/daily/index.xml b/objective-c++/daily/index.xml
index 87456716752..d0502f447a9 100644
--- a/objective-c++/daily/index.xml
+++ b/objective-c++/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Objective-C++ Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:46Z
+ 2024-12-01T01:37:03Z
Daily Trending of Objective-C++ in GitHub
\ No newline at end of file
diff --git a/objective-c++/monthly/index.xml b/objective-c++/monthly/index.xml
new file mode 100644
index 00000000000..d5ce922be9e
--- /dev/null
+++ b/objective-c++/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Objective-C++ Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:34Z
+ Monthly Trending of Objective-C++ in GitHub
+
+
\ No newline at end of file
diff --git a/objective-c++/weekly/index.xml b/objective-c++/weekly/index.xml
new file mode 100644
index 00000000000..98dc11180e3
--- /dev/null
+++ b/objective-c++/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Objective-C++ Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:54Z
+ Weekly Trending of Objective-C++ in GitHub
+
+
\ No newline at end of file
diff --git a/objective-c/daily/index.xml b/objective-c/daily/index.xml
index 87e9d356962..af95b592fc5 100644
--- a/objective-c/daily/index.xml
+++ b/objective-c/daily/index.xml
@@ -1,14 +1,14 @@
GitHub Objective-C Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:42Z
+ 2024-12-01T01:36:59Z
Daily Trending of Objective-C in GitHub
- dmarcotte/easy-move-resize
- 2024-11-30T01:33:42Z
- tag:github.com,2024-11-30:/dmarcotte/easy-move-resize
-
- <p>Adds "modifier key + mouse drag" move and resize to OSX</p><hr><h1><img src="https://raw.githubusercontent.com/dmarcotte/easy-move-resize/main/easy-move-resize/Images.xcassets/AppIcon.appiconset/icon_32x32.png" alt="icon"> Easy Move+Resize</h1>
<p>Adds easy <code>modifier key + mouse drag</code> move and resize to OSX</p>
<h2>Usage</h2>
<p><strong>Easy Move+Resize</strong> is based on behavior found in many X11/Linux window managers</p>
<p><img src="https://raw.githubusercontent.com/dmarcotte/easy-move-resize/main/asset-sources/doc-img/menu.png" alt="Menu"></p>
<ul>
<li><code>Cmd + Ctrl + Left Mouse</code> anywhere inside a window, then drag to <em><strong>move</strong></em>.</li>
<li><code>Cmd + Ctrl + Right Mouse</code> anywhere inside a window, then drag to <em><strong>resize</strong></em>,
<ul>
<li>The resize direction is determined by which region of the window is clicked. <em>i.e.</em> a right-click in roughly the top-left corner of a window will act as if you grabbed the top left corner, whereas a right-click in roughly the top-center of a window will act as if you grabbed the top of the window.</li>
<li>To use the middle mouse button as the resize modifier, select the <code>Middle Click resize</code> menu item.</li>
</ul> </li>
<li>The choice of modifier keys to hold down to activate dragging or resizing can be customized by toggling the appropriate modifier key name in the application icon menu.
<ul>
<li>Click the menu item to toggle it.</li>
<li>All keys toggled to selected must be held down for activation.</li>
</ul> </li>
<li>Behavior can be disabled by toggling the <code>Disabled</code> item in the application icon menu.</li>
<li>If you are dragging or resizing a window in the background and want it to rise to the top, select the <code>Bring Window to Front</code> menu item.</li>
<li>To restore application settings, select the <code>Reset to Defaults</code> menu item.</li>
<li>To disable for a particular app, select <code>Disable for ...</code> from the menu after using <strong>Easy Move+Resize</strong> on that app.</li>
</ul>
<h2>Installation</h2>
<h3>brew</h3>
<pre><code class="language-sh">brew install --cask easy-move-plus-resize
</code></pre>
<h3>manually</h3>
<ul>
<li>Grab the latest version from the <a href="https://github.com/dmarcotte/easy-move-resize/releases">Releases page</a></li>
<li>Unzip and run!</li>
</ul>
<h3>troubleshooting</h3>
<ul>
<li>If MacOS refuses to launch <strong>Easy Move+Resize</strong> because it "cannot check it for malicious software": <a href="https://github.com/dmarcotte/easy-move-resize/issues/84#issuecomment-1184946746">see here</a></li>
<li>If Accessibility permission for <strong>Easy Move+Resize</strong> is not working: <a href="https://github.com/dmarcotte/easy-move-resize/issues/79#issuecomment-1109070242">see here</a></li>
</ul>
<h2>Contributing</h2>
<p><a href="https://raw.githubusercontent.com/dmarcotte/easy-move-resize/main/contributing.md">Contributions</a> welcome!</p>
<h2>Release process</h2>
<ul>
<li>Choose a new version number following <a href="https://semver.org">semantic versioning guidelines</a></li>
<li>Update the version number in <a href="https://raw.githubusercontent.com/dmarcotte/easy-move-resize/main/easy-move-resize/easy-move-resize-Info.plist"><code>easy-move-resize/easy-move-resize-Info.plist</code></a>, (<a href="https://github.com/dmarcotte/easy-move-resize/commit/18d759dec2caf7a33b0625c17c181a195191bc92">example</a>)</li>
<li>Commit and push the version number update</li>
<li><code>git tag <chosen version number></code></li>
<li><code>git push origin --tags</code></li>
<li>In XCode, choose <code>Product->Archive</code></li>
<li>Click "Distribute App", select "Copy App", "Next", then "Export"</li>
<li>In a shell, navigate to the directory created, then:</li>
<li><code>zip -r Easy.Move+Resize.app.zip Easy\ Move+Resize.app</code></li>
<li>Upload the resulting zip file to the appropriate tag on the <a href="https://github.com/dmarcotte/easy-move-resize/releases">Releases</a> page</li>
</ul>
+ datatheorem/TrustKit
+ 2024-12-01T01:36:59Z
+ tag:github.com,2024-12-01:/datatheorem/TrustKit
+
+ <p>Easy SSL pinning validation and reporting for iOS, macOS, tvOS and watchOS.</p><hr><h1>TrustKit</h1>
<p><a href="https://app.bitrise.io/app/fe29405fb90f94ea"><img src="https://app.bitrise.io/app/fe29405fb90f94ea/status.svg?token=TJ3o4dhSWa--0ZlJT7FV1A" alt="Build Status"></a> <a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a> <a href="https://cocoapods.org/pods/TrustKit"><img src="https://img.shields.io/cocoapods/v/TrustKit.svg?style=flat" alt="Version Status"></a> <a href="https://cocoapods.org/pods/TrustKit"><img src="https://img.shields.io/cocoapods/p/TrustKit.svg?style=flat" alt="Platform"></a> <a href="https://en.wikipedia.org/wiki/MIT_License"><img src="https://img.shields.io/cocoapods/l/TrustKit.svg?style=flat" alt="License MIT"></a> <a href="https://gitter.im/TrustKit/Lobby"><img src="https://badges.gitter.im/datatheorem/gitter.png" alt="Gitter chat"></a></p>
<p><strong>TrustKit</strong> is an open source framework that makes it easy to deploy SSL public key pinning and reporting in any iOS 12+, macOS 10.13+, tvOS 12+ or watchOS 4+ App; it supports both Swift and Objective-C Apps.</p>
<p>If you need SSL pinning/reporting in your Android App. we have also released <strong>TrustKit for Android</strong> at <a href="https://github.com/datatheorem/TrustKit-Android">https://github.com/datatheorem/TrustKit-Android</a>.</p>
<h2>Overview</h2>
<p><strong>TrustKit</strong> provides the following features:</p>
<ul>
<li>Simple API to configure an SSL pinning policy and enforce it within an App. The policy settings are heavily based on the <a href="https://tools.ietf.org/html/rfc7469">HTTP Public Key Pinning specification</a>.</li>
<li>Sane implementation by pinning the certificate's Subject Public Key Info, <a href="https://www.imperialviolet.org/2011/05/04/pinning.html">as opposed to the certificate itself or the public key bits</a>.</li>
<li>Reporting mechanism to notify a server about pinning validation failures happening within the App, when an unexpected certificate chain is detected. This is similar to the <em>report-uri</em> directive described in the HPKP specification. The reporting mechanism can also be customized within the App by leveraging pin validation notifications sent by TrustKit.</li>
<li>Auto-pinning functionality by swizzling the App's <em>NSURLConnection</em> and <em>NSURLSession</em> delegates in order to automatically add pinning validation to the App's HTTPS connections; this allows deploying <strong>TrustKit</strong> without even modifying the App's source code.</li>
</ul>
<h2>Getting Started</h2>
<ul>
<li>Read the <a href="https://github.com/datatheorem/TrustKit/raw/master/docs/getting-started.md">Getting Started</a> guide.</li>
<li>Check out the <a href="https://datatheorem.github.io/TrustKit/documentation">API documentation</a>.</li>
<li>TrustKit was initially released at <a href="https://github.com/datatheorem/TrustKit/raw/master/docs/TrustKit-BH2015.pdf">Black Hat USA 2015</a> and was also featured on <a href="https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/">PayPal's engineering blog</a>.</li>
</ul>
<h2>Sample Usage</h2>
<p>Deploying SSL pinning in the App requires initializing <strong>TrustKit</strong> with a pinning policy (domains, Subject Public Key Info hashes, and additional settings).</p>
<p>The policy can be configured within the App's <code>Info.plist</code>:</p>
<p><img src="https://datatheorem.github.io/TrustKit/images/linking3_dynamic.png" alt="Info.plist policy"></p>
<p>Alternatively, the pinning policy can be set programmatically:</p>
<pre><code class="language-objc"> NSDictionary *trustKitConfig =
@{
kTSKSwizzleNetworkDelegates: @NO,
kTSKPinnedDomains : @{
@"www.datatheorem.com" : @{
kTSKExpirationDate: @"2017-12-01",
kTSKPublicKeyHashes : @[
@"HXXQgxueCIU5TTLHob/bPbwcKOKw6DkfsTWYHbxbqTY=",
@"0SDf3cRToyZJaMsoS17oF72VMavLxj/N7WBNasNuiR8="
],
kTSKEnforcePinning : @NO,
},
@"yahoo.com" : @{
kTSKPublicKeyHashes : @[
@"TQEtdMbmwFgYUifM4LDF+xgEtd0z69mPGmkp014d6ZY=",
@"rFjc3wG7lTZe43zeYTvPq8k4xdDEutCmIhI5dn4oCeE=",
],
kTSKIncludeSubdomains : @YES
}
}};
[TrustKit initSharedInstanceWithConfiguration:trustKitConfig];
</code></pre>
<p>The policy can also be set programmatically in Swift Apps:</p>
<pre><code class="language-swift"> let trustKitConfig = [
kTSKSwizzleNetworkDelegates: false,
kTSKPinnedDomains: [
"yahoo.com": [
kTSKExpirationDate: "2017-12-01",
kTSKPublicKeyHashes: [
"JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg=",
"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="
],]]] as [String : Any]
TrustKit.initSharedInstance(withConfiguration:trustKitConfig)
</code></pre>
<p>After TrustKit has been initialized, a <a href="https://datatheorem.github.io/TrustKit/documentation/Classes/TSKPinningValidator.html"><code>TSKPinningValidator</code> instance</a> can be retrieved from the TrustKit singleton, and can be used to perform SSL pinning validation in the App's network delegates. For example in an NSURLSessionDelegate:</p>
<pre><code class="language-objc">- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
{
TSKPinningValidator *pinningValidator = [[TrustKit sharedInstance] pinningValidator];
// Pass the authentication challenge to the validator; if the validation fails, the connection will be blocked
if (![pinningValidator handleChallenge:challenge completionHandler:completionHandler])
{
// TrustKit did not handle this challenge: perhaps it was not for server trust
// or the domain was not pinned. Fall back to the default behavior
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
}
</code></pre>
<p>For more information, see the <a href="https://github.com/datatheorem/TrustKit/raw/master/docs/getting-started.md">Getting Started</a> guide.</p>
<h2>Credits</h2>
<p><strong>TrustKit</strong> is a joint-effort between the mobile teams at Data Theorem and Yahoo. See <code>AUTHORS</code> for details.</p>
<h2>License</h2>
<p><strong>TrustKit</strong> is released under the MIT license. See <code>LICENSE</code> for details.</p>
\ No newline at end of file
diff --git a/objective-c/monthly/index.xml b/objective-c/monthly/index.xml
new file mode 100644
index 00000000000..04d00a7fcc5
--- /dev/null
+++ b/objective-c/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Objective-C Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:29Z
+ Monthly Trending of Objective-C in GitHub
+
+
+ SAP/macOS-enterprise-privileges
+ 2024-12-01T01:56:29Z
+ tag:github.com,2024-12-01:/SAP/macOS-enterprise-privileges
+
+ <p>For Mac users in enterprise environments, this application gives users control over the administration of their machine by elevating their level of access to administrator privileges on macOS. Users can set a timeframe in the application's settings to perform specific tasks, such as installing or removing an application.</p><hr><p><img src="https://github.com/SAP/macOS-enterprise-privileges/raw/main/readme_images/github%20banner%20new.png" alt=""></p>
<h1>Privileges</h1>
<p><a href="https://api.reuse.software/info/github.com/SAP/macOS-enterprise-privileges"><img src="https://api.reuse.software/badge/github.com/SAP/macOS-enterprise-privileges" alt="REUSE status"></a></p>
<p>Privileges is an application for macOS which allows users to work as a standard user for day-to-day tasks, by providing a quick and easy way to request administrator rights. Users can set a timeframe in the application’s settings to perform specific tasks, such as installing or removing an application. To request admin rights, simply click on the Privileges icon in your Dock.</p>
<p>Working as standard user instead of an administrator adds another layer of security to your Mac and is considered a security best practice. We believe all users, including all developers, can benefit from using Privileges.</p>
<p><strong>Privileges supports the following macOS versions:</strong></p>
<ul>
<li>macOS 15.x</li>
<li>macOS 14.x</li>
<li>macOS 13.x</li>
<li>macOS 12.x</li>
<li>macOS 11.x</li>
</ul>
<h1>Features</h1>
<p>🛠️ Easy install</p>
<p><span>🚀</span> Perfect for day-to-day use</p>
<p><span>⏰</span> Turn on admin rights anytime</p>
<p><span>🔐</span> Enjoy standard user security</p>
<p><span>🔥</span> Command line use supported</p>
<h2>New Privileges 2 features 🔥</h2>
<p>📦 Installer package</p>
<p>⛔️ Revoke admin rights at login</p>
<p>⏳ Unified expiration interval for administrator privileges</p>
<p>▶️ Run actions on privilege change</p>
<p>👆 Command line tool now also supports Touch ID</p>
<p>⚙️ AppleScript support</p>
<p>🪝 Webhooks</p>
<p>🔠 Localized in 40 languages</p>
<h1>Demo</h1>
<p>⚡️ Have a look at how quick and easy you can request admin rights</p>
<p><img src="https://github.com/SAP/macOS-enterprise-privileges/raw/main/readme_images/DemoGIF.gif" alt=""></p>
<h1>Application Management</h1>
<p>As of Privileges 1.5.0, it is possible to manage settings for Privileges or the PrivilegesCLI command line tool using a macOS configuration profile. <a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Managing-Privileges">For more details, please click here</a>.</p>
<h1>Articles</h1>
<p>We are happy to share with you the article about privileges from 9to5Mac:</p>
<p><a href="https://9to5mac.com/2019/11/16/privileges-app-for-macos/">Apple @ Work: Privileges for macOS is the open source tool that all Apple IT departments need</a></p>
<h1>Documentation</h1>
<p>📚 If you want to learn more about <em>Privileges</em> features, make sure to take a look at our <a href="https://github.com/SAP/macOS-enterprise-privileges/wiki">wiki</a> or the links below:</p>
<ul>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Installation">Installation</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Uninstallation">Uninstallation</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Using-Privileges">Using Privileges</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Managing-Privileges">Managing Privileges</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Frequently-Asked-Questions">Frequently Asked Questions</a></li>
</ul>
<h1>License</h1>
<p>Copyright (c) 2018-2024 SAP SE or an SAP affiliate company and macOS-enterprise-privileges contributors. Please see our <a href="https://raw.githubusercontent.com/SAP/macOS-enterprise-privileges/main/LICENSE">LICENSE</a> for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available <a href="https://api.reuse.software/info/github.com/SAP/macOS-enterprise-privileges">via the REUSE tool</a>.</p>
<h1>Security</h1>
<p>Found a security-related issue or vulnerability and want to notify us? <a href="https://github.com/SAP/macOS-enterprise-privileges/security/policy">Please see here for how to report it</a>.</p>
<h1>Support</h1>
<p>This project is 'as-is' with no support, no changes being made. You are welcome to make changes to improve it but we are not available for questions or support of any kind.</p>
+
+
+ romaonthego/RESideMenu
+ 2024-12-01T01:56:29Z
+ tag:github.com,2024-12-01:/romaonthego/RESideMenu
+
+ <p>iOS 7/8 style side menu with parallax effect.</p><hr><h1>RESideMenu</h1>
<p>iOS 7/8 style side menu with parallax effect inspired by Dribbble shots (<a href="http://dribbble.com/shots/1116265-Instasave-iPhone-App">first</a> and <a href="http://dribbble.com/shots/1114754-Social-Feed-iOS7">second</a>).</p>
<p>Since version 4.0 you can add menu view controllers on both left and right sides of your content view controller.</p>
<img src="https://github.com/romaonthego/RESideMenu/raw/master/Screenshot.png" alt="RESideMenu Screenshot" width="400" height="568">
<img src="https://raw.githubusercontent.com/romaonthego/RESideMenu/master/Demo.gif?2" alt="RESideMenu Screenshot" width="320" height="568">
<h2>Requirements</h2>
<ul>
<li>Xcode 6 or higher</li>
<li>Apple LLVM compiler</li>
<li>iOS 6.0 or higher</li>
<li>ARC</li>
</ul>
<h2>Demo</h2>
<p>Build and run the <code>RESideMenuExample</code> project in Xcode to see <code>RESideMenu</code> in action. For storyboards integration demo, build and run <code>RESideMenuStoryboardsExample</code>.</p>
<h2>Installation</h2>
<h3>CocoaPods</h3>
<p>The recommended approach for installating <code>RESideMenu</code> is via the <a href="http://cocoapods.org/">CocoaPods</a> package manager, as it provides flexible dependency management and dead simple installation. For best results, it is recommended that you install via CocoaPods >= <strong>0.28.0</strong> using Git >= <strong>1.8.0</strong> installed via Homebrew.</p>
<p>Install CocoaPods if not already available:</p>
<pre><code class="language-bash">$ [sudo] gem install cocoapods
$ pod setup
</code></pre>
<p>Change to the directory of your Xcode project:</p>
<pre><code class="language-bash">$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile
</code></pre>
<p>Edit your Podfile and add RESideMenu:</p>
<pre><code class="language-bash">platform :ios, '6.0'
pod 'RESideMenu', '~> 4.0.7'
</code></pre>
<p>Install into your Xcode project:</p>
<pre><code class="language-bash">$ pod install
</code></pre>
<p>Open your project in Xcode from the .xcworkspace file (not the usual project file)</p>
<pre><code class="language-bash">$ open MyProject.xcworkspace
</code></pre>
<p>Please note that if your installation fails, it may be because you are installing with a version of Git lower than CocoaPods is expecting. Please ensure that you are running Git >= <strong>1.8.0</strong> by executing <code>git --version</code>. You can get a full picture of the installation details by executing <code>pod install --verbose</code>.</p>
<h3>Manual Install</h3>
<p>All you need to do is drop <code>RESideMenu</code> files into your project, and add <code>#include "RESideMenu.h"</code> to the top of classes that will use it.</p>
<h2>Example Usage</h2>
<p>In your AppDelegate's <code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions</code> create the view controller and assign content and menu view controllers.</p>
<pre><code class="language-objective-c">// Create content and menu controllers
//
DEMONavigationController *navigationController = [[DEMONavigationController alloc] initWithRootViewController:[[DEMOHomeViewController alloc] init]];
DEMOLeftMenuViewController *leftMenuViewController = [[DEMOLeftMenuViewController alloc] init];
DEMORightMenuViewController *rightMenuViewController = [[DEMORightMenuViewController alloc] init];
// Create side menu controller
//
RESideMenu *sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:navigationController
leftMenuViewController:leftMenuViewController
rightMenuViewController:rightMenuViewController];
sideMenuViewController.backgroundImage = [UIImage imageNamed:@"Stars"];
// Make it a root controller
//
self.window.rootViewController = sideMenuViewController;
</code></pre>
<p>Present the menu view controller:</p>
<pre><code class="language-objective-c">[self.sideMenuViewController presentLeftMenuViewController];
</code></pre>
<p>or</p>
<pre><code class="language-objective-c">[self.sideMenuViewController presentRightMenuViewController];
</code></pre>
<p>Switch content view controllers:</p>
<pre><code class="language-objective-c">#import <RESideMenu/RESideMenu.h>
....
[self.sideMenuViewController setContentViewController:viewController animated:YES];
[self.sideMenuViewController hideMenuViewController];
</code></pre>
<h2>Storyboards Example</h2>
<ol>
<li>Create a subclass of <code>RESideMenu</code>. In this example we call it <code>DEMORootViewController</code>.</li>
<li>In the Storyboard designate the root view's owner as <code>DEMORootViewController</code>.</li>
<li>Make sure to <code>#import "RESideMenu.h"</code> in <code>DEMORootViewController.h</code>.</li>
<li>Add more view controllers to your Storyboard, and give them identifiers "leftMenuViewController", "rightMenuViewController" and "contentViewController". Note that in the new XCode the identifier is called "Storyboard ID" and can be found in the Identity inspector.</li>
<li>Add a method <code>awakeFromNib</code> to <code>DEMORootViewController.m</code> with the following code:</li>
</ol>
<pre><code class="language-objective-c">- (void)awakeFromNib
{
self.contentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentViewController"];
self.leftMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"leftMenuViewController"];
self.rightMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"rightMenuViewController"];
}
</code></pre>
<h2>Customization</h2>
<p>You can customize the following properties of <code>RESideMenu</code>:</p>
<pre><code class="language-objective-c">@property (assign, readwrite, nonatomic) NSTimeInterval animationDuration;
@property (strong, readwrite, nonatomic) UIImage *backgroundImage;
@property (assign, readwrite, nonatomic) BOOL panGestureEnabled;
@property (assign, readwrite, nonatomic) BOOL panFromEdge;
@property (assign, readwrite, nonatomic) NSUInteger panMinimumOpenThreshold;
@property (assign, readwrite, nonatomic) BOOL interactivePopGestureRecognizerEnabled;
@property (assign, readwrite, nonatomic) BOOL scaleContentView;
@property (assign, readwrite, nonatomic) BOOL scaleBackgroundImageView;
@property (assign, readwrite, nonatomic) BOOL scaleMenuView;
@property (assign, readwrite, nonatomic) BOOL contentViewShadowEnabled;
@property (assign, readwrite, nonatomic) UIColor *contentViewShadowColor;
@property (assign, readwrite, nonatomic) CGSize contentViewShadowOffset;
@property (assign, readwrite, nonatomic) CGFloat contentViewShadowOpacity;
@property (assign, readwrite, nonatomic) CGFloat contentViewShadowRadius;
@property (assign, readwrite, nonatomic) CGFloat contentViewScaleValue;
@property (assign, readwrite, nonatomic) CGFloat contentViewInLandscapeOffsetCenterX;
@property (assign, readwrite, nonatomic) CGFloat contentViewInPortraitOffsetCenterX;
@property (assign, readwrite, nonatomic) CGFloat parallaxMenuMinimumRelativeValue;
@property (assign, readwrite, nonatomic) CGFloat parallaxMenuMaximumRelativeValue;
@property (assign, readwrite, nonatomic) CGFloat parallaxContentMinimumRelativeValue;
@property (assign, readwrite, nonatomic) CGFloat parallaxContentMaximumRelativeValue;
@property (assign, readwrite, nonatomic) CGAffineTransform menuViewControllerTransformation;
@property (assign, readwrite, nonatomic) BOOL parallaxEnabled;
@property (assign, readwrite, nonatomic) BOOL bouncesHorizontally;
@property (assign, readwrite, nonatomic) UIStatusBarStyle menuPreferredStatusBarStyle;
@property (assign, readwrite, nonatomic) BOOL menuPrefersStatusBarHidden;
</code></pre>
<p>If you set a backgroundImage, don't forget to set the Menu View Controller's background color to clear color.</p>
<p>You can implement <code>RESideMenuDelegate</code> protocol to receive the following messages:</p>
<pre><code class="language-objective-c">- (void)sideMenu:(RESideMenu *)sideMenu didRecognizePanGesture:(UIPanGestureRecognizer *)recognizer;
- (void)sideMenu:(RESideMenu *)sideMenu willShowMenuViewController:(UIViewController *)menuViewController;
- (void)sideMenu:(RESideMenu *)sideMenu didShowMenuViewController:(UIViewController *)menuViewController;
- (void)sideMenu:(RESideMenu *)sideMenu willHideMenuViewController:(UIViewController *)menuViewController;
- (void)sideMenu:(RESideMenu *)sideMenu didHideMenuViewController:(UIViewController *)menuViewController;
</code></pre>
<h2>Contact</h2>
<p>Roman Efimov</p>
<ul>
<li><a href="https://github.com/romaonthego">https://github.com/romaonthego</a></li>
<li><a href="https://twitter.com/romaonthego">https://twitter.com/romaonthego</a></li>
<li><a href="mailto:romefimov@gmail.com">romefimov@gmail.com</a></li>
</ul>
<h2>License</h2>
<p>RESideMenu is available under the MIT license.</p>
<p>Copyright © 2013 Roman Efimov.</p>
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
+
+
\ No newline at end of file
diff --git a/objective-c/weekly/index.xml b/objective-c/weekly/index.xml
new file mode 100644
index 00000000000..4e3c38dabc9
--- /dev/null
+++ b/objective-c/weekly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Objective-C Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:49Z
+ Weekly Trending of Objective-C in GitHub
+
+
+ SAP/macOS-enterprise-privileges
+ 2024-12-01T01:47:49Z
+ tag:github.com,2024-12-01:/SAP/macOS-enterprise-privileges
+
+ <p>For Mac users in enterprise environments, this application gives users control over the administration of their machine by elevating their level of access to administrator privileges on macOS. Users can set a timeframe in the application's settings to perform specific tasks, such as installing or removing an application.</p><hr><p><img src="https://github.com/SAP/macOS-enterprise-privileges/raw/main/readme_images/github%20banner%20new.png" alt=""></p>
<h1>Privileges</h1>
<p><a href="https://api.reuse.software/info/github.com/SAP/macOS-enterprise-privileges"><img src="https://api.reuse.software/badge/github.com/SAP/macOS-enterprise-privileges" alt="REUSE status"></a></p>
<p>Privileges is an application for macOS which allows users to work as a standard user for day-to-day tasks, by providing a quick and easy way to request administrator rights. Users can set a timeframe in the application’s settings to perform specific tasks, such as installing or removing an application. To request admin rights, simply click on the Privileges icon in your Dock.</p>
<p>Working as standard user instead of an administrator adds another layer of security to your Mac and is considered a security best practice. We believe all users, including all developers, can benefit from using Privileges.</p>
<p><strong>Privileges supports the following macOS versions:</strong></p>
<ul>
<li>macOS 15.x</li>
<li>macOS 14.x</li>
<li>macOS 13.x</li>
<li>macOS 12.x</li>
<li>macOS 11.x</li>
</ul>
<h1>Features</h1>
<p>🛠️ Easy install</p>
<p><span>🚀</span> Perfect for day-to-day use</p>
<p><span>⏰</span> Turn on admin rights anytime</p>
<p><span>🔐</span> Enjoy standard user security</p>
<p><span>🔥</span> Command line use supported</p>
<h2>New Privileges 2 features 🔥</h2>
<p>📦 Installer package</p>
<p>⛔️ Revoke admin rights at login</p>
<p>⏳ Unified expiration interval for administrator privileges</p>
<p>▶️ Run actions on privilege change</p>
<p>👆 Command line tool now also supports Touch ID</p>
<p>⚙️ AppleScript support</p>
<p>🪝 Webhooks</p>
<p>🔠 Localized in 40 languages</p>
<h1>Demo</h1>
<p>⚡️ Have a look at how quick and easy you can request admin rights</p>
<p><img src="https://github.com/SAP/macOS-enterprise-privileges/raw/main/readme_images/DemoGIF.gif" alt=""></p>
<h1>Application Management</h1>
<p>As of Privileges 1.5.0, it is possible to manage settings for Privileges or the PrivilegesCLI command line tool using a macOS configuration profile. <a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Managing-Privileges">For more details, please click here</a>.</p>
<h1>Articles</h1>
<p>We are happy to share with you the article about privileges from 9to5Mac:</p>
<p><a href="https://9to5mac.com/2019/11/16/privileges-app-for-macos/">Apple @ Work: Privileges for macOS is the open source tool that all Apple IT departments need</a></p>
<h1>Documentation</h1>
<p>📚 If you want to learn more about <em>Privileges</em> features, make sure to take a look at our <a href="https://github.com/SAP/macOS-enterprise-privileges/wiki">wiki</a> or the links below:</p>
<ul>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Installation">Installation</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Uninstallation">Uninstallation</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Using-Privileges">Using Privileges</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Managing-Privileges">Managing Privileges</a></li>
<li><a href="https://github.com/SAP/macOS-enterprise-privileges/wiki/Frequently-Asked-Questions">Frequently Asked Questions</a></li>
</ul>
<h1>License</h1>
<p>Copyright (c) 2018-2024 SAP SE or an SAP affiliate company and macOS-enterprise-privileges contributors. Please see our <a href="https://raw.githubusercontent.com/SAP/macOS-enterprise-privileges/main/LICENSE">LICENSE</a> for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available <a href="https://api.reuse.software/info/github.com/SAP/macOS-enterprise-privileges">via the REUSE tool</a>.</p>
<h1>Security</h1>
<p>Found a security-related issue or vulnerability and want to notify us? <a href="https://github.com/SAP/macOS-enterprise-privileges/security/policy">Please see here for how to report it</a>.</p>
<h1>Support</h1>
<p>This project is 'as-is' with no support, no changes being made. You are welcome to make changes to improve it but we are not available for questions or support of any kind.</p>
+
+
+ button/DeepLinkKit
+ 2024-12-01T01:47:49Z
+ tag:github.com,2024-12-01:/button/DeepLinkKit
+
+ <p>A splendid route-matching, block-based way to handle your deep links.</p><hr><p align="center"><img src="https://cloud.githubusercontent.com/assets/10621371/7642874/8c90f72a-fa62-11e4-9092-dfff96c24f01.png" width="392"> </p>
<h1 align="center">DeepLink Kit</h1>
<p align="center"> <a href="https://travis-ci.org/button/DeepLinkKit"><img src="http://img.shields.io/travis/button/DeepLinkKit.svg?style=flat" alt="CI Status"></a> <a href="https://coveralls.io/github/button/DeepLinkKit?branch=master"><img src="https://coveralls.io/repos/github/button/DeepLinkKit/badge.svg?branch=master" alt="Coverage Status"></a> <a href="http://cocoadocs.org/docsets/DeepLinkKit"><img src="https://img.shields.io/cocoapods/v/DeepLinkKit.svg?style=flat" alt="Version"></a> <a href="http://cocoadocs.org/docsets/DeepLinkKit"><img src="https://img.shields.io/cocoapods/l/DeepLinkKit.svg?style=flat" alt="License"></a> <a href="http://cocoadocs.org/docsets/DeepLinkKit"><img src="https://img.shields.io/cocoapods/p/DeepLinkKit.svg?style=flat" alt="Platform"></a> </p>
<h2>Overview</h2>
<p>DeepLink Kit is a splendid route-matching, block-based way to handle your deep links. Rather than decide how to format your URLs, parse them, pass data, and navigate to specific content or perform actions, this library and a few lines of code will get you on your way.</p>
<p><a href="https://github.com/button/DeepLinkKit/wiki/DeepLink-Kit-Integration-Guide">Full Documentation</a></p>
<p><a href="https://www.usebutton.com/developers/universal-links/">Guide to add Universal Links to your app</a></p>
<h2>Check it out</h2>
<p>Try the <code>DeepLinkKit</code> sample project by running the following command:</p>
<pre><code class="language-ruby">pod try "DeepLinkKit"
</code></pre>
<h2>Installation</h2>
<h3>CocoaPods</h3>
<p>DeepLinkKit is available through <a href="http://cocoapods.org">CocoaPods</a>. To install the library, simply add the following line to your Podfile:</p>
<pre><code class="language-ruby">pod "DeepLinkKit"
</code></pre>
<h3>Carthage</h3>
<p>To install via Carthage, add the following line to your <code>Cartfile</code>:</p>
<pre><code class="language-text">github "button/DeepLinkKit"
</code></pre>
<h3>Other</h3>
<p>If you don't use CocoaPods or Carthage, you can include all of the source files from the <a href="https://github.com/button/DeepLinkKit/tree/master/DeepLinkKit">DeepLinkKit directory</a> in your project.</p>
<h2>Usage</h2>
<p>Add deep link support to your app in 5 minutes or less following these simple steps.</p>
<p><em><strong>Note:</strong> As of <code>1.0.0</code>, all imports should be updated to import <code><DeepLinkKit/DeepLinkKit.h></code>.</em></p>
<p><strong>1. Make sure you have a URL scheme registered for your app in your Info.plist</strong> <img src="https://cloud.githubusercontent.com/assets/1057077/5710380/8d913f3e-9a6f-11e4-83a2-49f6564d7a8f.png" width="410"></p>
<p><strong>2. Import DeepLinkKit</strong></p>
<pre><code class="language-objc">#import <DeepLinkKit/DeepLinkKit.h>
</code></pre>
<p><strong>3. Create an instance of <code>DPLDeepLinkRouter</code> in your app delegate</strong></p>
<pre><code class="language-objc">- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.router = [[DPLDeepLinkRouter alloc] init];
return YES;
}
</code></pre>
<p><strong>4. Register a route handler</strong></p>
<p>Objective-C</p>
<pre><code class="language-objc">self.router[@"/log/:message"] = ^(DPLDeepLink *link) {
NSLog(@"%@", link.routeParameters[@"message"]);
};
</code></pre>
<p>Swift</p>
<pre><code class="language-swift">self.router.register("/log/:message") { link in
if let link = link {
print("\(link.routeParameters["message"])")
}
}
</code></pre>
<p><strong>5. Pass incoming URLs to the router</strong></p>
<pre><code class="language-objc">- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [self.router handleURL:url withCompletion:NULL];
}
</code></pre>
<p><strong>6. Passing <code>NSUserActivity</code> objects to the router</strong> (optional)</p>
<p><em><strong>Note:</strong> If your application supports <a href="https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_2">Apple's new universal links</a>, implement the following in your app delegate:</em></p>
<pre><code class="language-objc">- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *))restorationHandler {
return [self.router handleUserActivity:userActivity withCompletion:NULL];
}
</code></pre>
<p>Learn more about the DeepLinkKit by reading our <a href="https://github.com/button/DeepLinkKit/wiki/DeepLink-Kit-Integration-Guide">Integration Guide</a>.</p>
<h2>Route Registration Examples</h2>
<p>URLs coming into your app will be in a similar format to the following: <code><scheme>://<host>/<path-component>/<path-component></code></p>
<p>When registering routes, it's important to note that the first forward slash in your registered route determines the start of the path to be matched. A route component before the first forward slash will be considered to be the host.</p>
<p>Say you have an incoming URL of <code>twitter://timeline</code></p>
<pre><code class="language-objc">
// Matches the URL.
router[@"timeline"] = ^{ … }
// Does not match the URL.
router[@"/timeline"] = ^{ … }
</code></pre>
<p>In another example, a URL of <code>twitter://dpl.com/timeline</code></p>
<pre><code class="language-objc">// Matches the URL.
router[@"/timeline"] = ^{ … }
// Does not match the URL.
router[@"timeline"] = ^{ … }
</code></pre>
<p>You can also be scheme specific. If you support multiple URL schemes in your app, you can register routes specific to those schemes as follows:</p>
<p>An incoming URL of <code>scheme-one://timeline</code></p>
<pre><code class="language-objc">// Matches the URL.
router[@"scheme-one://timeline"] = ^{ … }
// Does not match the URL.
router[@"scheme-two://timeline"] = ^{ … }
</code></pre>
<h3>Regex Route Matching</h3>
<p>You can use regex in your route patterns as well to give you maximum flexibility.</p>
<p><strong>Match any url</strong></p>
<p><em>The following will match all incoming urls</em></p>
<pre><code class="language-objc">router[@".*"] ^(DPLDeepLink *link){
// This will match all incoming links
}
</code></pre>
<p><em><strong>Note:</strong> Routes are matched in the order they're registered so registering this route first will prevent all other more specific routes from matching.</em></p>
<p><strong>Match any url with a given scheme</strong></p>
<p><em>The following will match all incoming links with the scheme, <code>myscheme://</code></em></p>
<pre><code class="language-objc">router[@"myscheme://.*"] ^(DPLDeepLink *link){
// matches all urls with a scheme of `myscheme://`
}
</code></pre>
<p><strong>You can name your regex groups too</strong></p>
<p><em>The following will match any url with a <code>host</code> of <code>trycaviar.com</code> and hand you <code>:path</code> in the route params.</em></p>
<pre><code class="language-objc">// Given the url ‘https://trycaviar.com/manhattan/nicoletta-297`
router[@"trycaviar.com/:path(.*)"] ^(DPLDeepLink *link){
// `link[@"path"]` => @"manhattan/nicoletta-297"
}
</code></pre>
<p><strong>Match multiple path components</strong></p>
<p><em>In this example, you'll get <code>:city</code> and <code>:restaurant</code> in the route params.</em></p>
<pre><code class="language-objc">// Given the url ‘https://trycaviar.com/manhattan/nicoletta-297`
router[@"trycaviar.com/:city([a-zA-Z]+)/:restaurant(.*)"] ^(DPLDeepLink *link){
// `link[@"city"]` => @"manhattan"
// `link[@"restaurant"]` => @"nicoletta-297"
}
</code></pre>
<p><em>If the restaurant ids are numbers, you could limit your matches as follows.</em></p>
<pre><code class="language-objc">// Given the url ‘https://trycaviar.com/manhattan/297`
router[@"trycaviar.com/:city([a-zA-Z]+)/:restaurant([0-9])"] ^(DPLDeepLink *link){
// `link[@"city"]` => @"manhattan"
// `link[@"restaurant"]` => @"297"
}
</code></pre>
<p><strong>Name some groups and not others</strong></p>
<pre><code class="language-objc">// Lets say the url is ‘https://trycaviar.com/manhattan/pizza/nicoletta-297`
router[@"trycaviar.com/:city([a-zA-Z]+)/[a-z]+/:restaurant(.*)"] ^(DPLDeepLink *link){
// `link[@"city"]` => @"manhattan"
// `link[@"restaurant"]` => @"nicoletta-297"
}
</code></pre>
<p><em>The above would match ‘<a href="https://trycaviar.com/manhattan/pizza/nicoletta-297%E2%80%99">https://trycaviar.com/manhattan/pizza/nicoletta-297’</a> but not ‘<a href="https://trycaviar.com/manhattan/PIZZA/nicoletta-297%E2%80%99">https://trycaviar.com/manhattan/PIZZA/nicoletta-297’</a> or ‘<a href="https://trycaviar.com/manhattan/pizza-places/nicoletta-297%E2%80%99">https://trycaviar.com/manhattan/pizza-places/nicoletta-297’</a>, etc</em></p>
<h2>AppLinks Support</h2>
<p>Does your app support AppLinks? You can easily handle incoming AppLinks by importing the AppLinks category <code>DPLDeepLink+AppLinks</code>. The AppLinks category provides convenience accessors to all AppLinks 1.0 properties.</p>
<pre><code class="language-objc">router[@"/timeline"] = ^(DPLDeepLink *link) {
NSURL *referrerURL = link.referralURL;
NSString *someValue = link.extras[@"some-key"];
}
</code></pre>
<h2>Running the Demo</h2>
<p>To run the example project, run <code>pod try DeepLinkKit</code> in your terminal. You can also clone the repo, and run <code>pod install</code> from the project root. If you don't have CocoaPods, begin by <a href="http://guides.cocoapods.org/using/getting-started.html">follow this guide</a>.</p>
<p>There are two demo apps, <code>SenderDemo</code>, and <code>ReceiverDemo</code>. <code>ReceiverDemo</code> has some registered routes that will handle specific deep links. <code>SenderDemo</code> has a couple actions that will deep link out to <code>ReceiverDemo</code> for fulfillment.</p>
<p>Run the<code>SenderDemo</code> build scheme first, then stop the simulator and switch the build scheme to <code>ReceiverDemo</code> and run again. Now you can switch back to the <code>SenderDemo</code> app in the simulator and tap on one of the actions.</p>
<h2>Creating Deep Links</h2>
<p>You can also create deep links with <code>DPLMutableDeepLink</code>. Between two <code>DeepLinkKit</code> integrated apps, you can pass complex objects via deep link from one app to another app and easily get that object back on the other end.</p>
<p>In the first app:</p>
<pre><code class="language-objc">
DPLMutableDeepLink *link = [[DPLMutableDeepLink alloc] initWithString:@"app-two://categories"];
link[@"brew-types"] = @[@"Ale", @"Lager", @"Stout", @"Wheat"]
link[@"beers"] = @{
@"ales": @[
@{
@"name": @"Southern Tier Pumking Ale",
@"price": @799
},
@{
@"name": @"Sierra Nevada Celebration Ale",
@"price": @799
}
],
@"lagers": @[
...
],
...
}
[[UIApplication sharedApplication] openURL:link.URL];
</code></pre>
<p>In the second app:</p>
<pre><code class="language-objc">router[@"categories"] = ^(DPLDeepLink *link) {
NSArray *brewTypes = link[@"brew-types"];
NSDictionary *beers = link[@"beers"];
}
</code></pre>
<h2>Authors</h2>
<p><a href="http://twitter.com/ioswes">Wes Smith</a><br> <a href="http://twitter.com/chrismaddern">Chris Maddern</a></p>
<h2>License</h2>
<p>DeepLinkKit is available under the MIT license. See the LICENSE file for more info.</p>
<h2>Contributing</h2>
<p>We'd love to see your ideas for improving this library. The best way to contribute is by submitting a pull request. We'll do our best to respond to you as soon as possible. You can also submit a new Github issue if you find bugs or have questions. <img alt="octocat" src="https://github.githubassets.com/images/icons/emoji/octocat.png?v8">)</p>
<p>Please make sure to follow our general coding style and add test coverage for new features!</p>
+
+
\ No newline at end of file
diff --git a/objective-j/daily/index.xml b/objective-j/daily/index.xml
index bbf40f56ff1..851e3603500 100644
--- a/objective-j/daily/index.xml
+++ b/objective-j/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Objective-J Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:46Z
+ 2024-12-01T01:37:03Z
Daily Trending of Objective-J in GitHub
\ No newline at end of file
diff --git a/objective-j/monthly/index.xml b/objective-j/monthly/index.xml
new file mode 100644
index 00000000000..46fbc108184
--- /dev/null
+++ b/objective-j/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Objective-J Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:34Z
+ Monthly Trending of Objective-J in GitHub
+
+
\ No newline at end of file
diff --git a/objective-j/weekly/index.xml b/objective-j/weekly/index.xml
new file mode 100644
index 00000000000..f81e345a4e5
--- /dev/null
+++ b/objective-j/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Objective-J Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:53Z
+ Weekly Trending of Objective-J in GitHub
+
+
\ No newline at end of file
diff --git a/objectscript/daily/index.xml b/objectscript/daily/index.xml
index a898da525b1..0e1dce1c422 100644
--- a/objectscript/daily/index.xml
+++ b/objectscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ObjectScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:46Z
+ 2024-12-01T01:37:02Z
Daily Trending of ObjectScript in GitHub
\ No newline at end of file
diff --git a/objectscript/monthly/index.xml b/objectscript/monthly/index.xml
new file mode 100644
index 00000000000..b551e495091
--- /dev/null
+++ b/objectscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ObjectScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:33Z
+ Monthly Trending of ObjectScript in GitHub
+
+
\ No newline at end of file
diff --git a/objectscript/weekly/index.xml b/objectscript/weekly/index.xml
new file mode 100644
index 00000000000..29eca89c063
--- /dev/null
+++ b/objectscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ObjectScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:53Z
+ Weekly Trending of ObjectScript in GitHub
+
+
\ No newline at end of file
diff --git a/ocaml/daily/index.xml b/ocaml/daily/index.xml
index 4d47f231ece..88862e01117 100644
--- a/ocaml/daily/index.xml
+++ b/ocaml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OCaml Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:47Z
+ 2024-12-01T01:37:04Z
Daily Trending of OCaml in GitHub
\ No newline at end of file
diff --git a/ocaml/monthly/index.xml b/ocaml/monthly/index.xml
new file mode 100644
index 00000000000..9d6ddd789c2
--- /dev/null
+++ b/ocaml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OCaml Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:35Z
+ Monthly Trending of OCaml in GitHub
+
+
\ No newline at end of file
diff --git a/ocaml/weekly/index.xml b/ocaml/weekly/index.xml
new file mode 100644
index 00000000000..ea675043156
--- /dev/null
+++ b/ocaml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OCaml Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:55Z
+ Weekly Trending of OCaml in GitHub
+
+
\ No newline at end of file
diff --git a/odin/daily/index.xml b/odin/daily/index.xml
index 6e5085503e5..c32d5565664 100644
--- a/odin/daily/index.xml
+++ b/odin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Odin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:49Z
+ 2024-12-01T01:37:05Z
Daily Trending of Odin in GitHub
\ No newline at end of file
diff --git a/odin/monthly/index.xml b/odin/monthly/index.xml
new file mode 100644
index 00000000000..800ffc4a149
--- /dev/null
+++ b/odin/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Odin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:36Z
+ Monthly Trending of Odin in GitHub
+
+
\ No newline at end of file
diff --git a/odin/weekly/index.xml b/odin/weekly/index.xml
new file mode 100644
index 00000000000..7af5a871135
--- /dev/null
+++ b/odin/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Odin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:56Z
+ Weekly Trending of Odin in GitHub
+
+
\ No newline at end of file
diff --git a/omgrofl/daily/index.xml b/omgrofl/daily/index.xml
index a19d3491143..8d5cc6c4df2 100644
--- a/omgrofl/daily/index.xml
+++ b/omgrofl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Omgrofl Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:48Z
+ 2024-12-01T01:37:05Z
Daily Trending of Omgrofl in GitHub
\ No newline at end of file
diff --git a/omgrofl/monthly/index.xml b/omgrofl/monthly/index.xml
new file mode 100644
index 00000000000..685d0d8d87c
--- /dev/null
+++ b/omgrofl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Omgrofl Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:36Z
+ Monthly Trending of Omgrofl in GitHub
+
+
\ No newline at end of file
diff --git a/omgrofl/weekly/index.xml b/omgrofl/weekly/index.xml
new file mode 100644
index 00000000000..d7cf8405a43
--- /dev/null
+++ b/omgrofl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Omgrofl Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:56Z
+ Weekly Trending of Omgrofl in GitHub
+
+
\ No newline at end of file
diff --git a/ooc/daily/index.xml b/ooc/daily/index.xml
index d04a5672e3d..696d75fa21a 100644
--- a/ooc/daily/index.xml
+++ b/ooc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ooc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:48Z
+ 2024-12-01T01:37:05Z
Daily Trending of ooc in GitHub
\ No newline at end of file
diff --git a/ooc/monthly/index.xml b/ooc/monthly/index.xml
new file mode 100644
index 00000000000..a2533745629
--- /dev/null
+++ b/ooc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ooc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:36Z
+ Monthly Trending of ooc in GitHub
+
+
\ No newline at end of file
diff --git a/ooc/weekly/index.xml b/ooc/weekly/index.xml
new file mode 100644
index 00000000000..b537e356b3a
--- /dev/null
+++ b/ooc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ooc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:55Z
+ Weekly Trending of ooc in GitHub
+
+
\ No newline at end of file
diff --git a/opa/daily/index.xml b/opa/daily/index.xml
index 15e9320b068..4c6631a245d 100644
--- a/opa/daily/index.xml
+++ b/opa/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Opa Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:48Z
+ 2024-12-01T01:37:04Z
Daily Trending of Opa in GitHub
\ No newline at end of file
diff --git a/opa/monthly/index.xml b/opa/monthly/index.xml
new file mode 100644
index 00000000000..e53bf48044d
--- /dev/null
+++ b/opa/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Opa Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:35Z
+ Monthly Trending of Opa in GitHub
+
+
\ No newline at end of file
diff --git a/opa/weekly/index.xml b/opa/weekly/index.xml
new file mode 100644
index 00000000000..451a58bb291
--- /dev/null
+++ b/opa/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Opa Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:56Z
+ Weekly Trending of Opa in GitHub
+
+
\ No newline at end of file
diff --git a/opal/daily/index.xml b/opal/daily/index.xml
index 8bf0f7821ac..3435e8cd7c9 100644
--- a/opal/daily/index.xml
+++ b/opal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Opal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:50Z
+ 2024-12-01T01:37:06Z
Daily Trending of Opal in GitHub
\ No newline at end of file
diff --git a/opal/monthly/index.xml b/opal/monthly/index.xml
new file mode 100644
index 00000000000..49e17f40ff9
--- /dev/null
+++ b/opal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Opal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:37Z
+ Monthly Trending of Opal in GitHub
+
+
\ No newline at end of file
diff --git a/opal/weekly/index.xml b/opal/weekly/index.xml
new file mode 100644
index 00000000000..d7f5782e411
--- /dev/null
+++ b/opal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Opal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:58Z
+ Weekly Trending of Opal in GitHub
+
+
\ No newline at end of file
diff --git a/open-policy-agent/daily/index.xml b/open-policy-agent/daily/index.xml
index 0f9150a0276..69ca198cd77 100644
--- a/open-policy-agent/daily/index.xml
+++ b/open-policy-agent/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Open Policy Agent Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:50Z
+ 2024-12-01T01:37:07Z
Daily Trending of Open Policy Agent in GitHub
+
+ aquasecurity/trivy-checks
+ 2024-12-01T01:37:07Z
+ tag:github.com,2024-12-01:/aquasecurity/trivy-checks
+
+ <p></p><hr>
+
\ No newline at end of file
diff --git a/open-policy-agent/monthly/index.xml b/open-policy-agent/monthly/index.xml
new file mode 100644
index 00000000000..eb782a1de54
--- /dev/null
+++ b/open-policy-agent/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Open Policy Agent Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:38Z
+ Monthly Trending of Open Policy Agent in GitHub
+
+
+ aquasecurity/trivy-checks
+ 2024-12-01T01:56:38Z
+ tag:github.com,2024-12-01:/aquasecurity/trivy-checks
+
+ <p></p><hr>
+
+
\ No newline at end of file
diff --git a/open-policy-agent/weekly/index.xml b/open-policy-agent/weekly/index.xml
new file mode 100644
index 00000000000..ad7892f297c
--- /dev/null
+++ b/open-policy-agent/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Open Policy Agent Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:58Z
+ Weekly Trending of Open Policy Agent in GitHub
+
+
+ aquasecurity/trivy-checks
+ 2024-12-01T01:47:58Z
+ tag:github.com,2024-12-01:/aquasecurity/trivy-checks
+
+ <p></p><hr>
+
+
\ No newline at end of file
diff --git a/opencl/daily/index.xml b/opencl/daily/index.xml
index 2353a387a99..1036a82c577 100644
--- a/opencl/daily/index.xml
+++ b/opencl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenCL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:52Z
+ 2024-12-01T01:37:08Z
Daily Trending of OpenCL in GitHub
\ No newline at end of file
diff --git a/opencl/monthly/index.xml b/opencl/monthly/index.xml
new file mode 100644
index 00000000000..65cd03994fd
--- /dev/null
+++ b/opencl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenCL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:39Z
+ Monthly Trending of OpenCL in GitHub
+
+
\ No newline at end of file
diff --git a/opencl/weekly/index.xml b/opencl/weekly/index.xml
new file mode 100644
index 00000000000..ad1ee1648fa
--- /dev/null
+++ b/opencl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenCL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:59Z
+ Weekly Trending of OpenCL in GitHub
+
+
\ No newline at end of file
diff --git a/openedge-abl/daily/index.xml b/openedge-abl/daily/index.xml
index 4959e4ef0dc..b06a9a04340 100644
--- a/openedge-abl/daily/index.xml
+++ b/openedge-abl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenEdge ABL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:51Z
+ 2024-12-01T01:37:08Z
Daily Trending of OpenEdge ABL in GitHub
\ No newline at end of file
diff --git a/openedge-abl/monthly/index.xml b/openedge-abl/monthly/index.xml
new file mode 100644
index 00000000000..5e446297c5d
--- /dev/null
+++ b/openedge-abl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenEdge ABL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:39Z
+ Monthly Trending of OpenEdge ABL in GitHub
+
+
\ No newline at end of file
diff --git a/openedge-abl/weekly/index.xml b/openedge-abl/weekly/index.xml
new file mode 100644
index 00000000000..3fe3be64feb
--- /dev/null
+++ b/openedge-abl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenEdge ABL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:00Z
+ Weekly Trending of OpenEdge ABL in GitHub
+
+
\ No newline at end of file
diff --git a/openqasm/daily/index.xml b/openqasm/daily/index.xml
index a9c7464459f..0b04f6dcfb2 100644
--- a/openqasm/daily/index.xml
+++ b/openqasm/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenQASM Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:51Z
+ 2024-12-01T01:37:09Z
Daily Trending of OpenQASM in GitHub
\ No newline at end of file
diff --git a/openqasm/monthly/index.xml b/openqasm/monthly/index.xml
new file mode 100644
index 00000000000..5bab7a2859a
--- /dev/null
+++ b/openqasm/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenQASM Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:39Z
+ Monthly Trending of OpenQASM in GitHub
+
+
\ No newline at end of file
diff --git a/openqasm/weekly/index.xml b/openqasm/weekly/index.xml
new file mode 100644
index 00000000000..36d5335dd70
--- /dev/null
+++ b/openqasm/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenQASM Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:59Z
+ Weekly Trending of OpenQASM in GitHub
+
+
\ No newline at end of file
diff --git a/openrc-runscript/daily/index.xml b/openrc-runscript/daily/index.xml
index a50a4c20589..81972209480 100644
--- a/openrc-runscript/daily/index.xml
+++ b/openrc-runscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenRC runscript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:51Z
+ 2024-12-01T01:37:08Z
Daily Trending of OpenRC runscript in GitHub
\ No newline at end of file
diff --git a/openrc-runscript/monthly/index.xml b/openrc-runscript/monthly/index.xml
new file mode 100644
index 00000000000..d02d5eca1f4
--- /dev/null
+++ b/openrc-runscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenRC runscript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:40Z
+ Monthly Trending of OpenRC runscript in GitHub
+
+
\ No newline at end of file
diff --git a/openrc-runscript/weekly/index.xml b/openrc-runscript/weekly/index.xml
new file mode 100644
index 00000000000..55d466f5f99
--- /dev/null
+++ b/openrc-runscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenRC runscript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:00Z
+ Weekly Trending of OpenRC runscript in GitHub
+
+
\ No newline at end of file
diff --git a/openscad/daily/index.xml b/openscad/daily/index.xml
index 09a30b4df84..860b2027694 100644
--- a/openscad/daily/index.xml
+++ b/openscad/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenSCAD Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:53Z
+ 2024-12-01T01:37:10Z
Daily Trending of OpenSCAD in GitHub
\ No newline at end of file
diff --git a/openscad/monthly/index.xml b/openscad/monthly/index.xml
new file mode 100644
index 00000000000..a0ee321e63c
--- /dev/null
+++ b/openscad/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub OpenSCAD Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:41Z
+ Monthly Trending of OpenSCAD in GitHub
+
+
+ ostat/gridfinity_extended_openscad
+ 2024-12-01T01:56:41Z
+ tag:github.com,2024-12-01:/ostat/gridfinity_extended_openscad
+
+ <p>Gridfinity Extended OpenSCAD Model</p><hr>
+
+
\ No newline at end of file
diff --git a/openscad/weekly/index.xml b/openscad/weekly/index.xml
new file mode 100644
index 00000000000..f10cd1d8632
--- /dev/null
+++ b/openscad/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenSCAD Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:02Z
+ Weekly Trending of OpenSCAD in GitHub
+
+
\ No newline at end of file
diff --git a/openstep-property-list/daily/index.xml b/openstep-property-list/daily/index.xml
index aad69ba09ca..d28d4fedef2 100644
--- a/openstep-property-list/daily/index.xml
+++ b/openstep-property-list/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenStep Property List Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:53Z
+ 2024-12-01T01:37:10Z
Daily Trending of OpenStep Property List in GitHub
\ No newline at end of file
diff --git a/openstep-property-list/monthly/index.xml b/openstep-property-list/monthly/index.xml
new file mode 100644
index 00000000000..e360944bd6d
--- /dev/null
+++ b/openstep-property-list/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenStep Property List Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:40Z
+ Monthly Trending of OpenStep Property List in GitHub
+
+
\ No newline at end of file
diff --git a/openstep-property-list/weekly/index.xml b/openstep-property-list/weekly/index.xml
new file mode 100644
index 00000000000..c632b7fa62c
--- /dev/null
+++ b/openstep-property-list/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenStep Property List Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:01Z
+ Weekly Trending of OpenStep Property List in GitHub
+
+
\ No newline at end of file
diff --git a/opentype-feature-file/daily/index.xml b/opentype-feature-file/daily/index.xml
index b15995605b1..0bc920269aa 100644
--- a/opentype-feature-file/daily/index.xml
+++ b/opentype-feature-file/daily/index.xml
@@ -1,7 +1,7 @@
GitHub OpenType Feature File Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:52Z
+ 2024-12-01T01:37:10Z
Daily Trending of OpenType Feature File in GitHub
\ No newline at end of file
diff --git a/opentype-feature-file/monthly/index.xml b/opentype-feature-file/monthly/index.xml
new file mode 100644
index 00000000000..0d52c0f282e
--- /dev/null
+++ b/opentype-feature-file/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenType Feature File Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:41Z
+ Monthly Trending of OpenType Feature File in GitHub
+
+
\ No newline at end of file
diff --git a/opentype-feature-file/weekly/index.xml b/opentype-feature-file/weekly/index.xml
new file mode 100644
index 00000000000..28c5e794bb6
--- /dev/null
+++ b/opentype-feature-file/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub OpenType Feature File Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:01Z
+ Weekly Trending of OpenType Feature File in GitHub
+
+
\ No newline at end of file
diff --git a/org/daily/index.xml b/org/daily/index.xml
index 80a390b40b5..c1d55dce1a3 100644
--- a/org/daily/index.xml
+++ b/org/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Org Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:55Z
+ 2024-12-01T01:37:11Z
Daily Trending of Org in GitHub
\ No newline at end of file
diff --git a/org/monthly/index.xml b/org/monthly/index.xml
new file mode 100644
index 00000000000..c63f49cd3b7
--- /dev/null
+++ b/org/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Org Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:43Z
+ Monthly Trending of Org in GitHub
+
+
\ No newline at end of file
diff --git a/org/weekly/index.xml b/org/weekly/index.xml
new file mode 100644
index 00000000000..f93777f3492
--- /dev/null
+++ b/org/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Org Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:03Z
+ Weekly Trending of Org in GitHub
+
+
\ No newline at end of file
diff --git a/ox/daily/index.xml b/ox/daily/index.xml
index 353e6aec568..ebf13e84ad1 100644
--- a/ox/daily/index.xml
+++ b/ox/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ox Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:54Z
+ 2024-12-01T01:37:12Z
Daily Trending of Ox in GitHub
\ No newline at end of file
diff --git a/ox/monthly/index.xml b/ox/monthly/index.xml
new file mode 100644
index 00000000000..859becb04db
--- /dev/null
+++ b/ox/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ox Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:42Z
+ Monthly Trending of Ox in GitHub
+
+
\ No newline at end of file
diff --git a/ox/weekly/index.xml b/ox/weekly/index.xml
new file mode 100644
index 00000000000..f37a095821d
--- /dev/null
+++ b/ox/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ox Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:03Z
+ Weekly Trending of Ox in GitHub
+
+
\ No newline at end of file
diff --git a/oxygene/daily/index.xml b/oxygene/daily/index.xml
index bd324ec3677..8bb0706a5a5 100644
--- a/oxygene/daily/index.xml
+++ b/oxygene/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Oxygene Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:55Z
+ 2024-12-01T01:37:12Z
Daily Trending of Oxygene in GitHub
\ No newline at end of file
diff --git a/oxygene/monthly/index.xml b/oxygene/monthly/index.xml
new file mode 100644
index 00000000000..1b76ce445e1
--- /dev/null
+++ b/oxygene/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Oxygene Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:42Z
+ Monthly Trending of Oxygene in GitHub
+
+
\ No newline at end of file
diff --git a/oxygene/weekly/index.xml b/oxygene/weekly/index.xml
new file mode 100644
index 00000000000..5e7850b83bb
--- /dev/null
+++ b/oxygene/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Oxygene Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:02Z
+ Weekly Trending of Oxygene in GitHub
+
+
\ No newline at end of file
diff --git a/oz/daily/index.xml b/oz/daily/index.xml
index 17f12b746a1..0b160fcf597 100644
--- a/oz/daily/index.xml
+++ b/oz/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Oz Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:54Z
+ 2024-12-01T01:37:11Z
Daily Trending of Oz in GitHub
\ No newline at end of file
diff --git a/oz/monthly/index.xml b/oz/monthly/index.xml
new file mode 100644
index 00000000000..244170d01fa
--- /dev/null
+++ b/oz/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Oz Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:43Z
+ Monthly Trending of Oz in GitHub
+
+
\ No newline at end of file
diff --git a/oz/weekly/index.xml b/oz/weekly/index.xml
new file mode 100644
index 00000000000..9c1b0bbd13c
--- /dev/null
+++ b/oz/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Oz Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:03Z
+ Weekly Trending of Oz in GitHub
+
+
\ No newline at end of file
diff --git a/p4/daily/index.xml b/p4/daily/index.xml
index 09fe46f2210..8ea4a304190 100644
--- a/p4/daily/index.xml
+++ b/p4/daily/index.xml
@@ -1,7 +1,7 @@
GitHub P4 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:56Z
+ 2024-12-01T01:37:14Z
Daily Trending of P4 in GitHub
\ No newline at end of file
diff --git a/p4/monthly/index.xml b/p4/monthly/index.xml
new file mode 100644
index 00000000000..b404f25a234
--- /dev/null
+++ b/p4/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub P4 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:44Z
+ Monthly Trending of P4 in GitHub
+
+
\ No newline at end of file
diff --git a/p4/weekly/index.xml b/p4/weekly/index.xml
new file mode 100644
index 00000000000..ad0065d3c53
--- /dev/null
+++ b/p4/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub P4 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:04Z
+ Weekly Trending of P4 in GitHub
+
+
\ No newline at end of file
diff --git a/pan/daily/index.xml b/pan/daily/index.xml
index f30827f9700..64659c5c651 100644
--- a/pan/daily/index.xml
+++ b/pan/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pan Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:56Z
+ 2024-12-01T01:37:13Z
Daily Trending of Pan in GitHub
\ No newline at end of file
diff --git a/pan/monthly/index.xml b/pan/monthly/index.xml
new file mode 100644
index 00000000000..fa72f2703bf
--- /dev/null
+++ b/pan/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pan Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:44Z
+ Monthly Trending of Pan in GitHub
+
+
\ No newline at end of file
diff --git a/pan/weekly/index.xml b/pan/weekly/index.xml
new file mode 100644
index 00000000000..4b665a5b603
--- /dev/null
+++ b/pan/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pan Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:04Z
+ Weekly Trending of Pan in GitHub
+
+
\ No newline at end of file
diff --git a/papyrus/daily/index.xml b/papyrus/daily/index.xml
index 95d00ff9fb8..52e93010788 100644
--- a/papyrus/daily/index.xml
+++ b/papyrus/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Papyrus Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:56Z
+ 2024-12-01T01:37:13Z
Daily Trending of Papyrus in GitHub
\ No newline at end of file
diff --git a/papyrus/monthly/index.xml b/papyrus/monthly/index.xml
new file mode 100644
index 00000000000..09ed24bdf4d
--- /dev/null
+++ b/papyrus/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Papyrus Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:45Z
+ Monthly Trending of Papyrus in GitHub
+
+
\ No newline at end of file
diff --git a/papyrus/weekly/index.xml b/papyrus/weekly/index.xml
new file mode 100644
index 00000000000..af99dc6c33c
--- /dev/null
+++ b/papyrus/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Papyrus Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:05Z
+ Weekly Trending of Papyrus in GitHub
+
+
\ No newline at end of file
diff --git a/parrot-assembly/daily/index.xml b/parrot-assembly/daily/index.xml
index ef45c514d81..f2e321a2328 100644
--- a/parrot-assembly/daily/index.xml
+++ b/parrot-assembly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Parrot Assembly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:58Z
+ 2024-12-01T01:37:14Z
Daily Trending of Parrot Assembly in GitHub
\ No newline at end of file
diff --git a/parrot-assembly/monthly/index.xml b/parrot-assembly/monthly/index.xml
new file mode 100644
index 00000000000..ce8e19b77b9
--- /dev/null
+++ b/parrot-assembly/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Assembly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:46Z
+ Monthly Trending of Parrot Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/parrot-assembly/weekly/index.xml b/parrot-assembly/weekly/index.xml
new file mode 100644
index 00000000000..ec1490ec3e7
--- /dev/null
+++ b/parrot-assembly/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Assembly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:06Z
+ Weekly Trending of Parrot Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/parrot-internal-representation/daily/index.xml b/parrot-internal-representation/daily/index.xml
index 0575db77763..3bb02733277 100644
--- a/parrot-internal-representation/daily/index.xml
+++ b/parrot-internal-representation/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Parrot Internal Representation Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:58Z
+ 2024-12-01T01:37:15Z
Daily Trending of Parrot Internal Representation in GitHub
\ No newline at end of file
diff --git a/parrot-internal-representation/monthly/index.xml b/parrot-internal-representation/monthly/index.xml
new file mode 100644
index 00000000000..7d82cd312b8
--- /dev/null
+++ b/parrot-internal-representation/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Internal Representation Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:45Z
+ Monthly Trending of Parrot Internal Representation in GitHub
+
+
\ No newline at end of file
diff --git a/parrot-internal-representation/weekly/index.xml b/parrot-internal-representation/weekly/index.xml
new file mode 100644
index 00000000000..4bb4f8b11b8
--- /dev/null
+++ b/parrot-internal-representation/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Internal Representation Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:06Z
+ Weekly Trending of Parrot Internal Representation in GitHub
+
+
\ No newline at end of file
diff --git a/parrot/daily/index.xml b/parrot/daily/index.xml
index 16f70e42198..ba7621209f9 100644
--- a/parrot/daily/index.xml
+++ b/parrot/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Parrot Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:57Z
+ 2024-12-01T01:37:15Z
Daily Trending of Parrot in GitHub
\ No newline at end of file
diff --git a/parrot/monthly/index.xml b/parrot/monthly/index.xml
new file mode 100644
index 00000000000..34b1a853dac
--- /dev/null
+++ b/parrot/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:46Z
+ Monthly Trending of Parrot in GitHub
+
+
\ No newline at end of file
diff --git a/parrot/weekly/index.xml b/parrot/weekly/index.xml
new file mode 100644
index 00000000000..de9e7d84b9a
--- /dev/null
+++ b/parrot/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Parrot Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:06Z
+ Weekly Trending of Parrot in GitHub
+
+
\ No newline at end of file
diff --git a/pascal/daily/index.xml b/pascal/daily/index.xml
index 46b7eef4447..ac685605795 100644
--- a/pascal/daily/index.xml
+++ b/pascal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pascal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:59Z
+ 2024-12-01T01:37:16Z
Daily Trending of Pascal in GitHub
\ No newline at end of file
diff --git a/pascal/monthly/index.xml b/pascal/monthly/index.xml
new file mode 100644
index 00000000000..5d30a154f7a
--- /dev/null
+++ b/pascal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pascal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:47Z
+ Monthly Trending of Pascal in GitHub
+
+
\ No newline at end of file
diff --git a/pascal/weekly/index.xml b/pascal/weekly/index.xml
new file mode 100644
index 00000000000..adeee567b60
--- /dev/null
+++ b/pascal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pascal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:07Z
+ Weekly Trending of Pascal in GitHub
+
+
\ No newline at end of file
diff --git a/pawn/daily/index.xml b/pawn/daily/index.xml
index 8cb3f989231..4d125d7ce79 100644
--- a/pawn/daily/index.xml
+++ b/pawn/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pawn Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:00Z
+ 2024-12-01T01:37:17Z
Daily Trending of Pawn in GitHub
\ No newline at end of file
diff --git a/pawn/monthly/index.xml b/pawn/monthly/index.xml
new file mode 100644
index 00000000000..88dd181fadf
--- /dev/null
+++ b/pawn/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pawn Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:47Z
+ Monthly Trending of Pawn in GitHub
+
+
\ No newline at end of file
diff --git a/pawn/weekly/index.xml b/pawn/weekly/index.xml
new file mode 100644
index 00000000000..e06a7bb4134
--- /dev/null
+++ b/pawn/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pawn Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:07Z
+ Weekly Trending of Pawn in GitHub
+
+
\ No newline at end of file
diff --git a/peg.js/daily/index.xml b/peg.js/daily/index.xml
index 31544e7df46..1bc5a955bb5 100644
--- a/peg.js/daily/index.xml
+++ b/peg.js/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PEG.js Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:59Z
+ 2024-12-01T01:37:17Z
Daily Trending of PEG.js in GitHub
\ No newline at end of file
diff --git a/peg.js/monthly/index.xml b/peg.js/monthly/index.xml
new file mode 100644
index 00000000000..9b232361974
--- /dev/null
+++ b/peg.js/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PEG.js Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:48Z
+ Monthly Trending of PEG.js in GitHub
+
+
\ No newline at end of file
diff --git a/peg.js/weekly/index.xml b/peg.js/weekly/index.xml
new file mode 100644
index 00000000000..3b3fe66d6d7
--- /dev/null
+++ b/peg.js/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PEG.js Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:08Z
+ Weekly Trending of PEG.js in GitHub
+
+
\ No newline at end of file
diff --git a/pep8/daily/index.xml b/pep8/daily/index.xml
index 2b36743e954..1f7fe118ec2 100644
--- a/pep8/daily/index.xml
+++ b/pep8/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pep8 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:00Z
+ 2024-12-01T01:37:17Z
Daily Trending of Pep8 in GitHub
\ No newline at end of file
diff --git a/pep8/monthly/index.xml b/pep8/monthly/index.xml
new file mode 100644
index 00000000000..82dfa1ee1a4
--- /dev/null
+++ b/pep8/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pep8 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:48Z
+ Monthly Trending of Pep8 in GitHub
+
+
\ No newline at end of file
diff --git a/pep8/weekly/index.xml b/pep8/weekly/index.xml
new file mode 100644
index 00000000000..bcd00380d2f
--- /dev/null
+++ b/pep8/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pep8 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:08Z
+ Weekly Trending of Pep8 in GitHub
+
+
\ No newline at end of file
diff --git a/perl/daily/index.xml b/perl/daily/index.xml
index a2e32ac3c3d..e31cc848db4 100644
--- a/perl/daily/index.xml
+++ b/perl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Perl Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:10Z
+ 2024-12-01T01:37:20Z
Daily Trending of Perl in GitHub
\ No newline at end of file
diff --git a/perl/monthly/index.xml b/perl/monthly/index.xml
new file mode 100644
index 00000000000..02d0b51d118
--- /dev/null
+++ b/perl/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Perl Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:55Z
+ Monthly Trending of Perl in GitHub
+
+
+ znuny/Znuny
+ 2024-12-01T01:56:55Z
+ tag:github.com,2024-12-01:/znuny/Znuny
+
+ <p>Znuny/Znuny LTS is a fork of the ((OTRS)) Community Edition, one of the most flexible web-based ticketing systems used for Customer Service, Help Desk, IT Service Management.</p><hr><p><a href="https://www.znuny.org"><img align="center" src="https://raw.githubusercontent.com/znuny/Znuny/dev/var/httpd/htdocs/skins/Agent/default/img/logo.png"></a></p>
<p align="center"> <a href="https://download.znuny.org/releases/znuny-latest-7.1.tar.gz"><img src="https://img.shields.io/github/v/tag/znuny/Znuny?filter=rel-7_1_*&label=latest%20release&color=ff9b00"></a> <br> <a href="https://github.com/znuny/Znuny/actions"><img src="https://img.shields.io/github/actions/workflow/status/znuny/Znuny/ci.yaml?label=CI"></a> <a href="https://github.com/znuny/Znuny/actions"><img src="https://badge.proxy.znuny.com/Znuny/rel-7_1"></a> <a href="https://translations.znuny.org/engage/znuny/"><img src="https://translations.znuny.org/widgets/znuny/-/znuny/svg-badge.svg?sanitize=true" alt="Translation status"></a> <br> <a href="https://github.com/znuny/Znuny/issues"><img src="https://img.shields.io/github/issues-raw/znuny/Znuny?"></a> <a href="https://github.com/znuny/Znuny/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/znuny/Znuny?color=#44CC44"></a> <a href="https://github.com/znuny/Znuny/pulls"><img src="https://img.shields.io/github/issues-pr-raw/znuny/Znuny?"></a> <a href="https://github.com/znuny/Znuny/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed-raw/znuny/Znuny?color=brightgreen"></a> <br> <a href="https://github.com/znuny/Znuny"><img src="https://img.shields.io/github/languages/count/znuny/Znuny?style=flat&label=languages&color=brightgreen"></a> <a href="https://github.com/znuny/Znuny/graphs/contributors"><img src="https://img.shields.io/github/contributors/znuny/Znuny?"></a> <a href="https://discord.gg/XTud3WWZTs"><img src="https://img.shields.io/discord/836533233885773825?style=flat"></a> </p>
<hr>
<h1>Znuny</h1>
<p>Znuny is a continuation of the ((OTRS)) Community Edition (version 6.0.30) which was declared end of life (EOL) at the end of December 2020.</p>
<p>The primary goal for this project is to provide a maintained and stable version of the well known ticket system and improve it with new features.</p>
<p>The second goal is to reestablish a connection to the community.</p>
<h1>License</h1>
<p>The project is distributed under the GNU General Public License (GPL v3) - see the accompanying <a href="https://raw.githubusercontent.com/znuny/Znuny/dev/COPYING">COPYING</a> file for general license information. If you need more details you can have a look <a href="https://snyk.io/learn/what-is-gpl-license-gplv3-explained/">here</a>.</p>
<h1>Documentation</h1>
<p>You can find documentation <a href="https://doc.znuny.org/">here</a>. The source code of Znuny is publicly available on <a href="https://github.com/znuny/znuny">GitHub</a>.</p>
<p>You want to get in touch?</p>
<ul>
<li><a href="https://www.znuny.org">Project website</a></li>
<li><a href="https://community.znuny.org">Community forum</a></li>
<li><a href="https://discord.gg/XTud3WWZTs">Discord Server</a></li>
<li><a href="https://www.znuny.com">Commercial services</a></li>
</ul>
<h1>Software requirements</h1>
<p>Operating system</p>
<ul>
<li>Linux (Debian or Red Hat preferred)</li>
<li>Perl 5.16.0 or higher</li>
</ul>
<p>Web server</p>
<ul>
<li>Apache 2 + mod_perl2 or higher (recommended)</li>
<li>Web server with CGI support (CGI is not recommended)</li>
</ul>
<p>Databases</p>
<ul>
<li>MySQL 8.0 or higher</li>
<li>MariaDB 10.3 or higher</li>
<li>PostgreSQL 12.0 or higher</li>
<li>Oracle 19c or higher</li>
</ul>
<p>Browsers</p>
<ul>
<li>These browsers are NOT supported:
<ul>
<li>Internet Explorer before version 11</li>
<li>Firefox before version 31</li>
<li>Safari before version 6</li>
</ul> </li>
</ul>
<h1>Vendor</h1>
<p>This project is mainly funded by Znuny GmbH, Berlin. If you need professional support or consulting, feel free to contact us.</p>
<p><a href="https://www.znuny.com">Znuny Website</a></p>
+
+
+ cplusplus/papers
+ 2024-12-01T01:56:55Z
+ tag:github.com,2024-12-01:/cplusplus/papers
+
+ <p>ISO/IEC JTC1 SC22 WG21 paper scheduling and management</p><hr><h1>papers</h1>
<p>ISO/IEC JTC1 SC22 WG21 paper scheduling and management.</p>
<p>This repo is for tracking the status of papers and recording their progress, it is not for discussion of the content of papers.</p>
<p>Each proposal being actively considered by WG21 has an open issue. The labels on the issue indicate its current status.</p>
+
+
\ No newline at end of file
diff --git a/perl/weekly/index.xml b/perl/weekly/index.xml
new file mode 100644
index 00000000000..4182f408617
--- /dev/null
+++ b/perl/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Perl Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:10Z
+ Weekly Trending of Perl in GitHub
+
+
+ liske/needrestart
+ 2024-12-01T01:48:10Z
+ tag:github.com,2024-12-01:/liske/needrestart
+
+ <p>Restart daemons after library updates.</p><hr><h1>needrestart</h1>
<h2>About</h2>
<p><em>needrestart</em> checks which daemons need to be restarted after library upgrades. It is inspired by <em>checkrestart</em> from the <em>debian-goodies</em> package.</p>
<p>There are some hook scripts in the <code>ex/</code> directory (to be used with <em>apt</em> and <em>dpkg</em>. The scripts will call <em>needrestart</em> after any package installation/upgrades.</p>
<p><em>needrestart</em> should work on GNU/Linux. It has limited functionality on GNU/kFreeBSD since <code>/proc/<pid>/maps</code> does not show removed file links.</p>
<h2>Restarting Services</h2>
<p><em>needrestart</em> supports but does not require systemd (available since v0.6). If systemd is used you should use libpam-systemd, too. If needrestart detects systemd it will assume that libpam-systemd is used and relies on cgroup names to detect if a process belongs to a user session or a daemon. If you do not use libpam-systemd you should set $nrconf{has_pam_systemd} to 0 within needrestart.conf.</p>
<p>If systemd is not available or does not return a service name <em>needrestart</em> uses hooks to identify the corresponding System V init script. The shipped hooks support the following package managers:</p>
<ul>
<li><em>dpkg</em></li>
<li><em>rpm</em></li>
<li><em>pacman</em></li>
</ul>
<p>The <em>service</em> command is used to run the traditional System V init script.</p>
<h2>Frontends</h2>
<p><em>needrestart</em> uses a modular approach based on perl packages providing the user interface. The following frontends are shipped:</p>
<ul>
<li><em>NeedRestart::UI::Debconf</em> using <em>debconf</em></li>
<li><em>NeedRestart::UI::stdio</em> fallback using stdio interaction</li>
</ul>
<h2>Kernel & Microcode</h2>
<p><em>needrestart</em> 0.8 brings a obsolete kernel detection feature. Since <em>needrestart</em> 3.5 it is possible to filter kernel image filenames (required on <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.raspberry.md">Raspberry Pi</a>).</p>
<p>In <em>needrestart</em> 3.0 a <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.uCode.md">processor microcode update detection feature</a> for Intel CPUs has been added. Since <em>needrestart</em> 3.5 the AMD CPU support has been added.</p>
<h2>Interpreters</h2>
<p><em>needrestart</em> 0.8 brings an <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.Interp.md">interpreter scanning feature</a>. Interpreters not only map binary (shared) objects but also use plaintext source files. The interpreter detection tries to check for outdated source files since they may contain security issues, too. This is only a heuristic and might fail to detect all relevant source files. The following interpreter scanners are shipped:</p>
<ul>
<li><em>NeedRestart::Interp::Java</em></li>
<li><em>NeedRestart::Interp::Perl</em></li>
<li><em>NeedRestart::Interp::Python</em></li>
<li><em>NeedRestart::Interp::Ruby</em></li>
</ul>
<h2>Containers</h2>
<p><em>needrestart</em> 2.1 <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.Cont.md">detects some container technologies</a>. If a process is part of a container it might not be possible to restart it using Sys-V/systemd.</p>
<p>There are special perl packages (NeedRestart::CONT::*) implementing the container detection and restarting. The following container detectors are shipped:</p>
<ul>
<li><em>NeedRestart::CONT::docker</em></li>
<li><em>NeedRestart::CONT::LXC</em></li>
<li><em>NeedRestart::CONT::machined</em></li>
</ul>
<h2>Batch Mode</h2>
<p><em>needrestart</em> can be run in <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.batch.md">batch mode</a> to use the results within other programs or scripts.</p>
<p>There is also a <a href="https://raw.githubusercontent.com/liske/needrestart/master/README.nagios.md">nagios plugin mode</a> available.</p>
+
+
\ No newline at end of file
diff --git a/php/daily/index.xml b/php/daily/index.xml
index de54b71fc20..fafe9905706 100644
--- a/php/daily/index.xml
+++ b/php/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PHP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:07Z
+ 2024-12-01T01:37:30Z
Daily Trending of PHP in GitHub
\ No newline at end of file
diff --git a/php/monthly/index.xml b/php/monthly/index.xml
new file mode 100644
index 00000000000..0c3a4f8a42e
--- /dev/null
+++ b/php/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub PHP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:51Z
+ Monthly Trending of PHP in GitHub
+
+
+ PHPOffice/PhpSpreadsheet
+ 2024-12-01T01:56:51Z
+ tag:github.com,2024-12-01:/PHPOffice/PhpSpreadsheet
+
+ <p>A pure PHP library for reading and writing spreadsheet files</p><hr><h1>PhpSpreadsheet</h1>
<p><a href="https://github.com/PHPOffice/PhpSpreadsheet/actions"><img src="https://github.com/PHPOffice/PhpSpreadsheet/workflows/main/badge.svg?sanitize=true" alt="Build Status"></a> <a href="https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/?branch=master"><img src="https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/badges/quality-score.png?b=master" alt="Code Quality"></a> <a href="https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/?branch=master"><img src="https://scrutinizer-ci.com/g/PHPOffice/PhpSpreadsheet/badges/coverage.png?b=master" alt="Code Coverage"></a> <a href="https://packagist.org/packages/phpoffice/phpspreadsheet"><img src="https://img.shields.io/packagist/dt/PHPOffice/PhpSpreadsheet" alt="Total Downloads"></a> <a href="https://packagist.org/packages/phpoffice/phpspreadsheet"><img src="https://img.shields.io/github/v/release/PHPOffice/PhpSpreadsheet" alt="Latest Stable Version"></a> <a href="https://packagist.org/packages/phpoffice/phpspreadsheet"><img src="https://img.shields.io/github/license/PHPOffice/PhpSpreadsheet" alt="License"></a> <a href="https://gitter.im/PHPOffice/PhpSpreadsheet"><img src="https://img.shields.io/badge/GITTER-join%20chat-green.svg?sanitize=true" alt="Join the chat at https://gitter.im/PHPOffice/PhpSpreadsheet"></a></p>
<p>PhpSpreadsheet is a library written in pure PHP and offers a set of classes that allow you to read and write various spreadsheet file formats such as Excel and LibreOffice Calc.</p>
<h2>Installation</h2>
<p>See the <a href="https://phpspreadsheet.readthedocs.io/en/latest/#installation">install instructions</a>.</p>
<h2>Documentation</h2>
<p>Read more about it, including install instructions, in the <a href="https://phpspreadsheet.readthedocs.io">official documentation</a>. Or check out the <a href="https://phpoffice.github.io/PhpSpreadsheet">API documentation</a>.</p>
<p>Please ask your support questions on <a href="https://stackoverflow.com/questions/tagged/phpspreadsheet">StackOverflow</a>, or have a quick chat on <a href="https://gitter.im/PHPOffice/PhpSpreadsheet">Gitter</a>.</p>
<h2>Patreon</h2>
<p>I am now running a <a href="https://www.patreon.com/MarkBaker">Patreon</a> to support the work that I do on PhpSpreadsheet.</p>
<p>Supporters will receive access to articles about working with PhpSpreadsheet, and how to use some of its more advanced features.</p>
<p>Posts already available to Patreon supporters:</p>
<ul>
<li>The Dating Game
<ul>
<li>A look at how MS Excel (and PhpSpreadsheet) handle date and time values.</li>
</ul> </li>
<li>Looping the Loop
<ul>
<li>Advice on Iterating through the rows and cells in a worksheet.</li>
</ul> </li>
</ul>
<p>And for Patrons at levels actively using PhpSpreadsheet:</p>
<ul>
<li>Behind the Mask
<ul>
<li>A look at Number Format Masks.</li>
</ul> </li>
</ul>
<p>The Next Article (currently Work in Progress):</p>
<ul>
<li>Formula for Success
<ul>
<li>How to debug formulae that don't produce the expected result.</li>
</ul> </li>
</ul>
<p>My aim is to post at least one article each month, taking a detailed look at some feature of MS Excel and how to use that feature in PhpSpreadsheet, or on how to perform different activities in PhpSpreadsheet.</p>
<p>Planned posts for the future include topics like:</p>
<ul>
<li>Tables</li>
<li>Structured References</li>
<li>AutoFiltering</li>
<li>Array Formulae</li>
<li>Conditional Formatting</li>
<li>Data Validation</li>
<li>Value Binders</li>
<li>Images</li>
<li>Charts</li>
</ul>
<p>After a period of six months exclusive to Patreon supporters, articles will be incorporated into the public documentation for the library.</p>
<h2>PHPExcel vs PhpSpreadsheet ?</h2>
<p>PhpSpreadsheet is the next version of PHPExcel. It breaks compatibility to dramatically improve the code base quality (namespaces, PSR compliance, use of latest PHP language features, etc.).</p>
<p>Because all efforts have shifted to PhpSpreadsheet, PHPExcel will no longer be maintained. All contributions for PHPExcel, patches and new features, should target PhpSpreadsheet <code>master</code> branch.</p>
<p>Do you need to migrate? There is <a href="https://raw.githubusercontent.com/PHPOffice/PhpSpreadsheet/master/docs/topics/migration-from-PHPExcel.md">an automated tool</a> for that.</p>
<h2>License</h2>
<p>PhpSpreadsheet is licensed under <a href="https://github.com/PHPOffice/PhpSpreadsheet/raw/master/LICENSE">MIT</a>.</p>
+
+
+ larastan/larastan
+ 2024-12-01T01:56:51Z
+ tag:github.com,2024-12-01:/larastan/larastan
+
+ <p>⚗️ Adds code analysis to Laravel improving developer productivity and code quality.</p><hr><p align="center"> <img src="https://raw.githubusercontent.com/larastan/larastan/master/docs/logo.png" alt="Larastan Logo" width="300"> <br><br> <img src="https://raw.githubusercontent.com/larastan/larastan/master/docs/example.png" alt="Larastan Example" height="300"> </p>
<p align="center"> <a href="https://github.com/larastan/larastan/actions"><img src="https://github.com/larastan/larastan/actions/workflows/tests.yml/badge.svg?sanitize=true" alt="Build Status"></a> <a href="https://packagist.org/packages/larastan/larastan/stats"><img src="https://poser.pugx.org/larastan/larastan/d/total.svg?sanitize=true" alt="Total Downloads"></a> <a href="https://packagist.org/packages/larastan/larastan"><img src="https://poser.pugx.org/larastan/larastan/v/stable.svg?sanitize=true" alt="Latest Version"></a> <a href="https://github.com/larastan/larastan/raw/master/LICENSE.md"><img src="https://poser.pugx.org/larastan/larastan/license.svg?sanitize=true" alt="License"></a> </p>
<hr>
<h2>⚗️ About Larastan</h2>
<p>Larastan was created by <a href="https://github.com/canvural">Can Vural</a> and <a href="https://github.com/nunomaduro">Nuno Maduro</a>, got artwork designed by <a href="http://github.com/caneco">@Caneco</a>, is maintained by <a href="https://github.com/canvural">Can Vural</a> and <a href="https://github.com/szepeviktor">Viktor Szépe</a>, and is a <a href="https://phpstan.org/">PHPStan</a> extension for Laravel. Larastan focuses on <strong>finding errors in your code</strong>. It catches whole classes of bugs even <strong>before you write tests</strong> for the code.</p>
<ul>
<li>Adds static typing to Laravel to improve developer productivity and <strong>code quality</strong></li>
<li>Supports most of <a href="https://laravel.com">Laravel</a>'s <strong>beautiful magic</strong></li>
<li>Discovers bugs in your code</li>
</ul>
<blockquote>
<p>While by definition, "static analysis" doesn't load any of your application's code. Larastan boots your application's container, so it can resolve types that are only possible to compute at runtime. That's why we use the term "code analysis" instead of "static analysis".</p>
</blockquote>
<h3>Supported Laravel versions</h3>
<table>
<thead>
<tr>
<th>Laravel Version</th>
<th>Larastan Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>< 9</td>
<td>1.x</td>
</tr>
<tr>
<td>> 9.0 && <11.15</td>
<td>2.x</td>
</tr>
<tr>
<td>11.15+</td>
<td>3.0+</td>
</tr>
</tbody>
</table>
<h2>✨ Getting Started In 3 Steps</h2>
<blockquote>
<p><strong>Requires:</strong></p>
</blockquote>
<ul>
<li><strong><a href="https://php.net/releases/">PHP 8.2+</a></strong></li>
<li><strong><a href="https://github.com/laravel/laravel">Laravel 11.15+</a></strong></li>
</ul>
<p><strong>1</strong>: First, you may use <a href="https://getcomposer.org">Composer</a> to install Larastan as a development dependency into your Laravel project:</p>
<pre><code class="language-bash">composer require --dev "larastan/larastan:^3.0"
</code></pre>
<blockquote>
<p>Using Larastan for analysing Laravel packages? You may need to install <code>orchestra/testbench</code>.</p>
</blockquote>
<p><strong>2</strong>: Then, create a <code>phpstan.neon</code> or <code>phpstan.neon.dist</code> file in the root of your application. It might look like this:</p>
<pre><code>includes:
- vendor/larastan/larastan/extension.neon
- vendor/nesbot/carbon/extension.neon
parameters:
paths:
- app/
# Level 10 is the highest level
level: 5
# ignoreErrors:
# - '#PHPDoc tag @var#'
#
# excludePaths:
# - ./*/*/FileToBeExcluded.php
</code></pre>
<p>For all available options, please take a look at the PHPStan documentation: <strong><a href="https://phpstan.org/config-reference">https://phpstan.org/config-reference</a></strong></p>
<p><strong>3</strong>: Finally, you may start analyzing your code using the phpstan console command:</p>
<pre><code class="language-bash">./vendor/bin/phpstan analyse
</code></pre>
<p>If you are getting the error <code>Allowed memory size exhausted</code>, then you can use the <code>--memory-limit</code> option fix the problem:</p>
<pre><code class="language-bash">./vendor/bin/phpstan analyse --memory-limit=2G
</code></pre>
<h2>Ignoring errors</h2>
<p>Ignoring a specific error can be done either with a php comment or in the configuration file:</p>
<pre><code class="language-php">// @phpstan-ignore-next-line
$test->badMethod();
$test->badMethod(); // @phpstan-ignore-line
</code></pre>
<p>When ignoring errors in PHPStan's configuration file, they are ignored by writing a regex based on error messages:</p>
<pre><code class="language-yaml">parameters:
ignoreErrors:
- '#Call to an undefined method .*badMethod\(\)#'
</code></pre>
<h3>Baseline file</h3>
<p>In older codebases it might be hard to spend the time fixing all the code to pass a high PHPStan Level.</p>
<p>To get around this a baseline file can be generated. The baseline file will create a configuration file with all of the current errors, so new code can be written following a higher standard than the old code. (<a href="https://phpstan.org/user-guide/baseline">PHPStan Docs</a>)</p>
<pre><code class="language-bash">./vendor/bin/phpstan analyse --generate-baseline
</code></pre>
<h2>Rules</h2>
<p>A list of configurable rules specific to Laravel can be found <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/docs/rules.md">here</a>.</p>
<h2>Features</h2>
<p>A list of Larastan features can be found <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/docs/features.md">here</a>.</p>
<h2>Custom PHPDoc types</h2>
<p>A list of PHPDoc types specific to Larastan can be found <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/docs/custom-types.md">here</a>.</p>
<h2>Custom PHPStan config parameters</h2>
<p>A list of custom config parameters that you can use in your PHPStan config file can be found <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/docs/custom-config-parameters.md">here</a>.</p>
<h2>Errors To Ignore</h2>
<p>Some parts of Laravel are currently too magical for Larastan/PHPStan to understand. We listed common <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/docs/errors-to-ignore.md">errors to ignore</a>, add them as needed</p>
<h2>👊🏻 Contributing</h2>
<p>Thank you for considering contributing to Larastan. All the contribution guidelines are mentioned <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/CONTRIBUTING.md">here</a>.</p>
<h2>📖 License</h2>
<p>Larastan is an open-sourced software licensed under the <a href="https://raw.githubusercontent.com/larastan/larastan/3.x/LICENSE.md">MIT license</a>.</p>
+
+
+ matomo-org/device-detector
+ 2024-12-01T01:56:51Z
+ tag:github.com,2024-12-01:/matomo-org/device-detector
+
+ <p>The Universal Device Detection library will parse any User Agent and detect the browser, operating system, device used (desktop, tablet, mobile, tv, cars, console, etc.), brand and model.</p><hr><h1>DeviceDetector</h1>
<p><a href="https://packagist.org/packages/matomo/device-detector"><img src="https://poser.pugx.org/matomo/device-detector/v/stable" alt="Latest Stable Version"></a> <a href="https://packagist.org/packages/matomo/device-detector"><img src="https://poser.pugx.org/matomo/device-detector/downloads" alt="Total Downloads"></a> <a href="https://packagist.org/packages/matomo/device-detector"><img src="https://poser.pugx.org/matomo/device-detector/license" alt="License"></a></p>
<h2>Code Status</h2>
<p><img src="https://github.com/matomo-org/device-detector/workflows/PHPUnit/badge.svg?branch=master" alt="PHPUnit"> <img src="https://github.com/matomo-org/device-detector/workflows/PHPStan%20check/badge.svg?branch=master" alt="PHPStan"> <img src="https://github.com/matomo-org/device-detector/workflows/PHPCS%20check/badge.svg?branch=master" alt="PHPCS"> <img src="https://github.com/matomo-org/device-detector/workflows/YAML%20Lint/badge.svg?branch=master" alt="YAML Lint"> <a href="https://github.com/matomo-org/device-detector/actions/workflows/regular_expressions.yml"><img src="https://github.com/matomo-org/device-detector/actions/workflows/regular_expressions.yml/badge.svg?sanitize=true" alt="Validate regular Expressions"></a></p>
<p><a href="https://www.isitmaintained.com/project/matomo-org/device-detector" title="Average time to resolve an issue"><img src="https://www.isitmaintained.com/badge/resolution/matomo-org/device-detector.svg?sanitize=true" alt="Average time to resolve an issue"></a> <a href="https://www.isitmaintained.com/project/matomo-org/device-detector" title="Percentage of issues still open"><img src="https://www.isitmaintained.com/badge/open/matomo-org/device-detector.svg?sanitize=true" alt="Percentage of issues still open"></a></p>
<h2>Description</h2>
<p>The Universal Device Detection library that parses User Agents and Browser Client Hints to detect devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, feed readers, media players, PIMs, ...), operating systems, brands and models.</p>
<h2>Usage</h2>
<p>Using DeviceDetector with composer is quite easy. Just add <code>matomo/device-detector</code> to your projects requirements.</p>
<pre><code>composer require matomo/device-detector
</code></pre>
<p>And use some code like this one:</p>
<pre><code class="language-php">require_once 'vendor/autoload.php';
use DeviceDetector\ClientHints;
use DeviceDetector\DeviceDetector;
use DeviceDetector\Parser\Device\AbstractDeviceParser;
// OPTIONAL: Set version truncation to none, so full versions will be returned
// By default only minor versions will be returned (e.g. X.Y)
// for other options see VERSION_TRUNCATION_* constants in DeviceParserAbstract class
AbstractDeviceParser::setVersionTruncation(AbstractDeviceParser::VERSION_TRUNCATION_NONE);
$userAgent = $_SERVER['HTTP_USER_AGENT']; // change this to the useragent you want to parse
// Client Hints are optional
// If you want to use them your server must announce that it supports client hints, using the Accept-CH header to specify the hints that it is interested in receiving.
// See e.g. https://developer.mozilla.org/en-US/docs/Web/HTTP/Client_hints
$clientHints = ClientHints::factory($_SERVER);
$dd = new DeviceDetector($userAgent, $clientHints);
// OPTIONAL: Set caching method
// By default static cache is used, which works best within one php process (memory array caching)
// To cache across requests use caching in files or memcache
// $dd->setCache(new Doctrine\Common\Cache\PhpFileCache('./tmp/'));
// OPTIONAL: Set custom yaml parser
// By default Spyc will be used for parsing yaml files. You can also use another yaml parser.
// You may need to implement the Yaml Parser facade if you want to use another parser than Spyc or [Symfony](https://github.com/symfony/yaml)
// $dd->setYamlParser(new DeviceDetector\Yaml\Symfony());
// OPTIONAL: If called, getBot() will only return true if a bot was detected (speeds up detection a bit)
// $dd->discardBotInformation();
// OPTIONAL: If called, bot detection will completely be skipped (bots will be detected as regular devices then)
// $dd->skipBotDetection();
$dd->parse();
if ($dd->isBot()) {
// handle bots,spiders,crawlers,...
$botInfo = $dd->getBot();
} else {
$clientInfo = $dd->getClient(); // holds information about browser, feed reader, media player, ...
$osInfo = $dd->getOs();
$device = $dd->getDeviceName();
$brand = $dd->getBrandName();
$model = $dd->getModel();
}
</code></pre>
<p>Methods check device type:</p>
<pre><code class="language-php">$dd->isSmartphone();
$dd->isFeaturePhone();
$dd->isTablet();
$dd->isPhablet();
$dd->isConsole();
$dd->isPortableMediaPlayer();
$dd->isCarBrowser();
$dd->isTV();
$dd->isSmartDisplay();
$dd->isSmartSpeaker();
$dd->isCamera();
$dd->isWearable();
$dd->isPeripheral();
</code></pre>
<p>Methods check client type:</p>
<pre><code class="language-php">$dd->isBrowser();
$dd->isFeedReader();
$dd->isMobileApp();
$dd->isPIM();
$dd->isLibrary();
$dd->isMediaPlayer();
</code></pre>
<p>Get OS family:</p>
<pre><code class="language-php">use DeviceDetector\Parser\OperatingSystem;
$osFamily = OperatingSystem::getOsFamily($dd->getOs('name'));
</code></pre>
<p>Get browser family:</p>
<pre><code class="language-php">use DeviceDetector\Parser\Client\Browser;
$browserFamily = Browser::getBrowserFamily($dd->getClient('name'));
</code></pre>
<p>Instead of using the full power of DeviceDetector it might in some cases be better to use only specific parsers. If you aim to check if a given useragent is a bot and don't require any of the other information, you can directly use the bot parser.</p>
<pre><code class="language-php">require_once 'vendor/autoload.php';
use DeviceDetector\Parser\Bot AS BotParser;
$botParser = new BotParser();
$botParser->setUserAgent($userAgent);
// OPTIONAL: discard bot information. parse() will then return true instead of information
$botParser->discardDetails();
$result = $botParser->parse();
if (!is_null($result)) {
// do not do anything if a bot is detected
return;
}
// handle non-bot requests
</code></pre>
<h2>Using without composer</h2>
<p>Alternatively to using composer you can also use the included <code>autoload.php</code>. This script will register an autoloader to dynamically load all classes in <code>DeviceDetector</code> namespace.</p>
<p>Device Detector requires a YAML parser. By default <code>Spyc</code> parser is used. As this library is not included you need to include it manually or use another YAML parser.</p>
<pre><code class="language-php"><?php
include_once 'path/to/spyc/Spyc.php';
include_once 'path/to/device-detector/autoload.php';
use DeviceDetector\ClientHints;
use DeviceDetector\DeviceDetector;
use DeviceDetector\Parser\Device\AbstractDeviceParser;
// OPTIONAL: Set version truncation to none, so full versions will be returned
// By default only minor versions will be returned (e.g. X.Y)
// for other options see VERSION_TRUNCATION_* constants in DeviceParserAbstract class
AbstractDeviceParser::setVersionTruncation(AbstractDeviceParser::VERSION_TRUNCATION_NONE);
$userAgent = $_SERVER['HTTP_USER_AGENT']; // change this to the useragent you want to parse
$clientHints = ClientHints::factory($_SERVER); // client hints are optional
$dd = new DeviceDetector($userAgent, $clientHints);
// ...
</code></pre>
<h3>Caching</h3>
<p>By default, DeviceDetector uses a built-in array cache. To get better performance, you can use your own caching solution:</p>
<ul>
<li>You can create a class that implement <code>DeviceDetector\Cache\CacheInterface</code></li>
<li>Or if your project uses a <a href="https://www.php-fig.org/psr/psr-6/">PSR-6</a> or <a href="https://www.php-fig.org/psr/psr-16/">PSR-16</a> compliant caching system (like <a href="https://github.com/symfony/cache">symfony/cache</a> or <a href="https://github.com/matthiasmullie/scrapbook">matthiasmullie/scrapbook</a>), you can inject them the following way:</li>
</ul>
<pre><code class="language-php">// Example with PSR-6 and Symfony
$cache = new \Symfony\Component\Cache\Adapter\ApcuAdapter();
$dd->setCache(
new \DeviceDetector\Cache\PSR6Bridge($cache)
);
// Example with PSR-16 and ScrapBook
$cache = new \MatthiasMullie\Scrapbook\Psr16\SimpleCache(
new \MatthiasMullie\Scrapbook\Adapters\Apc()
);
$dd->setCache(
new \DeviceDetector\Cache\PSR16Bridge($cache)
);
// Example with Doctrine
$cache = new \Doctrine\Common\Cache\ApcuCache();
$dd->setCache(
new \DeviceDetector\Cache\DoctrineBridge($cache)
);
// Example with Laravel
$dd->setCache(
new \DeviceDetector\Cache\LaravelCache()
);
</code></pre>
<h2>Contributing</h2>
<h3>Hacking the library</h3>
<p>This is a free/libre library under license LGPL v3 or later.</p>
<p>Your pull requests and/or feedback is very welcome!</p>
<h3>Listing all user agents from your logs</h3>
<p>Sometimes it may be useful to generate the list of most used user agents on your website, extracting this list from your access logs using the following command:</p>
<pre><code>zcat ~/path/to/access/logs* | awk -F'"' '{print $6}' | sort | uniq -c | sort -rn | head -n20000 > /home/matomo/top-user-agents.txt
</code></pre>
<h3>Contributors</h3>
<p>Created by the <a href="https://matomo.org/team/">Matomo team</a>, Stefan Giehl, Matthieu Aubry, Michał Gaździk, Tomasz Majczak, Grzegorz Kaszuba, Piotr Banaszczyk and contributors.</p>
<p>Together we can build the best Device Detection library.</p>
<p>We are looking forward to your contributions and pull requests!</p>
<h2>Tests</h2>
<p>See also: <a href="https://developer.matomo.org/guides/tests">QA at Matomo</a></p>
<h3>Running tests</h3>
<pre><code>cd /path/to/device-detector
curl -sS https://getcomposer.org/installer | php
php composer.phar install
./vendor/bin/phpunit
</code></pre>
<h2>Device Detector for other languages</h2>
<p>There are already a few ports of this tool to other languages:</p>
<ul>
<li><strong>.NET</strong> <a href="https://github.com/totpero/DeviceDetector.NET">https://github.com/totpero/DeviceDetector.NET</a></li>
<li><strong>Ruby</strong> <a href="https://github.com/podigee/device_detector">https://github.com/podigee/device_detector</a></li>
<li><strong>JavaScript/TypeScript/NodeJS</strong> <a href="https://github.com/etienne-martin/device-detector-js">https://github.com/etienne-martin/device-detector-js</a></li>
<li><strong>NodeJS</strong> <a href="https://github.com/sanchezzzhak/node-device-detector">https://github.com/sanchezzzhak/node-device-detector</a></li>
<li><strong>Python 3</strong> <a href="https://github.com/thinkwelltwd/device_detector">https://github.com/thinkwelltwd/device_detector</a></li>
<li><strong>Crystal</strong> <a href="https://github.com/creadone/device_detector">https://github.com/creadone/device_detector</a></li>
<li><strong>Elixir</strong> <a href="https://github.com/elixir-inspector/ua_inspector">https://github.com/elixir-inspector/ua_inspector</a></li>
<li><strong>Java</strong> <a href="https://github.com/deevvicom/device-detector">https://github.com/deevvicom/device-detector</a></li>
<li><strong>Java</strong> <a href="https://github.com/PaniniGelato/java-device-detector">https://github.com/PaniniGelato/java-device-detector</a></li>
<li><strong>Rust</strong> <a href="https://github.com/simplecastapps/rust-device-detector">https://github.com/simplecastapps/rust-device-detector</a></li>
<li><strong>Rust</strong> <a href="https://github.com/stry-rs/device-detector">https://github.com/stry-rs/device-detector</a></li>
<li><strong>Go</strong> <a href="https://github.com/gamebtc/devicedetector">https://github.com/gamebtc/devicedetector</a></li>
<li><strong>Go</strong> <a href="https://github.com/umutbasal/device-detector-go">https://github.com/umutbasal/device-detector-go</a></li>
<li><strong>Go</strong> <a href="https://github.com/robicode/device-detector">https://github.com/robicode/device-detector</a></li>
</ul>
<h2>Icon packs</h2>
<p>If you are looking for icons to use alongside Device Detector, these repositories can be of use:</p>
<ul>
<li>Official <a href="https://github.com/matomo-org/matomo-icons/">Matomo</a> pack</li>
<li>Unofficial <a href="https://github.com/Simbiat/DeviceDetectorIcons">Simbiat</a> pack</li>
</ul>
<h2>What Device Detector is able to detect</h2>
<p>The lists below are auto generated and updated from time to time. Some of them might not be complete.</p>
<p><em>Last update: 2024/11/24</em></p>
<h3>List of detected operating systems:</h3>
<p>AIX, Android, Android TV, Alpine Linux, Amazon Linux, AmigaOS, Armadillo OS, AROS, tvOS, Arch Linux, AOSC OS, ASPLinux, Azure Linux, BackTrack, Bada, Baidu Yi, BeOS, BlackBerry OS, BlackBerry Tablet OS, blackPanther OS, Bliss OS, Brew, BrightSignOS, Caixa Mágica, CentOS, CentOS Stream, Clear Linux OS, ClearOS Mobile, Chrome OS, Chromium OS, China OS, CyanogenMod, Debian, Deepin, DragonFly, DVKBuntu, ElectroBSD, EulerOS, Fedora, Fenix, Firefox OS, Fire OS, Foresight Linux, Freebox, FreeBSD, FRITZ!OS, FydeOS, Fuchsia, Gentoo, GENIX, GEOS, gNewSense, GridOS, Google TV, HP-UX, Haiku OS, iPadOS, HarmonyOS, HasCodingOS, HELIX OS, IRIX, Inferno, Java ME, Joli OS, KaiOS, Kali, Kanotix, KIN OS, Knoppix, KreaTV, Kubuntu, GNU/Linux, LeafOS, LindowsOS, Linspire, Lineage OS, Liri OS, Loongnix, Lubuntu, Lumin OS, LuneOS, VectorLinux, Mac, Maemo, Mageia, Mandriva, MeeGo, MocorDroid, moonOS, Motorola EZX, Mint, MildWild, MorphOS, NetBSD, MTK / Nucleus, MRE, NeXTSTEP, NEWS-OS, Nintendo, Nintendo Mobile, Nova, OS/2, OSF1, OpenBSD, OpenVMS, OpenVZ, OpenWrt, Opera TV, Oracle Linux, Ordissimo, Pardus, PCLinuxOS, PICO OS, Plasma Mobile, PlayStation Portable, PlayStation, Proxmox VE, Puffin OS, PureOS, Qtopia, Raspberry Pi OS, Raspbian, Red Hat, Red Star, RedOS, Revenge OS, risingOS, RISC OS, Rocky Linux, Roku OS, Rosa, RouterOS, Remix OS, Resurrection Remix OS, REX, RazoDroiD, Sabayon, SUSE, Sailfish OS, Scientific Linux, SeewoOS, SerenityOS, Sirin OS, Slackware, Solaris, Star-Blade OS, Syllable, Symbian, Symbian OS, Symbian OS Series 40, Symbian OS Series 60, Symbian^3, TencentOS, ThreadX, Tizen, TiVo OS, TmaxOS, Turbolinux, Ubuntu, ULTRIX, UOS, VIDAA, ViziOS, watchOS, Wear OS, WebTV, Whale OS, Windows, Windows CE, Windows IoT, Windows Mobile, Windows Phone, Windows RT, WoPhone, Xbox, Xubuntu, YunOS, Zenwalk, ZorinOS, iOS, palmOS, Webian, webOS</p>
<h3>List of detected browsers:</h3>
<p>Via, Pure Mini Browser, Pure Lite Browser, Raise Fast Browser, Rabbit Private Browser, Fast Browser UC Lite, Fast Explorer, Lightning Browser, Cake Browser, IE Browser Fast, Vegas Browser, OH Browser, OH Private Browser, XBrowser Mini, Sharkee Browser, Lark Browser, Pluma, Anka Browser, Azka Browser, Dragon Browser, Easy Browser, Dark Web Browser, Dark Browser, 18+ Privacy Browser, 115 Browser, 1DM Browser, 1DM+ Browser, 2345 Browser, 360 Secure Browser, 360 Phone Browser, 7654 Browser, Avant Browser, ABrowse, Acoo Browser, AdBlock Browser, Adult Browser, Ai Browser, Airfind Secure Browser, ANT Fresco, ANTGalio, Aloha Browser, Aloha Browser Lite, ALVA, Amaya, Amaze Browser, Amerigo, Amigo, Android Browser, AOL Explorer, AOL Desktop, AOL Shield, AOL Shield Pro, Aplix, AppBrowzer, AppTec Secure Browser, APUS Browser, Arora, Arctic Fox, Amiga Voyager, Amiga Aweb, APN Browser, Arachne, Arc Search, Armorfly Browser, Arvin, Ask.com, Asus Browser, Atom, Atomic Web Browser, Atlas, Avast Secure Browser, AVG Secure Browser, Avira Secure Browser, AwoX, Awesomium, Basic Web Browser, Beaker Browser, Beamrise, BF Browser, BlackBerry Browser, Bluefy, BrowseHere, Browser Hup Pro, Baidu Browser, Baidu Spark, Bang, Bangla Browser, Basilisk, Belva Browser, Beyond Private Browser, Beonex, Berry Browser, Bitchute Browser, BizBrowser, BlackHawk, Bloket, Bunjalloo, B-Line, Black Lion Browser, Blue Browser, Bonsai, Borealis Navigator, Brave, BriskBard, BroKeep Browser, Browspeed Browser, BrowseX, Browzar, Browlser, Browser Mini, BrowsBit, Biyubi, Byffox, BXE Browser, Camino, Catalyst, Catsxp, Cave Browser, CCleaner, CG Browser, ChanjetCloud, Chedot, Cherry Browser, Centaury, Cliqz, Coc Coc, CoolBrowser, Colibri, Columbus Browser, Comodo Dragon, Coast, Charon, CM Browser, CM Mini, Chrome Frame, Headless Chrome, Chrome, Chrome Mobile iOS, Conkeror, Chrome Mobile, Chowbo, Classilla, CoolNovo, Colom Browser, CometBird, Comfort Browser, COS Browser, Cornowser, Chim Lac, ChromePlus, Chromium, Chromium GOST, Cyberfox, Cheshire, Cromite, Crow Browser, Crusta, Craving Explorer, Crazy Browser, Cunaguaro, Chrome Webview, CyBrowser, dbrowser, Peeps dBrowser, Dark Web, Dark Web Private, Debuggable Browser, Decentr, Deepnet Explorer, deg-degan, Deledao, Delta Browser, Desi Browser, DeskBrowse, Dezor, Diigo Browser, DoCoMo, Dolphin, Dolphin Zero, Dorado, Dot Browser, Dooble, Dillo, DUC Browser, DuckDuckGo Privacy Browser, East Browser, Ecosia, Edge WebView, Every Browser, Epic, Elinks, EinkBro, Element Browser, Elements Browser, Eolie, Explore Browser, eZ Browser, EudoraWeb, EUI Browser, GNOME Web, G Browser, Espial TV Browser, fGet, Falkon, Faux Browser, Fire Browser, Fiery Browser, Firefox Mobile iOS, Firebird, Fluid, Fennec, Firefox, Firefox Focus, Firefox Reality, Firefox Rocket, Firefox Klar, Float Browser, Flock, Floorp, Flow, Flow Browser, Firefox Mobile, Fireweb, Fireweb Navigator, Flash Browser, Flast, Flyperlink, FOSS Browser, FreeU, Freedom Browser, Frost, Frost+, Fulldive, Galeon, Gener8, Ghostery Privacy Browser, GinxDroid Browser, Glass Browser, Godzilla Browser, Good Browser, Google Earth, Google Earth Pro, GOG Galaxy, GoBrowser, GoKu, GO Browser, GreenBrowser, Habit Browser, Halo Browser, Harman Browser, HasBrowser, Hawk Turbo Browser, Hawk Quick Browser, Helio, Hexa Web Browser, Hi Browser, hola! Browser, Holla Web Browser, HotBrowser, HotJava, HONOR Browser, HTC Browser, Huawei Browser Mobile, Huawei Browser, HUB Browser, iBrowser, iBrowser Mini, IBrowse, iDesktop PC Browser, iCab, iCab Mobile, iNet Browser, Iridium, Iron Mobile, IceCat, IceDragon, Isivioo, IVVI Browser, Iceweasel, Impervious Browser, Incognito Browser, Inspect Browser, Insta Browser, Internet Explorer, Internet Browser Secure, Internet Webbrowser, Intune Managed Browser, Indian UC Mini Browser, InBrowser, Involta Go, IE Mobile, Iron, Japan Browser, Jasmine, JavaFX, Jelly, Jig Browser, Jig Browser Plus, JioSphere, JUZI Browser, K.Browser, Keepsafe Browser, KeepSolid Browser, Kids Safe Browser, Kindle Browser, K-meleon, K-Ninja, Konqueror, Kapiko, Keyboard Browser, Kinza, Kitt, Kiwi, Kode Browser, KUN, KUTO Mini Browser, Kylo, Kazehakase, Cheetah Browser, Ladybird, Lagatos Browser, Legan Browser, Lexi Browser, Lenovo Browser, LieBaoFast, LG Browser, Light, Lightning Browser Plus, Lilo, Links, Liri Browser, LogicUI TV Browser, Lolifox, Lotus, Lovense Browser, LT Browser, LuaKit, LUJO TV Browser, Lulumi, Lunascape, Lunascape Lite, Lynx, Lynket Browser, Mandarin, MarsLab Web Browser, MaxBrowser, mCent, MicroB, NCSA Mosaic, Meizu Browser, Mercury, Me Browser, Mobile Safari, Midori, Midori Lite, MixerBox AI, Mobicip, Mi Browser, Mobile Silk, Mogok Browser, Motorola Internet Browser, Minimo, Mint Browser, Maxthon, MaxTube Browser, Maelstrom, Mises, Mmx Browser, MxNitro, Mypal, Monument Browser, MAUI WAP Browser, Naenara Browser, Navigateur Web, Naked Browser, Naked Browser Pro, NFS Browser, Ninetails, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Norton Private Browser, Nox Browser, NOMone VR Browser, NOOK Browser, NetSurf, NetFront, NetFront Life, NetPositive, Netscape, NextWord Browser, Ninesky, NTENT Browser, Nuanti Meta, Nuviu, Ocean Browser, Oculus Browser, Odd Browser, Opera Mini iOS, Obigo, Odin, Odin Browser, OceanHero, Odyssey Web Browser, Off By One, Office Browser, OhHai Browser, OnBrowser Lite, ONE Browser, Onion Browser, ONIONBrowser, Opera Crypto, Opera GX, Opera Neon, Opera Devices, Opera Mini, Opera Mobile, Opera, Opera Next, Opera Touch, Orbitum, Orca, Ordissimo, Oregano, Origin In-Game Overlay, Origyn Web Browser, OrNET Browser, Openwave Mobile Browser, OpenFin, Open Browser, Open Browser 4U, Open Browser fast 5G, Open Browser Lite, Open TV Browser, OmniWeb, Otter Browser, Owl Browser, OJR Browser, Palm Blazer, Pale Moon, Polypane, Prism, Oppo Browser, Opus Browser, Palm Pre, Puffin Cloud Browser, Puffin Incognito Browser, Puffin Secure Browser, Puffin Web Browser, Palm WebPro, Palmscape, Pawxy, Peach Browser, Perfect Browser, Perk, Phantom.me, Phantom Browser, Phoenix, Phoenix Browser, Photon, Pintar Browser, PirateBrowser, PICO Browser, PlayFree Browser, PocketBook Browser, Polaris, Polarity, PolyBrowser, Presearch, Privacy Browser, PrivacyWall, Privacy Explorer Fast Safe, Privacy Pioneer Browser, Private Internet Browser, Proxy Browser, Proxyium, Proxynet, ProxyFox, ProxyMax, Pi Browser, PronHub Browser, PSI Secure Browser, Reqwireless WebViewer, Roccat, Microsoft Edge, Qazweb, Qiyu, QJY TV Browser, Qmamu, Quick Search TV, QQ Browser Lite, QQ Browser Mini, QQ Browser, Quick Browser, Qutebrowser, Quark, QupZilla, Qwant Mobile, QtWeb, QtWebEngine, Rakuten Browser, Rakuten Web Search, Raspbian Chromium, RCA Tor Explorer, Realme Browser, Rekonq, RockMelt, Roku Browser, Samsung Browser, Samsung Browser Lite, Sailfish Browser, SberBrowser, Seewo Browser, SEMC-Browser, Sogou Explorer, Sogou Mobile Browser, SOTI Surf, Soul Browser, Soundy Browser, Safari, Safari Technology Preview, Safe Exam Browser, SalamWeb, Savannah Browser, SavySoda, Secure Browser, SFive, Shiira, Sidekick, SimpleBrowser, SilverMob US, Singlebox, Sizzy, Skye, Skyfire, SkyLeap, Seraphic Sraf, SiteKiosk, Sleipnir, SlimBoat, Slimjet, SP Browser, Sony Small Browser, Secure Private Browser, SecureX, Stampy Browser, 7Star, Smart Browser, Smart Search & Web Browser, Smart Lenovo Browser, Smooz, Snowshoe, Spark, Spectre Browser, Splash, Sputnik Browser, Sunrise, Sunflower Browser, SuperBird, Super Fast Browser, SuperFast Browser, Sushi Browser, surf, Surf Browser, Surfy Browser, Stargon, START Internet Browser, Stealth Browser, Steam In-Game Overlay, Streamy, Swiftfox, Swiftweasel, Seznam Browser, Sweet Browser, SX Browser, T+Browser, T-Browser, t-online.de Browser, TalkTo, Tao Browser, tararia, Thor, Tor Browser, TenFourFox, Tenta Browser, Tesla Browser, Tizen Browser, Tint Browser, TrueLocation Browser, TUC Mini Browser, TUSK, Tungsten, ToGate, Total Browser, TQ Browser, TweakStyle, TV Bro, TV-Browser Internet, U Browser, UBrowser, UC Browser, UC Browser HD, UC Browser Mini, UC Browser Turbo, Ui Browser Mini, UPhone Browser, UR Browser, Uzbl, Ume Browser, vBrowser, Vast Browser, VD Browser, Veera, Venus Browser, Vewd Browser, VibeMate, Nova Video Downloader Pro, Viasat Browser, Vivaldi, vivo Browser, Vivid Browser Mini, Vision Mobile Browser, Vertex Surf, VMware AirWatch, VMS Mosaic, Vonkeror, Vuhuv, Wear Internet Browser, Web Explorer, Web Browser & Explorer, Webian Shell, WebDiscover, WebPositive, Weltweitimnetz Browser, Wexond, Waterfox, Wave Browser, Wavebox, Whale Browser, Whale TV Browser, wOSBrowser, w3m, WeTab Browser, World Browser, Wolvic, Wukong Browser, Wyzo, YAGI, Yahoo! Japan Browser, Yandex Browser, Yandex Browser Corp, Yandex Browser Lite, Yaani Browser, Yo Browser, Yolo Browser, YouCare, YouBrowser, Yuzu Browser, xBrowser, MMBOX XBrowser, X Browser Lite, X-VPN, xBrowser Pro Super Fast, XNX Browser, XtremeCast, xStand, Xiino, XnBrowse, Xooloo Internet, Xvast, Zetakey, Zvu, Zirco Browser, Zordo Browser, ZTE Browser</p>
<h3>List of detected browser engines:</h3>
<p>WebKit, Blink, Trident, Text-based, Dillo, iCab, Elektra, Presto, Clecko, Gecko, KHTML, NetFront, Edge, NetSurf, Servo, Goanna, EkiohFlow, Arachne, LibWeb</p>
<h3>List of detected libraries:</h3>
<p>aiohttp, Akka HTTP, Android License Verification Library, AnyEvent HTTP, Apache HTTP Client, Aria2, Artifactory, Axios, Azure Blob Storage, Azure Data Factory, Babashka HTTP Client, Boto3, Buildah, BuildKit, C++ REST SDK, CakePHP, CarrierWave, Containerd, containers, cPanel HTTP Client, cpp-httplib, cri-o, curl, Cygwin, Cypress, Dart, Deno, docker, Down, Electron Fetch, Emacs, Embarcadero URI Client, ESP32 HTTP Client, Faraday, fasthttp, ffmpeg, FFUF, FileDownloader, Free Download Manager, GeoIP Update, git-annex, go-container registry, Go-http-client, Google HTTP Java Client, got, GRequests, gRPC-Java, GStreamer, Guzzle (PHP HTTP Client), gvfs, hackney, Harbor registry client, Helm, HTML Parser, http.rb, HTTP:Tiny, HTTPie, httplib2, httprs, HTTPX, HTTP_Request2, ICAP Client, Insomnia REST Client, iOS Application, IPinfo, Jakarta Commons HttpClient, Jaunt, Java, Java HTTP Client, jsdom, KaiOS Downloader, Kiwi TCMS, Kiwi TCMS API, libdnf, libpod, libsoup, Libsyn, LUA OpenResty NGINX, Mandrill PHP, Mechanize, Mikrotik Fetch, Msray-Plus, Node Fetch, OKDownload Library, OkHttp, Open Build Service, Pa11y, Perl, Perl REST::Client, PhantomJS, PHP cURL Class, Podgrab, Postman Desktop, PRDownloader, Python Requests, Python urllib, QbHttp, quic-go, r-curl, Radio Downloader, ReactorNetty, req, request, Requests, reqwest, REST Client for Ruby, RestSharp, Resty, resty-requests, ruby, Safari View Service, ScalaJ HTTP, Skopeo, SlimerJS, Slim Framework, Stealer, superagent, Symfony, Typhoeus, uclient-fetch, Ultimate Sitemap Parser, undici, Unirest for Java, urlgrabber (yum), uTorrent, Wget, Windows HTTP, WinHttp WinHttpRequest, WWW-Mechanize, XML-RPC</p>
<h3>List of detected media players:</h3>
<p>Alexa, Amarok, Audacious, Banshee, Boxee, Clementine, Deezer, DIGA, Downcast, FlyCast, Foobar2000, Google Podcasts, HTC Streaming Player, Hubhopper, iTunes, JHelioviewer, JRiver Media Center, Juice, Just Audio, Kasts, Kodi, MediaMonkey, Miro, MixerBox, MPlayer, mpv, MusicBee, Music Player Daemon, NexPlayer, Nightingale, QuickTime, Songbird, SONOS, Sony Media Go, Stagefright, StudioDisplay, SubStream, VLC, Winamp, Windows Media Player, XBMC, Xtream Player, YouView</p>
<h3>List of detected mobile apps:</h3>
<p>'sodes, +Simple, 1Password, 2tch, ActionExtension, Adobe Acrobat Reader, Adobe Creative Cloud, Adobe IPM, Adobe NGL, Adobe Synchronizer, Adori, Agora, Aha Radio 2, AIDA64, Airr, Airsonic, AliExpress, Alipay, AllHitMusicRadio, All You Can Books, Amazon Fire, Amazon Music, Amazon Shopping, Ameba, Anchor, AnchorFM, AndroidDownloadManager, Anghami, AntennaPod, AntiBrowserSpy, AN WhatsApp, Anybox, Anytime Podcast Player, APK Downloader, Apollo, Apple iMessage, Apple News, Apple Podcasts, Apple Reminders, Apple TV, Arvocast, ASUS Updater, Audacy, Audials, Audible, Audio, Audiobooks, Audio Now, Autoplius.lt, Avid Link, Awasu, Background Intelligent Transfer Service, Baidu Box App, Baidu Input, Ballz, Bank Millenium, Battle.net, BB2C, BBC News, Bear, Be Focused, BetBull, BeyondPod, Bible, Bible KJV, Binance, Bitcoin Core, Bitsboard, Bitwarden, Blackboard, Blitz, Blue Proxy, BlueStacks, Bolt, BonPrix, Bookmobile, Bookshelf, Boom, Boom360, Boomplay, Bose Music, Bose SoundTouch, bPod, Breez, Bridge, Broadcast, Broadway Podcast Network, Browser-Anonymizer, Browser app, BrowserPlus, Bullhorn, BuzzVideo, CamScanner, Capital, capsule.fm, Castamatic, Castaway, CastBox, Castro, Castro 2, CCleaner, CGN, ChMate, Chrome Update, Ciisaa, Citrix Workspace, Classic FM, Client, Clipbox+, Clovia, COAF SMART Citizen, Coinbase, Cooler, Copied, Cortana, Cosmicast, Covenant Eyes, CPod, CPU-Z, CrosswalkApp, Crypto.com DeFi Wallet, CSDN, Damus, Daum, De Standaard, De Telegraaf, DevCasts, DeviantArt, DingTalk, DIRECTV, Discord, DManager, Dogecoin Core, DoggCatcher, Don't Waste My Time!, douban App, DoubleTwist CloudPlayer, Doughnut, Douyin, Downcast, Downie, Downloader, Dr. Watson, DStream Air, Edge Update, EMAudioPlayer, Emby Theater, Epic Games Launcher, ESET Remote Administrator, eToro, Evolve Podcast, Expedia, Expo, F-Secure SAFE, Facebook, Facebook Audience Network, Facebook Groups, Facebook Lite, Facebook Messenger, Facebook Messenger Lite, faidr, Fathom, FeedR, FeedStation, Fiddler Classic, Files, Flipboard App, Flipp, FM WhatsApp, Focus Keeper, Focus Matrix, Fountain, Freespoke, Gaana, Garmin fenix 5X, Garmin Forerunner, GBWhatsApp, GetPodcast, Git, GitHub Desktop, GlobalProtect, GoEuro, Gold, GoldenPod, GoLoud, GoNative, Goodpods, GoodReader, Google Assistant, Google Drive, Google Fiber TV, Google Go, Google Lens, Google Nest Hub, Google Photos, Google Play Newsstand, Google Plus, Google Podcasts, Google Search App, Google Tag Manager, GroupMe, Guacamole, Hago, Hammel, HandBrake, HardCast, Hark Audio, Heart, HermesPod, HeyTapBrowser, HiCast, HideX, Hik-Connect, Himalaya, HiSearch, HisThumbnail, HistoryHound, Hotels.com, HP Smart, HTTP request maker, Huawei Mobile Services, HyperCatcher, iCatcher, iHeartRadio, IMO HD Video Calls & Chat, IMO International Calls & Chat, Instabridge, Instacast, Instagram, Instapaper, iPlayTV, IPTV, IPTV Pro, iVoox, Jam, JaneStyle, JioSaavn, Jitsi Meet, JJ2GO, Jungle Disk, Just Listen, Kajabi, KakaoTalk, Keeper Password Manager, Kids Listen, KidsPod, Kik, KKBOX, Klarna, KPN Veilig, Kwai, Kwai Pro, L.A. Times, Landis+Gyr AIM Browser, Lark, Laughable, Lazada, LBC, LG Player, Line, LinkedIn, Listen, LiSTNR, Liulo, Logi Options+, LoseIt!, Luminary, Macrium Reflect, MBolsa, Megaphone, MEmpresas, Menucast, Mercantile Bank of Michigan, MessengerX, Meta Business Suite, Metacast, MetaMask, MetaTrader, Microsoft Bing, Microsoft Copilot, Microsoft Lync, Microsoft Office, Microsoft Office Access, Microsoft Office Excel, Microsoft Office Mobile, Microsoft Office OneDrive for Business, Microsoft Office OneNote, Microsoft Office PowerPoint, Microsoft Office Project, Microsoft Office Publisher, Microsoft Office Visio, Microsoft Office Word, Microsoft OneDrive, Microsoft Power Query, Microsoft Start, Microsoft Store, Mimir, mobile.de, MobileSMS, Mojeek, MOMO, MoonFM, mowPod, Moya, MX Player, My Bentley, MyTuner, My Watch Party, My World, nate, Naver, NAVER Dictionary, NET.mede, Netflix, NewsArticle App, Newsly, Nextcloud, NPR, NRC, NRC Audio, NTV Mobil, NuMuKi Browser, Obsidian, OBS Studio, Odnoklassniki, OfferUp, Opal Travel, Opera News, Opera Updater, Orange Radio, Outcast, Overcast, Overhaul FM, Paint by Number, Palco MP3, Pandora, Papers, PeaCast, Perplexity, Petal Search, Pic Collage, Pinterest, Player FM, PLAYit, Plex Media Server, Pocket Casts, Podbay, Podbean, Podcast & Radio Addict, Podcast App, Podcast Guru, Podcastly, Podcast Player, Podcast Republic, Podcat, Podcatcher Deluxe, Podchaser, Podclipper, PodCruncher, Podeo, Podfriend, Podhero, Podimo, PodKast, Podkicker, Podkicker Classic, Podkicker Pro, PodLP, PodMe, PodMN, PodNL, Podopolo, Podplay, Pods, PodTrapper, podU, Podurama, Podverse, Podvine, Podyssey, PowerShell, Procast, PugPig Bolt, Q-municate, qBittorrent, QQ, QQMusic, QuickCast, Quicksilver, Quora, R, radio.at, radio.de, radio.dk, radio.es, radio.fr, radio.it, radio.net, radio.pl, radio.pt, radio.se, RadioApp, Radio Italiane, Radioline, Radio Next, RadioPublic, Rave Social, Razer Synapse, RDDocuments, Reddit, Redditor, rekordbox, Repod, Reuters News, Rhythmbox, RNPS Action Cards, Roblox, RoboForm, Rocket Chat, RSSDemon, RSSRadio, Rutube, SachNoi, Safari Search Helper, SafeIP, Samsung Magician, Samsung Podcasts, SearchCraft, ServeStream, Shadow, Shadowrocket, Shopee, ShowMe, Signal, Sina Weibo, Siri, SiriusXM, Skyeng, Skyeng Teachers, Skype, Skype for Business, Slack, Snapchat, Snipd, SoFi, SogouSearch App, SohuNews, Soldier, Sonnet, Sony PlayStation 5, SOOP, SoundOn, SoundWaves, SPORT1, Spotify, Spreaker, Startsiden, Stitcher, StoryShots, Streamlabs OBS, Stream Master, Strimio, Surfshark, Swinsian, Swoot, Taobao, Teams, Tencent Docs, The Crossword, The Epoch Times, The New York Times, The Wall Street Journal, Theyub, Threads, Thunder, tieba, TikTok, TikTok Lite, TIM, TiviMate, TopBuzz, TopSecret Chat, TownNews Now, TracePal, Trade Me, TradingView, Treble.fm, TRP Retail Locator, TuneIn Radio, TuneIn Radio Pro, Turtlecast, Tuya Smart Life, TVirl, twinkle, Twitch Studio, Twitter, Twitterrific, U-Cursos, Ubook Player, UCast, Uconnect LIVE, Uforia, Unibox, UnityPlayer, Viber, Victor Reader Stream 3, Victor Reader Stream New Generation, Victor Reader Stream Trek, Virgin Radio, Visha, Visual Studio Code, Vodacast, Vuhuv, Vuze, waipu.tv, Walla News, WatchFree+, Wattpad, Wayback Machine, WebDAV, WeChat, WeChat Share Extension, Whatplay, WhatsApp, WhatsApp+2, WhatsApp Business, Whisper, WH Questions, Windows Antivirus, Windows CryptoAPI, Windows Delivery Optimization, Windows Push Notification Services, Windows Update Agent, Wireshark, Wirtschafts Woche, WNYC, Word Cookies!, WPS Office, Wynk Music, Xiao Yu Zhou, XING, XShare, XSplit Broadcaster, Y8 Browser, Yahoo! Japan, Yahoo OneSearch, YakYak, Yandex, Yandex Music, Yapa, Yelp Mobile, YouTube, Youtube Music, Yo WhatsApp, Zalo, ZEIT ONLINE, Zen, ZEPETO, Zoho Chat, Zune and <em>mobile apps using <a href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a> or <a href="https://github.com/electron/electron">Electron</a></em></p>
<h3>List of detected PIMs (personal information manager):</h3>
<p>Airmail, Apple Mail, Barca, Basecamp, BathyScaphe, BlueMail, DAVdroid, eM Client, Evernote, Foxmail, Franz, Gmail, JaneView, Live5ch, Lotus Notes, mailapp, MailBar, Mailbird, Mail Master, Mailspring, Microsoft Outlook, NAVER Mail, Notion, Outlook Express, Postbox, Raindrop.io, Rambox Pro, SeaMonkey, Spicebird, The Bat!, Thunderbird, Windows Mail, Yahoo! Mail, Yahoo Mail</p>
<h3>List of detected feed readers:</h3>
<p>Akregator, Apple PubSub, BashPodder, Breaker, castero, castget, FeedDemon, Feeddler RSS Reader, gPodder, JetBrains Omea Reader, Liferea, NetNewsWire, Newsbeuter, NewsBlur, NewsBlur Mobile App, Newsboat, Playapod, PodPuppy, PritTorrent, Pulp, QuiteRSS, ReadKit, Reeder, RSS Bandit, RSS Junkie, RSSOwl, Stringer</p>
<h3>List of brands with detected devices:</h3>
<p>2E, 3GNET, 3GO, 3Q, 4Good, 4ife, 5IVE, 7 Mobile, 10moons, 360, 8848, A&K, A1, A95X, AAUW, Accent, Accesstyle, Ace, Aceline, Acer, Acteck, actiMirror, Adreamer, Adronix, Advan, Advance, Advantage Air, AEEZO, AFFIX, AfriOne, AGM, AG Mobile, AIDATA, Ainol, Airis, Airness, AIRON, Airpha, Airtel, Airties, AirTouch, AIS, Aiuto, Aiwa, Ajib, Akai, AKIRA, Alba, Alcatel, Alcor, ALDI NORD, ALDI SÜD, Alfawise, Alienware, Aligator, AllCall, AllDocube, ALLINmobile, Allview, Allwinner, Alps, Altech UEC, Altice, Altimo, altron, Altus, AMA, Amazon, Amazon Basics, AMCV, AMGOO, Amigoo, Amino, Amoi, ANBERNIC, ANCEL, Andowl, Angelcare, AngelTech, Anker, Anry, ANS, ANXONIT, AOC, Aocos, Aocwei, AOpen, Aoro, Aoson, AOYODKG, Apple, Aquarius, Archos, Arian Space, Arival, Ark, ArmPhone, Arnova, ARRIS, Artel, Artizlee, ArtLine, Arçelik, Asano, Asanzo, Ask, Aspera, ASSE, Assistant, Astro, Asus, AT&T, Athesi, Atlantic Electrics, Atmaca Elektronik, ATMAN, ATMPC, ATOL, Atom, Atouch, Atozee, Attila, Atvio, Audiovox, AUPO, AURIS, Autan, AUX, Avaya, Avenzo, AVH, Avvio, Awow, AWOX, AXEN, Axioo, AXXA, Axxion, AYA, AYYA, Azeyou, AZOM, Azumi Mobile, Azupik, b2m, Backcell, BAFF, BangOlufsen, Barnes & Noble, BARTEC, BASE, BAUHN, BBK, BB Mobile, BDF, BDQ, BDsharing, Beafon, Becker, Beeline, Beelink, Beetel, Beista, Beko, Bell, Bellphone, Benco, Benesse, BenQ, BenQ-Siemens, BenWee, Benzo, Beyond, Bezkam, BGH, Biegedy, Bigben, BIHEE, BilimLand, Billion, Billow, BioRugged, Bird, Bitel, Bitmore, Bittium, Bkav, Black Bear, Black Box, Black Fox, Blackpcs, Blackton, Blackview, Blaupunkt, Bleck, BLISS, Blloc, Blow, Blu, Bluboo, Bluebird, Bluedot, Bluegood, BlueSky, Bluewave, BluSlate, BMAX, Bmobile, BMW, BMXC, Bobarry, bogo, Bolva, Bookeen, Boost, Botech, Boway, bq, BrandCode, Brandt, BRAVE, Bravis, BrightSign, Brigmton, Brondi, BROR, BS Mobile, Bubblegum, Bundy, Bush, BuzzTV, BYD, BYJU'S, BYYBUO, C5 Mobile, CADENA, CAGI, Camfone, Canaima, Canal+, Canal Digital, Canguro, Capitel, Captiva, Carbon Mobile, Carrefour, Casio, Casper, Cat, Cavion, CCIT, Cecotec, Ceibal, Celcus, Celkon, Cell-C, Cellacom, CellAllure, Cellution, CENTEK, Centric, CEPTER, CG Mobile, CGV, Chainway, Changhong, CHCNAV, Cherry Mobile, Chico Mobile, ChiliGreen, China Mobile, China Telecom, Chuwi, C Idea, CipherLab, Citycall, CKK Mobile, Claresta, Clarmin, CLAYTON, ClearPHONE, Clementoni, Cloud, Cloudfone, Cloudpad, Clout, Clovertek, CMF, CnM, Cobalt, Coby Kyros, COLORROOM, Colors, Comio, Compal, Compaq, COMPUMAX, ComTrade Tesla, Conceptum, Concord, ConCorde, Condor, Connectce, Connex, Conquest, Continental Edison, Contixo, COOD-E, Coolpad, Coopers, CORN, Cosmote, Covia, Cowon, COYOTE, CPDEVICE, CreNova, Crescent, Cricket, Crius Mea, Crony, Crosscall, Crown, Ctroniq, Cube, CUBOT, Cuiud, Cultraview, CVTE, Cwowdefu, CX, Cyrus, D-Link, D-Tech, Daewoo, Danew, DangcapHD, Dany, Daria, DASS, Datalogic, Datamini, Datang, Datawind, Datsun, Dazen, DbPhone, Dbtel, Dcode, DEALDIG, Dell, Denali, Denver, Desay, DeWalt, DEXP, DEYI, DF, DGTEC, DIALN, Dialog, Dicam, Digi, Digicel, DIGICOM, Digidragon, DIGIFORS, Digihome, Digiland, Digit4G, Digma, DIJITSU, DIKOM, DIMO, Dinalink, Dinax, DING DING, DIORA, DISH, Disney, Ditecma, Diva, DiverMax, Divisat, DIXON, DL, DMM, DMOAO, DNS, DoCoMo, Doffler, Dolamee, Dom.ru, Doogee, Doopro, Doov, Dopod, Doppio, DORLAND, Doro, DPA, DRAGON, Dragon Touch, Dreamgate, DreamStar, DreamTab, Droidlogic, Droxio, DSDevices, DSIC, Dtac, DUDU AUTO, Dune HD, DUNNS Mobile, Durabook, Duubee, Dykemann, Dyon, E-Boda, E-Ceros, E-TACHI, E-tel, Eagle, EagleSoar, EAS Electric, Easypix, EBEN, EBEST, Echo Mobiles, ecom, ECON, ECOO, ECS, Edenwood, EE, EFT, EGL, EGOTEK, Ehlel, Einstein, EKINOX, EKO, Eks Mobility, EKT, ELARI, ELE-GATE, Elecson, Electroneum, ELECTRONIA, Elekta, Elektroland, Element, Elenberg, Elephone, Elevate, Elong Mobile, Eltex, Ematic, Emporia, ENACOM, Energizer, Energy Sistem, Engel, ENIE, Enot, eNOVA, Entity, Envizen, Ephone, Epic, Epik One, Epson, Equator, Ergo, Ericsson, Ericy, Erisson, Essential, Essentielb, eSTAR, ETOE, Eton, eTouch, Etuline, Eurocase, Eurostar, Evercoss, Everest, Everex, Everis, Evertek, Evolio, Evolveo, Evoo, EVPAD, EvroMedia, evvoli, EWIS, EXCEED, Exmart, ExMobile, EXO, Explay, Express LUCK, ExtraLink, Extrem, Eyemoo, EYU, Ezio, Ezze, F&U, F+, F2 Mobile, F150, Facebook, Facetel, Facime, Fairphone, Famoco, Famous, Fantec, FaRao Pro, Farassoo, FarEasTone, Fengxiang, Fenoti, FEONAL, Fero, FFF SmartLife, Figgers, FiGi, FiGO, FiiO, Filimo, FILIX, FinePower, Finlux, FireFly Mobile, FISE, FITCO, Fluo, Fly, FLYCAT, FLYCOAY, FMT, FNB, FNF, Fobem, Fondi, Fonos, FOODO, FORME, Formuler, Forstar, Fortis, FortuneShip, FOSSiBOT, Fourel, Four Mobile, Foxconn, FoxxD, FPT, free, Freetel, FreeYond, Frunsi, Fuego, Fujitsu, Funai, Fusion5, Future Mobile Technology, Fxtec, G-PLUS, G-TiDE, G-Touch, Galactic, Galaxy Innovations, Gamma, Garmin-Asus, Gateway, Gazer, GDL, Geanee, Geant, Gear Mobile, Gemini, General Mobile, Genesis, GEOFOX, Geotel, Geotex, GEOZON, Getnord, GFive, Gfone, Ghia, Ghong, Ghost, Gigabyte, Gigaset, Gini, Ginzzu, Gionee, GIRASOLE, Globex, Globmall, GlocalMe, Glofiish, GLONYX, Glory Star, GLX, GOCLEVER, Gocomma, GoGEN, GOLDBERG, GoldMaster, GoldStar, Gol Mobile, Goly, Gome, GoMobile, GOODTEL, Google, Goophone, Gooweel, GOtv, Gplus, Gradiente, Graetz, Grape, Great Asia, Gree, Green Lion, Green Orange, Greentel, Gresso, Gretel, GroBerwert, Grundig, Gtel, GTMEDIA, GTX, Guophone, GVC Pro, H96, H133, Hafury, Haier, Haipai, Haixu, Hamlet, Hammer, Handheld, HannSpree, Hanseatic, Hanson, HAOQIN, HAOVM, Hardkernel, Harper, Hartens, Hasee, Hathway, HDC, HeadWolf, HEC, Heimat, Helio, Hemilton, HERO, HexaByte, Hezire, Hi, Hi-Level, Hiberg, HiBy, High Q, Highscreen, HiGrace, HiHi, HiKing, HiMax, Hi Nova, HIPER, Hipstreet, Hiremco, Hisense, Hitachi, Hitech, HKC, HKPro, HLLO, HMD, HOFER, Hoffmann, HOLLEBERG, Homatics, Hometech, Homtom, Honeywell, HongTop, HONKUAHG, Hoozo, Hopeland, Horizon, Horizont, Hosin, Hotel, Hot Pepper, HOTREALS, Hotwav, How, HP, HTC, Huadoo, Huagan, Huavi, Huawei, Hugerock, Humanware, Humax, Hurricane, Huskee, Hyatta, Hykker, Hyrican, Hytera, Hyundai, Hyve, i-Cherry, I-INN, i-Joy, i-mate, i-mobile, I-Plus, iBall, iBerry, ibowin, iBrit, IconBIT, iData, iDino, iDroid, iFIT, iGet, iHome Life, iHunt, I KALL, Ikea, IKI Mobile, iKoMo, iKon, iKonia, IKU Mobile, iLA, iLepo, iLife, iMan, Imaq, iMars, iMI, IMO Mobile, Imose, Impression, iMuz, iNavi, INCAR, Inch, Inco, iNew, Infiniton, Infinix, InFocus, InfoKit, Infomir, InFone, Inhon, Inka, Inkti, InnJoo, Innos, Innostream, Inoi, iNo Mobile, iNOVA, inovo, INQ, Insignia, INSYS, Intek, Intel, Intex, Invens, Inverto, Invin, iOcean, IOTWE, iOutdoor, iPEGTOP, iPro, iQ&T, IQM, IRA, Irbis, iReplace, Iris, iRobot, iRola, iRulu, iSafe Mobile, iStar, iSWAG, IT, iTel, iTruck, IUNI, iVA, iView, iVooMi, ivvi, iWaylink, iXTech, iYou, iZotron, Jambo, JAY-Tech, Jedi, Jeep, Jeka, Jesy, JFone, Jiake, Jiayu, Jinga, Jin Tu, Jio, Jivi, JKL, Jolla, Joy, JoySurf, JPay, JREN, Jumper, Juniper Systems, Just5, JVC, JXD, K-Lite, K-Touch, Kaan, Kaiomy, Kalley, Kanji, Kapsys, Karbonn, Kata, KATV1, Kazam, Kazuna, KDDI, Kempler & Strauss, Kenbo, Kendo, Keneksi, KENSHI, KENWOOD, Kenxinda, Khadas, Kiano, kidiby, Kingbox, Kingstar, Kingsun, KINGZONE, Kinstone, Kiowa, Kivi, Klipad, KN Mobile, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, Koolnee, Kooper, KOPO, Korax, Koridy, Koslam, Kraft, KREZ, KRIP, KRONO, Krüger&Matz, KT-Tech, KUBO, KuGou, Kuliao, Kult, Kumai, Kurio, KVADRA, Kvant, Kydos, Kyocera, Kyowon, Kzen, KZG, L-Max, LAIQ, Land Rover, Landvo, Lanin, Lanix, Lark, Laser, Laurus, Lava, LCT, Leader Phone, Leagoo, Leben, LeBest, Lectrus, Ledstar, LeEco, Leelbox, Leff, Legend, Leke, Lemco, LEMFO, Lemhoov, Lenco, Lenovo, Leotec, Le Pan, Lephone, Lesia, Lexand, Lexibook, LG, Liberton, Lifemaxx, Lime, Lingbo, Lingwin, Linnex, Linsar, Linsay, Listo, LNMBBS, Loewe, Logic, Logic Instrument, Logicom, Logik, Logitech, LOKMAT, LongTV, Loview, Lovme, LPX-G, LT Mobile, Lumigon, Lumitel, Lumus, Luna, Luxor, Lville, LW, LYF, LYOTECH LABS, M-Horse, M-KOPA, M-Tech, M.T.T., M3 Mobile, M4tel, MAC AUDIO, Macoox, Mafe, MAG, MAGCH, Magicsee, Magnus, Majestic, Malata, Mango, Manhattan, Mann, Manta Multimedia, Mantra, Mara, Marshal, Mascom, Massgo, Masstel, Master-G, Mastertech, Matco Tools, Matrix, Maunfeld, Maxcom, Maxfone, Maximus, Maxtron, MAXVI, Maxwell, Maxwest, MAXX, Maze, Maze Speed, MBI, MBK, MBOX, MDC Store, MDTV, meanIT, Mecer, Mecool, Mediacom, MediaTek, Medion, MEEG, Megacable, MegaFon, MEGA VISION, Meitu, Meizu, Melrose, MeMobile, Memup, MEO, MESWAO, Meta, Metz, MEU, MicroMax, Microsoft, Microtech, Mightier, Minix, Mint, Mintt, Mio, Mione, mipo, Miray, Mitchell & Brown, Mito, Mitsubishi, Mitsui, MIVO, MIWANG, MIXC, MiXzo, MLAB, MLLED, MLS, MMI, Mobell, Mobicel, MobiIoT, Mobiistar, Mobile Kingdom, Mobiola, Mobistel, MobiWire, Mobo, Mobvoi, Modecom, Mode Mobile, Mofut, Moondrop, Mosimosi, Motiv, Motorola, Motorola Solutions, Movic, MOVISUN, Movitel, Moxee, mPhone, Mpman, MSI, MStar, MTC, MTN, Multilaser, MultiPOS, MwalimuPlus, MYFON, MyGica, MygPad, Mymaga, MyMobile, MyPhone (PH), myPhone (PL), Myria, Myros, Mystery, MyTab, MyWigo, N-one, Nabi, NABO, Nanho, Naomi Phone, NASCO, National, Navcity, Navitech, Navitel, Navon, NavRoad, NEC, Necnot, Nedaphone, Neffos, NEKO, Neo, neoCore, Neolix, Neomi, Neon IQ, Neoregent, NetBox, Netgear, Netmak, NETWIT, NeuImage, NeuTab, NEVIR, Newal, New Balance, New Bridge, Newgen, Newland, Newman, Newsday, NewsMy, Nexa, NEXBOX, Nexian, NEXON, NEXT, Next & NextStar, Nextbit, NextBook, NextTab, NGM, NG Optics, NGpon, Nikon, NINETEC, NINETOLOGY, Nintendo, nJoy, NOA, Noain, Nobby, Noblex, NOBUX, noDROPOUT, NOGA, Nokia, Nomi, Nomu, Noontec, Nordfrost, Nordmende, NORMANDE, NorthTech, Nos, Nothing, Nous, Novacom, Novex, Novey, NoviSea, NOVO, NTT West, NuAns, Nubia, NUU Mobile, NuVision, Nuvo, Nvidia, NYX Mobile, O+, O2, Oale, Oangcc, OASYS, Obabox, Ober, Obi, OCEANIC, Odotpad, Odys, Oilsky, OINOM, Ok, Okapi, Okapia, Oking, OKSI, OKWU, Olax, Olkya, Ollee, OLTO, Olympia, OMIX, Onda, OneClick, OneLern, OnePlus, Onida, Onix, Onkyo, ONN, ONVO, ONYX BOOX, Ookee, Ooredoo, OpelMobile, Openbox, Ophone, OPPO, Opsson, Optoma, Orange, Orange Pi, Orava, Orbic, Orbita, Orbsmart, Ordissimo, Orion, OSCAL, OTTO, OUJIA, Ouki, Oukitel, OUYA, Overmax, Ovvi, Owwo, OX TAB, OYSIN, Oysters, Oyyu, OzoneHD, P-UP, Pacific Research Alliance, Packard Bell, Padpro, PAGRAER, Paladin, Palm, Panacom, Panasonic, Panavox, Pano, Panodic, Panoramic, Pantech, PAPYRE, Parrot Mobile, Partner Mobile, PCBOX, PCD, PCD Argentina, PC Smart, PEAQ, Pelitt, Pendoo, Penta, Pentagram, Perfeo, Phicomm, Philco, Philips, Phonemax, phoneOne, Pico, PINE, Pioneer, Pioneer Computers, PiPO, PIRANHA, Pixela, Pixelphone, PIXPRO, Pixus, Planet Computers, Platoon, Play Now, Ployer, Plum, PlusStyle, Pluzz, PocketBook, POCO, Point Mobile, Point of View, Polar, PolarLine, Polaroid, Polestar, PolyPad, Polytron, Pomp, Poppox, POPTEL, Porsche, Portfolio, Positivo, Positivo BGH, PPTV, Premier, Premio, Prestigio, PRIME, Primepad, Primux, Pritom, Prixton, PROFiLO, Proline, Prology, ProScan, PROSONIC, Protruly, ProVision, PULID, Punos, Purism, PVBox, Q-Box, Q-Touch, Q.Bell, QFX, Qilive, QIN, QLink, QMobile, Qnet Mobile, QTECH, Qtek, Quantum, Quatro, Qubo, Quechua, Quest, Quipus, Qumo, Qware, QWATT, R-TV, Rakuten, Ramos, Raspberry, Ravoz, Raylandz, Razer, RCA Tablets, RCT, Reach, Readboy, Realix, Realme, RED, Redbean, Redfox, RedLine, Redway, Reeder, REGAL, RelNAT, Relndoo, Remdun, Renova, RENSO, rephone, Retroid Pocket, Revo, Revomovil, Rhino, Ricoh, Rikomagic, RIM, Ringing Bells, Rinno, Ritmix, Ritzviva, Riviera, Rivo, Rizzen, ROADMAX, Roadrover, Roam Cat, ROCH, Rocket, ROiK, Rokit, Roku, Rombica, Ross&Moor, Rover, RoverPad, Royole, RoyQueen, RTK, RT Project, RugGear, RuggeTech, Ruggex, Ruio, Runbo, Rupa, Ryte, S-Color, S-TELL, S2Tel, Saba, Safaricom, Sagem, Sagemcom, Saiet, SAILF, Salora, Samsung, Samtech, Samtron, Sanei, Sankey, Sansui, Santin, SANY, Sanyo, Savio, Sber, Schneider, Schok, Scoole, Scosmos, Seatel, SEBBE, Seeken, SEEWO, SEG, Sega, SEHMAX, Selecline, Selenga, Selevision, Selfix, SEMP TCL, Sencor, Sendo, Senkatel, SENNA, Senseit, Senwa, SERVO, Seuic, Sewoo, SFR, SGIN, Shanling, Sharp, Shift Phones, Shivaki, Shtrikh-M, Shuttle, Sico, Siemens, Sigma, Silelis, Silent Circle, Silva Schneider, Simbans, simfer, Simply, Singtech, Siragon, Sirin Labs, Siswoo, SK Broadband, SKG, SKK Mobile, Sky, Skyline, SkyStream, Skytech, Skyworth, Smadl, Smailo, Smart, Smartab, SmartBook, SMARTEC, Smart Electronic, Smartex, Smartfren, Smartisan, Smart Kassel, Smarty, Smooth Mobile, Smotreshka, SMT Telecom, SMUX, SNAMI, SobieTech, Soda, Softbank, Soho Style, Solas, SOLE, SOLO, Solone, Sonim, SONOS, Sony, Sony Ericsson, SOSH, SoulLink, Soundmax, Soyes, Spark, Sparx, SPC, Spectralink, Spectrum, Spice, Sprint, SPURT, SQOOL, SSKY, Star, Starlight, Starmobile, Starway, Starwind, STF Mobile, STG Telecom, STK, Stonex, Storex, StrawBerry, Stream, STRONG, Stylo, Subor, Sugar, Sumvision, Sunmax, Sunmi, Sunny, Sunstech, SunVan, Sunvell, SUNWIND, SuperBOX, Super General, SuperSonic, SuperTab, Supra, Supraim, Surfans, Surge, Suzuki, Sveon, Swipe, SWISSMOBILITY, Swisstone, Switel, SWOFY, Syco, SYH, Sylvania, Symphony, Syrox, System76, T-Mobile, T96, TADAAM, TAG Tech, Taiga System, Takara, Talius, Tambo, Tanix, TAUBE, TB Touch, TCL, TCL SCBC, TD Systems, TD Tech, TeachTouch, Technicolor, Technika, TechniSat, Technopc, TECHNOSAT, TechnoTrend, TechPad, TechSmart, Techstorm, Techwood, Teclast, Tecno Mobile, TecToy, TEENO, Teknosa, Tele2, Telefunken, Telego, Telenor, Telia, Telit, Telkom, Telly, Telma, TeloSystems, Telpo, Temigereev, TENPLUS, Teracube, Tesco, Tesla, TETC, Tetratab, teXet, ThL, Thomson, Thuraya, TIANYU, Tibuta, Tigers, Time2, Timovi, TIMvision, Tinai, Tinmo, TiPhone, Tivax, TiVo, TJC, TJD, TOKYO, Tolino, Tone, TOOGO, Tooky, Top-Tech, TopDevice, TOPDON, Topelotek, Top House, Toplux, TOPSHOWS, Topsion, Topway, Torex, Torque, TOSCIDO, Toshiba, Touchmate, Touch Plus, TOX, TPS, Transpeed, TrekStor, Trevi, TriaPlay, Trident, Trifone, Trimble, Trio, Tronsmart, True, True Slim, Tsinghua Tongfang, TTEC, TTfone, TTK-TV, TuCEL, Tunisie Telecom, Turbo, Turbo-X, TurboKids, TurboPad, Turkcell, Tuvio, TVC, TwinMOS, TWM, Twoe, TWZ, TYD, Tymes, Türk Telekom, U-Magic, U.S. Cellular, UD, UE, UGINE, Ugoos, Uhans, Uhappy, Ulefone, Umax, UMIDIGI, Umiio, Unblock Tech, Uniden, Unihertz, Unimax, Uniqcell, Uniscope, Unistrong, Unitech, United Group, UNIWA, Unknown, Unnecto, Unnion Technologies, UNNO, Unonu, Unowhy, UOOGOU, Urovo, UTime, UTOK, UTStarcom, UZ Mobile, V-Gen, V-HOME, V-HOPE, v-mobile, VAIO, VALE, VALEM, VALTECH, VANGUARD, Vankyo, VANWIN, Vargo, Vastking, VAVA, VC, VDVD, Vega, Veidoo, Vekta, Venso, Venstar, Venturer, VEON, Verico, Verizon, Vernee, Verssed, Versus, Vertex, Vertu, Verykool, Vesta, Vestel, VETAS, Vexia, VGO TEL, ViBox, Victurio, VIDA, Videocon, Videoweb, ViewSonic, VIIPOO, VIKUSHA, VILLAON, VIMOQ, Vinabox, Vinga, Vinsoc, Vios, Viper, Vipro, Virzo, Vision Technology, Vision Touch, Visual Land, Vitelcom, Vityaz, Viumee, Vivax, VIVIBright, VIVIMAGE, Vivo, VIWA, Vizio, Vizmo, VK Mobile, VKworld, VNPT Technology, VOCAL, Vodacom, Vodafone, VOGA, VOLIA, VOLKANO, Volla, Volt, Vonino, Vontar, Vorago, Vorcom, Vorke, Vormor, Vortex, Voto, VOX, Voxtel, Voyo, Vsmart, Vsun, VUCATIMES, Vue Micro, Vulcan, VVETIME, Völfen, W&O, WAF, Wainyok, Walker, Walton, Waltter, Wanmukang, WANSA, WE, We. by Loewe., Webfleet, Web TV, WeChip, Wecool, Weelikeit, Weiimi, Weimei, WellcoM, WELLINGTON, Western Digital, Westpoint, Wexler, White Mobile, Whoop, Wieppo, Wigor, Wiko, Wileyfox, Winds, Wink, Winmax, Winnovo, Winstar, Wintouch, Wiseasy, WIWA, WizarPos, Wizz, Wolder, Wolfgang, Wolki, WONDER, Wonu, Woo, Wortmann, Woxter, WOZIFAN, WS, X-AGE, X-BO, X-Mobile, X-TIGI, X-View, X.Vision, X88, X96, X96Q, Xcell, XCOM, Xcruiser, XElectron, XGEM, XGIMI, Xgody, Xiaodu, Xiaolajiao, Xiaomi, Xion, Xolo, Xoro, XPPen, XREAL, Xshitou, Xsmart, Xtouch, Xtratech, Xwave, XY Auto, Yandex, Yarvik, YASIN, YELLYOUTH, YEPEN, Yes, Yestel, Yezz, Yoka TV, Yooz, Yota, YOTOPT, Youin, Youwei, Ytone, Yu, Yuandao, YU Fly, YUHO, YUMKEM, YUNDOO, Yuno, YunSong, Yusun, Yxtel, Z-Kai, Zaith, Zamolxe, Zatec, Zealot, Zeblaze, Zebra, Zeeker, Zeemi, Zen, Zenek, Zentality, Zfiner, ZH&K, Zidoo, ZIFRO, Zigo, ZIK, Zinox, Ziox, Zonda, Zonko, Zoom, ZoomSmart, Zopo, ZTE, Zuum, Zync, ZYQ, Zyrex, ZZB, öwn</p>
<h3>List of detected bots:</h3>
<p>2GDPR, 2ip, 360 Monitoring, 360JK, 360Spider, 1001FirmsBot, Abonti, Aboundexbot, AccompanyBot, Acoon, AdAuth, Adbeat, AddThis.com, ADMantX, ADmantX Service Fetcher, Adsbot, Adscanner, AdsTxtCrawler, AdsTxtCrawlerTP, adstxtlab.com, Aegis, aHrefs Bot, AhrefsSiteAudit, aiHitBot, Alexa Crawler, Alexa Site Audit, Allloadin Favicon Bot, AlltheWeb, Amazon AdBot, Amazon Bot, Amazon ELB, Amazon Route53 Health Check, Amorank Spider, Analytics SEO Crawler, Ant, Anthropic AI, ApacheBench, Applebot, AppSignalBot, Arachni, archive.org bot, ArchiveBot, ArchiveBox, Arquivo.pt, ARSNova Filter System, Asana, Ask Jeeves, AspiegelBot, Automattic Analytics, Awario, Backlink-Check.de, BacklinkCrawler, BackupLand, Baidu Spider, Barkrowler, Barracuda Sentinel, BazQux Reader, BBC Forge URL Monitor, BBC Page Monitor, BDCbot, BDFetch, Better Uptime Bot, BingBot, Birdcrawlerbot, BitlyBot, BitSight, Blackbox Exporter, Blekkobot, BLEXBot Crawler, Bloglines, Bloglovin, Blogtrottr, BoardReader, BoardReader Blog Indexer, Botify, Bountii Bot, BrandVerity, Bravebot, BrightBot, BrightEdge, Browsershots, BUbiNG, Buck, BuiltWith, Butterfly Robot, Bytespider, CareerBot, Castopod, Castro 2, Catchpoint, CATExplorador, ccBot crawler, CensysInspect, Charlotte, Chartable, ChatGPT-User, CheckHost, CheckMark Network, Choosito, Chrome Privacy Preserving Prefetch Proxy, Cincraw, CISPA Web Analyzer, CLASSLA-web, ClaudeBot, Clickagy, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Cloudflare Custom Hostname Verification, Cloudflare Diagnostics, Cloudflare Health Checks, Cloudflare Observatory, Cloudflare Security Insights, Cloudflare Smart Transit, Cloudflare SSL Detector, Cloudflare Traffic Manager, CloudServerMarketSpider, Cocolyzebot, Cohere AI, Collectd, colly, CommaFeed, COMODO DCV, Comscore, ContentKing, Convertify, Cookiebot, Cotoyogi, Crawldad, Crawlson, Crawly Project, CriteoBot, CrowdTangle, CSS Certificate Spider, CSSCheck, CyberFind Crawler, Cyberscan, Cốc Cốc Bot, DaspeedBot, Datadog Agent, DataForSeoBot, datagnionbot, Datanyze, Dataprovider, DataXu, Daum, Dazoobot, Deepfield Genome, deepnoc, Deep SEARCH 9, DepSpid, Detectify, Diffbot, Discobot, Discord Bot, Disqus, DNSResearchBot, DomainAppender, Domain Codex, DomainCrawler, Domain Re-Animator Bot, Domain Research Project, Domains Project, DomainStatsBot, DomCop Bot, DotBot, Dotcom Monitor, Dubbotbot, DuckAssistBot, DuckDuckBot, ducks.party, DuplexWeb-Google, DynatraceSynthetic, Easou Spider, eCairn-Grabber, EFF Do Not Track Verifier, Elastic Synthetics, EMail Exractor, EmailWolf, Embedly, Entfer, evc-batch, Everyfeed, ExaBot, ExactSeek Crawler, Example3, Exchange check, Expanse, EyeMonit, Ezgif, Ezooms, eZ Publish Link Validator, FacebookBot, Facebook Crawler, Faveeo, Feedbin, FeedBurner, Feedly, Feedspot, Feed Wrangler, Femtosearch, Fever, Findxbot, Flipboard, FontRadar, fragFINN, FreeWebMonitoring, FreshRSS, Functionize, Gaisbot, GDNP, GeedoBot, GeedoProductSearch, Generic Bot, Genieo Web filter, Ghost Inspector, Gigablast, Gigabot, GitCrawlerBot, GitHubCopilotChat, Gluten Free Crawler, Gmail Image Proxy, Gobuster, Golfe, Goo, Google-CloudVertexBot, Google-Document-Conversion, Google-Safety, Google Apps Script, Google Area 120 Privacy Policy Fetcher, Googlebot, Googlebot News, Google Cloud Scheduler, Google Docs, Google Favicon, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Sheets, Google Slides, Google Stackdriver Monitoring, Google StoreBot, Google Structured Data Testing Tool, Google Transparency Report, Gowikibot, Gozle, GPTBot, Grammarly, Grapeshot, Gregarius, GTmetrix, GumGum Verity, hackermention, Hatena Bookmark, Hatena Favicon, Headline, Heart Rails Capture, Heritrix, Heureka Feed, htmlyse, HTTPMon, httpx, HuaweiWebCatBot, HubPages, HubSpot, ICC-Crawler, ichiro, IDG/IT, Iframely, IIS Site Analysis, ImageSift, Inetdex Bot, Infegy, InfoTigerBot, Inktomi Slurp, inoreader, Inspici, InsytfulBot, Intelligence X, Interactsh, InternetMeasurement, IONOS Crawler, IP-Guide Crawler, IPIP, IPS Agent, IsItWP, iTMS, JobboerseBot, JungleKeyThumbnail, K6, KadoBot, Kaspersky, KeyCDN Tools, Keys.so, Kiwi TCMS GitOps, KlarnaBot, KomodiaBot, Konturbot, Kouio, Kozmonavt, KStandBot, l9explore, l9tcpid, LAC IA Harvester, Larbin web crawler, LastMod Bot, LCC, leak.info, LeakIX, Let's Encrypt Validation, LetSearch, Lighthouse, Linespider, Linkdex Bot, LinkedIn Bot, LinkpadBot, LinkPreview, LinkWalker, LiveJournal, LTX71, Lumar, LumtelBot, Lycos, MaCoCu, MADBbot, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, MakeMerryBot, Marginalia, MariaDB/MySQL Knowledge Base, masscan, masscan-ng, Mastodon Bot, Matomo, Meanpath Bot, Mediatoolkit Bot, MegaIndex, MeltwaterNews, Meta-ExternalAgent, Meta-ExternalFetcher, MetaInspector, MetaJobBot, MicroAdBot, Microsoft Preview, Miniature.io, Mixnode, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Monitor Backlinks, Monsidobot, Montastic Monitor, MoodleBot Linkchecker, Morningscore Bot, MTRobot, MuckRack, Munin, MuscatFerret, Nagios check_http, NalezenCzBot, NameProtectBot, nbertaupete95, Neevabot, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, Netpeak Checker, NetResearchServer, NetSystemsResearch, NetTrack, Netvibes, NETZZAPPEN, NewsBlur, NewsGator, Newslitbot, NiceCrawler, Nimbostratus Bot, NLCrawler, Nmap, NodePing, Notify Ninja, Nutch-based Bot, Nuzzel, OAI-SearchBot, oBot, Octopus, Odin, Odnoklassniki Bot, Oh Dear, Omgili bot, OmtrBot, Onalytica, OnlineOrNot Bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, OSZKbot, Outbrain, Overcast Podcast Sync, OWLer, Pageburst, Page Modified Pinger, PagePeeker, PageThing, Pandalytics, Panscient, PaperLiBot, Paqlebot, parse.ly, PATHspider, PayPal IPN, PDR Labs, Peer39, PerplexityBot, Petal Bot, Phantomas, phpMyAdmin, PHP Server Monitor, Picsearch bot, Pigafetta, PingAdmin.Ru, Pingdom Bot, Pinterest, PiplBot, Plesk Screenshot Service, Plukkie, Pocket, Podroll Analyzer, PodUptime, Pompos, Prerender, PritTorrent, Probely, Project Patchwatch, Project Resonance, Prometheus, PRTG Network Monitor, Punk Map, Quantcast, QuerySeekerSpider, Quora Bot, Quora Link Preview, Qwantbot, Rainmeter, RamblerMail Image Proxy, RavenCrawler, Reddit Bot, RedekenBot, RenovateBot, Repo Lookout, ReqBin, Research Scan, Riddler, Robozilla, RocketMonitorBot, Rogerbot, ROI Hunter, RSSRadio Bot, RuxitSynthetic, Ryowl, SabsimBot, SafeDNSBot, Sandoba//Crawler, Scamadviser External Hit, Scooter, ScoutJet, Scraping Robot, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Sectigo DCV, security.txt scanserver, Seekport, Sellers.Guide, semaltbot, Semantic Scholar Bot, SemrushBot, Semrush Reputation Management, Sensika Bot, Sentry Bot, Senuto, Seobility, SEOENGBot, SEOkicks, SEOkicks-Robot, seolyt, Seolyt Bot, Seoscanners.net, Serendeputy Bot, Serenety, serpstatbot, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, sfFeedReader, ShopAlike, Shopify Partner, ShopWiki, SilverReader, SimplePie, Sirdata, SISTRIX Crawler, SISTRIX Optimizer, Site24x7 Defacement Monitor, Site24x7 Website Monitoring, SiteAuditBot, Sitebulb, Siteimprove, SitemapParser-VIPnytt, SiteOne Crawler, SiteScore, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, SMTBot, Snapchat Ads, Snapchat Proxy, Snap URL Preview Service, Sogou Spider, Soso Spider, Sparkler, Spawning AI, SpazioDati, Speedy, SpiderLing, Spinn3r, SplitSignalBot, Spotify, Sprinklr, Sputnik Bot, Sputnik Favicon Bot, Sputnik Image Bot, sqlmap, SSL Labs, start.me, Startpagina Linkchecker, Statista, StatOnline.ru, StatusCake, Steam Chat URL Lookup, Steve Bot, Stract, Sublinq, Substack Content Fetch, SuggestBot, Superfeedr Bot, SurdotlyBot, Survey Bot, Swiftbot, Swisscows Favicons, Synapse, t3versions, Taboolabot, TactiScout, Tag Inspector, Tarmot Gezgin, tchelebi, TelegramBot, Tenable.asm, TestCrawler, The British Library Legal Deposit Bot, The Knowledge AI, theoldreader, The Trade Desk Content, ThinkChaos, ThousandEyes, TigerBot, Timpibot, TinEye, TinEye Crawler, Tiny Tiny RSS, TLSProbe, TraceMyFile, Trendiction Bot, Trendsmap, Turnitin, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twingly Recon, Twitterbot, Twurly, UCSB Network Measurement, UkrNet Mail Proxy, uMBot, UniversalFeedParser, Uptime-Kuma, Uptimebot, UptimeRobot, Uptimia, URLAppendBot, URLinspector, URLSuMaBot, Vagabondo, ValidBot, Velen Public Web Crawler, Vercel Bot, VeryHip, Viber Url Downloader, VirusTotal Cloud, Visual Site Mapper Crawler, VK Robot, VK Share Button, vuhuvBot, VU Server Health Scanner, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C P3P Validator, W3C Unified Validator, Wappalyzer, WDG HTML Validator, WebbCrawler, WebCEO, WebDataStats, WebMon, Weborama, WebPageTest, WebPros, Website-info, WebSitePulse, WebThumbnail, webtru, Webwiki, WellKnownBot, WeSEE:Search, WeViKaBot, WhatCMS, WhatsMyIP.org, WhereGoes, Who.is Bot, Wibybot, WikiDo, Willow Internet Crawler, WireReaderBot, WooRank, WordPress, WordPress.com mShots, Workona, Wotbox, wp.com feedbot, XenForo, XoviBot, YaCy, Yahoo! Cache System, Yahoo! Japan, Yahoo! Japan ASR, Yahoo! Japan BRW, Yahoo! Japan WSC, Yahoo! Link Preview, Yahoo! Mail Proxy, Yahoo! Slurp, Yahoo Gemini, YaK, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, YouBot, Youdao Bot, Yourls, Yunyun Bot, Zaldamo, Zao, Ze List, Zeno, zgrab, Zookabot, ZoomBot, ZoominfoBot, Zotero Translation Server, ZumBot</p>
+
+
\ No newline at end of file
diff --git a/php/weekly/index.xml b/php/weekly/index.xml
new file mode 100644
index 00000000000..854c36a2283
--- /dev/null
+++ b/php/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub PHP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:18Z
+ Weekly Trending of PHP in GitHub
+
+
+ php/pie
+ 2024-12-01T01:48:18Z
+ tag:github.com,2024-12-01:/php/pie
+
+ <p>The PHP Installer for Extensions</p><hr><h1>🥧 PIE (PHP Installer for Extensions)</h1>
<p>You will need PHP 8.1 or newer to run PIE, but PIE can install an extension to any installed PHP version.</p>
<p>If you are an extension maintainer wanting to add PIE support to your extension, please read <a href="https://raw.githubusercontent.com/php/pie/main/docs/extension-maintainers.md">extension-maintainers</a>.</p>
<h2>Installing PIE</h2>
<h3>Manual installation</h3>
<ul>
<li>Download <code>pie.phar</code> either:
<ul>
<li><a href="https://github.com/php/pie/releases">latest stable release</a></li>
<li><a href="https://php.github.io/pie/pie-nightly.phar">latest unstable nightly</a></li>
</ul> </li>
<li>Verify the PHAR's source with <code>gh attestation verify pie.phar --repo php/pie</code></li>
<li>You may then invoke PIE with <code>php pie.phar <command></code></li>
</ul>
<p>Further installation details can be found in the <a href="https://raw.githubusercontent.com/php/pie/main/docs/usage.md">usage</a> docs. This documentation assumes you have moved <code>pie.phar</code> into your <code>$PATH</code>, e.g. <code>/usr/local/bin/pie</code> on non-Windows systems.</p>
<h2>Extensions that support PIE</h2>
<p>A list of extensions that support PIE can be found on <a href="https://packagist.org/extensions">https://packagist.org/extensions</a>.</p>
<h2>Installing an extension using PIE</h2>
<p>You can install an extension using the <code>install</code> command. For example, to install the <code>example_pie_extension</code> extension, you would run:</p>
<pre><code class="language-shell">$ pie install example/example-pie-extension
This command may need elevated privileges, and may prompt you for your password.
You are running PHP 8.3.10
Target PHP installation: 8.3.10 nts, on Linux/OSX/etc x86_64 (from /usr/bin/php8.3)
Found package: example/example-pie-extension:1.0.1 which provides ext-example_pie_extension
phpize complete.
Configure complete.
Build complete: /tmp/pie_downloader_66e0b1de73cdb6.04069773/example-example-pie-extension-769f906/modules/example_pie_extension.so
Install complete: /usr/lib/php/20230831/example_pie_extension.so
You must now add "extension=example_pie_extension" to your php.ini
$
</code></pre>
<h2>More documentation...</h2>
<p>The full documentation for PIE can be found in <a href="https://raw.githubusercontent.com/php/pie/main/docs/usage.md">usage</a> docs.</p>
+
+
\ No newline at end of file
diff --git a/pic/daily/index.xml b/pic/daily/index.xml
index e8c49c099d4..30b21e21016 100644
--- a/pic/daily/index.xml
+++ b/pic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:02Z
+ 2024-12-01T01:37:18Z
Daily Trending of Pic in GitHub
\ No newline at end of file
diff --git a/pic/monthly/index.xml b/pic/monthly/index.xml
new file mode 100644
index 00000000000..feac061f804
--- /dev/null
+++ b/pic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:49Z
+ Monthly Trending of Pic in GitHub
+
+
\ No newline at end of file
diff --git a/pic/weekly/index.xml b/pic/weekly/index.xml
new file mode 100644
index 00000000000..43e57dc5795
--- /dev/null
+++ b/pic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:09Z
+ Weekly Trending of Pic in GitHub
+
+
\ No newline at end of file
diff --git a/pickle/daily/index.xml b/pickle/daily/index.xml
index 513c8417494..941914a99a0 100644
--- a/pickle/daily/index.xml
+++ b/pickle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pickle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:01Z
+ 2024-12-01T01:37:18Z
Daily Trending of Pickle in GitHub
\ No newline at end of file
diff --git a/pickle/monthly/index.xml b/pickle/monthly/index.xml
new file mode 100644
index 00000000000..02d8d6ceba1
--- /dev/null
+++ b/pickle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pickle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:56:49Z
+ Monthly Trending of Pickle in GitHub
+
+
\ No newline at end of file
diff --git a/pickle/weekly/index.xml b/pickle/weekly/index.xml
new file mode 100644
index 00000000000..a10aea62bd3
--- /dev/null
+++ b/pickle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pickle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:09Z
+ Weekly Trending of Pickle in GitHub
+
+
\ No newline at end of file
diff --git a/picolisp/daily/index.xml b/picolisp/daily/index.xml
index 96e5cb18844..81f8d9610b8 100644
--- a/picolisp/daily/index.xml
+++ b/picolisp/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PicoLisp Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:17Z
+ 2024-12-01T01:37:33Z
Daily Trending of PicoLisp in GitHub
\ No newline at end of file
diff --git a/picolisp/monthly/index.xml b/picolisp/monthly/index.xml
new file mode 100644
index 00000000000..1f3e64838a2
--- /dev/null
+++ b/picolisp/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PicoLisp Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:00Z
+ Monthly Trending of PicoLisp in GitHub
+
+
\ No newline at end of file
diff --git a/picolisp/weekly/index.xml b/picolisp/weekly/index.xml
new file mode 100644
index 00000000000..83ae6666a84
--- /dev/null
+++ b/picolisp/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PicoLisp Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:22Z
+ Weekly Trending of PicoLisp in GitHub
+
+
\ No newline at end of file
diff --git a/piglatin/daily/index.xml b/piglatin/daily/index.xml
index 891642b9450..164a473b453 100644
--- a/piglatin/daily/index.xml
+++ b/piglatin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PigLatin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:16Z
+ 2024-12-01T01:37:34Z
Daily Trending of PigLatin in GitHub
\ No newline at end of file
diff --git a/piglatin/monthly/index.xml b/piglatin/monthly/index.xml
new file mode 100644
index 00000000000..862e346a2c5
--- /dev/null
+++ b/piglatin/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PigLatin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:00Z
+ Monthly Trending of PigLatin in GitHub
+
+
\ No newline at end of file
diff --git a/piglatin/weekly/index.xml b/piglatin/weekly/index.xml
new file mode 100644
index 00000000000..4e82765ab99
--- /dev/null
+++ b/piglatin/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PigLatin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:22Z
+ Weekly Trending of PigLatin in GitHub
+
+
\ No newline at end of file
diff --git a/pike/daily/index.xml b/pike/daily/index.xml
index 93db3bed5cc..588fe9bec89 100644
--- a/pike/daily/index.xml
+++ b/pike/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pike Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:17Z
+ 2024-12-01T01:37:34Z
Daily Trending of Pike in GitHub
\ No newline at end of file
diff --git a/pike/monthly/index.xml b/pike/monthly/index.xml
new file mode 100644
index 00000000000..79cda71336e
--- /dev/null
+++ b/pike/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pike Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:01Z
+ Monthly Trending of Pike in GitHub
+
+
\ No newline at end of file
diff --git a/pike/weekly/index.xml b/pike/weekly/index.xml
new file mode 100644
index 00000000000..c6f19b8b716
--- /dev/null
+++ b/pike/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pike Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:22Z
+ Weekly Trending of Pike in GitHub
+
+
\ No newline at end of file
diff --git a/plantuml/daily/index.xml b/plantuml/daily/index.xml
index d1811445435..18832185b74 100644
--- a/plantuml/daily/index.xml
+++ b/plantuml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PlantUML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:19Z
+ 2024-12-01T01:37:35Z
Daily Trending of PlantUML in GitHub
\ No newline at end of file
diff --git a/plantuml/monthly/index.xml b/plantuml/monthly/index.xml
new file mode 100644
index 00000000000..5c4c54874d5
--- /dev/null
+++ b/plantuml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PlantUML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:02Z
+ Monthly Trending of PlantUML in GitHub
+
+
\ No newline at end of file
diff --git a/plantuml/weekly/index.xml b/plantuml/weekly/index.xml
new file mode 100644
index 00000000000..8ea6257ad27
--- /dev/null
+++ b/plantuml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PlantUML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:24Z
+ Weekly Trending of PlantUML in GitHub
+
+
\ No newline at end of file
diff --git a/plpgsql/daily/index.xml b/plpgsql/daily/index.xml
index c1a594fbf93..2f037c74dd4 100644
--- a/plpgsql/daily/index.xml
+++ b/plpgsql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PLpgSQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:19Z
+ 2024-12-01T01:37:36Z
Daily Trending of PLpgSQL in GitHub
\ No newline at end of file
diff --git a/plpgsql/monthly/index.xml b/plpgsql/monthly/index.xml
new file mode 100644
index 00000000000..0f0b7c0f0a6
--- /dev/null
+++ b/plpgsql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PLpgSQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:02Z
+ Monthly Trending of PLpgSQL in GitHub
+
+
\ No newline at end of file
diff --git a/plpgsql/weekly/index.xml b/plpgsql/weekly/index.xml
new file mode 100644
index 00000000000..c005a8f5cad
--- /dev/null
+++ b/plpgsql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PLpgSQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:24Z
+ Weekly Trending of PLpgSQL in GitHub
+
+
\ No newline at end of file
diff --git a/plsql/daily/index.xml b/plsql/daily/index.xml
index cea66edecfe..58e50b2a915 100644
--- a/plsql/daily/index.xml
+++ b/plsql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PLSQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:19Z
+ 2024-12-01T01:37:36Z
Daily Trending of PLSQL in GitHub
\ No newline at end of file
diff --git a/plsql/monthly/index.xml b/plsql/monthly/index.xml
new file mode 100644
index 00000000000..dfa6d9b4cfb
--- /dev/null
+++ b/plsql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PLSQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:02Z
+ Monthly Trending of PLSQL in GitHub
+
+
\ No newline at end of file
diff --git a/plsql/weekly/index.xml b/plsql/weekly/index.xml
new file mode 100644
index 00000000000..06793b97570
--- /dev/null
+++ b/plsql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PLSQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:23Z
+ Weekly Trending of PLSQL in GitHub
+
+
\ No newline at end of file
diff --git a/pod-6/daily/index.xml b/pod-6/daily/index.xml
index 1832e4481f2..6d1b97b0611 100644
--- a/pod-6/daily/index.xml
+++ b/pod-6/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pod 6 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:21Z
+ 2024-12-01T01:37:37Z
Daily Trending of Pod 6 in GitHub
\ No newline at end of file
diff --git a/pod-6/monthly/index.xml b/pod-6/monthly/index.xml
new file mode 100644
index 00000000000..7ecad151e93
--- /dev/null
+++ b/pod-6/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pod 6 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:04Z
+ Monthly Trending of Pod 6 in GitHub
+
+
\ No newline at end of file
diff --git a/pod-6/weekly/index.xml b/pod-6/weekly/index.xml
new file mode 100644
index 00000000000..19b469ae59f
--- /dev/null
+++ b/pod-6/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pod 6 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:25Z
+ Weekly Trending of Pod 6 in GitHub
+
+
\ No newline at end of file
diff --git a/pod/daily/index.xml b/pod/daily/index.xml
index 85b72525696..cd312298264 100644
--- a/pod/daily/index.xml
+++ b/pod/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pod Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:20Z
+ 2024-12-01T01:37:37Z
Daily Trending of Pod in GitHub
\ No newline at end of file
diff --git a/pod/monthly/index.xml b/pod/monthly/index.xml
new file mode 100644
index 00000000000..7701a5266e2
--- /dev/null
+++ b/pod/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pod Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:03Z
+ Monthly Trending of Pod in GitHub
+
+
\ No newline at end of file
diff --git a/pod/weekly/index.xml b/pod/weekly/index.xml
new file mode 100644
index 00000000000..2daefd2eb39
--- /dev/null
+++ b/pod/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pod Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:25Z
+ Weekly Trending of Pod in GitHub
+
+
\ No newline at end of file
diff --git a/pogoscript/daily/index.xml b/pogoscript/daily/index.xml
index 29588f4dce6..c577dfc56b7 100644
--- a/pogoscript/daily/index.xml
+++ b/pogoscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PogoScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:20Z
+ 2024-12-01T01:37:38Z
Daily Trending of PogoScript in GitHub
\ No newline at end of file
diff --git a/pogoscript/monthly/index.xml b/pogoscript/monthly/index.xml
new file mode 100644
index 00000000000..5abb4f561fa
--- /dev/null
+++ b/pogoscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PogoScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:04Z
+ Monthly Trending of PogoScript in GitHub
+
+
\ No newline at end of file
diff --git a/pogoscript/weekly/index.xml b/pogoscript/weekly/index.xml
new file mode 100644
index 00000000000..4f957d0486a
--- /dev/null
+++ b/pogoscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PogoScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:25Z
+ Weekly Trending of PogoScript in GitHub
+
+
\ No newline at end of file
diff --git a/pony/daily/index.xml b/pony/daily/index.xml
index 9b2c1f0a753..15d63ad1a1a 100644
--- a/pony/daily/index.xml
+++ b/pony/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pony Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:21Z
+ 2024-12-01T01:37:38Z
Daily Trending of Pony in GitHub
\ No newline at end of file
diff --git a/pony/monthly/index.xml b/pony/monthly/index.xml
new file mode 100644
index 00000000000..66aa38c13d6
--- /dev/null
+++ b/pony/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pony Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:05Z
+ Monthly Trending of Pony in GitHub
+
+
\ No newline at end of file
diff --git a/pony/weekly/index.xml b/pony/weekly/index.xml
new file mode 100644
index 00000000000..c1f402cbbfa
--- /dev/null
+++ b/pony/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pony Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:26Z
+ Weekly Trending of Pony in GitHub
+
+
\ No newline at end of file
diff --git a/postcss/daily/index.xml b/postcss/daily/index.xml
index 528e6ff818c..f532b6e5b85 100644
--- a/postcss/daily/index.xml
+++ b/postcss/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PostCSS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:22Z
+ 2024-12-01T01:37:39Z
Daily Trending of PostCSS in GitHub
\ No newline at end of file
diff --git a/postcss/monthly/index.xml b/postcss/monthly/index.xml
new file mode 100644
index 00000000000..c3634617ff4
--- /dev/null
+++ b/postcss/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PostCSS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:05Z
+ Monthly Trending of PostCSS in GitHub
+
+
\ No newline at end of file
diff --git a/postcss/weekly/index.xml b/postcss/weekly/index.xml
new file mode 100644
index 00000000000..42451177a3b
--- /dev/null
+++ b/postcss/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PostCSS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:27Z
+ Weekly Trending of PostCSS in GitHub
+
+
\ No newline at end of file
diff --git a/postscript/daily/index.xml b/postscript/daily/index.xml
index d4f0a3036f6..d3abeb1f059 100644
--- a/postscript/daily/index.xml
+++ b/postscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PostScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:22Z
+ 2024-12-01T01:37:39Z
Daily Trending of PostScript in GitHub
\ No newline at end of file
diff --git a/postscript/monthly/index.xml b/postscript/monthly/index.xml
new file mode 100644
index 00000000000..5e78666be3b
--- /dev/null
+++ b/postscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PostScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:06Z
+ Monthly Trending of PostScript in GitHub
+
+
\ No newline at end of file
diff --git a/postscript/weekly/index.xml b/postscript/weekly/index.xml
new file mode 100644
index 00000000000..b5f139c18b0
--- /dev/null
+++ b/postscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PostScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:27Z
+ Weekly Trending of PostScript in GitHub
+
+
\ No newline at end of file
diff --git a/pov-ray-sdl/daily/index.xml b/pov-ray-sdl/daily/index.xml
index 3f761f6aafd..ecdeb638654 100644
--- a/pov-ray-sdl/daily/index.xml
+++ b/pov-ray-sdl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub POV-Ray SDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:23Z
+ 2024-12-01T01:37:41Z
Daily Trending of POV-Ray SDL in GitHub
\ No newline at end of file
diff --git a/pov-ray-sdl/monthly/index.xml b/pov-ray-sdl/monthly/index.xml
new file mode 100644
index 00000000000..fe193ef3cf2
--- /dev/null
+++ b/pov-ray-sdl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub POV-Ray SDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:06Z
+ Monthly Trending of POV-Ray SDL in GitHub
+
+
\ No newline at end of file
diff --git a/pov-ray-sdl/weekly/index.xml b/pov-ray-sdl/weekly/index.xml
new file mode 100644
index 00000000000..92408896f60
--- /dev/null
+++ b/pov-ray-sdl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub POV-Ray SDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:28Z
+ Weekly Trending of POV-Ray SDL in GitHub
+
+
\ No newline at end of file
diff --git a/powerbuilder/daily/index.xml b/powerbuilder/daily/index.xml
index 318726b41ba..cdbc9ddd2b5 100644
--- a/powerbuilder/daily/index.xml
+++ b/powerbuilder/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PowerBuilder Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:23Z
+ 2024-12-01T01:37:40Z
Daily Trending of PowerBuilder in GitHub
\ No newline at end of file
diff --git a/powerbuilder/monthly/index.xml b/powerbuilder/monthly/index.xml
new file mode 100644
index 00000000000..9b3cdd65fde
--- /dev/null
+++ b/powerbuilder/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PowerBuilder Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:07Z
+ Monthly Trending of PowerBuilder in GitHub
+
+
\ No newline at end of file
diff --git a/powerbuilder/weekly/index.xml b/powerbuilder/weekly/index.xml
new file mode 100644
index 00000000000..7d7888cd88e
--- /dev/null
+++ b/powerbuilder/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PowerBuilder Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:29Z
+ Weekly Trending of PowerBuilder in GitHub
+
+
\ No newline at end of file
diff --git a/powershell/daily/index.xml b/powershell/daily/index.xml
index f9ac640a724..cb63275880c 100644
--- a/powershell/daily/index.xml
+++ b/powershell/daily/index.xml
@@ -1,7 +1,14 @@
GitHub PowerShell Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:30Z
+ 2024-12-01T01:37:50Z
Daily Trending of PowerShell in GitHub
+
+ memstechtips/UnattendedWinstall
+ 2024-12-01T01:37:50Z
+ tag:github.com,2024-12-01:/memstechtips/UnattendedWinstall
+
+ <p>Personalized Unattended Answer Files that helps automatically debloat and customize Windows 10 & 11 during the installation process.</p><hr><h1>UnattendedWinstall</h1>
<h2>Introduction</h2>
<p>UnattendedWinstall leverages Microsoft's <a href="https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/update-windows-settings-and-scripts-create-your-own-answer-file-sxs?view=windows-11">Answer Files</a> (or Unattend files) to automate and customize Windows installations. <br> It enables modifications to Windows Settings and Packages directly in the Windows ISO during setup.</p>
<h3>Why Use an Answer File?</h3>
<h4>Security</h4>
<ul>
<li>Provides transparency by allowing inspection of all changes in the answer file.</li>
<li>Runs directly on official Windows ISOs from Microsoft, eliminating the need for unofficial sources.</li>
<li>Utilizes a Microsoft-supported feature designed for streamlined mass deployment of Windows installations.</li>
</ul>
<h4>Automation</h4>
<ul>
<li>Enables automated configuration across multiple devices, saving time and effort by eliminating repetitive manual setups.</li>
</ul>
<blockquote>
<p>[!NOTE] UnattendedWinstall has been tested and optimized for personal use. For those interested in customizing further, <a href="https://schneegans.de/windows/unattend-generator/">create your own answer file</a> following <a href="https://youtu.be/WyLiJl-NQU8">this video guide</a>.</p>
</blockquote>
<h3>Versions</h3>
<p><a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v2.1.0"><img src="https://img.shields.io/badge/Version-2.1.0%20Latest-0078D4?style=for-the-badge&logo=github&logoColor=white" alt="Version 2 Release (Latest)"></a> <a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v1.0.0"><img src="https://img.shields.io/badge/Version-1.0.0-FFA500?style=for-the-badge&logo=github&logoColor=white" alt="Version 1 Release"></a></p>
<h3>Support the Project</h3>
<p>If UnattendedWinstall has been useful to you, consider supporting the project, it really does help!</p>
<p><a href="https://paypal.me/memstech"><img src="https://img.shields.io/badge/Support-via%20PayPal-FFD700?style=for-the-badge&logo=paypal&logoColor=white" alt="Support via PayPal"></a></p>
<h3>Feedback and Community</h3>
<p>If you have feedback, suggestions, or need help with UnattendedWinstall, please feel free to join the discussion on GitHub or our Discord community:</p>
<p><a href="https://github.com/memstechtips/UnattendedWinstall/discussions"><img src="https://img.shields.io/badge/Join-the%20Discussion-2D9F2D?style=for-the-badge&logo=github&logoColor=white" alt="Join the Discussion"></a> <a href="https://www.discord.gg/zWGANV8QAX"><img src="https://img.shields.io/badge/Join-Discord%20Community-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord Community"></a></p>
<h2>Requirements</h2>
<ul>
<li>Windows 10 or Windows 11
<ul>
<li><em>(Tested on Windows 10 22H2 & Windows 11 24H2)</em></li>
<li><em>(32-bit, 64-bit and arm64 is supported)</em></li>
</ul> </li>
</ul>
<h2>What Does UnattendedWinstall Do?</h2>
<p>The UnattendedWinstall answer file comes with detailed descriptions for nearly all configurations and registry tweaks, which are available for inspection here on GitHub. For customization, download the answer file and open it in editors like <a href="https://www.cursor.com/">Cursor</a> or <a href="https://code.visualstudio.com/">VSCode</a>.</p>
<h3>Sources and Contributions</h3>
<details>
<summary>Click to Show</summary>
<ul>
<li><strong>Base Answer File Generation</strong>:
<ul>
<li><a href="https://schneegans.de/windows/unattend-generator/">Schneegans Unattend Generator</a></li>
</ul> </li>
<li><strong>Tweaks & Optimizations</strong>:
<ul>
<li><a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech WinUtil</a></li>
<li><a href="https://github.com/FR33THYFR33THY/Ultimate-Windows-Optimization-Guide">FR33THY's Ultimate Windows Optimization Guide</a></li>
</ul> </li>
<li><strong>Additional Tweaks</strong>:
<ul>
<li><a href="https://github.com/ntdevlabs/tiny11builder">Tiny11Builder</a></li>
<li><a href="https://www.tenforums.com/">Ten Forums</a></li>
<li><a href="https://www.elevenforum.com/">Eleven Forum</a></li>
<li><a href="https://winaerotweaker.com/">Winaero Tweaker</a></li>
</ul> </li>
</ul>
</details>
<h3>Key Features</h3>
<ul>
<li>Ability to choose Windows Edition (Pro is not enforced anymore as in v2.0.0)</li>
<li>Bypasses Windows 11 system requirements</li>
<li>Disables Windows Defender services by default
<ul>
<li><em>prompted to enable after Windows installation</em></li>
</ul> </li>
<li>Disables User Account Control by default
<ul>
<li><em>prompted to enable after Windows installation</em></li>
</ul> </li>
<li>Allows execution of PowerShell scripts by default</li>
<li>Skips forced Microsoft account creation during Windows setup</li>
<li>Removes preinstalled bloatware apps except Microsoft Edge, Notepad and Calculator
<ul>
<li>Copilot and Recall is Disabled.</li>
</ul> </li>
<li>Sets privacy-related registry keys to disable telemetry</li>
<li>Limits Windows Update to install only security updates for one year</li>
<li>Optimizes registry with various optimization and customization-related keys
<ul>
<li><em>See the "Set-RecommendedHKLMRegistry" and "Set-RecommendedHKCURegistry" functions for more information</em></li>
</ul> </li>
<li>Disables unnecessary scheduled tasks</li>
<li>Configures Windows services for optimal performance</li>
<li>Enables the Ultimate Performance power plan</li>
</ul>
<blockquote>
<p>[!NOTE] Use the <code>UWScript.ps1</code> file once Windows is installed to reapply or revert settings in case Windows Update resets some of the settings or if you encounter any issues.<br> It can also be used to achieve a similar experience to UnattendedWinstall on an existing Windows installation without reinstalling Windows.</p>
<hr>
<p><strong>Before Running the Script</strong></p>
<p>Ensure you open PowerShell as an administrator. Additionally, set the execution policy to allow script execution by running the following command:</p>
<pre><code class="language-powershell">Set-ExecutionPolicy Unrestricted
</code></pre>
<p>Running PowerShell with elevated permissions and enabling script execution will ensure that <code>UWScript.ps1</code> can apply the necessary system changes.</p>
</blockquote>
<h2>Usage Instructions</h2>
<p>To use an answer file, include <code>autounattend.xml</code> at the root of your Windows Installation Media to be executed during Windows setup.</p>
<blockquote>
<p>[!IMPORTANT]<br> Ensure the answer file is named <code>autounattend.xml</code>; otherwise, it won’t be recognized by the installer.</p>
</blockquote>
<hr>
<h3>Using Memory's <a href="https://github.com/memstechtips/WIMUtil">WIMUtil</a> (Highly Preferred)</h3>
<p>To use <strong>WIMUtil</strong>, follow these steps to launch PowerShell as an Administrator and run the installation script:</p>
<ol>
<li> <p><strong>Open PowerShell as Administrator:</strong></p>
<ul>
<li><strong>Windows 10/11</strong>: Right-click on the <strong>Start</strong> button and select <strong>Windows PowerShell (Admin)</strong> or <strong>Windows Terminal (Admin)</strong>. <br> PowerShell will open in a new window.</li>
</ul> </li>
<li> <p><strong>Confirm Administrator Privileges</strong>:</p>
<ul>
<li>If prompted by the User Account Control (UAC), click <strong>Yes</strong> to allow PowerShell to run as an administrator.</li>
</ul> </li>
<li> <p><strong>Paste and Run the Command</strong>:</p>
<ul>
<li>Copy the following command: <pre><code class="language-powershell">irm "https://github.com/memstechtips/WIMUtil/raw/main/src/WIMUtil.ps1" | iex
</code></pre> </li>
<li>To paste into PowerShell, <strong>Right-Click</strong> or press <strong>Ctrl + V</strong> in the PowerShell or Terminal window. <br> This should automatically paste your copied command.</li>
<li>Press <strong>Enter</strong> to execute the command.</li>
</ul> </li>
</ol>
<p>Once launched, <strong>WIMUtil</strong> guides you through a wizard:</p>
<ol>
<li><strong>Select or Download Windows ISO</strong></li>
<li><strong>Add Latest UnattendedWinstall Answer File Automatically</strong></li>
<li><strong>Extract and Add Current Device Drivers to Installation Media</strong></li>
<li><strong>Create New ISO with Customizations Included</strong></li>
<li><strong>Create a Bootable USB Flash Drive with <a href="https://github.com/ventoy/Ventoy">Ventoy</a></strong></li>
<li><strong>Copy the New ISO File to the Ventoy Flash Drive</strong></li>
<li><strong>Boot from the USB flash drive, choose your ISO & Install Windows</strong></li>
</ol>
<p>For more info, check out the official <a href="https://github.com/memstechtips/WIMUtil">WIMUtil</a> GitHub Repo.</p>
<hr>
<h3>Old Methods</h3>
<h4>Method 1: Create a Bootable Windows Installation USB</h4>
<ul>
<li><a href="https://youtu.be/pDEZDD_gEbo">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li> <p>Download the <code>autounattend.xml</code> file and save it on your computer.</p> </li>
<li> <p>Create a <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> Bootable Installation USB drive with <a href="https://rufus.ie/en/">Rufus</a> or the Media Creation Tool.</p>
<blockquote>
<p><strong>Important</strong></p>
<ul>
<li>Some users have reported issues with the Media Creation Tool when creating the Windows Installation USB. Use it at your own discretion.</li>
<li>When using Rufus, don’t select any of the checkboxes in “Customize Your Windows Experience,” as it creates another <code>autounattend.xml</code> file that might overwrite settings in the UnattendedWinstall file.</li>
</ul>
</blockquote> </li>
<li> <p>Copy the <code>autounattend.xml</code> file you downloaded in Step 1 to the root of the Bootable Windows Installation USB you created in Step 2.</p> </li>
<li> <p>Boot from the Windows Installation USB, do a clean install of Windows as normal, and the scripts will run automatically.</p> </li>
</ol>
</details>
<h4>Method 2: Create a Custom ISO File</h4>
<ul>
<li><a href="https://youtu.be/pDEZDD_gEbo?si=ChEGghEOLCyLSnp7&t=1117">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li>Download the <code>autounattend.xml</code> file and save it on your computer.</li>
<li>Download the <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> ISO file depending on the version you want.</li>
<li>Download and install <a href="https://anyburn.com/download.php">AnyBurn</a>
<ul>
<li>In AnyBurn, select the “Edit Image File” option.</li>
<li>Navigate to and select the Official Windows ISO file you downloaded in Step 2.</li>
<li>Click on “Add” and select the <code>autounattend.xml</code> file you downloaded in Step 1, or just click and drag the <code>autounattend.xml</code> into the AnyBurn window.</li>
<li>Click on “Next,” then on “Create Now.” You should be prompted to overwrite the ISO file; click on “Yes.”</li>
<li>Once the process is complete, close AnyBurn.</li>
</ul> </li>
<li>Use the ISO file to install Windows on a Virtual Machine OR use a program like <a href="https://rufus.ie/en/">Rufus</a> or <a href="https://github.com/ventoy/Ventoy">Ventoy</a> to create a bootable USB flash drive with the edited Windows ISO file.</li>
</ol>
<blockquote>
<p><strong>Important</strong></p>
<ul>
<li>When using Rufus, don’t select any of the checkboxes in “Customize Your Windows Experience,” as it creates another <code>autounattend.xml</code> file that might overwrite settings in the UnattendedWinstall file.</li>
</ul>
</blockquote>
<ol start="5">
<li>Boot from the Windows Installation USB, do a clean install of Windows as normal, and the scripts will run automatically.</li>
</ol>
</details>
<h4>Method 3: Use Ventoy Auto Install Plugin</h4>
<ul>
<li><a href="https://youtu.be/4AGZQJTyCOs">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li>Download the <code>autounattend.xml</code> file and save it on your computer.</li>
<li>Download the <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> ISO file, depending on the version you want.</li>
<li>Download and install <a href="https://github.com/ventoy/Ventoy">Ventoy</a> to your desired USB flash drive.</li>
<li>Prepare the folder structure:
<ul>
<li>In your newly created Ventoy USB disk, create the following folders: <code>ISO</code> and <code>Templates</code>. <br> <em>They should be at the root of the drive.</em></li>
<li>Inside of the <code>ISO</code> folder, create a new folder called <code>Windows</code>.</li>
<li>Copy your Windows ISO files in the <code>ISO\Windows</code> folder.</li>
<li>Copy your <code>autounattend.xml</code> into the <code>Templates</code> folder.</li>
</ul> </li>
<li>Start VentoyPlugson. Depending on your OS, the steps might differ.
<ul>
<li>On Windows, run the <code>VentoyPlugson.exe</code> file.</li>
<li>A new browser window should open up with a Ventoy web interface ready to go.</li>
<li>Select the <code>Auto Install Plugin</code> menu from the list.</li>
<li>Click on the <code>Add</code> button.</li>
<li>Select [parent] to make the whole Windows ISO folder benefit from the plugin.</li>
<li>In the Directory Path, paste in the absolute path to your <code>Windows</code> folder. <br> example: <code>F:\ISO\Windows</code> (Replace <code>F</code> with your drive letter.)</li>
<li>In the Template Path, paste in the absolute path to your <code>autounattend.xml</code> file. <br> example: <code>F:\Templates\autounattend.xml</code> (Replace <code>F</code> with your drive letter.) <br> (PSA: If you have more <code>autounattend.xml</code> files, you can add them later on!)</li>
<li>Click on <code>OK</code> and you should see a message saying that the configuration has been saved successfully.</li>
<li>Close the VentoyPlugson browser window and stop the VentoyPlugson application.</li>
</ul> </li>
<li>Boot from the Ventoy USB drive in the computer where you want to install windows.
<ul>
<li>After selecting a Windows ISO to boot from, you will be prompted to boot with the <code>/Templates/autounattend.xml</code> file.</li>
<li>Select that option and the <code>autounattend.xml</code> will be automatically executed during installation.</li>
</ul> </li>
</ol>
</details>
<h2>FAQ</h2>
<h3>How can I apply these settings to an existing Windows installation?</h3>
<ul>
<li>Run the <a href="https://github.com/memstechtips/UnattendedWinstall/raw/main/UWScript.ps1"><code>UWScript.ps1</code></a> file or use the <a href="https://github.com/ChrisTitusTech/winutil">Chris Titus Tech Windows Utility</a> (<a href="https://youtu.be/pldFPTnOCGM">Video</a>).</li>
</ul>
<h3>Can this answer file be used for an in-place upgrade?</h3>
<ul>
<li>No, in-place upgrades do not support answer files.</li>
</ul>
<h3>Why is Windows still updating automatically?</h3>
<ul>
<li>Feature updates are delayed for a year; however, security and driver updates continue as usual.</li>
</ul>
<h3>Why don't I have internet after installing Windows?</h3>
<details>
<summary>Click to Show Instructions</summary>
<p>If you’re unable to connect to the internet after installation, it’s likely because your Wi-Fi or LAN (Ethernet) drivers are missing. Windows sometimes doesn’t include all necessary drivers for network adapters, especially if they’re specific to your device.</p>
<p>To resolve this, follow these steps:</p>
<ol>
<li><strong>Download your network driver</strong> from the manufacturer’s website on another computer with internet access. Look for Wi-Fi or LAN drivers specific to your device model.</li>
<li><strong>Transfer the driver</strong> to your Windows installation via USB drive.</li>
<li><strong>Install the driver</strong> on your Windows system and restart if necessary.</li>
</ol>
<p>After installation, you should be able to connect to the internet.</p>
</details>
<h3>How can I access the previous "IoT-LTSC-Like," "Standard," and "Core" versions of the file(s)?</h3>
<ul>
<li>You still have access to the previous files here: <a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v1.0.0">Version 1.0.0 Release</a>.</li>
</ul>
<blockquote>
<p>[!NOTE]<br> You need to download the <code>Source Code.zip</code> file. Once extracted, you’ll have access to all the previous v1.0.0 files.</p>
</blockquote>
<h3>Why isn't Microsoft Edge Uninstalled?</h3>
<details>
<summary>Click to Show Explanation</summary>
<p>I spent a lot of time trying to find a way to uninstall Microsoft Edge during Windows installation. However, it was challenging because of differences between Windows 10 22H2 and Windows 11 24H2. My goal is to use Microsoft’s supported uninstall methods, and I plan to add an easy Edge removal option in future releases.</p>
<p>In the meantime, if you wish to remove Edge after Windows installation, consider using <a href="https://github.com/FR33THYFR33THY/Ultimate-Windows-Optimization-Guide/raw/main/6%20Windows/14%20Edge.ps1">this script by FR33THY</a>. FR33THY’s <em>Ultimate Windows Optimization Guide</em> was a major inspiration for version 2.0.0 of this project, and I highly recommend exploring it for additional Windows optimization tips.</p>
</details>
<h3>How can I add my own Registry Tweaks to v2.0.0 of the <code>autounattend.xml</code> file?</h3>
<details>
<summary>Click to Show Instructions</summary>
<p>You can also still add your own registry entries to the v2.0.0 file, and it is actually easier if you understand where to add it. I'll give a brief explanation.</p>
<p>For registry entries that apply to the local machine, i.e., <code>HKEY_LOCAL_MACHINE</code> registry keys, you can find the <code>function SetRecommendedHKLMRegistry</code> in the <code>autounattend.xml</code> file, see here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L1981">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L1981</a></p>
<p>and then add whatever registry entries you want to add in <code>.reg</code> format, like the rest of the entries are set, and just make sure you add it before the <code>"@</code> to make it part of the <code>.reg</code> file that will be generated, see here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3412">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3412</a></p>
<p>and it will then be applied to the registry.</p>
<p>Similarly, if you have <code>HKEY_CURRENT_USER</code> registry keys, you can add those to the <code>User Customization.ps1</code> file in the same way as explained above, starting here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3912">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3912</a> so below the <code>Windows Registry Editor Version 5.00</code> and then ending before the <code>"@</code> here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L4423">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L4423</a></p>
<blockquote>
<p><strong>Note</strong><br> The above links might not take you to the correct lines of code once new versions of the file are released, but it does take you to the correct lines on v2.0.0.</p>
</blockquote>
</details>
+
\ No newline at end of file
diff --git a/powershell/monthly/index.xml b/powershell/monthly/index.xml
new file mode 100644
index 00000000000..639c0f5dd8f
--- /dev/null
+++ b/powershell/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub PowerShell Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:08Z
+ Monthly Trending of PowerShell in GitHub
+
+
+ memstechtips/UnattendedWinstall
+ 2024-12-01T01:57:08Z
+ tag:github.com,2024-12-01:/memstechtips/UnattendedWinstall
+
+ <p>Personalized Unattended Answer Files that helps automatically debloat and customize Windows 10 & 11 during the installation process.</p><hr><h1>UnattendedWinstall</h1>
<h2>Introduction</h2>
<p>UnattendedWinstall leverages Microsoft's <a href="https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/update-windows-settings-and-scripts-create-your-own-answer-file-sxs?view=windows-11">Answer Files</a> (or Unattend files) to automate and customize Windows installations. <br> It enables modifications to Windows Settings and Packages directly in the Windows ISO during setup.</p>
<h3>Why Use an Answer File?</h3>
<h4>Security</h4>
<ul>
<li>Provides transparency by allowing inspection of all changes in the answer file.</li>
<li>Runs directly on official Windows ISOs from Microsoft, eliminating the need for unofficial sources.</li>
<li>Utilizes a Microsoft-supported feature designed for streamlined mass deployment of Windows installations.</li>
</ul>
<h4>Automation</h4>
<ul>
<li>Enables automated configuration across multiple devices, saving time and effort by eliminating repetitive manual setups.</li>
</ul>
<blockquote>
<p>[!NOTE] UnattendedWinstall has been tested and optimized for personal use. For those interested in customizing further, <a href="https://schneegans.de/windows/unattend-generator/">create your own answer file</a> following <a href="https://youtu.be/WyLiJl-NQU8">this video guide</a>.</p>
</blockquote>
<h3>Versions</h3>
<p><a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v2.1.0"><img src="https://img.shields.io/badge/Version-2.1.0%20Latest-0078D4?style=for-the-badge&logo=github&logoColor=white" alt="Version 2 Release (Latest)"></a> <a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v1.0.0"><img src="https://img.shields.io/badge/Version-1.0.0-FFA500?style=for-the-badge&logo=github&logoColor=white" alt="Version 1 Release"></a></p>
<h3>Support the Project</h3>
<p>If UnattendedWinstall has been useful to you, consider supporting the project, it really does help!</p>
<p><a href="https://paypal.me/memstech"><img src="https://img.shields.io/badge/Support-via%20PayPal-FFD700?style=for-the-badge&logo=paypal&logoColor=white" alt="Support via PayPal"></a></p>
<h3>Feedback and Community</h3>
<p>If you have feedback, suggestions, or need help with UnattendedWinstall, please feel free to join the discussion on GitHub or our Discord community:</p>
<p><a href="https://github.com/memstechtips/UnattendedWinstall/discussions"><img src="https://img.shields.io/badge/Join-the%20Discussion-2D9F2D?style=for-the-badge&logo=github&logoColor=white" alt="Join the Discussion"></a> <a href="https://www.discord.gg/zWGANV8QAX"><img src="https://img.shields.io/badge/Join-Discord%20Community-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord Community"></a></p>
<h2>Requirements</h2>
<ul>
<li>Windows 10 or Windows 11
<ul>
<li><em>(Tested on Windows 10 22H2 & Windows 11 24H2)</em></li>
<li><em>(32-bit, 64-bit and arm64 is supported)</em></li>
</ul> </li>
</ul>
<h2>What Does UnattendedWinstall Do?</h2>
<p>The UnattendedWinstall answer file comes with detailed descriptions for nearly all configurations and registry tweaks, which are available for inspection here on GitHub. For customization, download the answer file and open it in editors like <a href="https://www.cursor.com/">Cursor</a> or <a href="https://code.visualstudio.com/">VSCode</a>.</p>
<h3>Sources and Contributions</h3>
<details>
<summary>Click to Show</summary>
<ul>
<li><strong>Base Answer File Generation</strong>:
<ul>
<li><a href="https://schneegans.de/windows/unattend-generator/">Schneegans Unattend Generator</a></li>
</ul> </li>
<li><strong>Tweaks & Optimizations</strong>:
<ul>
<li><a href="https://github.com/ChrisTitusTech/winutil">ChrisTitusTech WinUtil</a></li>
<li><a href="https://github.com/FR33THYFR33THY/Ultimate-Windows-Optimization-Guide">FR33THY's Ultimate Windows Optimization Guide</a></li>
</ul> </li>
<li><strong>Additional Tweaks</strong>:
<ul>
<li><a href="https://github.com/ntdevlabs/tiny11builder">Tiny11Builder</a></li>
<li><a href="https://www.tenforums.com/">Ten Forums</a></li>
<li><a href="https://www.elevenforum.com/">Eleven Forum</a></li>
<li><a href="https://winaerotweaker.com/">Winaero Tweaker</a></li>
</ul> </li>
</ul>
</details>
<h3>Key Features</h3>
<ul>
<li>Ability to choose Windows Edition (Pro is not enforced anymore as in v2.0.0)</li>
<li>Bypasses Windows 11 system requirements</li>
<li>Disables Windows Defender services by default
<ul>
<li><em>prompted to enable after Windows installation</em></li>
</ul> </li>
<li>Disables User Account Control by default
<ul>
<li><em>prompted to enable after Windows installation</em></li>
</ul> </li>
<li>Allows execution of PowerShell scripts by default</li>
<li>Skips forced Microsoft account creation during Windows setup</li>
<li>Removes preinstalled bloatware apps except Microsoft Edge, Notepad and Calculator
<ul>
<li>Copilot and Recall is Disabled.</li>
</ul> </li>
<li>Sets privacy-related registry keys to disable telemetry</li>
<li>Limits Windows Update to install only security updates for one year</li>
<li>Optimizes registry with various optimization and customization-related keys
<ul>
<li><em>See the "Set-RecommendedHKLMRegistry" and "Set-RecommendedHKCURegistry" functions for more information</em></li>
</ul> </li>
<li>Disables unnecessary scheduled tasks</li>
<li>Configures Windows services for optimal performance</li>
<li>Enables the Ultimate Performance power plan</li>
</ul>
<blockquote>
<p>[!NOTE] Use the <code>UWScript.ps1</code> file once Windows is installed to reapply or revert settings in case Windows Update resets some of the settings or if you encounter any issues.<br> It can also be used to achieve a similar experience to UnattendedWinstall on an existing Windows installation without reinstalling Windows.</p>
<hr>
<p><strong>Before Running the Script</strong></p>
<p>Ensure you open PowerShell as an administrator. Additionally, set the execution policy to allow script execution by running the following command:</p>
<pre><code class="language-powershell">Set-ExecutionPolicy Unrestricted
</code></pre>
<p>Running PowerShell with elevated permissions and enabling script execution will ensure that <code>UWScript.ps1</code> can apply the necessary system changes.</p>
</blockquote>
<h2>Usage Instructions</h2>
<p>To use an answer file, include <code>autounattend.xml</code> at the root of your Windows Installation Media to be executed during Windows setup.</p>
<blockquote>
<p>[!IMPORTANT]<br> Ensure the answer file is named <code>autounattend.xml</code>; otherwise, it won’t be recognized by the installer.</p>
</blockquote>
<hr>
<h3>Using Memory's <a href="https://github.com/memstechtips/WIMUtil">WIMUtil</a> (Highly Preferred)</h3>
<p>To use <strong>WIMUtil</strong>, follow these steps to launch PowerShell as an Administrator and run the installation script:</p>
<ol>
<li> <p><strong>Open PowerShell as Administrator:</strong></p>
<ul>
<li><strong>Windows 10/11</strong>: Right-click on the <strong>Start</strong> button and select <strong>Windows PowerShell (Admin)</strong> or <strong>Windows Terminal (Admin)</strong>. <br> PowerShell will open in a new window.</li>
</ul> </li>
<li> <p><strong>Confirm Administrator Privileges</strong>:</p>
<ul>
<li>If prompted by the User Account Control (UAC), click <strong>Yes</strong> to allow PowerShell to run as an administrator.</li>
</ul> </li>
<li> <p><strong>Paste and Run the Command</strong>:</p>
<ul>
<li>Copy the following command: <pre><code class="language-powershell">irm "https://github.com/memstechtips/WIMUtil/raw/main/src/WIMUtil.ps1" | iex
</code></pre> </li>
<li>To paste into PowerShell, <strong>Right-Click</strong> or press <strong>Ctrl + V</strong> in the PowerShell or Terminal window. <br> This should automatically paste your copied command.</li>
<li>Press <strong>Enter</strong> to execute the command.</li>
</ul> </li>
</ol>
<p>Once launched, <strong>WIMUtil</strong> guides you through a wizard:</p>
<ol>
<li><strong>Select or Download Windows ISO</strong></li>
<li><strong>Add Latest UnattendedWinstall Answer File Automatically</strong></li>
<li><strong>Extract and Add Current Device Drivers to Installation Media</strong></li>
<li><strong>Create New ISO with Customizations Included</strong></li>
<li><strong>Create a Bootable USB Flash Drive with <a href="https://github.com/ventoy/Ventoy">Ventoy</a></strong></li>
<li><strong>Copy the New ISO File to the Ventoy Flash Drive</strong></li>
<li><strong>Boot from the USB flash drive, choose your ISO & Install Windows</strong></li>
</ol>
<p>For more info, check out the official <a href="https://github.com/memstechtips/WIMUtil">WIMUtil</a> GitHub Repo.</p>
<hr>
<h3>Old Methods</h3>
<h4>Method 1: Create a Bootable Windows Installation USB</h4>
<ul>
<li><a href="https://youtu.be/pDEZDD_gEbo">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li> <p>Download the <code>autounattend.xml</code> file and save it on your computer.</p> </li>
<li> <p>Create a <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> Bootable Installation USB drive with <a href="https://rufus.ie/en/">Rufus</a> or the Media Creation Tool.</p>
<blockquote>
<p><strong>Important</strong></p>
<ul>
<li>Some users have reported issues with the Media Creation Tool when creating the Windows Installation USB. Use it at your own discretion.</li>
<li>When using Rufus, don’t select any of the checkboxes in “Customize Your Windows Experience,” as it creates another <code>autounattend.xml</code> file that might overwrite settings in the UnattendedWinstall file.</li>
</ul>
</blockquote> </li>
<li> <p>Copy the <code>autounattend.xml</code> file you downloaded in Step 1 to the root of the Bootable Windows Installation USB you created in Step 2.</p> </li>
<li> <p>Boot from the Windows Installation USB, do a clean install of Windows as normal, and the scripts will run automatically.</p> </li>
</ol>
</details>
<h4>Method 2: Create a Custom ISO File</h4>
<ul>
<li><a href="https://youtu.be/pDEZDD_gEbo?si=ChEGghEOLCyLSnp7&t=1117">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li>Download the <code>autounattend.xml</code> file and save it on your computer.</li>
<li>Download the <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> ISO file depending on the version you want.</li>
<li>Download and install <a href="https://anyburn.com/download.php">AnyBurn</a>
<ul>
<li>In AnyBurn, select the “Edit Image File” option.</li>
<li>Navigate to and select the Official Windows ISO file you downloaded in Step 2.</li>
<li>Click on “Add” and select the <code>autounattend.xml</code> file you downloaded in Step 1, or just click and drag the <code>autounattend.xml</code> into the AnyBurn window.</li>
<li>Click on “Next,” then on “Create Now.” You should be prompted to overwrite the ISO file; click on “Yes.”</li>
<li>Once the process is complete, close AnyBurn.</li>
</ul> </li>
<li>Use the ISO file to install Windows on a Virtual Machine OR use a program like <a href="https://rufus.ie/en/">Rufus</a> or <a href="https://github.com/ventoy/Ventoy">Ventoy</a> to create a bootable USB flash drive with the edited Windows ISO file.</li>
</ol>
<blockquote>
<p><strong>Important</strong></p>
<ul>
<li>When using Rufus, don’t select any of the checkboxes in “Customize Your Windows Experience,” as it creates another <code>autounattend.xml</code> file that might overwrite settings in the UnattendedWinstall file.</li>
</ul>
</blockquote>
<ol start="5">
<li>Boot from the Windows Installation USB, do a clean install of Windows as normal, and the scripts will run automatically.</li>
</ol>
</details>
<h4>Method 3: Use Ventoy Auto Install Plugin</h4>
<ul>
<li><a href="https://youtu.be/4AGZQJTyCOs">Video Tutorial</a></li>
</ul>
<details>
<summary>Click to Show Instructions</summary>
<ol>
<li>Download the <code>autounattend.xml</code> file and save it on your computer.</li>
<li>Download the <a href="https://www.microsoft.com/en-us/software-download/windows10">Windows 10</a> or <a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11</a> ISO file, depending on the version you want.</li>
<li>Download and install <a href="https://github.com/ventoy/Ventoy">Ventoy</a> to your desired USB flash drive.</li>
<li>Prepare the folder structure:
<ul>
<li>In your newly created Ventoy USB disk, create the following folders: <code>ISO</code> and <code>Templates</code>. <br> <em>They should be at the root of the drive.</em></li>
<li>Inside of the <code>ISO</code> folder, create a new folder called <code>Windows</code>.</li>
<li>Copy your Windows ISO files in the <code>ISO\Windows</code> folder.</li>
<li>Copy your <code>autounattend.xml</code> into the <code>Templates</code> folder.</li>
</ul> </li>
<li>Start VentoyPlugson. Depending on your OS, the steps might differ.
<ul>
<li>On Windows, run the <code>VentoyPlugson.exe</code> file.</li>
<li>A new browser window should open up with a Ventoy web interface ready to go.</li>
<li>Select the <code>Auto Install Plugin</code> menu from the list.</li>
<li>Click on the <code>Add</code> button.</li>
<li>Select [parent] to make the whole Windows ISO folder benefit from the plugin.</li>
<li>In the Directory Path, paste in the absolute path to your <code>Windows</code> folder. <br> example: <code>F:\ISO\Windows</code> (Replace <code>F</code> with your drive letter.)</li>
<li>In the Template Path, paste in the absolute path to your <code>autounattend.xml</code> file. <br> example: <code>F:\Templates\autounattend.xml</code> (Replace <code>F</code> with your drive letter.) <br> (PSA: If you have more <code>autounattend.xml</code> files, you can add them later on!)</li>
<li>Click on <code>OK</code> and you should see a message saying that the configuration has been saved successfully.</li>
<li>Close the VentoyPlugson browser window and stop the VentoyPlugson application.</li>
</ul> </li>
<li>Boot from the Ventoy USB drive in the computer where you want to install windows.
<ul>
<li>After selecting a Windows ISO to boot from, you will be prompted to boot with the <code>/Templates/autounattend.xml</code> file.</li>
<li>Select that option and the <code>autounattend.xml</code> will be automatically executed during installation.</li>
</ul> </li>
</ol>
</details>
<h2>FAQ</h2>
<h3>How can I apply these settings to an existing Windows installation?</h3>
<ul>
<li>Run the <a href="https://github.com/memstechtips/UnattendedWinstall/raw/main/UWScript.ps1"><code>UWScript.ps1</code></a> file or use the <a href="https://github.com/ChrisTitusTech/winutil">Chris Titus Tech Windows Utility</a> (<a href="https://youtu.be/pldFPTnOCGM">Video</a>).</li>
</ul>
<h3>Can this answer file be used for an in-place upgrade?</h3>
<ul>
<li>No, in-place upgrades do not support answer files.</li>
</ul>
<h3>Why is Windows still updating automatically?</h3>
<ul>
<li>Feature updates are delayed for a year; however, security and driver updates continue as usual.</li>
</ul>
<h3>Why don't I have internet after installing Windows?</h3>
<details>
<summary>Click to Show Instructions</summary>
<p>If you’re unable to connect to the internet after installation, it’s likely because your Wi-Fi or LAN (Ethernet) drivers are missing. Windows sometimes doesn’t include all necessary drivers for network adapters, especially if they’re specific to your device.</p>
<p>To resolve this, follow these steps:</p>
<ol>
<li><strong>Download your network driver</strong> from the manufacturer’s website on another computer with internet access. Look for Wi-Fi or LAN drivers specific to your device model.</li>
<li><strong>Transfer the driver</strong> to your Windows installation via USB drive.</li>
<li><strong>Install the driver</strong> on your Windows system and restart if necessary.</li>
</ol>
<p>After installation, you should be able to connect to the internet.</p>
</details>
<h3>How can I access the previous "IoT-LTSC-Like," "Standard," and "Core" versions of the file(s)?</h3>
<ul>
<li>You still have access to the previous files here: <a href="https://github.com/memstechtips/UnattendedWinstall/releases/tag/v1.0.0">Version 1.0.0 Release</a>.</li>
</ul>
<blockquote>
<p>[!NOTE]<br> You need to download the <code>Source Code.zip</code> file. Once extracted, you’ll have access to all the previous v1.0.0 files.</p>
</blockquote>
<h3>Why isn't Microsoft Edge Uninstalled?</h3>
<details>
<summary>Click to Show Explanation</summary>
<p>I spent a lot of time trying to find a way to uninstall Microsoft Edge during Windows installation. However, it was challenging because of differences between Windows 10 22H2 and Windows 11 24H2. My goal is to use Microsoft’s supported uninstall methods, and I plan to add an easy Edge removal option in future releases.</p>
<p>In the meantime, if you wish to remove Edge after Windows installation, consider using <a href="https://github.com/FR33THYFR33THY/Ultimate-Windows-Optimization-Guide/raw/main/6%20Windows/14%20Edge.ps1">this script by FR33THY</a>. FR33THY’s <em>Ultimate Windows Optimization Guide</em> was a major inspiration for version 2.0.0 of this project, and I highly recommend exploring it for additional Windows optimization tips.</p>
</details>
<h3>How can I add my own Registry Tweaks to v2.0.0 of the <code>autounattend.xml</code> file?</h3>
<details>
<summary>Click to Show Instructions</summary>
<p>You can also still add your own registry entries to the v2.0.0 file, and it is actually easier if you understand where to add it. I'll give a brief explanation.</p>
<p>For registry entries that apply to the local machine, i.e., <code>HKEY_LOCAL_MACHINE</code> registry keys, you can find the <code>function SetRecommendedHKLMRegistry</code> in the <code>autounattend.xml</code> file, see here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L1981">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L1981</a></p>
<p>and then add whatever registry entries you want to add in <code>.reg</code> format, like the rest of the entries are set, and just make sure you add it before the <code>"@</code> to make it part of the <code>.reg</code> file that will be generated, see here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3412">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3412</a></p>
<p>and it will then be applied to the registry.</p>
<p>Similarly, if you have <code>HKEY_CURRENT_USER</code> registry keys, you can add those to the <code>User Customization.ps1</code> file in the same way as explained above, starting here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3912">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L3912</a> so below the <code>Windows Registry Editor Version 5.00</code> and then ending before the <code>"@</code> here: <a href="https://github.com/memstechtips/UnattendedWinstall/raw/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L4423">https://github.com/memstechtips/UnattendedWinstall/blob/93305192ed6d64e0f5b98a89f447927480285354/autounattend.xml#L4423</a></p>
<blockquote>
<p><strong>Note</strong><br> The above links might not take you to the correct lines of code once new versions of the file are released, but it does take you to the correct lines on v2.0.0.</p>
</blockquote>
</details>
+
+
+ cisagov/ScubaGear
+ 2024-12-01T01:57:08Z
+ tag:github.com,2024-12-01:/cisagov/ScubaGear
+
+ <p>Automation to assess the state of your M365 tenant against CISA's baselines</p><hr><p><img src="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/images/cisa.png" alt="CISA Logo"></p>
<p><a href="https://github.com/cisagov/ScubaGear/releases"><img src="https://img.shields.io/github/v/release/cisagov/ScubaGear?label=GitHub&logo=github" alt="GitHub Release"></a> <a href="https://www.powershellgallery.com/packages/ScubaGear"><img src="https://img.shields.io/powershellgallery/v/ScubaGear?logo=powershell&label=PSGallery" alt="PSGallery Release"></a> <a href="https://github.com/cisagov/ScubaGear/actions/workflows/run_pipeline.yaml"><img src="https://github.com/cisagov/ScubaGear/actions/workflows/run_pipeline.yaml/badge.svg?sanitize=true" alt="CI Pipeline"></a> <a href="https://github.com/cisagov/ScubaGear/actions/workflows/test_production_function.yaml"><img src="https://github.com/cisagov/ScubaGear/actions/workflows/test_production_function.yaml/badge.svg?sanitize=true" alt="Functional Tests"></a> <a href="https://github.com/cisagov/ScubaGear/raw/main/LICENSE"><img src="https://img.shields.io/github/license/cisagov/ScubaGear" alt="GitHub License"></a> <a href="https://github.com/cisagov/ScubaGear/releases"><img src="https://img.shields.io/github/downloads/cisagov/ScubaGear/total?logo=github" alt="GitHub Downloads"></a> <a href="https://www.powershellgallery.com/packages/ScubaGear"><img src="https://img.shields.io/powershellgallery/dt/ScubaGear?logo=powershell" alt="PSGallery Downloads"></a> <a href="https://github.com/cisagov/ScubaGear/issues"><img src="https://img.shields.io/github/issues/cisagov/ScubaGear" alt="GitHub Issues"></a></p>
<p>ScubaGear is an assessment tool that verifies that a Microsoft 365 (M365) tenant’s configuration conforms to the policies described in the Secure Cloud Business Applications (<a href="https://cisa.gov/scuba">SCuBA</a>) Security Configuration Baseline <a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/baselines/README.md">documents</a>.</p>
<blockquote>
<p><strong>Note</strong>: This documentation can be read using <a href="https://cisagov.github.io/ScubaGear">GitHub Pages</a>.</p>
</blockquote>
<h2>Target Audience</h2>
<p>ScubaGear is for M365 administrators who want to assess their tenant environments against CISA Secure Configuration Baselines.</p>
<h2>Overview</h2>
<p>ScubaGear uses a three-step process:</p>
<ul>
<li><strong>Step One</strong> - PowerShell code queries M365 APIs for various configuration settings.</li>
<li><strong>Step Two</strong> - It then calls <a href="https://www.openpolicyagent.org">Open Policy Agent</a> (OPA) to compare these settings against Rego security policies written per the baseline documents.</li>
<li><strong>Step Three</strong> - Finally, it reports the results of the comparison as HTML, JSON, and CSV.</li>
</ul>
<img src="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/images/scuba-process.png">
<h2>Getting Started</h2>
<p>To install ScubaGear from <a href="https://www.powershellgallery.com/packages/ScubaGear">PSGallery</a>, open a PowerShell 5 terminal on a Windows computer and install the module:</p>
<pre><code class="language-powershell"># Install ScubaGear
Install-Module -Name ScubaGear
</code></pre>
<p>To install its dependencies:</p>
<pre><code class="language-powershell"># Install the minimum required dependencies
Initialize-SCuBA
</code></pre>
<p>To verify that it is installed:</p>
<pre><code class="language-powershell"># Check the version
Invoke-SCuBA -Version
</code></pre>
<p>To run ScubaGear:</p>
<pre><code class="language-powershell"># Assess all products
Invoke-SCuBA -ProductNames *
</code></pre>
<blockquote>
<p><strong>Note</strong>: Successfully running ScubaGear requires certain prerequisites and configuration settings. To learn more, read through the sections below.</p>
</blockquote>
<h2>Table of Contents</h2>
<p>The following sections should be read in order.</p>
<h3>Installation</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/installation/psgallery.md">Install from PSGallery</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/installation/github.md">Download from GitHub</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/installation/uninstall.md">Uninstall</a></li>
</ul>
<h3>Prerequisites</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/prerequisites/dependencies.md">Dependencies</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/prerequisites/permissions.md">Required Permissions</a>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/prerequisites/interactive.md">Interactive Permissions</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/prerequisites/noninteractive.md">Non-Interactive Permissions</a></li>
</ul> </li>
</ul>
<h3>Execution</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/execution/execution.md">Execution</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/execution/reports.md">Reports</a></li>
</ul>
<h3>Configuration</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/configuration/parameters.md">Parameters</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/configuration/configuration.md">Configuration File</a></li>
</ul>
<h3>Troubleshooting</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/tenants.md">Multiple Tenants</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/defender.md">Defender</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/exchange.md">Exchange Online</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/power.md">Power Platform</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/graph.md">Microsoft Graph</a></li>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/troubleshooting/proxy.md">Proxy</a></li>
</ul>
<h3>Misc</h3>
<ul>
<li><a href="https://raw.githubusercontent.com/cisagov/ScubaGear/main/docs/misc/assumptions.md">Assumptions</a></li>
</ul>
<h2>Project License</h2>
<p>Unless otherwise noted, this project is distributed under the Creative Commons Zero license. With developer approval, contributions may be submitted with an alternate compatible license. If accepted, those contributions will be listed herein with the appropriate license.</p>
+
+
\ No newline at end of file
diff --git a/powershell/weekly/index.xml b/powershell/weekly/index.xml
new file mode 100644
index 00000000000..57458de52bd
--- /dev/null
+++ b/powershell/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PowerShell Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:37Z
+ Weekly Trending of PowerShell in GitHub
+
+
\ No newline at end of file
diff --git a/prisma/daily/index.xml b/prisma/daily/index.xml
index 9de611e9f3e..ffa52ceff5e 100644
--- a/prisma/daily/index.xml
+++ b/prisma/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Prisma Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:34Z
+ 2024-12-01T01:37:54Z
Daily Trending of Prisma in GitHub
\ No newline at end of file
diff --git a/prisma/monthly/index.xml b/prisma/monthly/index.xml
new file mode 100644
index 00000000000..e5964445b07
--- /dev/null
+++ b/prisma/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Prisma Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:11Z
+ Monthly Trending of Prisma in GitHub
+
+
\ No newline at end of file
diff --git a/prisma/weekly/index.xml b/prisma/weekly/index.xml
new file mode 100644
index 00000000000..f0dc296f882
--- /dev/null
+++ b/prisma/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Prisma Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:41Z
+ Weekly Trending of Prisma in GitHub
+
+
\ No newline at end of file
diff --git a/processing/daily/index.xml b/processing/daily/index.xml
index 877b4b5a209..6a7531a179b 100644
--- a/processing/daily/index.xml
+++ b/processing/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Processing Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:34Z
+ 2024-12-01T01:37:55Z
Daily Trending of Processing in GitHub
\ No newline at end of file
diff --git a/processing/monthly/index.xml b/processing/monthly/index.xml
new file mode 100644
index 00000000000..686da14907f
--- /dev/null
+++ b/processing/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Processing Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:12Z
+ Monthly Trending of Processing in GitHub
+
+
\ No newline at end of file
diff --git a/processing/weekly/index.xml b/processing/weekly/index.xml
new file mode 100644
index 00000000000..a975cdfaa6f
--- /dev/null
+++ b/processing/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Processing Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:40Z
+ Weekly Trending of Processing in GitHub
+
+
\ No newline at end of file
diff --git a/procfile/daily/index.xml b/procfile/daily/index.xml
index da64887ed3b..8602e503cff 100644
--- a/procfile/daily/index.xml
+++ b/procfile/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Procfile Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:33Z
+ 2024-12-01T01:37:54Z
Daily Trending of Procfile in GitHub
\ No newline at end of file
diff --git a/procfile/monthly/index.xml b/procfile/monthly/index.xml
new file mode 100644
index 00000000000..43086ceba8d
--- /dev/null
+++ b/procfile/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Procfile Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:11Z
+ Monthly Trending of Procfile in GitHub
+
+
\ No newline at end of file
diff --git a/procfile/weekly/index.xml b/procfile/weekly/index.xml
new file mode 100644
index 00000000000..3a2b1a5f82c
--- /dev/null
+++ b/procfile/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Procfile Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:41Z
+ Weekly Trending of Procfile in GitHub
+
+
\ No newline at end of file
diff --git a/proguard/daily/index.xml b/proguard/daily/index.xml
index bf8bd080d5d..759036a6d97 100644
--- a/proguard/daily/index.xml
+++ b/proguard/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Proguard Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:34Z
+ 2024-12-01T01:37:54Z
Daily Trending of Proguard in GitHub
\ No newline at end of file
diff --git a/proguard/monthly/index.xml b/proguard/monthly/index.xml
new file mode 100644
index 00000000000..7a18191c954
--- /dev/null
+++ b/proguard/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Proguard Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:11Z
+ Monthly Trending of Proguard in GitHub
+
+
\ No newline at end of file
diff --git a/proguard/weekly/index.xml b/proguard/weekly/index.xml
new file mode 100644
index 00000000000..dc5e1eccd2c
--- /dev/null
+++ b/proguard/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Proguard Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:40Z
+ Weekly Trending of Proguard in GitHub
+
+
\ No newline at end of file
diff --git a/prolog/daily/index.xml b/prolog/daily/index.xml
index feabe1412fb..b00dd8c1d0d 100644
--- a/prolog/daily/index.xml
+++ b/prolog/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Prolog Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:36Z
+ 2024-12-01T01:37:56Z
Daily Trending of Prolog in GitHub
\ No newline at end of file
diff --git a/prolog/monthly/index.xml b/prolog/monthly/index.xml
new file mode 100644
index 00000000000..2b4c7cecf6f
--- /dev/null
+++ b/prolog/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Prolog Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:13Z
+ Monthly Trending of Prolog in GitHub
+
+
\ No newline at end of file
diff --git a/prolog/weekly/index.xml b/prolog/weekly/index.xml
new file mode 100644
index 00000000000..7af06e17b87
--- /dev/null
+++ b/prolog/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Prolog Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:42Z
+ Weekly Trending of Prolog in GitHub
+
+
\ No newline at end of file
diff --git a/promela/daily/index.xml b/promela/daily/index.xml
index 43dc88e95f7..6c252c6f863 100644
--- a/promela/daily/index.xml
+++ b/promela/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Promela Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:35Z
+ 2024-12-01T01:37:56Z
Daily Trending of Promela in GitHub
\ No newline at end of file
diff --git a/promela/monthly/index.xml b/promela/monthly/index.xml
new file mode 100644
index 00000000000..7db63de5651
--- /dev/null
+++ b/promela/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Promela Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:13Z
+ Monthly Trending of Promela in GitHub
+
+
\ No newline at end of file
diff --git a/promela/weekly/index.xml b/promela/weekly/index.xml
new file mode 100644
index 00000000000..32f68d02094
--- /dev/null
+++ b/promela/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Promela Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:42Z
+ Weekly Trending of Promela in GitHub
+
+
\ No newline at end of file
diff --git a/propeller-spin/daily/index.xml b/propeller-spin/daily/index.xml
index 176cf600dbe..29406376509 100644
--- a/propeller-spin/daily/index.xml
+++ b/propeller-spin/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Propeller Spin Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:36Z
+ 2024-12-01T01:37:55Z
Daily Trending of Propeller Spin in GitHub
\ No newline at end of file
diff --git a/propeller-spin/monthly/index.xml b/propeller-spin/monthly/index.xml
new file mode 100644
index 00000000000..e67a18a52f0
--- /dev/null
+++ b/propeller-spin/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Propeller Spin Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:12Z
+ Monthly Trending of Propeller Spin in GitHub
+
+
\ No newline at end of file
diff --git a/propeller-spin/weekly/index.xml b/propeller-spin/weekly/index.xml
new file mode 100644
index 00000000000..a80b80fa2f8
--- /dev/null
+++ b/propeller-spin/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Propeller Spin Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:43Z
+ Weekly Trending of Propeller Spin in GitHub
+
+
\ No newline at end of file
diff --git a/protocol-buffer-text-format/daily/index.xml b/protocol-buffer-text-format/daily/index.xml
index 819069739e2..ea8eb90c8cd 100644
--- a/protocol-buffer-text-format/daily/index.xml
+++ b/protocol-buffer-text-format/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Protocol Buffer Text Format Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:37Z
+ 2024-12-01T01:37:57Z
Daily Trending of Protocol Buffer Text Format in GitHub
\ No newline at end of file
diff --git a/protocol-buffer-text-format/monthly/index.xml b/protocol-buffer-text-format/monthly/index.xml
new file mode 100644
index 00000000000..1823b2d687f
--- /dev/null
+++ b/protocol-buffer-text-format/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Protocol Buffer Text Format Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:14Z
+ Monthly Trending of Protocol Buffer Text Format in GitHub
+
+
\ No newline at end of file
diff --git a/protocol-buffer-text-format/weekly/index.xml b/protocol-buffer-text-format/weekly/index.xml
new file mode 100644
index 00000000000..6855b5f819c
--- /dev/null
+++ b/protocol-buffer-text-format/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Protocol Buffer Text Format Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:44Z
+ Weekly Trending of Protocol Buffer Text Format in GitHub
+
+
\ No newline at end of file
diff --git a/protocol-buffer/daily/index.xml b/protocol-buffer/daily/index.xml
index 20d57d5b020..926ec01fb54 100644
--- a/protocol-buffer/daily/index.xml
+++ b/protocol-buffer/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Protocol Buffer Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:35Z
+ 2024-12-01T01:37:56Z
Daily Trending of Protocol Buffer in GitHub
\ No newline at end of file
diff --git a/protocol-buffer/monthly/index.xml b/protocol-buffer/monthly/index.xml
new file mode 100644
index 00000000000..6899e7f3e20
--- /dev/null
+++ b/protocol-buffer/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Protocol Buffer Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:13Z
+ Monthly Trending of Protocol Buffer in GitHub
+
+
\ No newline at end of file
diff --git a/protocol-buffer/weekly/index.xml b/protocol-buffer/weekly/index.xml
new file mode 100644
index 00000000000..b25eedd93d3
--- /dev/null
+++ b/protocol-buffer/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Protocol Buffer Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:42Z
+ Weekly Trending of Protocol Buffer in GitHub
+
+
\ No newline at end of file
diff --git a/public-key/daily/index.xml b/public-key/daily/index.xml
index edb2013f059..b8f0ef42437 100644
--- a/public-key/daily/index.xml
+++ b/public-key/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Public Key Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:36Z
+ 2024-12-01T01:37:57Z
Daily Trending of Public Key in GitHub
\ No newline at end of file
diff --git a/public-key/monthly/index.xml b/public-key/monthly/index.xml
new file mode 100644
index 00000000000..4d896b97274
--- /dev/null
+++ b/public-key/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Public Key Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:14Z
+ Monthly Trending of Public Key in GitHub
+
+
\ No newline at end of file
diff --git a/public-key/weekly/index.xml b/public-key/weekly/index.xml
new file mode 100644
index 00000000000..cae31d7adbb
--- /dev/null
+++ b/public-key/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Public Key Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:44Z
+ Weekly Trending of Public Key in GitHub
+
+
\ No newline at end of file
diff --git a/pug/daily/index.xml b/pug/daily/index.xml
index 17156e08659..dffcddb9e28 100644
--- a/pug/daily/index.xml
+++ b/pug/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pug Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:37Z
+ 2024-12-01T01:37:58Z
Daily Trending of Pug in GitHub
\ No newline at end of file
diff --git a/pug/monthly/index.xml b/pug/monthly/index.xml
new file mode 100644
index 00000000000..c07ff67bde5
--- /dev/null
+++ b/pug/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pug Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:15Z
+ Monthly Trending of Pug in GitHub
+
+
\ No newline at end of file
diff --git a/pug/weekly/index.xml b/pug/weekly/index.xml
new file mode 100644
index 00000000000..0ae88cdf62d
--- /dev/null
+++ b/pug/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pug Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:44Z
+ Weekly Trending of Pug in GitHub
+
+
\ No newline at end of file
diff --git a/puppet/daily/index.xml b/puppet/daily/index.xml
index 851eaafd176..bc30a2a8cd5 100644
--- a/puppet/daily/index.xml
+++ b/puppet/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Puppet Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:37Z
+ 2024-12-01T01:37:57Z
Daily Trending of Puppet in GitHub
\ No newline at end of file
diff --git a/puppet/monthly/index.xml b/puppet/monthly/index.xml
new file mode 100644
index 00000000000..878f47d02d7
--- /dev/null
+++ b/puppet/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Puppet Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:15Z
+ Monthly Trending of Puppet in GitHub
+
+
\ No newline at end of file
diff --git a/puppet/weekly/index.xml b/puppet/weekly/index.xml
new file mode 100644
index 00000000000..b570409cce3
--- /dev/null
+++ b/puppet/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Puppet Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:43Z
+ Weekly Trending of Puppet in GitHub
+
+
\ No newline at end of file
diff --git a/pure-data/daily/index.xml b/pure-data/daily/index.xml
index 3909db4ccdc..ae802666c8c 100644
--- a/pure-data/daily/index.xml
+++ b/pure-data/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Pure Data Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:38Z
+ 2024-12-01T01:37:59Z
Daily Trending of Pure Data in GitHub
\ No newline at end of file
diff --git a/pure-data/monthly/index.xml b/pure-data/monthly/index.xml
new file mode 100644
index 00000000000..6c26e4bb0b2
--- /dev/null
+++ b/pure-data/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pure Data Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:16Z
+ Monthly Trending of Pure Data in GitHub
+
+
\ No newline at end of file
diff --git a/pure-data/weekly/index.xml b/pure-data/weekly/index.xml
new file mode 100644
index 00000000000..2dbe2a83251
--- /dev/null
+++ b/pure-data/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Pure Data Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:45Z
+ Weekly Trending of Pure Data in GitHub
+
+
\ No newline at end of file
diff --git a/purebasic/daily/index.xml b/purebasic/daily/index.xml
index d2c2271ca39..80821b4dd89 100644
--- a/purebasic/daily/index.xml
+++ b/purebasic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PureBasic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:39Z
+ 2024-12-01T01:37:59Z
Daily Trending of PureBasic in GitHub
\ No newline at end of file
diff --git a/purebasic/monthly/index.xml b/purebasic/monthly/index.xml
new file mode 100644
index 00000000000..ebdca9816f3
--- /dev/null
+++ b/purebasic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PureBasic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:16Z
+ Monthly Trending of PureBasic in GitHub
+
+
\ No newline at end of file
diff --git a/purebasic/weekly/index.xml b/purebasic/weekly/index.xml
new file mode 100644
index 00000000000..361aac71977
--- /dev/null
+++ b/purebasic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PureBasic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:45Z
+ Weekly Trending of PureBasic in GitHub
+
+
\ No newline at end of file
diff --git a/purescript/daily/index.xml b/purescript/daily/index.xml
index d2213e19918..4de9efbcdbf 100644
--- a/purescript/daily/index.xml
+++ b/purescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub PureScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:39Z
+ 2024-12-01T01:38:00Z
Daily Trending of PureScript in GitHub
\ No newline at end of file
diff --git a/purescript/monthly/index.xml b/purescript/monthly/index.xml
new file mode 100644
index 00000000000..e9c26717398
--- /dev/null
+++ b/purescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PureScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:17Z
+ Monthly Trending of PureScript in GitHub
+
+
\ No newline at end of file
diff --git a/purescript/weekly/index.xml b/purescript/weekly/index.xml
new file mode 100644
index 00000000000..8be3ddd507b
--- /dev/null
+++ b/purescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub PureScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:46Z
+ Weekly Trending of PureScript in GitHub
+
+
\ No newline at end of file
diff --git a/python-console/daily/index.xml b/python-console/daily/index.xml
index 059037dd9a7..dffd2024c2e 100644
--- a/python-console/daily/index.xml
+++ b/python-console/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Python console Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:40Z
+ 2024-12-01T01:38:01Z
Daily Trending of Python console in GitHub
\ No newline at end of file
diff --git a/python-console/monthly/index.xml b/python-console/monthly/index.xml
new file mode 100644
index 00000000000..b9f80f53d64
--- /dev/null
+++ b/python-console/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Python console Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:18Z
+ Monthly Trending of Python console in GitHub
+
+
\ No newline at end of file
diff --git a/python-console/weekly/index.xml b/python-console/weekly/index.xml
new file mode 100644
index 00000000000..8bcbe590ef6
--- /dev/null
+++ b/python-console/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Python console Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:47Z
+ Weekly Trending of Python console in GitHub
+
+
\ No newline at end of file
diff --git a/python-traceback/daily/index.xml b/python-traceback/daily/index.xml
index 944b791b2b3..c27b11a21ee 100644
--- a/python-traceback/daily/index.xml
+++ b/python-traceback/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Python traceback Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:40Z
+ 2024-12-01T01:38:00Z
Daily Trending of Python traceback in GitHub
\ No newline at end of file
diff --git a/python-traceback/monthly/index.xml b/python-traceback/monthly/index.xml
new file mode 100644
index 00000000000..35a176f81b2
--- /dev/null
+++ b/python-traceback/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Python traceback Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:18Z
+ Monthly Trending of Python traceback in GitHub
+
+
\ No newline at end of file
diff --git a/python-traceback/weekly/index.xml b/python-traceback/weekly/index.xml
new file mode 100644
index 00000000000..0ba3262ffa0
--- /dev/null
+++ b/python-traceback/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Python traceback Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:47Z
+ Weekly Trending of Python traceback in GitHub
+
+
\ No newline at end of file
diff --git a/python/daily/index.xml b/python/daily/index.xml
index 182f0e4fea4..7f2d4174605 100644
--- a/python/daily/index.xml
+++ b/python/daily/index.xml
@@ -1,21 +1,7 @@
GitHub Python Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:41Z
+ 2024-12-01T01:38:02Z
Daily Trending of Python in GitHub
-
- automatic-ripping-machine/automatic-ripping-machine
- 2024-11-30T01:34:41Z
- tag:github.com,2024-11-30:/automatic-ripping-machine/automatic-ripping-machine
-
- <p>Automatic Ripping Machine (ARM) Scripts</p><hr><h1>Automatic Ripping Machine (ARM)</h1>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/actions/workflows/main.yml"><img src="https://github.com/automatic-ripping-machine/automatic-ripping-machine/actions/workflows/main.yml/badge.svg?sanitize=true" alt="CI"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/actions/workflows/publish-image.yml"><img src="https://github.com/automatic-ripping-machine/automatic-ripping-machine/actions/workflows/publish-image.yml/badge.svg?sanitize=true" alt="Publish Docker Image"></a> <a href="https://hub.docker.com/r/automaticrippingmachine/automatic-ripping-machine"><img src="https://img.shields.io/docker/pulls/automaticrippingmachine/automatic-ripping-machine.svg?sanitize=true" alt="Docker"></a></p>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/network"><img src="https://img.shields.io/github/forks/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub forks"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/stargazers"><img src="https://img.shields.io/github/stars/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub stars"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/issues"><img src="https://img.shields.io/github/issues/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub issues"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/pulls"><img src="https://img.shields.io/github/issues-pr/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub pull requests"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/graphs/contributors"><img src="https://img.shields.io/github/contributors/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub contributors"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/commits/v2_devel"><img src="https://img.shields.io/github/last-commit/automatic-ripping-machine/automatic-ripping-machine?" alt="GitHub last commit"></a></p>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/raw/v2_devel/LICENSE"><img src="https://img.shields.io/github/license/automatic-ripping-machine/automatic-ripping-machine" alt="GitHub license"></a></p>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/releases"><img src="https://img.shields.io/github/v/release/automatic-ripping-machine/automatic-ripping-machine?label=Latest%20Stable%20Version" alt="GitHub release (latest by date)"></a> <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/releases"><img src="https://img.shields.io/github/release-date/automatic-ripping-machine/automatic-ripping-machine?label=Latest%20Stable%20Released" alt="GitHub release Date"></a> <img src="https://img.shields.io/badge/Python_Versions-3.8_%7C_3.9_%7C_3.10_%7C_3.11-blue?logo=python" alt="Python Versions"></p>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki"><img src="https://img.shields.io/badge/Wiki-Get%20Help-brightgreen" alt="Wiki"></a> <a href="https://discord.gg/FUSrn8jUcR"><img src="https://img.shields.io/discord/576479573886107699" alt="Discord"></a></p>
<h2>Overview</h2>
<p>Insert an optical disc (Blu-ray, DVD, CD) and checks to see if it's audio, video (Movie or TV), or data, then rips it.</p>
<p>See: <a href="https://b3n.org/automatic-ripping-machine">https://b3n.org/automatic-ripping-machine</a></p>
<h2>Features</h2>
<ul>
<li>Detects insertion of disc using udev</li>
<li>Determines disc type...
<ul>
<li>If video (Blu-ray or DVD)
<ul>
<li>Retrieve title from disc or <a href="http://www.omdbapi.com/">OMDb API</a> to name the folder "Movie Title (Year)" so that Plex or Emby can pick it up</li>
<li>Determine if video is Movie or TV using <a href="http://www.omdbapi.com/">OMDb API</a></li>
<li>Rip using MakeMKV or HandBrake (can rip all features or main feature)</li>
<li>Eject disc and queue up Handbrake transcoding when done</li>
<li>Transcoding jobs are asynchronously batched from ripping</li>
<li>Send notifications via IFTTT, Pushbullet, Slack, Discord, and many more!</li>
</ul> </li>
<li>If audio (CD) - rip using abcde (get disc-data and album art from <a href="https://musicbrainz.org/">musicbrainz</a>)</li>
<li>If data (Blu-ray, DVD, or CD) - make an ISO backup</li>
</ul> </li>
<li>Headless, designed to be run from a server</li>
<li>Can rip from multiple-optical drives in parallel</li>
<li>Python Flask UI to interact with ripping jobs, view logs, update jobs, etc</li>
</ul>
<h2>Usage</h2>
<ul>
<li>Insert disc</li>
<li>Wait for disc to eject</li>
<li>Repeat</li>
</ul>
<h2>Requirements</h2>
<ul>
<li>A system capable of running Docker containers</li>
<li>One or more optical drives to rip Blu-rays, DVDs, and CDs</li>
<li>Lots of drive space (I suggest using a NAS) to store your movies</li>
</ul>
<h2>Install</h2>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/">For normal installation please see the wiki</a>.</p>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/docker">For docker installation please see here</a>.</p>
<h2>Troubleshooting</h2>
<p><a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/">Please see the wiki for troubleshooting</a>.</p>
<h2>Contributing</h2>
<p>Pull requests are welcome. Please see the <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki/Contributing-Guide">Contributing Guide</a></p>
<p>If you set ARM up in a different environment (hardware/OS/virtual/etc.), please consider <a href="https://github.com/automatic-ripping-machine/automatic-ripping-machine/wiki">submitting a howto to the wiki</a>.</p>
<h2>License</h2>
<p><a href="https://raw.githubusercontent.com/automatic-ripping-machine/automatic-ripping-machine/main/LICENSE">MIT License</a></p>
-
-
- icloud-photos-downloader/icloud_photos_downloader
- 2024-11-30T01:34:41Z
- tag:github.com,2024-11-30:/icloud-photos-downloader/icloud_photos_downloader
-
- <p>A command-line tool to download photos from iCloud</p><hr><h1>iCloud Photos Downloader <a href="https://github.com/icloud-photos-downloader/icloud_photos_downloader/actions/workflows/quality-checks.yml"><img src="https://github.com/icloud-photos-downloader/icloud_photos_downloader/workflows/Quality%20Checks/badge.svg?sanitize=true" alt="Quality Checks"></a> <a href="https://github.com/icloud-photos-downloader/icloud_photos_downloader/actions/workflows/docker-build.yml"><img src="https://github.com/icloud-photos-downloader/icloud_photos_downloader/workflows/Docker%20Build/badge.svg?sanitize=true" alt="Multi Platform Docker Build"></a> <a href="https://raw.githubusercontent.com/icloud-photos-downloader/icloud_photos_downloader/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true" alt="MIT License"></a></h1>
<ul>
<li>A command-line tool to download all your iCloud photos.</li>
<li>Works on Linux, Windows, and macOS; laptop, desktop, and NAS</li>
<li>Available as an executable for direct downloading and through package managers/ecosystems (<a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#docker">Docker</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#pypi">PyPI</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#aur">AUR</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#npm">npm</a>)</li>
<li>Developed and maintained by volunteers (we are always looking for <a href="https://raw.githubusercontent.com/icloud-photos-downloader/icloud_photos_downloader/master/CONTRIBUTING.md">help</a>).</li>
</ul>
<p>See <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/">Documentation</a> for more details. Also, check <a href="https://github.com/icloud-photos-downloader/icloud_photos_downloader/issues">Issues</a></p>
<p>We aim to release new versions once a week (Friday), if there is something worth delivering.</p>
<h2>Install and Run</h2>
<p>There are three ways to run <code>icloudpd</code>:</p>
<ol>
<li>Download executable for your platform from the GitHub <a href="https://github.com/icloud-photos-downloader/icloud_photos_downloader/releases/tag/v1.24.4">Release</a> and run it</li>
<li>Use package manager to install, update, and, in some cases, run (<a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#docker">Docker</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#pypi">PyPI</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#aur">AUR</a>, <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html#npm">npm</a>)</li>
<li>Build and run from the source</li>
</ol>
<p>See <a href="https://icloud-photos-downloader.github.io/icloud_photos_downloader/install.html">Documentation</a> for more details</p>
<h2>Features</h2>
<!-- start features -->
<ul>
<li>Three modes of operation:
<ul>
<li><strong>Copy</strong> - download new photos from iCloud (default mode)</li>
<li><strong>Sync</strong> - download new photos from iCloud and delete local files that were removed in iCloud (<code>--auto-delete</code> option)</li>
<li><strong>Move</strong> - download new photos from iCloud and delete photos in iCloud (<code>--delete-after-download</code> option)</li>
</ul> </li>
<li>Support for Live Photos (image and video as separate files) and RAW images (including RAW+JPEG)</li>
<li>Automatic de-duplication of photos with the same name</li>
<li>One time download and an option to monitor for iCloud changes continuously (<code>--watch-with-interval</code> option)</li>
<li>Optimizations for incremental runs (<code>--until-found</code> and <code>--recent</code> options)</li>
<li>Photo metadata (EXIF) updates (<code>--set-exif-datetime</code> option)</li>
<li>... and many more (use <code>--help</code> option to get full list)</li>
</ul>
<!-- end features -->
<h2>Experimental Mode</h2>
<p>Some changes are added to the experimental mode before they graduate into the main package. <a href="https://raw.githubusercontent.com/icloud-photos-downloader/icloud_photos_downloader/master/EXPERIMENTAL.md">Details</a></p>
<h2>Usage</h2>
<p>To keep your iCloud photo collection synchronized to your local system:</p>
<pre><code>icloudpd --directory /data --username my@email.address --watch-with-interval 3600
</code></pre>
<blockquote>
<p>[!IMPORTANT] It is <code>icloudpd</code>, not <code>icloud</code> executable</p>
</blockquote>
<blockquote>
<p>[!TIP] Synchronization logic can be adjusted with command-line parameters. Run <code>icloudpd --help</code> to get full list.</p>
</blockquote>
<p>To independently create and authorize a session (and complete 2SA/2FA validation if needed) on your local system:</p>
<pre><code>icloudpd --username my@email.address --password my_password --auth-only
</code></pre>
<blockquote>
<p>[!TIP] This feature can also be used to check and verify that the session is still authenticated.</p>
</blockquote>
<h2>Contributing</h2>
<p>Want to contribute to iCloud Photos Downloader? Awesome! Check out the <a href="https://raw.githubusercontent.com/icloud-photos-downloader/icloud_photos_downloader/master/CONTRIBUTING.md">contributing guidelines</a> to get involved.</p>
-
\ No newline at end of file
diff --git a/python/monthly/index.xml b/python/monthly/index.xml
new file mode 100644
index 00000000000..b082a05e9b1
--- /dev/null
+++ b/python/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Python Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:19Z
+ Monthly Trending of Python in GitHub
+
+
+ opendatalab/MinerU
+ 2024-12-01T01:57:19Z
+ tag:github.com,2024-12-01:/opendatalab/MinerU
+
+ <p>A high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具,将PDF转换成Markdown和JSON格式。</p><hr><div align="center" xmlns="http://www.w3.org/1999/html">
<!-- logo -->
<p align="center"> <img src="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/images/MinerU-logo.png" width="300px" style="vertical-align:middle;"> </p>
<!-- icon -->
<p><a href="https://github.com/opendatalab/MinerU"><img src="https://img.shields.io/github/stars/opendatalab/MinerU.svg?sanitize=true" alt="stars"></a> <a href="https://github.com/opendatalab/MinerU"><img src="https://img.shields.io/github/forks/opendatalab/MinerU.svg?sanitize=true" alt="forks"></a> <a href="https://github.com/opendatalab/MinerU/issues"><img src="https://img.shields.io/github/issues-raw/opendatalab/MinerU" alt="open issues"></a> <a href="https://github.com/opendatalab/MinerU/issues"><img src="https://img.shields.io/github/issues-closed-raw/opendatalab/MinerU" alt="issue resolution"></a> <a href="https://badge.fury.io/py/magic-pdf"><img src="https://badge.fury.io/py/magic-pdf.svg?sanitize=true" alt="PyPI version"></a> <a href="https://pepy.tech/project/magic-pdf"><img src="https://static.pepy.tech/badge/magic-pdf" alt="Downloads"></a> <a href="https://pepy.tech/project/magic-pdf"><img src="https://static.pepy.tech/badge/magic-pdf/month" alt="Downloads"></a></p>
<p><a href="https://opendatalab.com/OpenSourceTools/Extractor/PDF"><img src="https://img.shields.io/badge/Demo_on_OpenDataLab-blue?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgeTI9IjAuNTMzNjciIHgyPSIxLjAwMDQiIHkxPSIwLjI5MjE5IiB4MT0iLTAuMTEyNjgiIGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE1NDNGRSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOEM0NkZGIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCB5Mj0iMC41OTc1NyIgeDI9IjEuMDExMzciIHkxPSIwLjExMDIzIiB4MT0iLTAuMDg0NzQiIGlkPSJiIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE1NDNGRSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOEM0NkZGIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbD0idXJsKCNhKSIgZD0ibTEuNjIzLDEyLjA2N2EwLjQ4NCwwLjQ4NCAwIDAgMSAwLjA3LC0wLjM4NGw1LjMxLC03Ljg5NWMwLjA2OCwtMC4xIDAuMTcsLTAuMTcyIDAuMjg4LC0wLjJsMTQuMzc3LC0zLjQ3NGEwLjQ4NCwwLjQ4NCAwIDAgMSAwLjU4NCwwLjM1N2wzLjY2MiwxNS4xNTJjMS40NzcsNi4xMTQgLTIuMjgxLDEyLjI2NyAtOC4zOTQsMTMuNzQ1Yy02LjExNCwxLjQ3NyAtMTIuMjY3LC0yLjI4MSAtMTMuNzQ1LC04LjM5NWwtMi4xNTIsLTguOTA2eiIgb3BhY2l0eT0iMC40Ii8+CiAgPHBhdGggaWQ9InN2Z18yIiBmaWxsPSJ1cmwoI2IpIiBkPSJtNS44MjYsOC42NzNjMCwtMC4xMzYgMC4wNTcsLTAuMjY2IDAuMTU3LC0wLjM1OGw3LjAxNywtNi40MjVhMC40ODQsMC40ODQgMCAwIDEgMC4zMjcsLTAuMTI3bDE0Ljc5LDBjMC4yNjgsMCAwLjQ4NSwwLjIxNiAwLjQ4NSwwLjQ4NGwwLDE1LjU4OWMwLDYuMjkgLTUuMDk5LDExLjM4OCAtMTEuMzg4LDExLjM4OGMtNi4yOSwwIC0xMS4zODgsLTUuMDk5IC0xMS4zODgsLTExLjM4OGwwLC05LjE2M3oiLz4KICA8cGF0aCBpZD0ic3ZnXzMiIGZpbGw9IiM1RDc2RkYiIGQ9Im0xMi4zMzEsOC43NTNsLTYuMzgzLC0wLjM5OGw3LjEyMiwtNi41MmwwLjI5OSw1Ljg5MmEwLjk3OCwwLjk3OCAwIDAgMSAtMS4wMzgsMS4wMjZ6Ii8+CiAgPHBhdGggaWQ9InN2Z180IiBmaWxsPSIjMDAyOEZEIiBkPSJtMjAuNDE2LDE1LjAyMmwwLDEuNzExYTIuNDA0LDIuNDA0IDAgMCAxIC00LjgwOCwwbDAsLTQuMjc4bC0yLjgxLDBsMCw0LjY4NmE1LjIxNSw1LjIxNSAwIDEgMCAxMC40MywwbDAsLTQuNjg2bDAsMi41NjdsLTIuODEyLDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgogIDxwYXRoIGlkPSJzdmdfNSIgZmlsbD0iIzAwMjhGRCIgZD0ibTIzLjIyOCwxMy44ODFsMS4xNCwwbDAsMS4xNDFsLTEuMTQsMGwwLC0xLjE0bDAsLTAuMDAxem0tMi44MTIsLTAuNjkybDEuODM0LDBsMCwxLjgzM2wtMS44MzQsMGwwLC0xLjgzMmwwLC0wLjAwMXptMS44MzQsLTAuOTc5bDAuOTc4LDBsMCwwLjk3OWwtMC45NzgsMGwwLC0wLjk3OGwwLC0wLjAwMXptMS41NDgsLTEuNjI5bDAuNjExLDBsMCwwLjYxMWwtMC42MTEsMGwwLC0wLjYxMXoiLz4KICA8cGF0aCBpZD0ic3ZnXzYiIGZpbGw9IiNmZmYiIGQ9Im0yMC4wODYsMTQuOTEybDAsMS43MTFhMi40MDQsMi40MDQgMCAxIDEgLTQuODA3LDBsMCwtNC4yNzhsLTIuODEyLDBsMCw0LjY4NmE1LjIxNSw1LjIxNSAwIDAgMCAxMC40MywwbDAsLTQuNjg2bDAsMi41NjdsLTIuODEsMGwtMC4wMDEsMHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggaWQ9InN2Z183IiBmaWxsPSIjZmZmIiBkPSJtMjIuODk4LDEzLjc3MWwxLjE0LDBsMCwxLjE0MWwtMS4xNCwwbDAsLTEuMTRsMCwtMC4wMDF6bS0yLjgxMiwtMC42OTJsMS44MzQsMGwwLDEuODMzbC0xLjgzNCwwbDAsLTEuODMybDAsLTAuMDAxem0xLjgzNCwtMC45NzlsMC45NzgsMGwwLDAuOTc5bC0wLjk3OCwwbDAsLTAuOTc5em0xLjU0OCwtMS42MjlsMC42MTEsMGwwLDAuNjExbC0wLjYxLDBsMCwtMC42MWwtMC4wMDEsLTAuMDAxeiIvPgogPC9nPgo8L3N2Zz4=&labelColor=white" alt="OpenDataLab"></a> <a href="https://huggingface.co/spaces/opendatalab/MinerU"><img src="https://img.shields.io/badge/Demo_on_HuggingFace-yellow.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABYCAMAAACkl9t/AAAAk1BMVEVHcEz/nQv/nQv/nQr/nQv/nQr/nQv/nQv/nQr/wRf/txT/pg7/yRr/rBD/zRz/ngv/oAz/zhz/nwv/txT/ngv/0B3+zBz/nQv/0h7/wxn/vRb/thXkuiT/rxH/pxD/ogzcqyf/nQvTlSz/czCxky7/SjifdjT/Mj3+Mj3wMj15aTnDNz+DSD9RTUBsP0FRO0Q6O0WyIxEIAAAAGHRSTlMADB8zSWF3krDDw8TJ1NbX5efv8ff9/fxKDJ9uAAAGKklEQVR42u2Z63qjOAyGC4RwCOfB2JAGqrSb2WnTw/1f3UaWcSGYNKTdf/P+mOkTrE+yJBulvfvLT2A5ruenaVHyIks33npl/6C4s/ZLAM45SOi/1FtZPyFur1OYofBX3w7d54Bxm+E8db+nDr12ttmESZ4zludJEG5S7TO72YPlKZFyE+YCYUJTBZsMiNS5Sd7NlDmKM2Eg2JQg8awbglfqgbhArjxkS7dgp2RH6hc9AMLdZYUtZN5DJr4molC8BfKrEkPKEnEVjLbgW1fLy77ZVOJagoIcLIl+IxaQZGjiX597HopF5CkaXVMDO9Pyix3AFV3kw4lQLCbHuMovz8FallbcQIJ5Ta0vks9RnolbCK84BtjKRS5uA43hYoZcOBGIG2Epbv6CvFVQ8m8loh66WNySsnN7htL58LNp+NXT8/PhXiBXPMjLSxtwp8W9f/1AngRierBkA+kk/IpUSOeKByzn8y3kAAAfh//0oXgV4roHm/kz4E2z//zRc3/lgwBzbM2mJxQEa5pqgX7d1L0htrhx7LKxOZlKbwcAWyEOWqYSI8YPtgDQVjpB5nvaHaSnBaQSD6hweDi8PosxD6/PT09YY3xQA7LTCTKfYX+QHpA0GCcqmEHvr/cyfKQTEuwgbs2kPxJEB0iNjfJcCTPyocx+A0griHSmADiC91oNGVwJ69RudYe65vJmoqfpul0lrqXadW0jFKH5BKwAeCq+Den7s+3zfRJzA61/Uj/9H/VzLKTx9jFPPdXeeP+L7WEvDLAKAIoF8bPTKT0+TM7W8ePj3Rz/Yn3kOAp2f1Kf0Weony7pn/cPydvhQYV+eFOfmOu7VB/ViPe34/EN3RFHY/yRuT8ddCtMPH/McBAT5s+vRde/gf2c/sPsjLK+m5IBQF5tO+h2tTlBGnP6693JdsvofjOPnnEHkh2TnV/X1fBl9S5zrwuwF8NFrAVJVwCAPTe8gaJlomqlp0pv4Pjn98tJ/t/fL++6unpR1YGC2n/KCoa0tTLoKiEeUPDl94nj+5/Tv3/eT5vBQ60X1S0oZr+IWRR8Ldhu7AlLjPISlJcO9vrFotky9SpzDequlwEir5beYAc0R7D9KS1DXva0jhYRDXoExPdc6yw5GShkZXe9QdO/uOvHofxjrV/TNS6iMJS+4TcSTgk9n5agJdBQbB//IfF/HpvPt3Tbi7b6I6K0R72p6ajryEJrENW2bbeVUGjfgoals4L443c7BEE4mJO2SpbRngxQrAKRudRzGQ8jVOL2qDVjjI8K1gc3TIJ5KiFZ1q+gdsARPB4NQS4AjwVSt72DSoXNyOWUrU5mQ9nRYyjp89Xo7oRI6Bga9QNT1mQ/ptaJq5T/7WcgAZywR/XlPGAUDdet3LE+qS0TI+g+aJU8MIqjo0Kx8Ly+maxLjJmjQ18rA0YCkxLQbUZP1WqdmyQGJLUm7VnQFqodmXSqmRrdVpqdzk5LvmvgtEcW8PMGdaS23EOWyDVbACZzUJPaqMbjDxpA3Qrgl0AikimGDbqmyT8P8NOYiqrldF8rX+YN7TopX4UoHuSCYY7cgX4gHwclQKl1zhx0THf+tCAUValzjI7Wg9EhptrkIcfIJjA94evOn8B2eHaVzvBrnl2ig0So6hvPaz0IGcOvTHvUIlE2+prqAxLSQxZlU2stql1NqCCLdIiIN/i1DBEHUoElM9dBravbiAnKqgpi4IBkw+utSPIoBijDXJipSVV7MpOEJUAc5Qmm3BnUN+w3hteEieYKfRZSIUcXKMVf0u5wD4EwsUNVvZOtUT7A2GkffHjByWpHqvRBYrTV72a6j8zZ6W0DTE86Hn04bmyWX3Ri9WH7ZU6Q7h+ZHo0nHUAcsQvVhXRDZHChwiyi/hnPuOsSEF6Exk3o6Y9DT1eZ+6cASXk2Y9k+6EOQMDGm6WBK10wOQJCBwren86cPPWUcRAnTVjGcU1LBgs9FURiX/e6479yZcLwCBmTxiawEwrOcleuu12t3tbLv/N4RLYIBhYexm7Fcn4OJcn0+zc+s8/VfPeddZHAGN6TT8eGczHdR/Gts1/MzDkThr23zqrVfAMFT33Nx1RJsx1k5zuWILLnG/vsH+Fv5D4NTVcp1Gzo8AAAAAElFTkSuQmCC&labelColor=white" alt="HuggingFace"></a> <a href="https://www.modelscope.cn/studios/OpenDataLab/MinerU"><img src="https://img.shields.io/badge/Demo_on_ModelScope-purple?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIzIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHBhdGggaWQ9InN2Z18xNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTAsODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTUiIGZpbGw9IiM2MjRhZmYiIGQ9Im05OS4xNCwxMTUuNDlsMjUuNjUsMGwwLDI1LjY1bC0yNS42NSwwbDAsLTI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTYiIGZpbGw9IiM2MjRhZmYiIGQ9Im0xNzYuMDksMTQxLjE0bC0yNS42NDk5OSwwbDAsMjIuMTlsNDcuODQsMGwwLC00Ny44NGwtMjIuMTksMGwwLDI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTciIGZpbGw9IiMzNmNmZDEiIGQ9Im0xMjQuNzksODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTgiIGZpbGw9IiMzNmNmZDEiIGQ9Im0wLDY0LjE5bDI1LjY1LDBsMCwyNS42NWwtMjUuNjUsMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzE5IiBmaWxsPSIjNjI0YWZmIiBkPSJtMTk4LjI4LDg5Ljg0bDI1LjY0OTk5LDBsMCwyNS42NDk5OWwtMjUuNjQ5OTksMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIwIiBmaWxsPSIjMzZjZmQxIiBkPSJtMTk4LjI4LDY0LjE5bDI1LjY0OTk5LDBsMCwyNS42NWwtMjUuNjQ5OTksMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIxIiBmaWxsPSIjNjI0YWZmIiBkPSJtMTUwLjQ0LDQybDAsMjIuMTlsMjUuNjQ5OTksMGwwLDI1LjY1bDIyLjE5LDBsMCwtNDcuODRsLTQ3Ljg0LDB6Ii8+CiAgPHBhdGggaWQ9InN2Z18yMiIgZmlsbD0iIzM2Y2ZkMSIgZD0ibTczLjQ5LDg5Ljg0bDI1LjY1LDBsMCwyNS42NDk5OWwtMjUuNjUsMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIzIiBmaWxsPSIjNjI0YWZmIiBkPSJtNDcuODQsNjQuMTlsMjUuNjUsMGwwLC0yMi4xOWwtNDcuODQsMGwwLDQ3Ljg0bDIyLjE5LDBsMCwtMjUuNjV6Ii8+CiAgPHBhdGggaWQ9InN2Z18yNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTQ3Ljg0LDExNS40OWwtMjIuMTksMGwwLDQ3Ljg0bDQ3Ljg0LDBsMCwtMjIuMTlsLTI1LjY1LDBsMCwtMjUuNjV6Ii8+CiA8L2c+Cjwvc3ZnPg==&labelColor=white" alt="ModelScope"></a> <a href="https://colab.research.google.com/gist/myhloli/3b3a00a4a0a61577b6c30f989092d20d/mineru_demo.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg?sanitize=true" alt="Colab"></a> <a href="https://arxiv.org/abs/2409.18839"><img src="https://img.shields.io/badge/Paper-arXiv-green" alt="Paper"></a></p>
<p><a href="https://trendshift.io/repositories/11174" target="_blank"><img src="https://trendshift.io/api/badge/repositories/11174" alt="opendatalab%2FMinerU | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"></a></p>
<!-- language -->
<p><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/README.md">English</a> | <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/README_zh-CN.md">简体中文</a></p>
<!-- hot link -->
<p align="center"> <a href="https://github.com/opendatalab/PDF-Extract-Kit">PDF-Extract-Kit: High-Quality PDF Extraction Toolkit</a>🔥🔥🔥 </p>
<!-- join us -->
<p align="center"> 👋 join us on <a href="https://discord.gg/Tdedn9GTXq" target="_blank">Discord</a> and <a href="https://cdn.vansin.top/internlm/mineru.jpg" target="_blank">WeChat</a> </p>
</div>
<h1>Changelog</h1>
<ul>
<li>2024/11/22 0.10.0 released. Introducing hybrid OCR text extraction capabilities,
<ul>
<li>Significantly improved parsing performance in complex text distribution scenarios such as dense formulas, irregular span regions, and text represented by images.</li>
<li>Combines the dual advantages of accurate content extraction and faster speed in text mode, and more precise span/line region recognition in OCR mode.</li>
</ul> </li>
<li>2024/11/15 0.9.3 released. Integrated <a href="https://github.com/RapidAI/RapidTable">RapidTable</a> for table recognition, improving single-table parsing speed by more than 10 times, with higher accuracy and lower GPU memory usage.</li>
<li>2024/11/06 0.9.2 released. Integrated the <a href="https://huggingface.co/U4R/StructTable-InternVL2-1B">StructTable-InternVL2-1B</a> model for table recognition functionality.</li>
<li>2024/10/31 0.9.0 released. This is a major new version with extensive code refactoring, addressing numerous issues, improving performance, reducing hardware requirements, and enhancing usability:
<ul>
<li>Refactored the sorting module code to use <a href="https://github.com/ppaanngggg/layoutreader">layoutreader</a> for reading order sorting, ensuring high accuracy in various layouts.</li>
<li>Refactored the paragraph concatenation module to achieve good results in cross-column, cross-page, cross-figure, and cross-table scenarios.</li>
<li>Refactored the list and table of contents recognition functions, significantly improving the accuracy of list blocks and table of contents blocks, as well as the parsing of corresponding text paragraphs.</li>
<li>Refactored the matching logic for figures, tables, and descriptive text, greatly enhancing the accuracy of matching captions and footnotes to figures and tables, and reducing the loss rate of descriptive text to near zero.</li>
<li>Added multi-language support for OCR, supporting detection and recognition of 84 languages.For the list of supported languages, see <a href="https://paddlepaddle.github.io/PaddleOCR/latest/en/ppocr/blog/multi_languages.html#5-support-languages-and-abbreviations">OCR Language Support List</a>.</li>
<li>Added memory recycling logic and other memory optimization measures, significantly reducing memory usage. The memory requirement for enabling all acceleration features except table acceleration (layout/formula/OCR) has been reduced from 16GB to 8GB, and the memory requirement for enabling all acceleration features has been reduced from 24GB to 10GB.</li>
<li>Optimized configuration file feature switches, adding an independent formula detection switch to significantly improve speed and parsing results when formula detection is not needed.</li>
<li>Integrated <a href="https://github.com/opendatalab/PDF-Extract-Kit">PDF-Extract-Kit 1.0</a>:
<ul>
<li>Added the self-developed <code>doclayout_yolo</code> model, which speeds up processing by more than 10 times compared to the original solution while maintaining similar parsing effects, and can be freely switched with <code>layoutlmv3</code> via the configuration file.</li>
<li>Upgraded formula parsing to <code>unimernet 0.2.1</code>, improving formula parsing accuracy while significantly reducing memory usage.</li>
<li>Due to the repository change for <code>PDF-Extract-Kit 1.0</code>, you need to re-download the model. Please refer to <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/how_to_download_models_en.md">How to Download Models</a> for detailed steps.</li>
</ul> </li>
</ul> </li>
<li>2024/09/27 Version 0.8.1 released, Fixed some bugs, and providing a <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/projects/web_demo/README.md">localized deployment version</a> of the <a href="https://opendatalab.com/OpenSourceTools/Extractor/PDF/">online demo</a> and the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/projects/web/README.md">front-end interface</a>.</li>
<li>2024/09/09: Version 0.8.0 released, supporting fast deployment with Dockerfile, and launching demos on Huggingface and Modelscope.</li>
<li>2024/08/30: Version 0.7.1 released, add paddle tablemaster table recognition option</li>
<li>2024/08/09: Version 0.7.0b1 released, simplified installation process, added table recognition functionality</li>
<li>2024/08/01: Version 0.6.2b1 released, optimized dependency conflict issues and installation documentation</li>
<li>2024/07/05: Initial open-source release</li>
</ul>
<!-- TABLE OF CONTENT -->
<details open>
<summary><h2 style="display: inline-block">Table of Contents</h2></summary>
<ol>
<li> <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#mineru">MinerU</a>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#project-introduction">Project Introduction</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#key-features">Key Features</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#quick-start">Quick Start</a>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#online-demo">Online Demo</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#quick-cpu-demo">Quick CPU Demo</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#using-gpu">Using GPU</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#usage">Usage</a>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#command-line">Command Line</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#api">API</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#deploy-derived-projects">Deploy Derived Projects</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#development-guide">Development Guide</a></li>
</ul> </li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#todo">TODO</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#known-issues">Known Issues</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#faq">FAQ</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#all-thanks-to-our-contributors">All Thanks To Our Contributors</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#license-information">License Information</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#acknowledgments">Acknowledgments</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#citation">Citation</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#star-history">Star History</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#magic-doc">Magic-doc</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#magic-html">Magic-html</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#links">Links</a></li>
</ol>
</details>
<h1>MinerU</h1>
<h2>Project Introduction</h2>
<p>MinerU is a tool that converts PDFs into machine-readable formats (e.g., markdown, JSON), allowing for easy extraction into any format. MinerU was born during the pre-training process of <a href="https://github.com/InternLM/InternLM">InternLM</a>. We focus on solving symbol conversion issues in scientific literature and hope to contribute to technological development in the era of large models. Compared to well-known commercial products, MinerU is still young. If you encounter any issues or if the results are not as expected, please submit an issue on <a href="https://github.com/opendatalab/MinerU/issues">issue</a> and <strong>attach the relevant PDF</strong>.</p>
<p><a href="https://github.com/user-attachments/assets/4bea02c9-6d54-4cd6-97ed-dff14340982c">https://github.com/user-attachments/assets/4bea02c9-6d54-4cd6-97ed-dff14340982c</a></p>
<h2>Key Features</h2>
<ul>
<li>Remove headers, footers, footnotes, page numbers, etc., to ensure semantic coherence.</li>
<li>Output text in human-readable order, suitable for single-column, multi-column, and complex layouts.</li>
<li>Preserve the structure of the original document, including headings, paragraphs, lists, etc.</li>
<li>Extract images, image descriptions, tables, table titles, and footnotes.</li>
<li>Automatically recognize and convert formulas in the document to LaTeX format.</li>
<li>Automatically recognize and convert tables in the document to HTML format.</li>
<li>Automatically detect scanned PDFs and garbled PDFs and enable OCR functionality.</li>
<li>OCR supports detection and recognition of 84 languages.</li>
<li>Supports multiple output formats, such as multimodal and NLP Markdown, JSON sorted by reading order, and rich intermediate formats.</li>
<li>Supports various visualization results, including layout visualization and span visualization, for efficient confirmation of output quality.</li>
<li>Supports both CPU and GPU environments.</li>
<li>Compatible with Windows, Linux, and Mac platforms.</li>
</ul>
<h2>Quick Start</h2>
<p>If you encounter any installation issues, please first consult the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#faq">FAQ</a>. <br> If the parsing results are not as expected, refer to the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#known-issues">Known Issues</a>. <br> There are three different ways to experience MinerU:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#online-demo">Online Demo (No Installation Required)</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#quick-cpu-demo">Quick CPU Demo (Windows, Linux, Mac)</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#Using-GPU">Linux/Windows + CUDA</a></li>
</ul>
<blockquote>
<p>[!WARNING] <strong>Pre-installation Notice—Hardware and Software Environment Support</strong></p>
<p>To ensure the stability and reliability of the project, we only optimize and test for specific hardware and software environments during development. This ensures that users deploying and running the project on recommended system configurations will get the best performance with the fewest compatibility issues.</p>
<p>By focusing resources on the mainline environment, our team can more efficiently resolve potential bugs and develop new features.</p>
<p>In non-mainline environments, due to the diversity of hardware and software configurations, as well as third-party dependency compatibility issues, we cannot guarantee 100% project availability. Therefore, for users who wish to use this project in non-recommended environments, we suggest carefully reading the documentation and FAQ first. Most issues already have corresponding solutions in the FAQ. We also encourage community feedback to help us gradually expand support.</p>
</blockquote>
<table>
<tbody>
<tr>
<td colspan="3" rowspan="2">Operating System</td>
</tr>
<tr>
<td>Ubuntu 22.04 LTS</td>
<td>Windows 10 / 11</td>
<td>macOS 11+</td>
</tr>
<tr>
<td colspan="3">CPU</td>
<td>x86_64(unsupported ARM Linux)</td>
<td>x86_64(unsupported ARM Windows)</td>
<td>x86_64 / arm64</td>
</tr>
<tr>
<td colspan="3">Memory</td>
<td colspan="3">16GB or more, recommended 32GB+</td>
</tr>
<tr>
<td colspan="3">Python Version</td>
<td colspan="3">3.10(Please make sure to create a Python 3.10 virtual environment using conda)</td>
</tr>
<tr>
<td colspan="3">Nvidia Driver Version</td>
<td>latest (Proprietary Driver)</td>
<td>latest</td>
<td>None</td>
</tr>
<tr>
<td colspan="3">CUDA Environment</td>
<td>Automatic installation [12.1 (pytorch) + 11.8 (paddle)]</td>
<td>11.8 (manual installation) + cuDNN v8.7.0 (manual installation)</td>
<td>None</td>
</tr>
<tr>
<td rowspan="2">GPU Hardware Support List</td>
<td colspan="2">GPU VRAM 8GB or more</td>
<td colspan="2">2080~2080Ti / 3060Ti~3090Ti / 4060~4090<br> 8G VRAM can enable all acceleration features</td>
<td rowspan="2">None</td>
</tr>
</tbody>
</table>
<h3>Online Demo</h3>
<p>Stable Version (Stable version verified by QA):<br> <a href="https://opendatalab.com/OpenSourceTools/Extractor/PDF"><img src="https://img.shields.io/badge/Demo_on_OpenDataLab-blue?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbD0ibm9uZSI+CiA8ZGVmcz4KICA8bGluZWFyR3JhZGllbnQgeTI9IjAuNTMzNjciIHgyPSIxLjAwMDQiIHkxPSIwLjI5MjE5IiB4MT0iLTAuMTEyNjgiIGlkPSJhIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE1NDNGRSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOEM0NkZGIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxsaW5lYXJHcmFkaWVudCB5Mj0iMC41OTc1NyIgeDI9IjEuMDExMzciIHkxPSIwLjExMDIzIiB4MT0iLTAuMDg0NzQiIGlkPSJiIj4KICAgPHN0b3Agc3RvcC1jb2xvcj0iIzE1NDNGRSIvPgogICA8c3RvcCBzdG9wLWNvbG9yPSIjOEM0NkZGIiBvZmZzZXQ9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogPC9kZWZzPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGlkPSJzdmdfMSIgZmlsbD0idXJsKCNhKSIgZD0ibTEuNjIzLDEyLjA2N2EwLjQ4NCwwLjQ4NCAwIDAgMSAwLjA3LC0wLjM4NGw1LjMxLC03Ljg5NWMwLjA2OCwtMC4xIDAuMTcsLTAuMTcyIDAuMjg4LC0wLjJsMTQuMzc3LC0zLjQ3NGEwLjQ4NCwwLjQ4NCAwIDAgMSAwLjU4NCwwLjM1N2wzLjY2MiwxNS4xNTJjMS40NzcsNi4xMTQgLTIuMjgxLDEyLjI2NyAtOC4zOTQsMTMuNzQ1Yy02LjExNCwxLjQ3NyAtMTIuMjY3LC0yLjI4MSAtMTMuNzQ1LC04LjM5NWwtMi4xNTIsLTguOTA2eiIgb3BhY2l0eT0iMC40Ii8+CiAgPHBhdGggaWQ9InN2Z18yIiBmaWxsPSJ1cmwoI2IpIiBkPSJtNS44MjYsOC42NzNjMCwtMC4xMzYgMC4wNTcsLTAuMjY2IDAuMTU3LC0wLjM1OGw3LjAxNywtNi40MjVhMC40ODQsMC40ODQgMCAwIDEgMC4zMjcsLTAuMTI3bDE0Ljc5LDBjMC4yNjgsMCAwLjQ4NSwwLjIxNiAwLjQ4NSwwLjQ4NGwwLDE1LjU4OWMwLDYuMjkgLTUuMDk5LDExLjM4OCAtMTEuMzg4LDExLjM4OGMtNi4yOSwwIC0xMS4zODgsLTUuMDk5IC0xMS4zODgsLTExLjM4OGwwLC05LjE2M3oiLz4KICA8cGF0aCBpZD0ic3ZnXzMiIGZpbGw9IiM1RDc2RkYiIGQ9Im0xMi4zMzEsOC43NTNsLTYuMzgzLC0wLjM5OGw3LjEyMiwtNi41MmwwLjI5OSw1Ljg5MmEwLjk3OCwwLjk3OCAwIDAgMSAtMS4wMzgsMS4wMjZ6Ii8+CiAgPHBhdGggaWQ9InN2Z180IiBmaWxsPSIjMDAyOEZEIiBkPSJtMjAuNDE2LDE1LjAyMmwwLDEuNzExYTIuNDA0LDIuNDA0IDAgMCAxIC00LjgwOCwwbDAsLTQuMjc4bC0yLjgxLDBsMCw0LjY4NmE1LjIxNSw1LjIxNSAwIDEgMCAxMC40MywwbDAsLTQuNjg2bDAsMi41NjdsLTIuODEyLDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPgogIDxwYXRoIGlkPSJzdmdfNSIgZmlsbD0iIzAwMjhGRCIgZD0ibTIzLjIyOCwxMy44ODFsMS4xNCwwbDAsMS4xNDFsLTEuMTQsMGwwLC0xLjE0bDAsLTAuMDAxem0tMi44MTIsLTAuNjkybDEuODM0LDBsMCwxLjgzM2wtMS44MzQsMGwwLC0xLjgzMmwwLC0wLjAwMXptMS44MzQsLTAuOTc5bDAuOTc4LDBsMCwwLjk3OWwtMC45NzgsMGwwLC0wLjk3OGwwLC0wLjAwMXptMS41NDgsLTEuNjI5bDAuNjExLDBsMCwwLjYxMWwtMC42MTEsMGwwLC0wLjYxMXoiLz4KICA8cGF0aCBpZD0ic3ZnXzYiIGZpbGw9IiNmZmYiIGQ9Im0yMC4wODYsMTQuOTEybDAsMS43MTFhMi40MDQsMi40MDQgMCAxIDEgLTQuODA3LDBsMCwtNC4yNzhsLTIuODEyLDBsMCw0LjY4NmE1LjIxNSw1LjIxNSAwIDAgMCAxMC40MywwbDAsLTQuNjg2bDAsMi41NjdsLTIuODEsMGwtMC4wMDEsMHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggaWQ9InN2Z183IiBmaWxsPSIjZmZmIiBkPSJtMjIuODk4LDEzLjc3MWwxLjE0LDBsMCwxLjE0MWwtMS4xNCwwbDAsLTEuMTRsMCwtMC4wMDF6bS0yLjgxMiwtMC42OTJsMS44MzQsMGwwLDEuODMzbC0xLjgzNCwwbDAsLTEuODMybDAsLTAuMDAxem0xLjgzNCwtMC45NzlsMC45NzgsMGwwLDAuOTc5bC0wLjk3OCwwbDAsLTAuOTc5em0xLjU0OCwtMS42MjlsMC42MTEsMGwwLDAuNjExbC0wLjYxLDBsMCwtMC42MWwtMC4wMDEsLTAuMDAxeiIvPgogPC9nPgo8L3N2Zz4=&labelColor=white" alt="OpenDataLab"></a></p>
<p>Test Version (Synced with dev branch updates, testing new features):<br> <a href="https://huggingface.co/spaces/opendatalab/MinerU"><img src="https://img.shields.io/badge/Demo_on_HuggingFace-yellow.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABYCAMAAACkl9t/AAAAk1BMVEVHcEz/nQv/nQv/nQr/nQv/nQr/nQv/nQv/nQr/wRf/txT/pg7/yRr/rBD/zRz/ngv/oAz/zhz/nwv/txT/ngv/0B3+zBz/nQv/0h7/wxn/vRb/thXkuiT/rxH/pxD/ogzcqyf/nQvTlSz/czCxky7/SjifdjT/Mj3+Mj3wMj15aTnDNz+DSD9RTUBsP0FRO0Q6O0WyIxEIAAAAGHRSTlMADB8zSWF3krDDw8TJ1NbX5efv8ff9/fxKDJ9uAAAGKklEQVR42u2Z63qjOAyGC4RwCOfB2JAGqrSb2WnTw/1f3UaWcSGYNKTdf/P+mOkTrE+yJBulvfvLT2A5ruenaVHyIks33npl/6C4s/ZLAM45SOi/1FtZPyFur1OYofBX3w7d54Bxm+E8db+nDr12ttmESZ4zludJEG5S7TO72YPlKZFyE+YCYUJTBZsMiNS5Sd7NlDmKM2Eg2JQg8awbglfqgbhArjxkS7dgp2RH6hc9AMLdZYUtZN5DJr4molC8BfKrEkPKEnEVjLbgW1fLy77ZVOJagoIcLIl+IxaQZGjiX597HopF5CkaXVMDO9Pyix3AFV3kw4lQLCbHuMovz8FallbcQIJ5Ta0vks9RnolbCK84BtjKRS5uA43hYoZcOBGIG2Epbv6CvFVQ8m8loh66WNySsnN7htL58LNp+NXT8/PhXiBXPMjLSxtwp8W9f/1AngRierBkA+kk/IpUSOeKByzn8y3kAAAfh//0oXgV4roHm/kz4E2z//zRc3/lgwBzbM2mJxQEa5pqgX7d1L0htrhx7LKxOZlKbwcAWyEOWqYSI8YPtgDQVjpB5nvaHaSnBaQSD6hweDi8PosxD6/PT09YY3xQA7LTCTKfYX+QHpA0GCcqmEHvr/cyfKQTEuwgbs2kPxJEB0iNjfJcCTPyocx+A0griHSmADiC91oNGVwJ69RudYe65vJmoqfpul0lrqXadW0jFKH5BKwAeCq+Den7s+3zfRJzA61/Uj/9H/VzLKTx9jFPPdXeeP+L7WEvDLAKAIoF8bPTKT0+TM7W8ePj3Rz/Yn3kOAp2f1Kf0Weony7pn/cPydvhQYV+eFOfmOu7VB/ViPe34/EN3RFHY/yRuT8ddCtMPH/McBAT5s+vRde/gf2c/sPsjLK+m5IBQF5tO+h2tTlBGnP6693JdsvofjOPnnEHkh2TnV/X1fBl9S5zrwuwF8NFrAVJVwCAPTe8gaJlomqlp0pv4Pjn98tJ/t/fL++6unpR1YGC2n/KCoa0tTLoKiEeUPDl94nj+5/Tv3/eT5vBQ60X1S0oZr+IWRR8Ldhu7AlLjPISlJcO9vrFotky9SpzDequlwEir5beYAc0R7D9KS1DXva0jhYRDXoExPdc6yw5GShkZXe9QdO/uOvHofxjrV/TNS6iMJS+4TcSTgk9n5agJdBQbB//IfF/HpvPt3Tbi7b6I6K0R72p6ajryEJrENW2bbeVUGjfgoals4L443c7BEE4mJO2SpbRngxQrAKRudRzGQ8jVOL2qDVjjI8K1gc3TIJ5KiFZ1q+gdsARPB4NQS4AjwVSt72DSoXNyOWUrU5mQ9nRYyjp89Xo7oRI6Bga9QNT1mQ/ptaJq5T/7WcgAZywR/XlPGAUDdet3LE+qS0TI+g+aJU8MIqjo0Kx8Ly+maxLjJmjQ18rA0YCkxLQbUZP1WqdmyQGJLUm7VnQFqodmXSqmRrdVpqdzk5LvmvgtEcW8PMGdaS23EOWyDVbACZzUJPaqMbjDxpA3Qrgl0AikimGDbqmyT8P8NOYiqrldF8rX+YN7TopX4UoHuSCYY7cgX4gHwclQKl1zhx0THf+tCAUValzjI7Wg9EhptrkIcfIJjA94evOn8B2eHaVzvBrnl2ig0So6hvPaz0IGcOvTHvUIlE2+prqAxLSQxZlU2stql1NqCCLdIiIN/i1DBEHUoElM9dBravbiAnKqgpi4IBkw+utSPIoBijDXJipSVV7MpOEJUAc5Qmm3BnUN+w3hteEieYKfRZSIUcXKMVf0u5wD4EwsUNVvZOtUT7A2GkffHjByWpHqvRBYrTV72a6j8zZ6W0DTE86Hn04bmyWX3Ri9WH7ZU6Q7h+ZHo0nHUAcsQvVhXRDZHChwiyi/hnPuOsSEF6Exk3o6Y9DT1eZ+6cASXk2Y9k+6EOQMDGm6WBK10wOQJCBwren86cPPWUcRAnTVjGcU1LBgs9FURiX/e6479yZcLwCBmTxiawEwrOcleuu12t3tbLv/N4RLYIBhYexm7Fcn4OJcn0+zc+s8/VfPeddZHAGN6TT8eGczHdR/Gts1/MzDkThr23zqrVfAMFT33Nx1RJsx1k5zuWILLnG/vsH+Fv5D4NTVcp1Gzo8AAAAAElFTkSuQmCC&labelColor=white" alt="HuggingFace"></a> <a href="https://www.modelscope.cn/studios/OpenDataLab/MinerU"><img src="https://img.shields.io/badge/Demo_on_ModelScope-purple?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIzIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHBhdGggaWQ9InN2Z18xNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTAsODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTUiIGZpbGw9IiM2MjRhZmYiIGQ9Im05OS4xNCwxMTUuNDlsMjUuNjUsMGwwLDI1LjY1bC0yNS42NSwwbDAsLTI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTYiIGZpbGw9IiM2MjRhZmYiIGQ9Im0xNzYuMDksMTQxLjE0bC0yNS42NDk5OSwwbDAsMjIuMTlsNDcuODQsMGwwLC00Ny44NGwtMjIuMTksMGwwLDI1LjY1eiIvPgogIDxwYXRoIGlkPSJzdmdfMTciIGZpbGw9IiMzNmNmZDEiIGQ9Im0xMjQuNzksODkuODRsMjUuNjUsMGwwLDI1LjY0OTk5bC0yNS42NSwwbDAsLTI1LjY0OTk5eiIvPgogIDxwYXRoIGlkPSJzdmdfMTgiIGZpbGw9IiMzNmNmZDEiIGQ9Im0wLDY0LjE5bDI1LjY1LDBsMCwyNS42NWwtMjUuNjUsMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzE5IiBmaWxsPSIjNjI0YWZmIiBkPSJtMTk4LjI4LDg5Ljg0bDI1LjY0OTk5LDBsMCwyNS42NDk5OWwtMjUuNjQ5OTksMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIwIiBmaWxsPSIjMzZjZmQxIiBkPSJtMTk4LjI4LDY0LjE5bDI1LjY0OTk5LDBsMCwyNS42NWwtMjUuNjQ5OTksMGwwLC0yNS42NXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIxIiBmaWxsPSIjNjI0YWZmIiBkPSJtMTUwLjQ0LDQybDAsMjIuMTlsMjUuNjQ5OTksMGwwLDI1LjY1bDIyLjE5LDBsMCwtNDcuODRsLTQ3Ljg0LDB6Ii8+CiAgPHBhdGggaWQ9InN2Z18yMiIgZmlsbD0iIzM2Y2ZkMSIgZD0ibTczLjQ5LDg5Ljg0bDI1LjY1LDBsMCwyNS42NDk5OWwtMjUuNjUsMGwwLC0yNS42NDk5OXoiLz4KICA8cGF0aCBpZD0ic3ZnXzIzIiBmaWxsPSIjNjI0YWZmIiBkPSJtNDcuODQsNjQuMTlsMjUuNjUsMGwwLC0yMi4xOWwtNDcuODQsMGwwLDQ3Ljg0bDIyLjE5LDBsMCwtMjUuNjV6Ii8+CiAgPHBhdGggaWQ9InN2Z18yNCIgZmlsbD0iIzYyNGFmZiIgZD0ibTQ3Ljg0LDExNS40OWwtMjIuMTksMGwwLDQ3Ljg0bDQ3Ljg0LDBsMCwtMjIuMTlsLTI1LjY1LDBsMCwtMjUuNjV6Ii8+CiA8L2c+Cjwvc3ZnPg==&labelColor=white" alt="ModelScope"></a></p>
<h3>Quick CPU Demo</h3>
<h4>1. Install magic-pdf</h4>
<pre><code class="language-bash">conda create -n MinerU python=3.10
conda activate MinerU
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com
</code></pre>
<h4>2. Download model weight files</h4>
<p>Refer to <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/how_to_download_models_en.md">How to Download Model Files</a> for detailed instructions.</p>
<h4>3. Modify the Configuration File for Additional Configuration</h4>
<p>After completing the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/#2-download-model-weight-files">2. Download model weight files</a> step, the script will automatically generate a <code>magic-pdf.json</code> file in the user directory and configure the default model path. You can find the <code>magic-pdf.json</code> file in your 【user directory】.</p>
<blockquote>
<p>[!TIP] The user directory for Windows is "C:\Users\username", for Linux it is "/home/username", and for macOS it is "/Users/username".</p>
</blockquote>
<p>You can modify certain configurations in this file to enable or disable features, such as table recognition:</p>
<blockquote>
<p>[!NOTE] If the following items are not present in the JSON, please manually add the required items and remove the comment content (standard JSON does not support comments).</p>
</blockquote>
<pre><code class="language-json">{
// other config
"layout-config": {
"model": "layoutlmv3" // Please change to "doclayout_yolo" when using doclayout_yolo.
},
"formula-config": {
"mfd_model": "yolo_v8_mfd",
"mfr_model": "unimernet_small",
"enable": true // The formula recognition feature is enabled by default. If you need to disable it, please change the value here to "false".
},
"table-config": {
"model": "rapid_table", // Default to using "rapid_table", can be switched to "tablemaster" or "struct_eqtable".
"enable": false, // The table recognition feature is disabled by default. If you need to enable it, please change the value here to "true".
"max_time": 400
}
}
</code></pre>
<h3>Using GPU</h3>
<p>If your device supports CUDA and meets the GPU requirements of the mainline environment, you can use GPU acceleration. Please select the appropriate guide based on your system:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/README_Ubuntu_CUDA_Acceleration_en_US.md">Ubuntu 22.04 LTS + GPU</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/README_Windows_CUDA_Acceleration_en_US.md">Windows 10/11 + GPU</a></li>
<li>Quick Deployment with Docker</li>
</ul>
<blockquote>
<p>[!IMPORTANT] Docker requires a GPU with at least 8GB of VRAM, and all acceleration features are enabled by default.</p>
<p>Before running this Docker, you can use the following command to check if your device supports CUDA acceleration on Docker.</p>
<pre><code class="language-bash">docker run --rm --gpus=all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
</code></pre>
</blockquote>
<pre><code class="language-bash">wget https://github.com/opendatalab/MinerU/raw/master/Dockerfile
docker build -t mineru:latest .
docker run --rm -it --gpus=all mineru:latest /bin/bash
magic-pdf --help
</code></pre>
<h2>Usage</h2>
<h3>Command Line</h3>
<p><a href="https://mineru.readthedocs.io/en/latest/user_guide/quick_start/command_line.html">Using MinerU via Command Line</a></p>
<blockquote>
<p>[!TIP] For more information about the output files, please refer to the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/output_file_en_us.md">Output File Description</a>.</p>
</blockquote>
<h3>API</h3>
<p><a href="https://mineru.readthedocs.io/en/latest/user_guide/quick_start/to_markdown.html">Using MinerU via Python API</a></p>
<p>For detailed implementation, refer to:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/demo/demo.py">demo.py Simplest Processing Method</a></li>
<li><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/demo/magic_pdf_parse_main.py">magic_pdf_parse_main.py More Detailed Processing Workflow</a></li>
</ul>
<h3>Deploy Derived Projects</h3>
<p>Derived projects include secondary development projects based on MinerU by project developers and community developers,<br> such as application interfaces based on Gradio, RAG based on llama, web demos similar to the official website, lightweight multi-GPU load balancing client/server ends, etc. These projects may offer more features and a better user experience.<br> For specific deployment methods, please refer to the <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/projects/README.md">Derived Project README</a></p>
<h3>Development Guide</h3>
<p>TODO</p>
<h1>TODO</h1>
<ul>
<li><input type="checkbox" checked disabled> Reading order based on the model</li>
<li><input type="checkbox" checked disabled> Recognition of <code>index</code> and <code>list</code> in the main text</li>
<li><input type="checkbox" checked disabled> Table recognition</li>
<li><input type="checkbox" disabled> Code block recognition in the main text</li>
<li><input type="checkbox" disabled> <a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/chemical_knowledge_introduction/introduction.pdf">Chemical formula recognition</a></li>
<li><input type="checkbox" disabled> Geometric shape recognition</li>
</ul>
<h1>Known Issues</h1>
<ul>
<li>Reading order is determined by the model based on the spatial distribution of readable content, and may be out of order in some areas under extremely complex layouts.</li>
<li>Vertical text is not supported.</li>
<li>Tables of contents and lists are recognized through rules, and some uncommon list formats may not be recognized.</li>
<li>Only one level of headings is supported; hierarchical headings are not currently supported.</li>
<li>Code blocks are not yet supported in the layout model.</li>
<li>Comic books, art albums, primary school textbooks, and exercises cannot be parsed well.</li>
<li>Table recognition may result in row/column recognition errors in complex tables.</li>
<li>OCR recognition may produce inaccurate characters in PDFs of lesser-known languages (e.g., diacritical marks in Latin script, easily confused characters in Arabic script).</li>
<li>Some formulas may not render correctly in Markdown.</li>
</ul>
<h1>FAQ</h1>
<p><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/FAQ_zh_cn.md">FAQ in Chinese</a></p>
<p><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/docs/FAQ_en_us.md">FAQ in English</a></p>
<h1>All Thanks To Our Contributors</h1>
<a href="https://github.com/opendatalab/MinerU/graphs/contributors"> <img src="https://contrib.rocks/image?repo=opendatalab/MinerU"> </a>
<h1>License Information</h1>
<p><a href="https://raw.githubusercontent.com/opendatalab/MinerU/master/LICENSE.md">LICENSE.md</a></p>
<p>This project currently uses PyMuPDF to achieve advanced functionality. However, since it adheres to the AGPL license, it may impose restrictions on certain usage scenarios. In future iterations, we plan to explore and replace it with a more permissive PDF processing library to enhance user-friendliness and flexibility.</p>
<h1>Acknowledgments</h1>
<ul>
<li><a href="https://github.com/opendatalab/PDF-Extract-Kit">PDF-Extract-Kit</a></li>
<li><a href="https://github.com/opendatalab/DocLayout-YOLO">DocLayout-YOLO</a></li>
<li><a href="https://github.com/UniModal4Reasoning/StructEqTable-Deploy">StructEqTable</a></li>
<li><a href="https://github.com/RapidAI/RapidTable">RapidTable</a></li>
<li><a href="https://github.com/PaddlePaddle/PaddleOCR">PaddleOCR</a></li>
<li><a href="https://github.com/pymupdf/PyMuPDF">PyMuPDF</a></li>
<li><a href="https://github.com/ppaanngggg/layoutreader">layoutreader</a></li>
<li><a href="https://github.com/LlmKira/fast-langdetect">fast-langdetect</a></li>
<li><a href="https://github.com/pdfminer/pdfminer.six">pdfminer.six</a></li>
</ul>
<h1>Citation</h1>
<pre><code class="language-bibtex">@misc{wang2024mineruopensourcesolutionprecise,
title={MinerU: An Open-Source Solution for Precise Document Content Extraction},
author={Bin Wang and Chao Xu and Xiaomeng Zhao and Linke Ouyang and Fan Wu and Zhiyuan Zhao and Rui Xu and Kaiwen Liu and Yuan Qu and Fukai Shang and Bo Zhang and Liqun Wei and Zhihao Sui and Wei Li and Botian Shi and Yu Qiao and Dahua Lin and Conghui He},
year={2024},
eprint={2409.18839},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2409.18839},
}
@article{he2024opendatalab,
title={Opendatalab: Empowering general artificial intelligence with open datasets},
author={He, Conghui and Li, Wei and Jin, Zhenjiang and Xu, Chao and Wang, Bin and Lin, Dahua},
journal={arXiv preprint arXiv:2407.13773},
year={2024}
}
</code></pre>
<h1>Star History</h1>
<a>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=opendatalab/MinerU&type=Date&theme=dark">
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=opendatalab/MinerU&type=Date">
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=opendatalab/MinerU&type=Date">
</picture> </a>
<h1>Magic-doc</h1>
<p><a href="https://github.com/InternLM/magic-doc">Magic-Doc</a> Fast speed ppt/pptx/doc/docx/pdf extraction tool</p>
<h1>Magic-html</h1>
<p><a href="https://github.com/opendatalab/magic-html">Magic-HTML</a> Mixed web page extraction tool</p>
<h1>Links</h1>
<ul>
<li><a href="https://github.com/opendatalab/labelU">LabelU (A Lightweight Multi-modal Data Annotation Tool)</a></li>
<li><a href="https://github.com/opendatalab/LabelLLM">LabelLLM (An Open-source LLM Dialogue Annotation Platform)</a></li>
<li><a href="https://github.com/opendatalab/PDF-Extract-Kit">PDF-Extract-Kit (A Comprehensive Toolkit for High-Quality PDF Content Extraction)</a></li>
</ul>
+
+
+ LibraHp/GetQzonehistory
+ 2024-12-01T01:57:19Z
+ tag:github.com,2024-12-01:/LibraHp/GetQzonehistory
+
+ <p>获取QQ空间发布的历史说说</p><hr><h1>GetQzonehistory(获取qq发布的历史说说)</h1>
<p>已经打包好的单文件可以直接执行,在release页面。</p>
<details>
<summary><font color="#FF0000" size="5">免责声明【必读】</font></summary>
<p>本工具仅供学习和技术研究使用,不得用于任何商业或非法行为,否则后果自负。</p>
<p>本工具的作者不对本工具的安全性、完整性、可靠性、有效性、正确性或适用性做任何明示或暗示的保证,也不对本工具的使用或滥用造成的任何直接或间接的损失、责任、索赔、要求或诉讼承担任何责任。</p>
<p>本工具的作者保留随时修改、更新、删除或终止本工具的权利,无需事先通知或承担任何义务。</p>
<p>本工具的使用者应遵守相关法律法规,尊重QQ的版权和隐私,不得侵犯QQ或其他第三方的合法权益,不得从事任何违法或不道德的行为。</p>
<p>本工具的使用者在下载、安装、运行或使用本工具时,即表示已阅读并同意本免责声明。如有异议,请立即停止使用本工具,并删除所有相关文件。</p>
</details>
<p>该项目通过获取QQ空间的历史消息列表来获取该账号下发布的所有说说(当然消息列表中没有的就获取不到,例如一些仅自己可见的说说)<a href="https://space.bilibili.com/1117414477">B站有详细食用教程</a></p>
<p>主要实现还是通过模拟登录QQ空间来获取历史消息列表,然后进行数据分析,最后将爬取的说说存放到/resource/result目录下</p>
<p>由于对python编程还不是很熟悉,所以代码有很多疏漏,可以通过自己的想法来完善代码</p>
<h2>目录结构</h2>
<pre><code class="language-text">project/
├── resource/ # 资源目录
│ ├── config/ # 配置目录,文件保存位置配置
│ │ └── config.ini
│ ├── result/ # 导出结果的目录,格式为“你的qq.xlsx”
│ │ ├── ...
│ │ └── ...
│ ├── temp/ # 缓存目录
│ │ ├── ...
│ │ └── ...
│ ├── user/ # 用户信息
│ │ ├── ...
│ │ └── ...
├── util/ # 单元工具目录
│ ├── ConfigUtil.py # 读取配置
│ ├── GetAllMomentsUtil.py # 获取未删除的所有说说
│ ├── LoginUtil.py # 登录相关
│ ├── RequestUtil.py # 请求数据相关
│ └── ToolsUtil.py # 工具
├── main.py # 主程序入口
├── fetch_all_message.py # 主程序入口
├── README.md # 项目说明文件
├── requirements.txt # 依赖项列表
└── LICENSE # 许可证文件
</code></pre>
<h2>安装</h2>
<h4>使用虚拟环境(推荐)</h4>
<pre><code class="language-bash"># 克隆储存库
git clone https://github.com/LibraHp/GetQzonehistory.git
# 打开目录
cd GetQzonehistory
# 创建名为 myenv 的虚拟环境
python -m venv myenv
# 激活虚拟环境。在终端或命令提示符中运行以下命令:
# 对于 Windows:
myenv\Scripts\activate
# 对于 macOS/Linux:
source myenv/bin/activate
# 安装依赖
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
# 运行脚本
python main.py
</code></pre>
<h4>使用本机环境(不推荐)</h4>
<pre><code class="language-bash"># 克隆储存库
git clone https://github.com/LibraHp/GetQzonehistory.git
# 打开目录
cd GetQzonehistory
# 安装依赖
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
# 运行脚本
python main.py
</code></pre>
<h2>参考</h2>
<p>登录方法参考自 <a href="https://blog.csdn.net/m0_50153253/article/details/113780595">python-QQ空间扫码登录</a></p>
+
+
+ donnemartin/system-design-primer
+ 2024-12-01T01:57:19Z
+ tag:github.com,2024-12-01:/donnemartin/system-design-primer
+
+ <p>Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.</p><hr><p><em><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/README.md">English</a> ∙ <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/README-ja.md">日本語</a> ∙ <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/README-zh-Hans.md">简体中文</a> ∙ <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/README-zh-TW.md">繁體中文</a> | <a href="https://github.com/donnemartin/system-design-primer/issues/170">العَرَبِيَّة</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/220">বাংলা</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/40">Português do Brasil</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/186">Deutsch</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/130">ελληνικά</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/272">עברית</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/104">Italiano</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/102">한국어</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/110">فارسی</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/68">Polski</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/87">русский язык</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/136">Español</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/187">ภาษาไทย</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/39">Türkçe</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/127">tiếng Việt</a> ∙ <a href="https://github.com/donnemartin/system-design-primer/issues/250">Français</a> | <a href="https://github.com/donnemartin/system-design-primer/issues/28">Add Translation</a></em></p>
<p><strong>Help <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/TRANSLATIONS.md">translate</a> this guide!</strong></p>
<h1>The System Design Primer</h1>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/jj3A5N8.png"> <br> </p>
<h2>Motivation</h2>
<blockquote>
<p>Learn how to design large-scale systems.</p>
<p>Prep for the system design interview.</p>
</blockquote>
<h3>Learn how to design large-scale systems</h3>
<p>Learning how to design scalable systems will help you become a better engineer.</p>
<p>System design is a broad topic. There is a <strong>vast amount of resources scattered throughout the web</strong> on system design principles.</p>
<p>This repo is an <strong>organized collection</strong> of resources to help you learn how to build systems at scale.</p>
<h3>Learn from the open source community</h3>
<p>This is a continually updated, open source project.</p>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contributions</a> are welcome!</p>
<h3>Prep for the system design interview</h3>
<p>In addition to coding interviews, system design is a <strong>required component</strong> of the <strong>technical interview process</strong> at many tech companies.</p>
<p><strong>Practice common system design interview questions</strong> and <strong>compare</strong> your results with <strong>sample solutions</strong>: discussions, code, and diagrams.</p>
<p>Additional topics for interview prep:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#study-guide">Study guide</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#how-to-approach-a-system-design-interview-question">How to approach a system design interview question</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#system-design-interview-questions-with-solutions">System design interview questions, <strong>with solutions</strong></a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#object-oriented-design-interview-questions-with-solutions">Object-oriented design interview questions, <strong>with solutions</strong></a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#additional-system-design-interview-questions">Additional system design interview questions</a></li>
</ul>
<h2>Anki flashcards</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/zdCAkB3.png"> <br> </p>
<p>The provided <a href="https://apps.ankiweb.net/">Anki flashcard decks</a> use spaced repetition to help you retain key system design concepts.</p>
<ul>
<li><a href="https://github.com/donnemartin/system-design-primer/tree/master/resources/flash_cards/System%20Design.apkg">System design deck</a></li>
<li><a href="https://github.com/donnemartin/system-design-primer/tree/master/resources/flash_cards/System%20Design%20Exercises.apkg">System design exercises deck</a></li>
<li><a href="https://github.com/donnemartin/system-design-primer/tree/master/resources/flash_cards/OO%20Design.apkg">Object oriented design exercises deck</a></li>
</ul>
<p>Great for use while on-the-go.</p>
<h3>Coding Resource: Interactive Coding Challenges</h3>
<p>Looking for resources to help you prep for the <a href="https://github.com/donnemartin/interactive-coding-challenges"><strong>Coding Interview</strong></a>?</p>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/b4YtAEN.png"> <br> </p>
<p>Check out the sister repo <a href="https://github.com/donnemartin/interactive-coding-challenges"><strong>Interactive Coding Challenges</strong></a>, which contains an additional Anki deck:</p>
<ul>
<li><a href="https://github.com/donnemartin/interactive-coding-challenges/tree/master/anki_cards/Coding.apkg">Coding deck</a></li>
</ul>
<h2>Contributing</h2>
<blockquote>
<p>Learn from the community.</p>
</blockquote>
<p>Feel free to submit pull requests to help:</p>
<ul>
<li>Fix errors</li>
<li>Improve sections</li>
<li>Add new sections</li>
<li><a href="https://github.com/donnemartin/system-design-primer/issues/28">Translate</a></li>
</ul>
<p>Content that needs some polishing is placed <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#under-development">under development</a>.</p>
<p>Review the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/CONTRIBUTING.md">Contributing Guidelines</a>.</p>
<h2>Index of system design topics</h2>
<blockquote>
<p>Summaries of various system design topics, including pros and cons. <strong>Everything is a trade-off</strong>.</p>
<p>Each section contains links to more in-depth resources.</p>
</blockquote>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/jrUBAF7.png"> <br> </p>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#system-design-topics-start-here">System design topics: start here</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#step-1-review-the-scalability-video-lecture">Step 1: Review the scalability video lecture</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#step-2-review-the-scalability-article">Step 2: Review the scalability article</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#next-steps">Next steps</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#performance-vs-scalability">Performance vs scalability</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#latency-vs-throughput">Latency vs throughput</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#availability-vs-consistency">Availability vs consistency</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cap-theorem">CAP theorem</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cp---consistency-and-partition-tolerance">CP - consistency and partition tolerance</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#ap---availability-and-partition-tolerance">AP - availability and partition tolerance</a></li>
</ul> </li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#consistency-patterns">Consistency patterns</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#weak-consistency">Weak consistency</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#eventual-consistency">Eventual consistency</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#strong-consistency">Strong consistency</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#availability-patterns">Availability patterns</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#fail-over">Fail-over</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#replication">Replication</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#availability-in-numbers">Availability in numbers</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#domain-name-system">Domain name system</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#content-delivery-network">Content delivery network</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#push-cdns">Push CDNs</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#pull-cdns">Pull CDNs</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#load-balancer">Load balancer</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#active-passive">Active-passive</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#active-active">Active-active</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#layer-4-load-balancing">Layer 4 load balancing</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#layer-7-load-balancing">Layer 7 load balancing</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#horizontal-scaling">Horizontal scaling</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#reverse-proxy-web-server">Reverse proxy (web server)</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#load-balancer-vs-reverse-proxy">Load balancer vs reverse proxy</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#application-layer">Application layer</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#microservices">Microservices</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#service-discovery">Service discovery</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#database">Database</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#relational-database-management-system-rdbms">Relational database management system (RDBMS)</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#master-slave-replication">Master-slave replication</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#master-master-replication">Master-master replication</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#federation">Federation</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#sharding">Sharding</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#denormalization">Denormalization</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#sql-tuning">SQL tuning</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#nosql">NoSQL</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#key-value-store">Key-value store</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#document-store">Document store</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#wide-column-store">Wide column store</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#graph-database">Graph Database</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#sql-or-nosql">SQL or NoSQL</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cache">Cache</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#client-caching">Client caching</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cdn-caching">CDN caching</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#web-server-caching">Web server caching</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#database-caching">Database caching</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#application-caching">Application caching</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#caching-at-the-database-query-level">Caching at the database query level</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#caching-at-the-object-level">Caching at the object level</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#when-to-update-the-cache">When to update the cache</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cache-aside">Cache-aside</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#write-through">Write-through</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#write-behind-write-back">Write-behind (write-back)</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#refresh-ahead">Refresh-ahead</a></li>
</ul> </li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#asynchronism">Asynchronism</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#message-queues">Message queues</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#task-queues">Task queues</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#back-pressure">Back pressure</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#communication">Communication</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#transmission-control-protocol-tcp">Transmission control protocol (TCP)</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#user-datagram-protocol-udp">User datagram protocol (UDP)</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#remote-procedure-call-rpc">Remote procedure call (RPC)</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#representational-state-transfer-rest">Representational state transfer (REST)</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#security">Security</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#appendix">Appendix</a>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#powers-of-two-table">Powers of two table</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#latency-numbers-every-programmer-should-know">Latency numbers every programmer should know</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#additional-system-design-interview-questions">Additional system design interview questions</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#real-world-architectures">Real world architectures</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#company-architectures">Company architectures</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#company-engineering-blogs">Company engineering blogs</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#under-development">Under development</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#credits">Credits</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contact-info">Contact info</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#license">License</a></li>
</ul>
<h2>Study guide</h2>
<blockquote>
<p>Suggested topics to review based on your interview timeline (short, medium, long).</p>
</blockquote>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/OfVllex.png" alt="Imgur"></p>
<p><strong>Q: For interviews, do I need to know everything here?</strong></p>
<p><strong>A: No, you don't need to know everything here to prepare for the interview</strong>.</p>
<p>What you are asked in an interview depends on variables such as:</p>
<ul>
<li>How much experience you have</li>
<li>What your technical background is</li>
<li>What positions you are interviewing for</li>
<li>Which companies you are interviewing with</li>
<li>Luck</li>
</ul>
<p>More experienced candidates are generally expected to know more about system design. Architects or team leads might be expected to know more than individual contributors. Top tech companies are likely to have one or more design interview rounds.</p>
<p>Start broad and go deeper in a few areas. It helps to know a little about various key system design topics. Adjust the following guide based on your timeline, experience, what positions you are interviewing for, and which companies you are interviewing with.</p>
<ul>
<li><strong>Short timeline</strong> - Aim for <strong>breadth</strong> with system design topics. Practice by solving <strong>some</strong> interview questions.</li>
<li><strong>Medium timeline</strong> - Aim for <strong>breadth</strong> and <strong>some depth</strong> with system design topics. Practice by solving <strong>many</strong> interview questions.</li>
<li><strong>Long timeline</strong> - Aim for <strong>breadth</strong> and <strong>more depth</strong> with system design topics. Practice by solving <strong>most</strong> interview questions.</li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th>Short</th>
<th>Medium</th>
<th>Long</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read through the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#index-of-system-design-topics">System design topics</a> to get a broad understanding of how systems work</td>
<td><span>👍</span></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
</tr>
<tr>
<td>Read through a few articles in the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#company-engineering-blogs">Company engineering blogs</a> for the companies you are interviewing with</td>
<td><span>👍</span></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
</tr>
<tr>
<td>Read through a few <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#real-world-architectures">Real world architectures</a></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
</tr>
<tr>
<td>Review <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#how-to-approach-a-system-design-interview-question">How to approach a system design interview question</a></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
<td><span>👍</span></td>
</tr>
<tr>
<td>Work through <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#system-design-interview-questions-with-solutions">System design interview questions with solutions</a></td>
<td>Some</td>
<td>Many</td>
<td>Most</td>
</tr>
<tr>
<td>Work through <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#object-oriented-design-interview-questions-with-solutions">Object-oriented design interview questions with solutions</a></td>
<td>Some</td>
<td>Many</td>
<td>Most</td>
</tr>
<tr>
<td>Review <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#additional-system-design-interview-questions">Additional system design interview questions</a></td>
<td>Some</td>
<td>Many</td>
<td>Most</td>
</tr>
</tbody>
</table>
<h2>How to approach a system design interview question</h2>
<blockquote>
<p>How to tackle a system design interview question.</p>
</blockquote>
<p>The system design interview is an <strong>open-ended conversation</strong>. You are expected to lead it.</p>
<p>You can use the following steps to guide the discussion. To help solidify this process, work through the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#system-design-interview-questions-with-solutions">System design interview questions with solutions</a> section using the following steps.</p>
<h3>Step 1: Outline use cases, constraints, and assumptions</h3>
<p>Gather requirements and scope the problem. Ask questions to clarify use cases and constraints. Discuss assumptions.</p>
<ul>
<li>Who is going to use it?</li>
<li>How are they going to use it?</li>
<li>How many users are there?</li>
<li>What does the system do?</li>
<li>What are the inputs and outputs of the system?</li>
<li>How much data do we expect to handle?</li>
<li>How many requests per second do we expect?</li>
<li>What is the expected read to write ratio?</li>
</ul>
<h3>Step 2: Create a high level design</h3>
<p>Outline a high level design with all important components.</p>
<ul>
<li>Sketch the main components and connections</li>
<li>Justify your ideas</li>
</ul>
<h3>Step 3: Design core components</h3>
<p>Dive into details for each core component. For example, if you were asked to <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/pastebin/README.md">design a url shortening service</a>, discuss:</p>
<ul>
<li>Generating and storing a hash of the full url
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/pastebin/README.md">MD5</a> and <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/pastebin/README.md">Base62</a></li>
<li>Hash collisions</li>
<li>SQL or NoSQL</li>
<li>Database schema</li>
</ul> </li>
<li>Translating a hashed url to the full url
<ul>
<li>Database lookup</li>
</ul> </li>
<li>API and object-oriented design</li>
</ul>
<h3>Step 4: Scale the design</h3>
<p>Identify and address bottlenecks, given the constraints. For example, do you need the following to address scalability issues?</p>
<ul>
<li>Load balancer</li>
<li>Horizontal scaling</li>
<li>Caching</li>
<li>Database sharding</li>
</ul>
<p>Discuss potential solutions and trade-offs. Everything is a trade-off. Address bottlenecks using <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#index-of-system-design-topics">principles of scalable system design</a>.</p>
<h3>Back-of-the-envelope calculations</h3>
<p>You might be asked to do some estimates by hand. Refer to the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#appendix">Appendix</a> for the following resources:</p>
<ul>
<li><a href="http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html">Use back of the envelope calculations</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#powers-of-two-table">Powers of two table</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#latency-numbers-every-programmer-should-know">Latency numbers every programmer should know</a></li>
</ul>
<h3>Source(s) and further reading</h3>
<p>Check out the following links to get a better idea of what to expect:</p>
<ul>
<li><a href="https://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/">How to ace a systems design interview</a></li>
<li><a href="http://www.hiredintech.com/system-design">The system design interview</a></li>
<li><a href="https://www.youtube.com/watch?v=ZgdS0EUmn70">Intro to Architecture and Systems Design Interviews</a></li>
<li><a href="https://leetcode.com/discuss/career/229177/My-System-Design-Template">System design template</a></li>
</ul>
<h2>System design interview questions with solutions</h2>
<blockquote>
<p>Common system design interview questions with sample discussions, code, and diagrams.</p>
<p>Solutions linked to content in the <code>solutions/</code> folder.</p>
</blockquote>
<table>
<thead>
<tr>
<th>Question</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Design Pastebin.com (or Bit.ly)</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/pastebin/README.md">Solution</a></td>
</tr>
<tr>
<td>Design the Twitter timeline and search (or Facebook feed and search)</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/twitter/README.md">Solution</a></td>
</tr>
<tr>
<td>Design a web crawler</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/web_crawler/README.md">Solution</a></td>
</tr>
<tr>
<td>Design Mint.com</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/mint/README.md">Solution</a></td>
</tr>
<tr>
<td>Design the data structures for a social network</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/social_graph/README.md">Solution</a></td>
</tr>
<tr>
<td>Design a key-value store for a search engine</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/query_cache/README.md">Solution</a></td>
</tr>
<tr>
<td>Design Amazon's sales ranking by category feature</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/sales_rank/README.md">Solution</a></td>
</tr>
<tr>
<td>Design a system that scales to millions of users on AWS</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/scaling_aws/README.md">Solution</a></td>
</tr>
<tr>
<td>Add a system design question</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></td>
</tr>
</tbody>
</table>
<h3>Design Pastebin.com (or Bit.ly)</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/pastebin/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/4edXG0T.png" alt="Imgur"></p>
<h3>Design the Twitter timeline and search (or Facebook feed and search)</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/twitter/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/jrUBAF7.png" alt="Imgur"></p>
<h3>Design a web crawler</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/web_crawler/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/bWxPtQA.png" alt="Imgur"></p>
<h3>Design Mint.com</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/mint/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/V5q57vU.png" alt="Imgur"></p>
<h3>Design the data structures for a social network</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/social_graph/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/cdCv5g7.png" alt="Imgur"></p>
<h3>Design a key-value store for a search engine</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/query_cache/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/4j99mhe.png" alt="Imgur"></p>
<h3>Design Amazon's sales ranking by category feature</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/sales_rank/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/MzExP06.png" alt="Imgur"></p>
<h3>Design a system that scales to millions of users on AWS</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/system_design/scaling_aws/README.md">View exercise and solution</a></p>
<p><img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/jj3A5N8.png" alt="Imgur"></p>
<h2>Object-oriented design interview questions with solutions</h2>
<blockquote>
<p>Common object-oriented design interview questions with sample discussions, code, and diagrams.</p>
<p>Solutions linked to content in the <code>solutions/</code> folder.</p>
</blockquote>
<blockquote>
<p><strong>Note: This section is under development</strong></p>
</blockquote>
<table>
<thead>
<tr>
<th>Question</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>Design a hash map</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/hash_table/hash_map.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a least recently used cache</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/lru_cache/lru_cache.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a call center</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/call_center/call_center.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a deck of cards</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/deck_of_cards/deck_of_cards.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a parking lot</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/parking_lot/parking_lot.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a chat server</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/solutions/object_oriented_design/online_chat/online_chat.ipynb">Solution</a></td>
</tr>
<tr>
<td>Design a circular array</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></td>
</tr>
<tr>
<td>Add an object-oriented design question</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></td>
</tr>
</tbody>
</table>
<h2>System design topics: start here</h2>
<p>New to system design?</p>
<p>First, you'll need a basic understanding of common principles, learning about what they are, how they are used, and their pros and cons.</p>
<h3>Step 1: Review the scalability video lecture</h3>
<p><a href="https://www.youtube.com/watch?v=-W9F__D3oY4">Scalability Lecture at Harvard</a></p>
<ul>
<li>Topics covered:
<ul>
<li>Vertical scaling</li>
<li>Horizontal scaling</li>
<li>Caching</li>
<li>Load balancing</li>
<li>Database replication</li>
<li>Database partitioning</li>
</ul> </li>
</ul>
<h3>Step 2: Review the scalability article</h3>
<p><a href="https://web.archive.org/web/20221030091841/http://www.lecloud.net/tagged/scalability/chrono">Scalability</a></p>
<ul>
<li>Topics covered:
<ul>
<li><a href="https://web.archive.org/web/20220530193911/https://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones">Clones</a></li>
<li><a href="https://web.archive.org/web/20220602114024/https://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database">Databases</a></li>
<li><a href="https://web.archive.org/web/20230126233752/https://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache">Caches</a></li>
<li><a href="https://web.archive.org/web/20220926171507/https://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism">Asynchronism</a></li>
</ul> </li>
</ul>
<h3>Next steps</h3>
<p>Next, we'll look at high-level trade-offs:</p>
<ul>
<li><strong>Performance</strong> vs <strong>scalability</strong></li>
<li><strong>Latency</strong> vs <strong>throughput</strong></li>
<li><strong>Availability</strong> vs <strong>consistency</strong></li>
</ul>
<p>Keep in mind that <strong>everything is a trade-off</strong>.</p>
<p>Then we'll dive into more specific topics such as DNS, CDNs, and load balancers.</p>
<h2>Performance vs scalability</h2>
<p>A service is <strong>scalable</strong> if it results in increased <strong>performance</strong> in a manner proportional to resources added. Generally, increasing performance means serving more units of work, but it can also be to handle larger units of work, such as when datasets grow.<sup><a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html">1</a></sup></p>
<p>Another way to look at performance vs scalability:</p>
<ul>
<li>If you have a <strong>performance</strong> problem, your system is slow for a single user.</li>
<li>If you have a <strong>scalability</strong> problem, your system is fast for a single user but slow under heavy load.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html">A word on scalability</a></li>
<li><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Scalability, availability, stability, patterns</a></li>
</ul>
<h2>Latency vs throughput</h2>
<p><strong>Latency</strong> is the time to perform some action or to produce some result.</p>
<p><strong>Throughput</strong> is the number of such actions or results per unit of time.</p>
<p>Generally, you should aim for <strong>maximal throughput</strong> with <strong>acceptable latency</strong>.</p>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://community.cadence.com/cadence_blogs_8/b/fv/posts/understanding-latency-vs-throughput">Understanding latency vs throughput</a></li>
</ul>
<h2>Availability vs consistency</h2>
<h3>CAP theorem</h3>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/bgLMI2u.png"> <br> <i><a href="http://robertgreiner.com/2014/08/cap-theorem-revisited">Source: CAP theorem revisited</a></i> </p>
<p>In a distributed computer system, you can only support two of the following guarantees:</p>
<ul>
<li><strong>Consistency</strong> - Every read receives the most recent write or an error</li>
<li><strong>Availability</strong> - Every request receives a response, without guarantee that it contains the most recent version of the information</li>
<li><strong>Partition Tolerance</strong> - The system continues to operate despite arbitrary partitioning due to network failures</li>
</ul>
<p><em>Networks aren't reliable, so you'll need to support partition tolerance. You'll need to make a software tradeoff between consistency and availability.</em></p>
<h4>CP - consistency and partition tolerance</h4>
<p>Waiting for a response from the partitioned node might result in a timeout error. CP is a good choice if your business needs require atomic reads and writes.</p>
<h4>AP - availability and partition tolerance</h4>
<p>Responses return the most readily available version of the data available on any node, which might not be the latest. Writes might take some time to propagate when the partition is resolved.</p>
<p>AP is a good choice if the business needs to allow for <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#eventual-consistency">eventual consistency</a> or when the system needs to continue working despite external errors.</p>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="http://robertgreiner.com/2014/08/cap-theorem-revisited/">CAP theorem revisited</a></li>
<li><a href="http://ksat.me/a-plain-english-introduction-to-cap-theorem">A plain english introduction to CAP theorem</a></li>
<li><a href="https://github.com/henryr/cap-faq">CAP FAQ</a></li>
<li><a href="https://www.youtube.com/watch?v=k-Yaq8AHlFA">The CAP theorem</a></li>
</ul>
<h2>Consistency patterns</h2>
<p>With multiple copies of the same data, we are faced with options on how to synchronize them so clients have a consistent view of the data. Recall the definition of consistency from the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cap-theorem">CAP theorem</a> - Every read receives the most recent write or an error.</p>
<h3>Weak consistency</h3>
<p>After a write, reads may or may not see it. A best effort approach is taken.</p>
<p>This approach is seen in systems such as memcached. Weak consistency works well in real time use cases such as VoIP, video chat, and realtime multiplayer games. For example, if you are on a phone call and lose reception for a few seconds, when you regain connection you do not hear what was spoken during connection loss.</p>
<h3>Eventual consistency</h3>
<p>After a write, reads will eventually see it (typically within milliseconds). Data is replicated asynchronously.</p>
<p>This approach is seen in systems such as DNS and email. Eventual consistency works well in highly available systems.</p>
<h3>Strong consistency</h3>
<p>After a write, reads will see it. Data is replicated synchronously.</p>
<p>This approach is seen in file systems and RDBMSes. Strong consistency works well in systems that need transactions.</p>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="http://snarfed.org/transactions_across_datacenters_io.html">Transactions across data centers</a></li>
</ul>
<h2>Availability patterns</h2>
<p>There are two complementary patterns to support high availability: <strong>fail-over</strong> and <strong>replication</strong>.</p>
<h3>Fail-over</h3>
<h4>Active-passive</h4>
<p>With active-passive fail-over, heartbeats are sent between the active and the passive server on standby. If the heartbeat is interrupted, the passive server takes over the active's IP address and resumes service.</p>
<p>The length of downtime is determined by whether the passive server is already running in 'hot' standby or whether it needs to start up from 'cold' standby. Only the active server handles traffic.</p>
<p>Active-passive failover can also be referred to as master-slave failover.</p>
<h4>Active-active</h4>
<p>In active-active, both servers are managing traffic, spreading the load between them.</p>
<p>If the servers are public-facing, the DNS would need to know about the public IPs of both servers. If the servers are internal-facing, application logic would need to know about both servers.</p>
<p>Active-active failover can also be referred to as master-master failover.</p>
<h3>Disadvantage(s): failover</h3>
<ul>
<li>Fail-over adds more hardware and additional complexity.</li>
<li>There is a potential for loss of data if the active system fails before any newly written data can be replicated to the passive.</li>
</ul>
<h3>Replication</h3>
<h4>Master-slave and master-master</h4>
<p>This topic is further discussed in the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#database">Database</a> section:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#master-slave-replication">Master-slave replication</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#master-master-replication">Master-master replication</a></li>
</ul>
<h3>Availability in numbers</h3>
<p>Availability is often quantified by uptime (or downtime) as a percentage of time the service is available. Availability is generally measured in number of 9s--a service with 99.99% availability is described as having four 9s.</p>
<h4>99.9% availability - three 9s</h4>
<table>
<thead>
<tr>
<th>Duration</th>
<th>Acceptable downtime</th>
</tr>
</thead>
<tbody>
<tr>
<td>Downtime per year</td>
<td>8h 45min 57s</td>
</tr>
<tr>
<td>Downtime per month</td>
<td>43m 49.7s</td>
</tr>
<tr>
<td>Downtime per week</td>
<td>10m 4.8s</td>
</tr>
<tr>
<td>Downtime per day</td>
<td>1m 26.4s</td>
</tr>
</tbody>
</table>
<h4>99.99% availability - four 9s</h4>
<table>
<thead>
<tr>
<th>Duration</th>
<th>Acceptable downtime</th>
</tr>
</thead>
<tbody>
<tr>
<td>Downtime per year</td>
<td>52min 35.7s</td>
</tr>
<tr>
<td>Downtime per month</td>
<td>4m 23s</td>
</tr>
<tr>
<td>Downtime per week</td>
<td>1m 5s</td>
</tr>
<tr>
<td>Downtime per day</td>
<td>8.6s</td>
</tr>
</tbody>
</table>
<h4>Availability in parallel vs in sequence</h4>
<p>If a service consists of multiple components prone to failure, the service's overall availability depends on whether the components are in sequence or in parallel.</p>
<h6>In sequence</h6>
<p>Overall availability decreases when two components with availability < 100% are in sequence:</p>
<pre><code>Availability (Total) = Availability (Foo) * Availability (Bar)
</code></pre>
<p>If both <code>Foo</code> and <code>Bar</code> each had 99.9% availability, their total availability in sequence would be 99.8%.</p>
<h6>In parallel</h6>
<p>Overall availability increases when two components with availability < 100% are in parallel:</p>
<pre><code>Availability (Total) = 1 - (1 - Availability (Foo)) * (1 - Availability (Bar))
</code></pre>
<p>If both <code>Foo</code> and <code>Bar</code> each had 99.9% availability, their total availability in parallel would be 99.9999%.</p>
<h2>Domain name system</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/IOyLj4i.jpg"> <br> <i><a href="http://www.slideshare.net/srikrupa5/dns-security-presentation-issa">Source: DNS security presentation</a></i> </p>
<p>A Domain Name System (DNS) translates a domain name such as <a href="http://www.example.com">www.example.com</a> to an IP address.</p>
<p>DNS is hierarchical, with a few authoritative servers at the top level. Your router or ISP provides information about which DNS server(s) to contact when doing a lookup. Lower level DNS servers cache mappings, which could become stale due to DNS propagation delays. DNS results can also be cached by your browser or OS for a certain period of time, determined by the <a href="https://en.wikipedia.org/wiki/Time_to_live">time to live (TTL)</a>.</p>
<ul>
<li><strong>NS record (name server)</strong> - Specifies the DNS servers for your domain/subdomain.</li>
<li><strong>MX record (mail exchange)</strong> - Specifies the mail servers for accepting messages.</li>
<li><strong>A record (address)</strong> - Points a name to an IP address.</li>
<li><strong>CNAME (canonical)</strong> - Points a name to another name or <code>CNAME</code> (example.com to <a href="http://www.example.com">www.example.com</a>) or to an <code>A</code> record.</li>
</ul>
<p>Services such as <a href="https://www.cloudflare.com/dns/">CloudFlare</a> and <a href="https://aws.amazon.com/route53/">Route 53</a> provide managed DNS services. Some DNS services can route traffic through various methods:</p>
<ul>
<li><a href="https://www.jscape.com/blog/load-balancing-algorithms">Weighted round robin</a>
<ul>
<li>Prevent traffic from going to servers under maintenance</li>
<li>Balance between varying cluster sizes</li>
<li>A/B testing</li>
</ul> </li>
<li><a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-latency.html">Latency-based</a></li>
<li><a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geo.html">Geolocation-based</a></li>
</ul>
<h3>Disadvantage(s): DNS</h3>
<ul>
<li>Accessing a DNS server introduces a slight delay, although mitigated by caching described above.</li>
<li>DNS server management could be complex and is generally managed by <a href="http://superuser.com/questions/472695/who-controls-the-dns-servers/472729">governments, ISPs, and large companies</a>.</li>
<li>DNS services have recently come under <a href="http://dyn.com/blog/dyn-analysis-summary-of-friday-october-21-attack/">DDoS attack</a>, preventing users from accessing websites such as Twitter without knowing Twitter's IP address(es).</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://technet.microsoft.com/en-us/library/dd197427(v=ws.10).aspx">DNS architecture</a></li>
<li><a href="https://en.wikipedia.org/wiki/Domain_Name_System">Wikipedia</a></li>
<li><a href="https://support.dnsimple.com/categories/dns/">DNS articles</a></li>
</ul>
<h2>Content delivery network</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/h9TAuGI.jpg"> <br> <i><a href="https://www.creative-artworks.eu/why-use-a-content-delivery-network-cdn/">Source: Why use a CDN</a></i> </p>
<p>A content delivery network (CDN) is a globally distributed network of proxy servers, serving content from locations closer to the user. Generally, static files such as HTML/CSS/JS, photos, and videos are served from CDN, although some CDNs such as Amazon's CloudFront support dynamic content. The site's DNS resolution will tell clients which server to contact.</p>
<p>Serving content from CDNs can significantly improve performance in two ways:</p>
<ul>
<li>Users receive content from data centers close to them</li>
<li>Your servers do not have to serve requests that the CDN fulfills</li>
</ul>
<h3>Push CDNs</h3>
<p>Push CDNs receive new content whenever changes occur on your server. You take full responsibility for providing content, uploading directly to the CDN and rewriting URLs to point to the CDN. You can configure when content expires and when it is updated. Content is uploaded only when it is new or changed, minimizing traffic, but maximizing storage.</p>
<p>Sites with a small amount of traffic or sites with content that isn't often updated work well with push CDNs. Content is placed on the CDNs once, instead of being re-pulled at regular intervals.</p>
<h3>Pull CDNs</h3>
<p>Pull CDNs grab new content from your server when the first user requests the content. You leave the content on your server and rewrite URLs to point to the CDN. This results in a slower request until the content is cached on the CDN.</p>
<p>A <a href="https://en.wikipedia.org/wiki/Time_to_live">time-to-live (TTL)</a> determines how long content is cached. Pull CDNs minimize storage space on the CDN, but can create redundant traffic if files expire and are pulled before they have actually changed.</p>
<p>Sites with heavy traffic work well with pull CDNs, as traffic is spread out more evenly with only recently-requested content remaining on the CDN.</p>
<h3>Disadvantage(s): CDN</h3>
<ul>
<li>CDN costs could be significant depending on traffic, although this should be weighed with additional costs you would incur not using a CDN.</li>
<li>Content might be stale if it is updated before the TTL expires it.</li>
<li>CDNs require changing URLs for static content to point to the CDN.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://figshare.com/articles/Globally_distributed_content_delivery/6605972">Globally distributed content delivery</a></li>
<li><a href="http://www.travelblogadvice.com/technical/the-differences-between-push-and-pull-cdns/">The differences between push and pull CDNs</a></li>
<li><a href="https://en.wikipedia.org/wiki/Content_delivery_network">Wikipedia</a></li>
</ul>
<h2>Load balancer</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/h81n9iK.png"> <br> <i><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">Source: Scalable system design patterns</a></i> </p>
<p>Load balancers distribute incoming client requests to computing resources such as application servers and databases. In each case, the load balancer returns the response from the computing resource to the appropriate client. Load balancers are effective at:</p>
<ul>
<li>Preventing requests from going to unhealthy servers</li>
<li>Preventing overloading resources</li>
<li>Helping to eliminate a single point of failure</li>
</ul>
<p>Load balancers can be implemented with hardware (expensive) or with software such as HAProxy.</p>
<p>Additional benefits include:</p>
<ul>
<li><strong>SSL termination</strong> - Decrypt incoming requests and encrypt server responses so backend servers do not have to perform these potentially expensive operations
<ul>
<li>Removes the need to install <a href="https://en.wikipedia.org/wiki/X.509">X.509 certificates</a> on each server</li>
</ul> </li>
<li><strong>Session persistence</strong> - Issue cookies and route a specific client's requests to same instance if the web apps do not keep track of sessions</li>
</ul>
<p>To protect against failures, it's common to set up multiple load balancers, either in <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#active-passive">active-passive</a> or <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#active-active">active-active</a> mode.</p>
<p>Load balancers can route traffic based on various metrics, including:</p>
<ul>
<li>Random</li>
<li>Least loaded</li>
<li>Session/cookies</li>
<li><a href="https://www.g33kinfo.com/info/round-robin-vs-weighted-round-robin-lb">Round robin or weighted round robin</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#layer-4-load-balancing">Layer 4</a></li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#layer-7-load-balancing">Layer 7</a></li>
</ul>
<h3>Layer 4 load balancing</h3>
<p>Layer 4 load balancers look at info at the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#communication">transport layer</a> to decide how to distribute requests. Generally, this involves the source, destination IP addresses, and ports in the header, but not the contents of the packet. Layer 4 load balancers forward network packets to and from the upstream server, performing <a href="https://www.nginx.com/resources/glossary/layer-4-load-balancing/">Network Address Translation (NAT)</a>.</p>
<h3>Layer 7 load balancing</h3>
<p>Layer 7 load balancers look at the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#communication">application layer</a> to decide how to distribute requests. This can involve contents of the header, message, and cookies. Layer 7 load balancers terminate network traffic, reads the message, makes a load-balancing decision, then opens a connection to the selected server. For example, a layer 7 load balancer can direct video traffic to servers that host videos while directing more sensitive user billing traffic to security-hardened servers.</p>
<p>At the cost of flexibility, layer 4 load balancing requires less time and computing resources than Layer 7, although the performance impact can be minimal on modern commodity hardware.</p>
<h3>Horizontal scaling</h3>
<p>Load balancers can also help with horizontal scaling, improving performance and availability. Scaling out using commodity machines is more cost efficient and results in higher availability than scaling up a single server on more expensive hardware, called <strong>Vertical Scaling</strong>. It is also easier to hire for talent working on commodity hardware than it is for specialized enterprise systems.</p>
<h4>Disadvantage(s): horizontal scaling</h4>
<ul>
<li>Scaling horizontally introduces complexity and involves cloning servers
<ul>
<li>Servers should be stateless: they should not contain any user-related data like sessions or profile pictures</li>
<li>Sessions can be stored in a centralized data store such as a <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#database">database</a> (SQL, NoSQL) or a persistent <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cache">cache</a> (Redis, Memcached)</li>
</ul> </li>
<li>Downstream servers such as caches and databases need to handle more simultaneous connections as upstream servers scale out</li>
</ul>
<h3>Disadvantage(s): load balancer</h3>
<ul>
<li>The load balancer can become a performance bottleneck if it does not have enough resources or if it is not configured properly.</li>
<li>Introducing a load balancer to help eliminate a single point of failure results in increased complexity.</li>
<li>A single load balancer is a single point of failure, configuring multiple load balancers further increases complexity.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/">NGINX architecture</a></li>
<li><a href="http://www.haproxy.org/download/1.2/doc/architecture.txt">HAProxy architecture guide</a></li>
<li><a href="http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones">Scalability</a></li>
<li><a href="https://en.wikipedia.org/wiki/Load_balancing_(computing)">Wikipedia</a></li>
<li><a href="https://www.nginx.com/resources/glossary/layer-4-load-balancing/">Layer 4 load balancing</a></li>
<li><a href="https://www.nginx.com/resources/glossary/layer-7-load-balancing/">Layer 7 load balancing</a></li>
<li><a href="http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html">ELB listener config</a></li>
</ul>
<h2>Reverse proxy (web server)</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/n41Azff.png"> <br> <i><a href="https://upload.wikimedia.org/wikipedia/commons/6/67/Reverse_proxy_h2g2bob.svg">Source: Wikipedia</a></i> <br> </p>
<p>A reverse proxy is a web server that centralizes internal services and provides unified interfaces to the public. Requests from clients are forwarded to a server that can fulfill it before the reverse proxy returns the server's response to the client.</p>
<p>Additional benefits include:</p>
<ul>
<li><strong>Increased security</strong> - Hide information about backend servers, blacklist IPs, limit number of connections per client</li>
<li><strong>Increased scalability and flexibility</strong> - Clients only see the reverse proxy's IP, allowing you to scale servers or change their configuration</li>
<li><strong>SSL termination</strong> - Decrypt incoming requests and encrypt server responses so backend servers do not have to perform these potentially expensive operations
<ul>
<li>Removes the need to install <a href="https://en.wikipedia.org/wiki/X.509">X.509 certificates</a> on each server</li>
</ul> </li>
<li><strong>Compression</strong> - Compress server responses</li>
<li><strong>Caching</strong> - Return the response for cached requests</li>
<li><strong>Static content</strong> - Serve static content directly
<ul>
<li>HTML/CSS/JS</li>
<li>Photos</li>
<li>Videos</li>
<li>Etc</li>
</ul> </li>
</ul>
<h3>Load balancer vs reverse proxy</h3>
<ul>
<li>Deploying a load balancer is useful when you have multiple servers. Often, load balancers route traffic to a set of servers serving the same function.</li>
<li>Reverse proxies can be useful even with just one web server or application server, opening up the benefits described in the previous section.</li>
<li>Solutions such as NGINX and HAProxy can support both layer 7 reverse proxying and load balancing.</li>
</ul>
<h3>Disadvantage(s): reverse proxy</h3>
<ul>
<li>Introducing a reverse proxy results in increased complexity.</li>
<li>A single reverse proxy is a single point of failure, configuring multiple reverse proxies (ie a <a href="https://en.wikipedia.org/wiki/Failover">failover</a>) further increases complexity.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://www.nginx.com/resources/glossary/reverse-proxy-vs-load-balancer/">Reverse proxy vs load balancer</a></li>
<li><a href="https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/">NGINX architecture</a></li>
<li><a href="http://www.haproxy.org/download/1.2/doc/architecture.txt">HAProxy architecture guide</a></li>
<li><a href="https://en.wikipedia.org/wiki/Reverse_proxy">Wikipedia</a></li>
</ul>
<h2>Application layer</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/yB5SYwm.png"> <br> <i><a href="http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer">Source: Intro to architecting systems for scale</a></i> </p>
<p>Separating out the web layer from the application layer (also known as platform layer) allows you to scale and configure both layers independently. Adding a new API results in adding application servers without necessarily adding additional web servers. The <strong>single responsibility principle</strong> advocates for small and autonomous services that work together. Small teams with small services can plan more aggressively for rapid growth.</p>
<p>Workers in the application layer also help enable <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#asynchronism">asynchronism</a>.</p>
<h3>Microservices</h3>
<p>Related to this discussion are <a href="https://en.wikipedia.org/wiki/Microservices">microservices</a>, which can be described as a suite of independently deployable, small, modular services. Each service runs a unique process and communicates through a well-defined, lightweight mechanism to serve a business goal. <sup><a href="https://smartbear.com/learn/api-design/what-are-microservices">1</a></sup></p>
<p>Pinterest, for example, could have the following microservices: user profile, follower, feed, search, photo upload, etc.</p>
<h3>Service Discovery</h3>
<p>Systems such as <a href="https://www.consul.io/docs/index.html">Consul</a>, <a href="https://coreos.com/etcd/docs/latest">Etcd</a>, and <a href="http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper">Zookeeper</a> can help services find each other by keeping track of registered names, addresses, and ports. <a href="https://www.consul.io/intro/getting-started/checks.html">Health checks</a> help verify service integrity and are often done using an <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#hypertext-transfer-protocol-http">HTTP</a> endpoint. Both Consul and Etcd have a built in <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#key-value-store">key-value store</a> that can be useful for storing config values and other shared data.</p>
<h3>Disadvantage(s): application layer</h3>
<ul>
<li>Adding an application layer with loosely coupled services requires a different approach from an architectural, operations, and process viewpoint (vs a monolithic system).</li>
<li>Microservices can add complexity in terms of deployments and operations.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="http://lethain.com/introduction-to-architecting-systems-for-scale">Intro to architecting systems for scale</a></li>
<li><a href="http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview">Crack the system design interview</a></li>
<li><a href="https://en.wikipedia.org/wiki/Service-oriented_architecture">Service oriented architecture</a></li>
<li><a href="http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper">Introduction to Zookeeper</a></li>
<li><a href="https://cloudncode.wordpress.com/2016/07/22/msa-getting-started/">Here's what you need to know about building microservices</a></li>
</ul>
<h2>Database</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/Xkm5CXz.png"> <br> <i><a href="https://www.youtube.com/watch?v=kKjm4ehYiMs">Source: Scaling up to your first 10 million users</a></i> </p>
<h3>Relational database management system (RDBMS)</h3>
<p>A relational database like SQL is a collection of data items organized in tables.</p>
<p><strong>ACID</strong> is a set of properties of relational database <a href="https://en.wikipedia.org/wiki/Database_transaction">transactions</a>.</p>
<ul>
<li><strong>Atomicity</strong> - Each transaction is all or nothing</li>
<li><strong>Consistency</strong> - Any transaction will bring the database from one valid state to another</li>
<li><strong>Isolation</strong> - Executing transactions concurrently has the same results as if the transactions were executed serially</li>
<li><strong>Durability</strong> - Once a transaction has been committed, it will remain so</li>
</ul>
<p>There are many techniques to scale a relational database: <strong>master-slave replication</strong>, <strong>master-master replication</strong>, <strong>federation</strong>, <strong>sharding</strong>, <strong>denormalization</strong>, and <strong>SQL tuning</strong>.</p>
<h4>Master-slave replication</h4>
<p>The master serves reads and writes, replicating writes to one or more slaves, which serve only reads. Slaves can also replicate to additional slaves in a tree-like fashion. If the master goes offline, the system can continue to operate in read-only mode until a slave is promoted to a master or a new master is provisioned.</p>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/C9ioGtn.png"> <br> <i><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Source: Scalability, availability, stability, patterns</a></i> </p>
<h5>Disadvantage(s): master-slave replication</h5>
<ul>
<li>Additional logic is needed to promote a slave to a master.</li>
<li>See <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#disadvantages-replication">Disadvantage(s): replication</a> for points related to <strong>both</strong> master-slave and master-master.</li>
</ul>
<h4>Master-master replication</h4>
<p>Both masters serve reads and writes and coordinate with each other on writes. If either master goes down, the system can continue to operate with both reads and writes.</p>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/krAHLGg.png"> <br> <i><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Source: Scalability, availability, stability, patterns</a></i> </p>
<h5>Disadvantage(s): master-master replication</h5>
<ul>
<li>You'll need a load balancer or you'll need to make changes to your application logic to determine where to write.</li>
<li>Most master-master systems are either loosely consistent (violating ACID) or have increased write latency due to synchronization.</li>
<li>Conflict resolution comes more into play as more write nodes are added and as latency increases.</li>
<li>See <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#disadvantages-replication">Disadvantage(s): replication</a> for points related to <strong>both</strong> master-slave and master-master.</li>
</ul>
<h5>Disadvantage(s): replication</h5>
<ul>
<li>There is a potential for loss of data if the master fails before any newly written data can be replicated to other nodes.</li>
<li>Writes are replayed to the read replicas. If there are a lot of writes, the read replicas can get bogged down with replaying writes and can't do as many reads.</li>
<li>The more read slaves, the more you have to replicate, which leads to greater replication lag.</li>
<li>On some systems, writing to the master can spawn multiple threads to write in parallel, whereas read replicas only support writing sequentially with a single thread.</li>
<li>Replication adds more hardware and additional complexity.</li>
</ul>
<h5>Source(s) and further reading: replication</h5>
<ul>
<li><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Scalability, availability, stability, patterns</a></li>
<li><a href="https://en.wikipedia.org/wiki/Multi-master_replication">Multi-master replication</a></li>
</ul>
<h4>Federation</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/U3qV33e.png"> <br> <i><a href="https://www.youtube.com/watch?v=kKjm4ehYiMs">Source: Scaling up to your first 10 million users</a></i> </p>
<p>Federation (or functional partitioning) splits up databases by function. For example, instead of a single, monolithic database, you could have three databases: <strong>forums</strong>, <strong>users</strong>, and <strong>products</strong>, resulting in less read and write traffic to each database and therefore less replication lag. Smaller databases result in more data that can fit in memory, which in turn results in more cache hits due to improved cache locality. With no single central master serializing writes you can write in parallel, increasing throughput.</p>
<h5>Disadvantage(s): federation</h5>
<ul>
<li>Federation is not effective if your schema requires huge functions or tables.</li>
<li>You'll need to update your application logic to determine which database to read and write.</li>
<li>Joining data from two databases is more complex with a <a href="http://stackoverflow.com/questions/5145637/querying-data-by-joining-two-tables-in-two-database-on-different-servers">server link</a>.</li>
<li>Federation adds more hardware and additional complexity.</li>
</ul>
<h5>Source(s) and further reading: federation</h5>
<ul>
<li><a href="https://www.youtube.com/watch?v=kKjm4ehYiMs">Scaling up to your first 10 million users</a></li>
</ul>
<h4>Sharding</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/wU8x5Id.png"> <br> <i><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Source: Scalability, availability, stability, patterns</a></i> </p>
<p>Sharding distributes data across different databases such that each database can only manage a subset of the data. Taking a users database as an example, as the number of users increases, more shards are added to the cluster.</p>
<p>Similar to the advantages of <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#federation">federation</a>, sharding results in less read and write traffic, less replication, and more cache hits. Index size is also reduced, which generally improves performance with faster queries. If one shard goes down, the other shards are still operational, although you'll want to add some form of replication to avoid data loss. Like federation, there is no single central master serializing writes, allowing you to write in parallel with increased throughput.</p>
<p>Common ways to shard a table of users is either through the user's last name initial or the user's geographic location.</p>
<h5>Disadvantage(s): sharding</h5>
<ul>
<li>You'll need to update your application logic to work with shards, which could result in complex SQL queries.</li>
<li>Data distribution can become lopsided in a shard. For example, a set of power users on a shard could result in increased load to that shard compared to others.
<ul>
<li>Rebalancing adds additional complexity. A sharding function based on <a href="http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html">consistent hashing</a> can reduce the amount of transferred data.</li>
</ul> </li>
<li>Joining data from multiple shards is more complex.</li>
<li>Sharding adds more hardware and additional complexity.</li>
</ul>
<h5>Source(s) and further reading: sharding</h5>
<ul>
<li><a href="http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html">The coming of the shard</a></li>
<li><a href="https://en.wikipedia.org/wiki/Shard_(database_architecture)">Shard database architecture</a></li>
<li><a href="http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html">Consistent hashing</a></li>
</ul>
<h4>Denormalization</h4>
<p>Denormalization attempts to improve read performance at the expense of some write performance. Redundant copies of the data are written in multiple tables to avoid expensive joins. Some RDBMS such as <a href="https://en.wikipedia.org/wiki/PostgreSQL">PostgreSQL</a> and Oracle support <a href="https://en.wikipedia.org/wiki/Materialized_view">materialized views</a> which handle the work of storing redundant information and keeping redundant copies consistent.</p>
<p>Once data becomes distributed with techniques such as <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#federation">federation</a> and <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#sharding">sharding</a>, managing joins across data centers further increases complexity. Denormalization might circumvent the need for such complex joins.</p>
<p>In most systems, reads can heavily outnumber writes 100:1 or even 1000:1. A read resulting in a complex database join can be very expensive, spending a significant amount of time on disk operations.</p>
<h5>Disadvantage(s): denormalization</h5>
<ul>
<li>Data is duplicated.</li>
<li>Constraints can help redundant copies of information stay in sync, which increases complexity of the database design.</li>
<li>A denormalized database under heavy write load might perform worse than its normalized counterpart.</li>
</ul>
<h6>Source(s) and further reading: denormalization</h6>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Denormalization">Denormalization</a></li>
</ul>
<h4>SQL tuning</h4>
<p>SQL tuning is a broad topic and many <a href="https://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=sql+tuning">books</a> have been written as reference.</p>
<p>It's important to <strong>benchmark</strong> and <strong>profile</strong> to simulate and uncover bottlenecks.</p>
<ul>
<li><strong>Benchmark</strong> - Simulate high-load situations with tools such as <a href="http://httpd.apache.org/docs/2.2/programs/ab.html">ab</a>.</li>
<li><strong>Profile</strong> - Enable tools such as the <a href="http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html">slow query log</a> to help track performance issues.</li>
</ul>
<p>Benchmarking and profiling might point you to the following optimizations.</p>
<h5>Tighten up the schema</h5>
<ul>
<li>MySQL dumps to disk in contiguous blocks for fast access.</li>
<li>Use <code>CHAR</code> instead of <code>VARCHAR</code> for fixed-length fields.
<ul>
<li><code>CHAR</code> effectively allows for fast, random access, whereas with <code>VARCHAR</code>, you must find the end of a string before moving onto the next one.</li>
</ul> </li>
<li>Use <code>TEXT</code> for large blocks of text such as blog posts. <code>TEXT</code> also allows for boolean searches. Using a <code>TEXT</code> field results in storing a pointer on disk that is used to locate the text block.</li>
<li>Use <code>INT</code> for larger numbers up to 2^32 or 4 billion.</li>
<li>Use <code>DECIMAL</code> for currency to avoid floating point representation errors.</li>
<li>Avoid storing large <code>BLOBS</code>, store the location of where to get the object instead.</li>
<li><code>VARCHAR(255)</code> is the largest number of characters that can be counted in an 8 bit number, often maximizing the use of a byte in some RDBMS.</li>
<li>Set the <code>NOT NULL</code> constraint where applicable to <a href="http://stackoverflow.com/questions/1017239/how-do-null-values-affect-performance-in-a-database-search">improve search performance</a>.</li>
</ul>
<h5>Use good indices</h5>
<ul>
<li>Columns that you are querying (<code>SELECT</code>, <code>GROUP BY</code>, <code>ORDER BY</code>, <code>JOIN</code>) could be faster with indices.</li>
<li>Indices are usually represented as self-balancing <a href="https://en.wikipedia.org/wiki/B-tree">B-tree</a> that keeps data sorted and allows searches, sequential access, insertions, and deletions in logarithmic time.</li>
<li>Placing an index can keep the data in memory, requiring more space.</li>
<li>Writes could also be slower since the index also needs to be updated.</li>
<li>When loading large amounts of data, it might be faster to disable indices, load the data, then rebuild the indices.</li>
</ul>
<h5>Avoid expensive joins</h5>
<ul>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#denormalization">Denormalize</a> where performance demands it.</li>
</ul>
<h5>Partition tables</h5>
<ul>
<li>Break up a table by putting hot spots in a separate table to help keep it in memory.</li>
</ul>
<h5>Tune the query cache</h5>
<ul>
<li>In some cases, the <a href="https://dev.mysql.com/doc/refman/5.7/en/query-cache.html">query cache</a> could lead to <a href="https://www.percona.com/blog/2016/10/12/mysql-5-7-performance-tuning-immediately-after-installation/">performance issues</a>.</li>
</ul>
<h5>Source(s) and further reading: SQL tuning</h5>
<ul>
<li><a href="http://aiddroid.com/10-tips-optimizing-mysql-queries-dont-suck/">Tips for optimizing MySQL queries</a></li>
<li><a href="http://stackoverflow.com/questions/1217466/is-there-a-good-reason-i-see-varchar255-used-so-often-as-opposed-to-another-l">Is there a good reason i see VARCHAR(255) used so often?</a></li>
<li><a href="http://stackoverflow.com/questions/1017239/how-do-null-values-affect-performance-in-a-database-search">How do null values affect performance?</a></li>
<li><a href="http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html">Slow query log</a></li>
</ul>
<h3>NoSQL</h3>
<p>NoSQL is a collection of data items represented in a <strong>key-value store</strong>, <strong>document store</strong>, <strong>wide column store</strong>, or a <strong>graph database</strong>. Data is denormalized, and joins are generally done in the application code. Most NoSQL stores lack true ACID transactions and favor <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#eventual-consistency">eventual consistency</a>.</p>
<p><strong>BASE</strong> is often used to describe the properties of NoSQL databases. In comparison with the <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#cap-theorem">CAP Theorem</a>, BASE chooses availability over consistency.</p>
<ul>
<li><strong>Basically available</strong> - the system guarantees availability.</li>
<li><strong>Soft state</strong> - the state of the system may change over time, even without input.</li>
<li><strong>Eventual consistency</strong> - the system will become consistent over a period of time, given that the system doesn't receive input during that period.</li>
</ul>
<p>In addition to choosing between <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#sql-or-nosql">SQL or NoSQL</a>, it is helpful to understand which type of NoSQL database best fits your use case(s). We'll review <strong>key-value stores</strong>, <strong>document stores</strong>, <strong>wide column stores</strong>, and <strong>graph databases</strong> in the next section.</p>
<h4>Key-value store</h4>
<blockquote>
<p>Abstraction: hash table</p>
</blockquote>
<p>A key-value store generally allows for O(1) reads and writes and is often backed by memory or SSD. Data stores can maintain keys in <a href="https://en.wikipedia.org/wiki/Lexicographical_order">lexicographic order</a>, allowing efficient retrieval of key ranges. Key-value stores can allow for storing of metadata with a value.</p>
<p>Key-value stores provide high performance and are often used for simple data models or for rapidly-changing data, such as an in-memory cache layer. Since they offer only a limited set of operations, complexity is shifted to the application layer if additional operations are needed.</p>
<p>A key-value store is the basis for more complex systems such as a document store, and in some cases, a graph database.</p>
<h5>Source(s) and further reading: key-value store</h5>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Key-value_database">Key-value database</a></li>
<li><a href="http://stackoverflow.com/questions/4056093/what-are-the-disadvantages-of-using-a-key-value-table-over-nullable-columns-or">Disadvantages of key-value stores</a></li>
<li><a href="http://qnimate.com/overview-of-redis-architecture/">Redis architecture</a></li>
<li><a href="https://adayinthelifeof.nl/2011/02/06/memcache-internals/">Memcached architecture</a></li>
</ul>
<h4>Document store</h4>
<blockquote>
<p>Abstraction: key-value store with documents stored as values</p>
</blockquote>
<p>A document store is centered around documents (XML, JSON, binary, etc), where a document stores all information for a given object. Document stores provide APIs or a query language to query based on the internal structure of the document itself. <em>Note, many key-value stores include features for working with a value's metadata, blurring the lines between these two storage types.</em></p>
<p>Based on the underlying implementation, documents are organized by collections, tags, metadata, or directories. Although documents can be organized or grouped together, documents may have fields that are completely different from each other.</p>
<p>Some document stores like <a href="https://www.mongodb.com/mongodb-architecture">MongoDB</a> and <a href="https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/">CouchDB</a> also provide a SQL-like language to perform complex queries. <a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf">DynamoDB</a> supports both key-values and documents.</p>
<p>Document stores provide high flexibility and are often used for working with occasionally changing data.</p>
<h5>Source(s) and further reading: document store</h5>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Document-oriented_database">Document-oriented database</a></li>
<li><a href="https://www.mongodb.com/mongodb-architecture">MongoDB architecture</a></li>
<li><a href="https://blog.couchdb.org/2016/08/01/couchdb-2-0-architecture/">CouchDB architecture</a></li>
<li><a href="https://www.elastic.co/blog/found-elasticsearch-from-the-bottom-up">Elasticsearch architecture</a></li>
</ul>
<h4>Wide column store</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/n16iOGk.png"> <br> <i><a href="http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html">Source: SQL & NoSQL, a brief history</a></i> </p>
<blockquote>
<p>Abstraction: nested map <code>ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>></code></p>
</blockquote>
<p>A wide column store's basic unit of data is a column (name/value pair). A column can be grouped in column families (analogous to a SQL table). Super column families further group column families. You can access each column independently with a row key, and columns with the same row key form a row. Each value contains a timestamp for versioning and for conflict resolution.</p>
<p>Google introduced <a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/chang06bigtable.pdf">Bigtable</a> as the first wide column store, which influenced the open-source <a href="https://www.edureka.co/blog/hbase-architecture/">HBase</a> often-used in the Hadoop ecosystem, and <a href="http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archIntro.html">Cassandra</a> from Facebook. Stores such as BigTable, HBase, and Cassandra maintain keys in lexicographic order, allowing efficient retrieval of selective key ranges.</p>
<p>Wide column stores offer high availability and high scalability. They are often used for very large data sets.</p>
<h5>Source(s) and further reading: wide column store</h5>
<ul>
<li><a href="http://blog.grio.com/2015/11/sql-nosql-a-brief-history.html">SQL & NoSQL, a brief history</a></li>
<li><a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/chang06bigtable.pdf">Bigtable architecture</a></li>
<li><a href="https://www.edureka.co/blog/hbase-architecture/">HBase architecture</a></li>
<li><a href="http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archIntro.html">Cassandra architecture</a></li>
</ul>
<h4>Graph database</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/fNcl65g.png"> <br> <i><a href="https://en.wikipedia.org/wiki/File:GraphDatabase_PropertyGraph.png">Source: Graph database</a></i> </p>
<blockquote>
<p>Abstraction: graph</p>
</blockquote>
<p>In a graph database, each node is a record and each arc is a relationship between two nodes. Graph databases are optimized to represent complex relationships with many foreign keys or many-to-many relationships.</p>
<p>Graphs databases offer high performance for data models with complex relationships, such as a social network. They are relatively new and are not yet widely-used; it might be more difficult to find development tools and resources. Many graphs can only be accessed with <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#representational-state-transfer-rest">REST APIs</a>.</p>
<h5>Source(s) and further reading: graph</h5>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Graph_database">Graph database</a></li>
<li><a href="https://neo4j.com/">Neo4j</a></li>
<li><a href="https://blog.twitter.com/2010/introducing-flockdb">FlockDB</a></li>
</ul>
<h4>Source(s) and further reading: NoSQL</h4>
<ul>
<li><a href="http://stackoverflow.com/questions/3342497/explanation-of-base-terminology">Explanation of base terminology</a></li>
<li><a href="https://medium.com/baqend-blog/nosql-databases-a-survey-and-decision-guidance-ea7823a822d#.wskogqenq">NoSQL databases a survey and decision guidance</a></li>
<li><a href="http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database">Scalability</a></li>
<li><a href="https://www.youtube.com/watch?v=qI_g07C_Q5I">Introduction to NoSQL</a></li>
<li><a href="http://horicky.blogspot.com/2009/11/nosql-patterns.html">NoSQL patterns</a></li>
</ul>
<h3>SQL or NoSQL</h3>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/wXGqG5f.png"> <br> <i><a href="https://www.infoq.com/articles/Transition-RDBMS-NoSQL/">Source: Transitioning from RDBMS to NoSQL</a></i> </p>
<p>Reasons for <strong>SQL</strong>:</p>
<ul>
<li>Structured data</li>
<li>Strict schema</li>
<li>Relational data</li>
<li>Need for complex joins</li>
<li>Transactions</li>
<li>Clear patterns for scaling</li>
<li>More established: developers, community, code, tools, etc</li>
<li>Lookups by index are very fast</li>
</ul>
<p>Reasons for <strong>NoSQL</strong>:</p>
<ul>
<li>Semi-structured data</li>
<li>Dynamic or flexible schema</li>
<li>Non-relational data</li>
<li>No need for complex joins</li>
<li>Store many TB (or PB) of data</li>
<li>Very data intensive workload</li>
<li>Very high throughput for IOPS</li>
</ul>
<p>Sample data well-suited for NoSQL:</p>
<ul>
<li>Rapid ingest of clickstream and log data</li>
<li>Leaderboard or scoring data</li>
<li>Temporary data, such as a shopping cart</li>
<li>Frequently accessed ('hot') tables</li>
<li>Metadata/lookup tables</li>
</ul>
<h5>Source(s) and further reading: SQL or NoSQL</h5>
<ul>
<li><a href="https://www.youtube.com/watch?v=kKjm4ehYiMs">Scaling up to your first 10 million users</a></li>
<li><a href="https://www.sitepoint.com/sql-vs-nosql-differences/">SQL vs NoSQL differences</a></li>
</ul>
<h2>Cache</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/Q6z24La.png"> <br> <i><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">Source: Scalable system design patterns</a></i> </p>
<p>Caching improves page load times and can reduce the load on your servers and databases. In this model, the dispatcher will first lookup if the request has been made before and try to find the previous result to return, in order to save the actual execution.</p>
<p>Databases often benefit from a uniform distribution of reads and writes across its partitions. Popular items can skew the distribution, causing bottlenecks. Putting a cache in front of a database can help absorb uneven loads and spikes in traffic.</p>
<h3>Client caching</h3>
<p>Caches can be located on the client side (OS or browser), <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#reverse-proxy-web-server">server side</a>, or in a distinct cache layer.</p>
<h3>CDN caching</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#content-delivery-network">CDNs</a> are considered a type of cache.</p>
<h3>Web server caching</h3>
<p><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#reverse-proxy-web-server">Reverse proxies</a> and caches such as <a href="https://www.varnish-cache.org/">Varnish</a> can serve static and dynamic content directly. Web servers can also cache requests, returning responses without having to contact application servers.</p>
<h3>Database caching</h3>
<p>Your database usually includes some level of caching in a default configuration, optimized for a generic use case. Tweaking these settings for specific usage patterns can further boost performance.</p>
<h3>Application caching</h3>
<p>In-memory caches such as Memcached and Redis are key-value stores between your application and your data storage. Since the data is held in RAM, it is much faster than typical databases where data is stored on disk. RAM is more limited than disk, so <a href="https://en.wikipedia.org/wiki/Cache_algorithms">cache invalidation</a> algorithms such as <a href="https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)">least recently used (LRU)</a> can help invalidate 'cold' entries and keep 'hot' data in RAM.</p>
<p>Redis has the following additional features:</p>
<ul>
<li>Persistence option</li>
<li>Built-in data structures such as sorted sets and lists</li>
</ul>
<p>There are multiple levels you can cache that fall into two general categories: <strong>database queries</strong> and <strong>objects</strong>:</p>
<ul>
<li>Row level</li>
<li>Query-level</li>
<li>Fully-formed serializable objects</li>
<li>Fully-rendered HTML</li>
</ul>
<p>Generally, you should try to avoid file-based caching, as it makes cloning and auto-scaling more difficult.</p>
<h3>Caching at the database query level</h3>
<p>Whenever you query the database, hash the query as a key and store the result to the cache. This approach suffers from expiration issues:</p>
<ul>
<li>Hard to delete a cached result with complex queries</li>
<li>If one piece of data changes such as a table cell, you need to delete all cached queries that might include the changed cell</li>
</ul>
<h3>Caching at the object level</h3>
<p>See your data as an object, similar to what you do with your application code. Have your application assemble the dataset from the database into a class instance or a data structure(s):</p>
<ul>
<li>Remove the object from cache if its underlying data has changed</li>
<li>Allows for asynchronous processing: workers assemble objects by consuming the latest cached object</li>
</ul>
<p>Suggestions of what to cache:</p>
<ul>
<li>User sessions</li>
<li>Fully rendered web pages</li>
<li>Activity streams</li>
<li>User graph data</li>
</ul>
<h3>When to update the cache</h3>
<p>Since you can only store a limited amount of data in cache, you'll need to determine which cache update strategy works best for your use case.</p>
<h4>Cache-aside</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/ONjORqk.png"> <br> <i><a href="http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast">Source: From cache to in-memory data grid</a></i> </p>
<p>The application is responsible for reading and writing from storage. The cache does not interact with storage directly. The application does the following:</p>
<ul>
<li>Look for entry in cache, resulting in a cache miss</li>
<li>Load entry from the database</li>
<li>Add entry to cache</li>
<li>Return entry</li>
</ul>
<pre><code class="language-python">def get_user(self, user_id):
user = cache.get("user.{0}", user_id)
if user is None:
user = db.query("SELECT * FROM users WHERE user_id = {0}", user_id)
if user is not None:
key = "user.{0}".format(user_id)
cache.set(key, json.dumps(user))
return user
</code></pre>
<p><a href="https://memcached.org/">Memcached</a> is generally used in this manner.</p>
<p>Subsequent reads of data added to cache are fast. Cache-aside is also referred to as lazy loading. Only requested data is cached, which avoids filling up the cache with data that isn't requested.</p>
<h5>Disadvantage(s): cache-aside</h5>
<ul>
<li>Each cache miss results in three trips, which can cause a noticeable delay.</li>
<li>Data can become stale if it is updated in the database. This issue is mitigated by setting a time-to-live (TTL) which forces an update of the cache entry, or by using write-through.</li>
<li>When a node fails, it is replaced by a new, empty node, increasing latency.</li>
</ul>
<h4>Write-through</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/0vBc0hN.png"> <br> <i><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Source: Scalability, availability, stability, patterns</a></i> </p>
<p>The application uses the cache as the main data store, reading and writing data to it, while the cache is responsible for reading and writing to the database:</p>
<ul>
<li>Application adds/updates entry in cache</li>
<li>Cache synchronously writes entry to data store</li>
<li>Return</li>
</ul>
<p>Application code:</p>
<pre><code class="language-python">set_user(12345, {"foo":"bar"})
</code></pre>
<p>Cache code:</p>
<pre><code class="language-python">def set_user(user_id, values):
user = db.query("UPDATE Users WHERE id = {0}", user_id, values)
cache.set(user_id, user)
</code></pre>
<p>Write-through is a slow overall operation due to the write operation, but subsequent reads of just written data are fast. Users are generally more tolerant of latency when updating data than reading data. Data in the cache is not stale.</p>
<h5>Disadvantage(s): write through</h5>
<ul>
<li>When a new node is created due to failure or scaling, the new node will not cache entries until the entry is updated in the database. Cache-aside in conjunction with write through can mitigate this issue.</li>
<li>Most data written might never be read, which can be minimized with a TTL.</li>
</ul>
<h4>Write-behind (write-back)</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/rgSrvjG.png"> <br> <i><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Source: Scalability, availability, stability, patterns</a></i> </p>
<p>In write-behind, the application does the following:</p>
<ul>
<li>Add/update entry in cache</li>
<li>Asynchronously write entry to the data store, improving write performance</li>
</ul>
<h5>Disadvantage(s): write-behind</h5>
<ul>
<li>There could be data loss if the cache goes down prior to its contents hitting the data store.</li>
<li>It is more complex to implement write-behind than it is to implement cache-aside or write-through.</li>
</ul>
<h4>Refresh-ahead</h4>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/kxtjqgE.png"> <br> <i><a href="http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast">Source: From cache to in-memory data grid</a></i> </p>
<p>You can configure the cache to automatically refresh any recently accessed cache entry prior to its expiration.</p>
<p>Refresh-ahead can result in reduced latency vs read-through if the cache can accurately predict which items are likely to be needed in the future.</p>
<h5>Disadvantage(s): refresh-ahead</h5>
<ul>
<li>Not accurately predicting which items are likely to be needed in the future can result in reduced performance than without refresh-ahead.</li>
</ul>
<h3>Disadvantage(s): cache</h3>
<ul>
<li>Need to maintain consistency between caches and the source of truth such as the database through <a href="https://en.wikipedia.org/wiki/Cache_algorithms">cache invalidation</a>.</li>
<li>Cache invalidation is a difficult problem, there is additional complexity associated with when to update the cache.</li>
<li>Need to make application changes such as adding Redis or memcached.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="http://www.slideshare.net/tmatyashovsky/from-cache-to-in-memory-data-grid-introduction-to-hazelcast">From cache to in-memory data grid</a></li>
<li><a href="http://horicky.blogspot.com/2010/10/scalable-system-design-patterns.html">Scalable system design patterns</a></li>
<li><a href="http://lethain.com/introduction-to-architecting-systems-for-scale/">Introduction to architecting systems for scale</a></li>
<li><a href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns/">Scalability, availability, stability, patterns</a></li>
<li><a href="http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache">Scalability</a></li>
<li><a href="http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Strategies.html">AWS ElastiCache strategies</a></li>
<li><a href="https://en.wikipedia.org/wiki/Cache_(computing)">Wikipedia</a></li>
</ul>
<h2>Asynchronism</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/54GYsSx.png"> <br> <i><a href="http://lethain.com/introduction-to-architecting-systems-for-scale/#platform_layer">Source: Intro to architecting systems for scale</a></i> </p>
<p>Asynchronous workflows help reduce request times for expensive operations that would otherwise be performed in-line. They can also help by doing time-consuming work in advance, such as periodic aggregation of data.</p>
<h3>Message queues</h3>
<p>Message queues receive, hold, and deliver messages. If an operation is too slow to perform inline, you can use a message queue with the following workflow:</p>
<ul>
<li>An application publishes a job to the queue, then notifies the user of job status</li>
<li>A worker picks up the job from the queue, processes it, then signals the job is complete</li>
</ul>
<p>The user is not blocked and the job is processed in the background. During this time, the client might optionally do a small amount of processing to make it seem like the task has completed. For example, if posting a tweet, the tweet could be instantly posted to your timeline, but it could take some time before your tweet is actually delivered to all of your followers.</p>
<p><strong><a href="https://redis.io/">Redis</a></strong> is useful as a simple message broker but messages can be lost.</p>
<p><strong><a href="https://www.rabbitmq.com/">RabbitMQ</a></strong> is popular but requires you to adapt to the 'AMQP' protocol and manage your own nodes.</p>
<p><strong><a href="https://aws.amazon.com/sqs/">Amazon SQS</a></strong> is hosted but can have high latency and has the possibility of messages being delivered twice.</p>
<h3>Task queues</h3>
<p>Tasks queues receive tasks and their related data, runs them, then delivers their results. They can support scheduling and can be used to run computationally-intensive jobs in the background.</p>
<p><strong><a href="https://docs.celeryproject.org/en/stable/">Celery</a></strong> has support for scheduling and primarily has python support.</p>
<h3>Back pressure</h3>
<p>If queues start to grow significantly, the queue size can become larger than memory, resulting in cache misses, disk reads, and even slower performance. <a href="http://mechanical-sympathy.blogspot.com/2012/05/apply-back-pressure-when-overloaded.html">Back pressure</a> can help by limiting the queue size, thereby maintaining a high throughput rate and good response times for jobs already in the queue. Once the queue fills up, clients get a server busy or HTTP 503 status code to try again later. Clients can retry the request at a later time, perhaps with <a href="https://en.wikipedia.org/wiki/Exponential_backoff">exponential backoff</a>.</p>
<h3>Disadvantage(s): asynchronism</h3>
<ul>
<li>Use cases such as inexpensive calculations and realtime workflows might be better suited for synchronous operations, as introducing queues can add delays and complexity.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://www.youtube.com/watch?v=1KRYH75wgy4">It's all a numbers game</a></li>
<li><a href="http://mechanical-sympathy.blogspot.com/2012/05/apply-back-pressure-when-overloaded.html">Applying back pressure when overloaded</a></li>
<li><a href="https://en.wikipedia.org/wiki/Little%27s_law">Little's law</a></li>
<li><a href="https://www.quora.com/What-is-the-difference-between-a-message-queue-and-a-task-queue-Why-would-a-task-queue-require-a-message-broker-like-RabbitMQ-Redis-Celery-or-IronMQ-to-function">What is the difference between a message queue and a task queue?</a></li>
</ul>
<h2>Communication</h2>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/5KeocQs.jpg"> <br> <i><a href="http://www.escotal.com/osilayer.html">Source: OSI 7 layer model</a></i> </p>
<h3>Hypertext transfer protocol (HTTP)</h3>
<p>HTTP is a method for encoding and transporting data between a client and a server. It is a request/response protocol: clients issue requests and servers issue responses with relevant content and completion status info about the request. HTTP is self-contained, allowing requests and responses to flow through many intermediate routers and servers that perform load balancing, caching, encryption, and compression.</p>
<p>A basic HTTP request consists of a verb (method) and a resource (endpoint). Below are common HTTP verbs:</p>
<table>
<thead>
<tr>
<th>Verb</th>
<th>Description</th>
<th>Idempotent*</th>
<th>Safe</th>
<th>Cacheable</th>
</tr>
</thead>
<tbody>
<tr>
<td>GET</td>
<td>Reads a resource</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>POST</td>
<td>Creates a resource or trigger a process that handles data</td>
<td>No</td>
<td>No</td>
<td>Yes if response contains freshness info</td>
</tr>
<tr>
<td>PUT</td>
<td>Creates or replace a resource</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>PATCH</td>
<td>Partially updates a resource</td>
<td>No</td>
<td>No</td>
<td>Yes if response contains freshness info</td>
</tr>
<tr>
<td>DELETE</td>
<td>Deletes a resource</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
</tbody>
</table>
<p>*Can be called many times without different outcomes.</p>
<p>HTTP is an application layer protocol relying on lower-level protocols such as <strong>TCP</strong> and <strong>UDP</strong>.</p>
<h4>Source(s) and further reading: HTTP</h4>
<ul>
<li><a href="https://www.nginx.com/resources/glossary/http/">What is HTTP?</a></li>
<li><a href="https://www.quora.com/What-is-the-difference-between-HTTP-protocol-and-TCP-protocol">Difference between HTTP and TCP</a></li>
<li><a href="https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1">Difference between PUT and PATCH</a></li>
</ul>
<h3>Transmission control protocol (TCP)</h3>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/JdAsdvG.jpg"> <br> <i><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/">Source: How to make a multiplayer game</a></i> </p>
<p>TCP is a connection-oriented protocol over an <a href="https://en.wikipedia.org/wiki/Internet_Protocol">IP network</a>. Connection is established and terminated using a <a href="https://en.wikipedia.org/wiki/Handshaking">handshake</a>. All packets sent are guaranteed to reach the destination in the original order and without corruption through:</p>
<ul>
<li>Sequence numbers and <a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_computation">checksum fields</a> for each packet</li>
<li><a href="https://en.wikipedia.org/wiki/Acknowledgement_(data_networks)">Acknowledgement</a> packets and automatic retransmission</li>
</ul>
<p>If the sender does not receive a correct response, it will resend the packets. If there are multiple timeouts, the connection is dropped. TCP also implements <a href="https://en.wikipedia.org/wiki/Flow_control_(data)">flow control</a> and <a href="https://en.wikipedia.org/wiki/Network_congestion#Congestion_control">congestion control</a>. These guarantees cause delays and generally result in less efficient transmission than UDP.</p>
<p>To ensure high throughput, web servers can keep a large number of TCP connections open, resulting in high memory usage. It can be expensive to have a large number of open connections between web server threads and say, a <a href="https://memcached.org/">memcached</a> server. <a href="https://en.wikipedia.org/wiki/Connection_pool">Connection pooling</a> can help in addition to switching to UDP where applicable.</p>
<p>TCP is useful for applications that require high reliability but are less time critical. Some examples include web servers, database info, SMTP, FTP, and SSH.</p>
<p>Use TCP over UDP when:</p>
<ul>
<li>You need all of the data to arrive intact</li>
<li>You want to automatically make a best estimate use of the network throughput</li>
</ul>
<h3>User datagram protocol (UDP)</h3>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/yzDrJtA.jpg"> <br> <i><a href="http://www.wildbunny.co.uk/blog/2012/10/09/how-to-make-a-multi-player-game-part-1/">Source: How to make a multiplayer game</a></i> </p>
<p>UDP is connectionless. Datagrams (analogous to packets) are guaranteed only at the datagram level. Datagrams might reach their destination out of order or not at all. UDP does not support congestion control. Without the guarantees that TCP support, UDP is generally more efficient.</p>
<p>UDP can broadcast, sending datagrams to all devices on the subnet. This is useful with <a href="https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol">DHCP</a> because the client has not yet received an IP address, thus preventing a way for TCP to stream without the IP address.</p>
<p>UDP is less reliable but works well in real time use cases such as VoIP, video chat, streaming, and realtime multiplayer games.</p>
<p>Use UDP over TCP when:</p>
<ul>
<li>You need the lowest latency</li>
<li>Late data is worse than loss of data</li>
<li>You want to implement your own error correction</li>
</ul>
<h4>Source(s) and further reading: TCP and UDP</h4>
<ul>
<li><a href="http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/">Networking for game programming</a></li>
<li><a href="http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/">Key differences between TCP and UDP protocols</a></li>
<li><a href="http://stackoverflow.com/questions/5970383/difference-between-tcp-and-udp">Difference between TCP and UDP</a></li>
<li><a href="https://en.wikipedia.org/wiki/Transmission_Control_Protocol">Transmission control protocol</a></li>
<li><a href="https://en.wikipedia.org/wiki/User_Datagram_Protocol">User datagram protocol</a></li>
<li><a href="http://www.cs.bu.edu/~jappavoo/jappavoo.github.com/451/papers/memcache-fb.pdf">Scaling memcache at Facebook</a></li>
</ul>
<h3>Remote procedure call (RPC)</h3>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/iF4Mkb5.png"> <br> <i><a href="http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview">Source: Crack the system design interview</a></i> </p>
<p>In an RPC, a client causes a procedure to execute on a different address space, usually a remote server. The procedure is coded as if it were a local procedure call, abstracting away the details of how to communicate with the server from the client program. Remote calls are usually slower and less reliable than local calls so it is helpful to distinguish RPC calls from local calls. Popular RPC frameworks include <a href="https://developers.google.com/protocol-buffers/">Protobuf</a>, <a href="https://thrift.apache.org/">Thrift</a>, and <a href="https://avro.apache.org/docs/current/">Avro</a>.</p>
<p>RPC is a request-response protocol:</p>
<ul>
<li><strong>Client program</strong> - Calls the client stub procedure. The parameters are pushed onto the stack like a local procedure call.</li>
<li><strong>Client stub procedure</strong> - Marshals (packs) procedure id and arguments into a request message.</li>
<li><strong>Client communication module</strong> - OS sends the message from the client to the server.</li>
<li><strong>Server communication module</strong> - OS passes the incoming packets to the server stub procedure.</li>
<li><strong>Server stub procedure</strong> - Unmarshalls the results, calls the server procedure matching the procedure id and passes the given arguments.</li>
<li>The server response repeats the steps above in reverse order.</li>
</ul>
<p>Sample RPC calls:</p>
<pre><code>GET /someoperation?data=anId
POST /anotheroperation
{
"data":"anId";
"anotherdata": "another value"
}
</code></pre>
<p>RPC is focused on exposing behaviors. RPCs are often used for performance reasons with internal communications, as you can hand-craft native calls to better fit your use cases.</p>
<p>Choose a native library (aka SDK) when:</p>
<ul>
<li>You know your target platform.</li>
<li>You want to control how your "logic" is accessed.</li>
<li>You want to control how error control happens off your library.</li>
<li>Performance and end user experience is your primary concern.</li>
</ul>
<p>HTTP APIs following <strong>REST</strong> tend to be used more often for public APIs.</p>
<h4>Disadvantage(s): RPC</h4>
<ul>
<li>RPC clients become tightly coupled to the service implementation.</li>
<li>A new API must be defined for every new operation or use case.</li>
<li>It can be difficult to debug RPC.</li>
<li>You might not be able to leverage existing technologies out of the box. For example, it might require additional effort to ensure <a href="https://web.archive.org/web/20170608193645/http://etherealbits.com/2012/12/debunking-the-myths-of-rpc-rest/">RPC calls are properly cached</a> on caching servers such as <a href="http://www.squid-cache.org/">Squid</a>.</li>
</ul>
<h3>Representational state transfer (REST)</h3>
<p>REST is an architectural style enforcing a client/server model where the client acts on a set of resources managed by the server. The server provides a representation of resources and actions that can either manipulate or get a new representation of resources. All communication must be stateless and cacheable.</p>
<p>There are four qualities of a RESTful interface:</p>
<ul>
<li><strong>Identify resources (URI in HTTP)</strong> - use the same URI regardless of any operation.</li>
<li><strong>Change with representations (Verbs in HTTP)</strong> - use verbs, headers, and body.</li>
<li><strong>Self-descriptive error message (status response in HTTP)</strong> - Use status codes, don't reinvent the wheel.</li>
<li><strong><a href="http://restcookbook.com/Basics/hateoas/">HATEOAS</a> (HTML interface for HTTP)</strong> - your web service should be fully accessible in a browser.</li>
</ul>
<p>Sample REST calls:</p>
<pre><code>GET /someresources/anId
PUT /someresources/anId
{"anotherdata": "another value"}
</code></pre>
<p>REST is focused on exposing data. It minimizes the coupling between client/server and is often used for public HTTP APIs. REST uses a more generic and uniform method of exposing resources through URIs, <a href="https://github.com/for-GET/know-your-http-well/raw/master/headers.md">representation through headers</a>, and actions through verbs such as GET, POST, PUT, DELETE, and PATCH. Being stateless, REST is great for horizontal scaling and partitioning.</p>
<h4>Disadvantage(s): REST</h4>
<ul>
<li>With REST being focused on exposing data, it might not be a good fit if resources are not naturally organized or accessed in a simple hierarchy. For example, returning all updated records from the past hour matching a particular set of events is not easily expressed as a path. With REST, it is likely to be implemented with a combination of URI path, query parameters, and possibly the request body.</li>
<li>REST typically relies on a few verbs (GET, POST, PUT, DELETE, and PATCH) which sometimes doesn't fit your use case. For example, moving expired documents to the archive folder might not cleanly fit within these verbs.</li>
<li>Fetching complicated resources with nested hierarchies requires multiple round trips between the client and server to render single views, e.g. fetching content of a blog entry and the comments on that entry. For mobile applications operating in variable network conditions, these multiple roundtrips are highly undesirable.</li>
<li>Over time, more fields might be added to an API response and older clients will receive all new data fields, even those that they do not need, as a result, it bloats the payload size and leads to larger latencies.</li>
</ul>
<h3>RPC and REST calls comparison</h3>
<table>
<thead>
<tr>
<th>Operation</th>
<th>RPC</th>
<th>REST</th>
</tr>
</thead>
<tbody>
<tr>
<td>Signup</td>
<td><strong>POST</strong> /signup</td>
<td><strong>POST</strong> /persons</td>
</tr>
<tr>
<td>Resign</td>
<td><strong>POST</strong> /resign<br>{<br>"personid": "1234"<br>}</td>
<td><strong>DELETE</strong> /persons/1234</td>
</tr>
<tr>
<td>Read a person</td>
<td><strong>GET</strong> /readPerson?personid=1234</td>
<td><strong>GET</strong> /persons/1234</td>
</tr>
<tr>
<td>Read a person’s items list</td>
<td><strong>GET</strong> /readUsersItemsList?personid=1234</td>
<td><strong>GET</strong> /persons/1234/items</td>
</tr>
<tr>
<td>Add an item to a person’s items</td>
<td><strong>POST</strong> /addItemToUsersItemsList<br>{<br>"personid": "1234";<br>"itemid": "456"<br>}</td>
<td><strong>POST</strong> /persons/1234/items<br>{<br>"itemid": "456"<br>}</td>
</tr>
<tr>
<td>Update an item</td>
<td><strong>POST</strong> /modifyItem<br>{<br>"itemid": "456";<br>"key": "value"<br>}</td>
<td><strong>PUT</strong> /items/456<br>{<br>"key": "value"<br>}</td>
</tr>
<tr>
<td>Delete an item</td>
<td><strong>POST</strong> /removeItem<br>{<br>"itemid": "456"<br>}</td>
<td><strong>DELETE</strong> /items/456</td>
</tr>
</tbody>
</table>
<p align="center"> <i><a href="https://apihandyman.io/do-you-really-know-why-you-prefer-rest-over-rpc/">Source: Do you really know why you prefer REST over RPC</a></i> </p>
<h4>Source(s) and further reading: REST and RPC</h4>
<ul>
<li><a href="https://apihandyman.io/do-you-really-know-why-you-prefer-rest-over-rpc/">Do you really know why you prefer REST over RPC</a></li>
<li><a href="http://programmers.stackexchange.com/a/181186">When are RPC-ish approaches more appropriate than REST?</a></li>
<li><a href="http://stackoverflow.com/questions/15056878/rest-vs-json-rpc">REST vs JSON-RPC</a></li>
<li><a href="https://web.archive.org/web/20170608193645/http://etherealbits.com/2012/12/debunking-the-myths-of-rpc-rest/">Debunking the myths of RPC and REST</a></li>
<li><a href="https://www.quora.com/What-are-the-drawbacks-of-using-RESTful-APIs">What are the drawbacks of using REST</a></li>
<li><a href="http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview">Crack the system design interview</a></li>
<li><a href="https://code.facebook.com/posts/1468950976659943/">Thrift</a></li>
<li><a href="http://arstechnica.com/civis/viewtopic.php?t=1190508">Why REST for internal use and not RPC</a></li>
</ul>
<h2>Security</h2>
<p>This section could use some updates. Consider <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">contributing</a>!</p>
<p>Security is a broad topic. Unless you have considerable experience, a security background, or are applying for a position that requires knowledge of security, you probably won't need to know more than the basics:</p>
<ul>
<li>Encrypt in transit and at rest.</li>
<li>Sanitize all user inputs or any input parameters exposed to user to prevent <a href="https://en.wikipedia.org/wiki/Cross-site_scripting">XSS</a> and <a href="https://en.wikipedia.org/wiki/SQL_injection">SQL injection</a>.</li>
<li>Use parameterized queries to prevent SQL injection.</li>
<li>Use the principle of <a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege">least privilege</a>.</li>
</ul>
<h3>Source(s) and further reading</h3>
<ul>
<li><a href="https://github.com/shieldfy/API-Security-Checklist">API security checklist</a></li>
<li><a href="https://github.com/FallibleInc/security-guide-for-developers">Security guide for developers</a></li>
<li><a href="https://www.owasp.org/index.php/OWASP_Top_Ten_Cheat_Sheet">OWASP top ten</a></li>
</ul>
<h2>Appendix</h2>
<p>You'll sometimes be asked to do 'back-of-the-envelope' estimates. For example, you might need to determine how long it will take to generate 100 image thumbnails from disk or how much memory a data structure will take. The <strong>Powers of two table</strong> and <strong>Latency numbers every programmer should know</strong> are handy references.</p>
<h3>Powers of two table</h3>
<pre><code>Power Exact Value Approx Value Bytes
---------------------------------------------------------------
7 128
8 256
10 1024 1 thousand 1 KB
16 65,536 64 KB
20 1,048,576 1 million 1 MB
30 1,073,741,824 1 billion 1 GB
32 4,294,967,296 4 GB
40 1,099,511,627,776 1 trillion 1 TB
</code></pre>
<h4>Source(s) and further reading</h4>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Power_of_two">Powers of two</a></li>
</ul>
<h3>Latency numbers every programmer should know</h3>
<pre><code>Latency Comparison Numbers
--------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
HDD seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from HDD 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms
Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns
</code></pre>
<p>Handy metrics based on numbers above:</p>
<ul>
<li>Read sequentially from HDD at 30 MB/s</li>
<li>Read sequentially from 1 Gbps Ethernet at 100 MB/s</li>
<li>Read sequentially from SSD at 1 GB/s</li>
<li>Read sequentially from main memory at 4 GB/s</li>
<li>6-7 world-wide round trips per second</li>
<li>2,000 round trips per second within a data center</li>
</ul>
<h4>Latency numbers visualized</h4>
<p><img src="https://camo.githubusercontent.com/77f72259e1eb58596b564d1ad823af1853bc60a3/687474703a2f2f692e696d6775722e636f6d2f6b307431652e706e67" alt=""></p>
<h4>Source(s) and further reading</h4>
<ul>
<li><a href="https://gist.github.com/jboner/2841832">Latency numbers every programmer should know - 1</a></li>
<li><a href="https://gist.github.com/hellerbarde/2843375">Latency numbers every programmer should know - 2</a></li>
<li><a href="http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf">Designs, lessons, and advice from building large distributed systems</a></li>
<li><a href="https://static.googleusercontent.com/media/research.google.com/en//people/jeff/stanford-295-talk.pdf">Software Engineering Advice from Building Large-Scale Distributed Systems</a></li>
</ul>
<h3>Additional system design interview questions</h3>
<blockquote>
<p>Common system design interview questions, with links to resources on how to solve each.</p>
</blockquote>
<table>
<thead>
<tr>
<th>Question</th>
<th>Reference(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Design a file sync service like Dropbox</td>
<td><a href="https://www.youtube.com/watch?v=PE4gwstWhmc">youtube.com</a></td>
</tr>
<tr>
<td>Design a search engine like Google</td>
<td><a href="http://queue.acm.org/detail.cfm?id=988407">queue.acm.org</a><br><a href="http://programmers.stackexchange.com/questions/38324/interview-question-how-would-you-implement-google-search">stackexchange.com</a><br><a href="http://www.ardendertat.com/2012/01/11/implementing-search-engines/">ardendertat.com</a><br><a href="http://infolab.stanford.edu/~backrub/google.html">stanford.edu</a></td>
</tr>
<tr>
<td>Design a scalable web crawler like Google</td>
<td><a href="https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch">quora.com</a></td>
</tr>
<tr>
<td>Design Google docs</td>
<td><a href="https://code.google.com/p/google-mobwrite/">code.google.com</a><br><a href="https://neil.fraser.name/writing/sync/">neil.fraser.name</a></td>
</tr>
<tr>
<td>Design a key-value store like Redis</td>
<td><a href="http://www.slideshare.net/dvirsky/introduction-to-redis">slideshare.net</a></td>
</tr>
<tr>
<td>Design a cache system like Memcached</td>
<td><a href="http://www.slideshare.net/oemebamo/introduction-to-memcached">slideshare.net</a></td>
</tr>
<tr>
<td>Design a recommendation system like Amazon's</td>
<td><a href="https://web.archive.org/web/20170406065247/http://tech.hulu.com/blog/2011/09/19/recommendation-system.html">hulu.com</a><br><a href="http://ijcai13.org/files/tutorial_slides/td3.pdf">ijcai13.org</a></td>
</tr>
<tr>
<td>Design a tinyurl system like Bitly</td>
<td><a href="http://n00tc0d3r.blogspot.com/">n00tc0d3r.blogspot.com</a></td>
</tr>
<tr>
<td>Design a chat app like WhatsApp</td>
<td><a href="http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html">highscalability.com</a></td>
</tr>
<tr>
<td>Design a picture sharing system like Instagram</td>
<td><a href="http://highscalability.com/flickr-architecture">highscalability.com</a><br><a href="http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html">highscalability.com</a></td>
</tr>
<tr>
<td>Design the Facebook news feed function</td>
<td><a href="http://www.quora.com/What-are-best-practices-for-building-something-like-a-News-Feed">quora.com</a><br><a href="http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed">quora.com</a><br><a href="http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture">slideshare.net</a></td>
</tr>
<tr>
<td>Design the Facebook timeline function</td>
<td><a href="https://www.facebook.com/note.php?note_id=10150468255628920">facebook.com</a><br><a href="http://highscalability.com/blog/2012/1/23/facebook-timeline-brought-to-you-by-the-power-of-denormaliza.html">highscalability.com</a></td>
</tr>
<tr>
<td>Design the Facebook chat function</td>
<td><a href="http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf">erlang-factory.com</a><br><a href="https://www.facebook.com/note.php?note_id=14218138919&id=9445547199&index=0">facebook.com</a></td>
</tr>
<tr>
<td>Design a graph search function like Facebook's</td>
<td><a href="https://www.facebook.com/notes/facebook-engineering/under-the-hood-building-out-the-infrastructure-for-graph-search/10151347573598920">facebook.com</a><br><a href="https://www.facebook.com/notes/facebook-engineering/under-the-hood-indexing-and-ranking-in-graph-search/10151361720763920">facebook.com</a><br><a href="https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920">facebook.com</a></td>
</tr>
<tr>
<td>Design a content delivery network like CloudFlare</td>
<td><a href="https://figshare.com/articles/Globally_distributed_content_delivery/6605972">figshare.com</a></td>
</tr>
<tr>
<td>Design a trending topic system like Twitter's</td>
<td><a href="http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/">michael-noll.com</a><br><a href="http://snikolov.wordpress.com/2012/11/14/early-detection-of-twitter-trends/">snikolov .wordpress.com</a></td>
</tr>
<tr>
<td>Design a random ID generation system</td>
<td><a href="https://blog.twitter.com/2010/announcing-snowflake">blog.twitter.com</a><br><a href="https://github.com/twitter/snowflake/">github.com</a></td>
</tr>
<tr>
<td>Return the top k requests during a time interval</td>
<td><a href="https://www.cs.ucsb.edu/sites/default/files/documents/2005-23.pdf">cs.ucsb.edu</a><br><a href="http://davis.wpi.edu/xmdv/docs/EDBT11-diyang.pdf">wpi.edu</a></td>
</tr>
<tr>
<td>Design a system that serves data from multiple data centers</td>
<td><a href="http://highscalability.com/blog/2009/8/24/how-google-serves-data-from-multiple-datacenters.html">highscalability.com</a></td>
</tr>
<tr>
<td>Design an online multiplayer card game</td>
<td><a href="https://web.archive.org/web/20180929181117/http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html">indieflashblog.com</a><br><a href="http://buildnewgames.com/real-time-multiplayer/">buildnewgames.com</a></td>
</tr>
<tr>
<td>Design a garbage collection system</td>
<td><a href="http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/">stuffwithstuff.com</a><br><a href="http://courses.cs.washington.edu/courses/csep521/07wi/prj/rick.pdf">washington.edu</a></td>
</tr>
<tr>
<td>Design an API rate limiter</td>
<td><a href="https://stripe.com/blog/rate-limiters">https://stripe.com/blog/</a></td>
</tr>
<tr>
<td>Design a Stock Exchange (like NASDAQ or Binance)</td>
<td><a href="https://youtu.be/b1e4t2k2KJY">Jane Street</a><br><a href="https://around25.com/blog/building-a-trading-engine-for-a-crypto-exchange/">Golang Implementation</a><br><a href="http://bhomnick.net/building-a-simple-limit-order-in-go/">Go Implementation</a></td>
</tr>
<tr>
<td>Add a system design question</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></td>
</tr>
</tbody>
</table>
<h3>Real world architectures</h3>
<blockquote>
<p>Articles on how real world systems are designed.</p>
</blockquote>
<p align="center"> <img src="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/images/TcUo2fw.png"> <br> <i><a href="https://www.infoq.com/presentations/Twitter-Timeline-Scalability">Source: Twitter timelines at scale</a></i> </p>
<p><strong>Don't focus on nitty gritty details for the following articles, instead:</strong></p>
<ul>
<li>Identify shared principles, common technologies, and patterns within these articles</li>
<li>Study what problems are solved by each component, where it works, where it doesn't</li>
<li>Review the lessons learned</li>
</ul>
<table>
<thead>
<tr>
<th>Type</th>
<th>System</th>
<th>Reference(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data processing</td>
<td><strong>MapReduce</strong> - Distributed data processing from Google</td>
<td><a href="http://static.googleusercontent.com/media/research.google.com/zh-CN/us/archive/mapreduce-osdi04.pdf">research.google.com</a></td>
</tr>
<tr>
<td>Data processing</td>
<td><strong>Spark</strong> - Distributed data processing from Databricks</td>
<td><a href="http://www.slideshare.net/AGrishchenko/apache-spark-architecture">slideshare.net</a></td>
</tr>
<tr>
<td>Data processing</td>
<td><strong>Storm</strong> - Distributed data processing from Twitter</td>
<td><a href="http://www.slideshare.net/previa/storm-16094009">slideshare.net</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>Bigtable</strong> - Distributed column-oriented database from Google</td>
<td><a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/chang06bigtable.pdf">harvard.edu</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>HBase</strong> - Open source implementation of Bigtable</td>
<td><a href="http://www.slideshare.net/alexbaranau/intro-to-hbase">slideshare.net</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>Cassandra</strong> - Distributed column-oriented database from Facebook</td>
<td><a href="http://www.slideshare.net/planetcassandra/cassandra-introduction-features-30103666">slideshare.net</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>DynamoDB</strong> - Document-oriented database from Amazon</td>
<td><a href="http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf">harvard.edu</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>MongoDB</strong> - Document-oriented database</td>
<td><a href="http://www.slideshare.net/mdirolf/introduction-to-mongodb">slideshare.net</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>Spanner</strong> - Globally-distributed database from Google</td>
<td><a href="http://research.google.com/archive/spanner-osdi2012.pdf">research.google.com</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>Memcached</strong> - Distributed memory caching system</td>
<td><a href="http://www.slideshare.net/oemebamo/introduction-to-memcached">slideshare.net</a></td>
</tr>
<tr>
<td>Data store</td>
<td><strong>Redis</strong> - Distributed memory caching system with persistence and value types</td>
<td><a href="http://www.slideshare.net/dvirsky/introduction-to-redis">slideshare.net</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>File system</td>
<td><strong>Google File System (GFS)</strong> - Distributed file system</td>
<td><a href="http://static.googleusercontent.com/media/research.google.com/zh-CN/us/archive/gfs-sosp2003.pdf">research.google.com</a></td>
</tr>
<tr>
<td>File system</td>
<td><strong>Hadoop File System (HDFS)</strong> - Open source implementation of GFS</td>
<td><a href="http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html">apache.org</a></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Misc</td>
<td><strong>Chubby</strong> - Lock service for loosely-coupled distributed systems from Google</td>
<td><a href="http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en/us/archive/chubby-osdi06.pdf">research.google.com</a></td>
</tr>
<tr>
<td>Misc</td>
<td><strong>Dapper</strong> - Distributed systems tracing infrastructure</td>
<td><a href="http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36356.pdf">research.google.com</a></td>
</tr>
<tr>
<td>Misc</td>
<td><strong>Kafka</strong> - Pub/sub message queue from LinkedIn</td>
<td><a href="http://www.slideshare.net/mumrah/kafka-talk-tri-hug">slideshare.net</a></td>
</tr>
<tr>
<td>Misc</td>
<td><strong>Zookeeper</strong> - Centralized infrastructure and services enabling synchronization</td>
<td><a href="http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper">slideshare.net</a></td>
</tr>
<tr>
<td></td>
<td>Add an architecture</td>
<td><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></td>
</tr>
</tbody>
</table>
<h3>Company architectures</h3>
<table>
<thead>
<tr>
<th>Company</th>
<th>Reference(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Amazon</td>
<td><a href="http://highscalability.com/amazon-architecture">Amazon architecture</a></td>
</tr>
<tr>
<td>Cinchcast</td>
<td><a href="http://highscalability.com/blog/2012/7/16/cinchcast-architecture-producing-1500-hours-of-audio-every-d.html">Producing 1,500 hours of audio every day</a></td>
</tr>
<tr>
<td>DataSift</td>
<td><a href="http://highscalability.com/blog/2011/11/29/datasift-architecture-realtime-datamining-at-120000-tweets-p.html">Realtime datamining At 120,000 tweets per second</a></td>
</tr>
<tr>
<td>Dropbox</td>
<td><a href="https://www.youtube.com/watch?v=PE4gwstWhmc">How we've scaled Dropbox</a></td>
</tr>
<tr>
<td>ESPN</td>
<td><a href="http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html">Operating At 100,000 duh nuh nuhs per second</a></td>
</tr>
<tr>
<td>Google</td>
<td><a href="http://highscalability.com/google-architecture">Google architecture</a></td>
</tr>
<tr>
<td>Instagram</td>
<td><a href="http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html">14 million users, terabytes of photos</a><br><a href="http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances">What powers Instagram</a></td>
</tr>
<tr>
<td>Justin.tv</td>
<td><a href="http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html">Justin.Tv's live video broadcasting architecture</a></td>
</tr>
<tr>
<td>Facebook</td>
<td><a href="https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/key-value/fb-memcached-nsdi-2013.pdf">Scaling memcached at Facebook</a><br><a href="https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/data-store/tao-facebook-distributed-datastore-atc-2013.pdf">TAO: Facebook’s distributed data store for the social graph</a><br><a href="https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf">Facebook’s photo storage</a><br><a href="http://highscalability.com/blog/2016/6/27/how-facebook-live-streams-to-800000-simultaneous-viewers.html">How Facebook Live Streams To 800,000 Simultaneous Viewers</a></td>
</tr>
<tr>
<td>Flickr</td>
<td><a href="http://highscalability.com/flickr-architecture">Flickr architecture</a></td>
</tr>
<tr>
<td>Mailbox</td>
<td><a href="http://highscalability.com/blog/2013/6/18/scaling-mailbox-from-0-to-one-million-users-in-6-weeks-and-1.html">From 0 to one million users in 6 weeks</a></td>
</tr>
<tr>
<td>Netflix</td>
<td><a href="http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html">A 360 Degree View Of The Entire Netflix Stack</a><br><a href="http://highscalability.com/blog/2017/12/11/netflix-what-happens-when-you-press-play.html">Netflix: What Happens When You Press Play?</a></td>
</tr>
<tr>
<td>Pinterest</td>
<td><a href="http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html">From 0 To 10s of billions of page views a month</a><br><a href="http://highscalability.com/blog/2012/5/21/pinterest-architecture-update-18-million-visitors-10x-growth.html">18 million visitors, 10x growth, 12 employees</a></td>
</tr>
<tr>
<td>Playfish</td>
<td><a href="http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html">50 million monthly users and growing</a></td>
</tr>
<tr>
<td>PlentyOfFish</td>
<td><a href="http://highscalability.com/plentyoffish-architecture">PlentyOfFish architecture</a></td>
</tr>
<tr>
<td>Salesforce</td>
<td><a href="http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html">How they handle 1.3 billion transactions a day</a></td>
</tr>
<tr>
<td>Stack Overflow</td>
<td><a href="http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html">Stack Overflow architecture</a></td>
</tr>
<tr>
<td>TripAdvisor</td>
<td><a href="http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html">40M visitors, 200M dynamic page views, 30TB data</a></td>
</tr>
<tr>
<td>Tumblr</td>
<td><a href="http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html">15 billion page views a month</a></td>
</tr>
<tr>
<td>Twitter</td>
<td><a href="http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster">Making Twitter 10000 percent faster</a><br><a href="http://highscalability.com/blog/2011/12/19/how-twitter-stores-250-million-tweets-a-day-using-mysql.html">Storing 250 million tweets a day using MySQL</a><br><a href="http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html">150M active users, 300K QPS, a 22 MB/S firehose</a><br><a href="https://www.infoq.com/presentations/Twitter-Timeline-Scalability">Timelines at scale</a><br><a href="https://www.youtube.com/watch?v=5cKTP36HVgI">Big and small data at Twitter</a><br><a href="https://www.youtube.com/watch?v=z8LU0Cj6BOU">Operations at Twitter: scaling beyond 100 million users</a><br><a href="http://highscalability.com/blog/2016/4/20/how-twitter-handles-3000-images-per-second.html">How Twitter Handles 3,000 Images Per Second</a></td>
</tr>
<tr>
<td>Uber</td>
<td><a href="http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html">How Uber scales their real-time market platform</a><br><a href="http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html">Lessons Learned From Scaling Uber To 2000 Engineers, 1000 Services, And 8000 Git Repositories</a></td>
</tr>
<tr>
<td>WhatsApp</td>
<td><a href="http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html">The WhatsApp architecture Facebook bought for $19 billion</a></td>
</tr>
<tr>
<td>YouTube</td>
<td><a href="https://www.youtube.com/watch?v=w5WVu624fY8">YouTube scalability</a><br><a href="http://highscalability.com/youtube-architecture">YouTube architecture</a></td>
</tr>
</tbody>
</table>
<h3>Company engineering blogs</h3>
<blockquote>
<p>Architectures for companies you are interviewing with.</p>
<p>Questions you encounter might be from the same domain.</p>
</blockquote>
<ul>
<li><a href="http://nerds.airbnb.com/">Airbnb Engineering</a></li>
<li><a href="https://developer.atlassian.com/blog/">Atlassian Developers</a></li>
<li><a href="https://aws.amazon.com/blogs/aws/">AWS Blog</a></li>
<li><a href="http://word.bitly.com/">Bitly Engineering Blog</a></li>
<li><a href="https://blog.box.com/blog/category/engineering">Box Blogs</a></li>
<li><a href="http://blog.cloudera.com/">Cloudera Developer Blog</a></li>
<li><a href="https://tech.dropbox.com/">Dropbox Tech Blog</a></li>
<li><a href="https://www.quora.com/q/quoraengineering">Engineering at Quora</a></li>
<li><a href="http://www.ebaytechblog.com/">Ebay Tech Blog</a></li>
<li><a href="https://blog.evernote.com/tech/">Evernote Tech Blog</a></li>
<li><a href="http://codeascraft.com/">Etsy Code as Craft</a></li>
<li><a href="https://www.facebook.com/Engineering">Facebook Engineering</a></li>
<li><a href="http://code.flickr.net/">Flickr Code</a></li>
<li><a href="http://engineering.foursquare.com/">Foursquare Engineering Blog</a></li>
<li><a href="https://github.blog/category/engineering">GitHub Engineering Blog</a></li>
<li><a href="http://googleresearch.blogspot.com/">Google Research Blog</a></li>
<li><a href="https://engineering.groupon.com/">Groupon Engineering Blog</a></li>
<li><a href="https://engineering.heroku.com/">Heroku Engineering Blog</a></li>
<li><a href="http://product.hubspot.com/blog/topic/engineering">Hubspot Engineering Blog</a></li>
<li><a href="http://highscalability.com/">High Scalability</a></li>
<li><a href="http://instagram-engineering.tumblr.com/">Instagram Engineering</a></li>
<li><a href="https://software.intel.com/en-us/blogs/">Intel Software Blog</a></li>
<li><a href="https://blogs.janestreet.com/category/ocaml/">Jane Street Tech Blog</a></li>
<li><a href="http://engineering.linkedin.com/blog">LinkedIn Engineering</a></li>
<li><a href="https://engineering.microsoft.com/">Microsoft Engineering</a></li>
<li><a href="https://blogs.msdn.microsoft.com/pythonengineering/">Microsoft Python Engineering</a></li>
<li><a href="http://techblog.netflix.com/">Netflix Tech Blog</a></li>
<li><a href="https://medium.com/paypal-engineering">Paypal Developer Blog</a></li>
<li><a href="https://medium.com/@Pinterest_Engineering">Pinterest Engineering Blog</a></li>
<li><a href="http://www.redditblog.com/">Reddit Blog</a></li>
<li><a href="https://developer.salesforce.com/blogs/engineering/">Salesforce Engineering Blog</a></li>
<li><a href="https://slack.engineering/">Slack Engineering Blog</a></li>
<li><a href="https://labs.spotify.com/">Spotify Labs</a></li>
<li><a href="http://www.twilio.com/engineering">Twilio Engineering Blog</a></li>
<li><a href="https://blog.twitter.com/engineering/">Twitter Engineering</a></li>
<li><a href="http://eng.uber.com/">Uber Engineering Blog</a></li>
<li><a href="http://yahooeng.tumblr.com/">Yahoo Engineering Blog</a></li>
<li><a href="http://engineeringblog.yelp.com/">Yelp Engineering Blog</a></li>
<li><a href="https://www.zynga.com/blogs/engineering">Zynga Engineering Blog</a></li>
</ul>
<h4>Source(s) and further reading</h4>
<p>Looking to add a blog? To avoid duplicating work, consider adding your company blog to the following repo:</p>
<ul>
<li><a href="https://github.com/kilimchoi/engineering-blogs">kilimchoi/engineering-blogs</a></li>
</ul>
<h2>Under development</h2>
<p>Interested in adding a section or helping complete one in-progress? <a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a>!</p>
<ul>
<li>Distributed computing with MapReduce</li>
<li>Consistent hashing</li>
<li>Scatter gather</li>
<li><a href="https://raw.githubusercontent.com/donnemartin/system-design-primer/master/#contributing">Contribute</a></li>
</ul>
<h2>Credits</h2>
<p>Credits and sources are provided throughout this repo.</p>
<p>Special thanks to:</p>
<ul>
<li><a href="http://www.hiredintech.com/system-design/the-system-design-process/">Hired in tech</a></li>
<li><a href="https://www.amazon.com/dp/0984782850/">Cracking the coding interview</a></li>
<li><a href="http://highscalability.com/">High scalability</a></li>
<li><a href="https://github.com/checkcheckzz/system-design-interview">checkcheckzz/system-design-interview</a></li>
<li><a href="https://github.com/shashank88/system_design">shashank88/system_design</a></li>
<li><a href="https://github.com/mmcgrana/services-engineering">mmcgrana/services-engineering</a></li>
<li><a href="https://gist.github.com/vasanthk/485d1c25737e8e72759f">System design cheat sheet</a></li>
<li><a href="http://dancres.github.io/Pages/">A distributed systems reading list</a></li>
<li><a href="http://www.puncsky.com/blog/2016-02-13-crack-the-system-design-interview">Cracking the system design interview</a></li>
</ul>
<h2>Contact info</h2>
<p>Feel free to contact me to discuss any issues, questions, or comments.</p>
<p>My contact info can be found on my <a href="https://github.com/donnemartin">GitHub page</a>.</p>
<h2>License</h2>
<p><em>I am providing code and resources in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code and resources is from me and not my employer (Facebook).</em></p>
<pre><code>Copyright 2017 Donne Martin
Creative Commons Attribution 4.0 International License (CC BY 4.0)
http://creativecommons.org/licenses/by/4.0/
</code></pre>
+
+
\ No newline at end of file
diff --git a/python/weekly/index.xml b/python/weekly/index.xml
new file mode 100644
index 00000000000..62e66ba8bb4
--- /dev/null
+++ b/python/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Python Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:48Z
+ Weekly Trending of Python in GitHub
+
+
+ iperov/DeepFaceLab
+ 2024-12-01T01:48:48Z
+ tag:github.com,2024-12-01:/iperov/DeepFaceLab
+
+ <p>DeepFaceLab is the leading software for creating deepfakes.</p><hr><table align="center" border="0">
<tbody>
<tr>
<td colspan="2" align="center"> <h1>DeepFaceLab</h1> <a href="https://arxiv.org/abs/2005.05535"> </a><p><a href="https://arxiv.org/abs/2005.05535"><img src="https://static.arxiv.org/static/browse/0.3.0/images/icons/favicon.ico" width="14"> </a><a href="https://arxiv.org/abs/2005.05535">https://arxiv.org/abs/2005.05535</a></p> </td>
</tr>
<tr>
<td colspan="2" align="center"> <p align="center"> </p><p><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/logo_tensorflow.png" alt=""> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/logo_cuda.png" alt=""> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/logo_directx.png" alt=""></p> <p></p> <p>DeepFaceLab is used by such popular youtube channels as</p>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@deeptomcruise">deeptomcruise</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@1facerussia">1facerussia</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@arnoldschwarzneggar">arnoldschwarzneggar</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@mariahcareyathome?">mariahcareyathome?</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@diepnep">diepnep</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@mr__heisenberg">mr__heisenberg</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/tiktok_icon.png" alt=""> <a href="https://www.tiktok.com/@deepcaprio">deepcaprio</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCGf4OlX_aTt8DlrgiH3jN3g/videos">VFXChris Ume</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCZXbWcv7fSZFTAZV4beckyw/videos">Sham00k</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/watch?v=A91P2qtPT54&list=PLayt6616lBclvOprvrC8qKGCO-mAhPRux">Collider videos</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCC0lK2Zo2BMXX-k1Ks0r7dg/videos">iFake</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCFh3gL0a8BS21g-DHvXZEeQ/videos">NextFace</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCC5BbFxqLQgfnWPhprmQLVg">Futuring Machine</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCRzgK52MmetD9aG8pDOID3g">RepresentUS</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/c/corridorcrew/videos">Corridor Crew</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCkHecfDTcSazNZSKPEhtPVQ">DeepFaker</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/c/DeepFakesinmovie/videos">DeepFakes in movie</a></th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/channel/UCkNFhcYNLQ5hr6A6lZ56mKA">DeepFakeCreator</a></th>
<th><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/user/Jarkancio/videos">Jarkan</a></th>
</tr>
</thead>
</table> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h1>What can I do using DeepFaceLab?</h1> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>Replace the face</h2> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/replace_the_face.jpg" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>De-age the face</h2> </td>
</tr>
<tr>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/deage_0_1.jpg" align="center"> </td>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/deage_0_2.jpg" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"> <p><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/watch?v=Ddx5B-84ebo">https://www.youtube.com/watch?v=Ddx5B-84ebo</a></p> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>Replace the head</h2> </td>
</tr>
<tr>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/head_replace_1_1.jpg" align="center"> </td>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/head_replace_1_2.jpg" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"> <p><img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/youtube_icon.png" alt=""> <a href="https://www.youtube.com/watch?v=RTjgkhMugVw">https://www.youtube.com/watch?v=RTjgkhMugVw</a></p> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h1>Native resolution progress</h1> </td>
</tr>
<tr>
<td colspan="2" align="center"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/deepfake_progress.png" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/make_everything_ok.png" align="center"> <p>Unfortunately, there is no "make everything ok" button in DeepFaceLab. You should spend time studying the workflow and growing your skills. A skill in programs such as <em>AfterEffects</em> or <em>Davinci Resolve</em> is also desirable.</p> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>Mini tutorial</h2> <a href="https://www.youtube.com/watch?v=kOIMXt8KK8M"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/mini_tutorial.jpg" align="center"> </a> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>Releases</h2> </td>
</tr>
<tr>
<td align="right"> <a href="https://tinyurl.com/2p9cvt25">Windows (magnet link)</a> </td>
<td align="center">Last release. Use torrent client to download.</td>
</tr>
<tr>
<td align="right"> <a href="https://mega.nz/folder/Po0nGQrA#dbbttiNWojCt8jzD4xYaPw">Windows (Mega.nz)</a> </td>
<td align="center">Contains new and prev releases.</td>
</tr>
<tr>
<td align="right"> <a href="https://disk.yandex.ru/d/7i5XTKIKVg5UUg">Windows (yandex.ru)</a> </td>
<td align="center">Contains new and prev releases.</td>
</tr>
<tr>
<td align="right"> <a href="https://github.com/nagadit/DeepFaceLab_Linux">Linux (github)</a> </td>
<td align="center">by @nagadit</td>
</tr>
<tr>
<td align="right"> <a href="https://github.com/elemantalcode/dfl">CentOS Linux (github)</a> </td>
<td align="center">May be outdated. By @elemantalcode</td>
</tr>
</tbody>
</table>
<table align="center" border="0">
<tbody>
<tr>
<td colspan="2" align="center"> <h3>Communication groups</h3> </td>
</tr>
<tr>
<td align="right"> <a href="https://discord.gg/rxa7h9M6rH">Discord</a> </td>
<td align="center">Official discord channel. English / Russian.</td>
</tr>
<tr>
<td colspan="2" align="center"> <h2>Related works</h2> </td>
</tr>
<tr>
<td align="right"> <a href="https://github.com/iperov/DeepFaceLive">DeepFaceLive</a> </td>
<td align="center">Real-time face swap for PC streaming or video calls</td>
</tr>
</tbody>
</table>
<table align="center" border="0">
<tbody>
<tr>
<td colspan="2" align="center"> <h2>How I can help the project?</h2> </td>
</tr>
<tr>
<td colspan="2" align="center"> <h3>Star this repo</h3> </td>
</tr>
<tr>
<td colspan="2" align="center"> <p>Register github account and push "Star" button.</p> </td>
</tr>
</tbody>
</table>
<table align="center" border="0">
<tbody>
<tr>
<td colspan="2" align="center"> <h2>Meme zone</h2> </td>
</tr>
<tr>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/meme1.jpg" align="center"> </td>
<td align="center" width="50%"> <img src="https://raw.githubusercontent.com/iperov/DeepFaceLab/master/doc/meme2.jpg" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"> <p><sub>#deepfacelab #faceswap #face-swap #deep-learning #deeplearning #deep-neural-networks #deepface #deep-face-swap #neural-networks #neural-nets #tensorflow #cuda #nvidia</sub></p> </td>
</tr>
</tbody>
</table>
+
+
+ black-forest-labs/flux
+ 2024-12-01T01:48:48Z
+ tag:github.com,2024-12-01:/black-forest-labs/flux
+
+ <p>Official inference repo for FLUX.1 models</p><hr><h1>FLUX</h1>
<p>by Black Forest Labs: <a href="https://blackforestlabs.ai">https://blackforestlabs.ai</a>. Documentation for our API can be found here: <a href="https://docs.bfl.ml/">docs.bfl.ml</a>.</p>
<p><img src="https://raw.githubusercontent.com/black-forest-labs/flux/main/assets/grid.jpg" alt="grid"></p>
<p>This repo contains minimal inference code to run image generation & editing with our Flux models.</p>
<h2>Local installation</h2>
<pre><code class="language-bash">cd $HOME && git clone https://github.com/black-forest-labs/flux
cd $HOME/flux
python3.10 -m venv .venv
source .venv/bin/activate
pip install -e ".[all]"
</code></pre>
<h3>Models</h3>
<p>We are offering an extensive suite of models. For more information about the invidual models, please refer to the link under <strong>Usage</strong>.</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Usage</th>
<th>HuggingFace repo</th>
<th>License</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>FLUX.1 [schnell]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/text-to-image.md">Text to Image</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-schnell">https://huggingface.co/black-forest-labs/FLUX.1-schnell</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-schnell">apache-2.0</a></td>
</tr>
<tr>
<td><code>FLUX.1 [dev]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/text-to-image.md">Text to Image</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-dev">https://huggingface.co/black-forest-labs/FLUX.1-dev</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Fill [dev]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/fill.md">In/Out-painting</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Fill-dev">https://huggingface.co/black-forest-labs/FLUX.1-Fill-dev</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Canny [dev]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/structural-conditioning.md">Structural Conditioning</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev">https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Depth [dev]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/structural-conditioning.md">Structural Conditioning</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev">https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Canny [dev] LoRA</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/structural-conditioning.md">Structural Conditioning</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev-lora">https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev-lora</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Depth [dev] LoRA</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/structural-conditioning.md">Structural Conditioning</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev-lora">https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev-lora</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 Redux [dev]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/image-variation.md">Image variation</a></td>
<td><a href="https://huggingface.co/black-forest-labs/FLUX.1-Redux-dev">https://huggingface.co/black-forest-labs/FLUX.1-Redux-dev</a></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/model_licenses/LICENSE-FLUX1-dev">FLUX.1-dev Non-Commercial License</a></td>
</tr>
<tr>
<td><code>FLUX.1 [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/text-to-image.md">Text to Image</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX1.1 [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/text-to-image.md">Text to Image</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX1.1 [pro] Ultra/raw</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/text-to-image.md">Text to Image</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX.1 Fill [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/fill.md">In/Out-painting</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX.1 Canny [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/controlnet.md">Structural Conditioning</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX.1 Depth [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/controlnet.md">Structural Conditioning</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX1.1 Redux [pro]</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/image-variation.md">Image variation</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
<tr>
<td><code>FLUX1.1 Redux [pro] Ultra</code></td>
<td><a href="https://raw.githubusercontent.com/black-forest-labs/flux/main/docs/image-variation.md">Image variation</a></td>
<td><a href="https://docs.bfl.ml/">Available in our API.</a></td>
<td></td>
</tr>
</tbody>
</table>
<p>The weights of the autoencoder are also released under <a href="https://huggingface.co/datasets/choosealicense/licenses/blob/main/markdown/apache-2.0.md">apache-2.0</a> and can be found in the HuggingFace repos above.</p>
<h2>API usage</h2>
<p>Our API offers access to our models. It is documented here: <a href="https://docs.bfl.ml/">docs.bfl.ml</a>.</p>
<p>In this repository we also offer an easy python interface. To use this, you first need to register with the API on <a href="https://api.bfl.ml/">api.bfl.ml</a>, and create a new API key.</p>
<p>To use the API key either run <code>export BFL_API_KEY=<your_key_here></code> or provide it via the <code>api_key=<your_key_here></code> parameter. It is also expected that you have installed the package as above.</p>
<p>Usage from python:</p>
<pre><code class="language-python">from flux.api import ImageRequest
# this will create an api request directly but not block until the generation is finished
request = ImageRequest("A beautiful beach", name="flux.1.1-pro")
# or: request = ImageRequest("A beautiful beach", name="flux.1.1-pro", api_key="your_key_here")
# any of the following will block until the generation is finished
request.url
# -> https:<...>/sample.jpg
request.bytes
# -> b"..." bytes for the generated image
request.save("outputs/api.jpg")
# saves the sample to local storage
request.image
# -> a PIL image
</code></pre>
<p>Usage from the command line:</p>
<pre><code class="language-bash">$ python -m flux.api --prompt="A beautiful beach" url
https:<...>/sample.jpg
# generate and save the result
$ python -m flux.api --prompt="A beautiful beach" save outputs/api
# open the image directly
$ python -m flux.api --prompt="A beautiful beach" image show
</code></pre>
+
+
+ QwenLM/Qwen-Agent
+ 2024-12-01T01:48:48Z
+ tag:github.com,2024-12-01:/QwenLM/Qwen-Agent
+
+ <p>Agent framework and applications built upon Qwen>=2.0, featuring Function Calling, Code Interpreter, RAG, and Chrome extension.</p><hr><p><a href="https://github.com/QwenLM/Qwen-Agent/raw/main/README_CN.md">中文</a> | English</p>
<p align="center"> <img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/assets/qwen_agent/logo-qwen-agent.png" width="400"> </p>
<p> <br> </p>
<p>Qwen-Agent is a framework for developing LLM applications based on the instruction following, tool usage, planning, and memory capabilities of Qwen. It also comes with example applications such as Browser Assistant, Code Interpreter, and Custom Assistant.</p>
<h1>News</h1>
<ul>
<li>🔥🔥🔥 Sep 18, 2024: Added <a href="https://raw.githubusercontent.com/QwenLM/Qwen-Agent/main/examples/tir_math.py">Qwen2.5-Math Demo</a> to showcase the Tool-Integrated Reasoning capabilities of Qwen2.5-Math. Note: The python executor is not sandboxed and is intended for local testing only, not for production use.</li>
</ul>
<h1>Getting Started</h1>
<h2>Installation</h2>
<ul>
<li>Install the stable version from PyPI:</li>
</ul>
<pre><code class="language-bash">pip install -U "qwen-agent[gui,rag,code_interpreter,python_executor]"
# Or use `pip install -U qwen-agent` for the minimal requirements.
# The optional requirements, specified in double brackets, are:
# [gui] for Gradio-based GUI support;
# [rag] for RAG support;
# [code_interpreter] for Code Interpreter support;
# [python_executor] for Tool-Integrated Reasoning with Qwen2.5-Math.
</code></pre>
<ul>
<li>Alternatively, you can install the latest development version from the source:</li>
</ul>
<pre><code class="language-bash">git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./"[gui,rag,code_interpreter,python_executor]"
# Or `pip install -e ./` for minimal requirements.
</code></pre>
<h2>Preparation: Model Service</h2>
<p>You can either use the model service provided by Alibaba Cloud's <a href="https://help.aliyun.com/zh/dashscope/developer-reference/quick-start">DashScope</a>, or deploy and use your own model service using the open-source Qwen models.</p>
<ul>
<li> <p>If you choose to use the model service offered by DashScope, please ensure that you set the environment variable <code>DASHSCOPE_API_KEY</code> to your unique DashScope API key.</p> </li>
<li> <p>Alternatively, if you prefer to deploy and use your own model service, please follow the instructions provided in the README of Qwen2 for deploying an OpenAI-compatible API service. Specifically, consult the <a href="https://github.com/QwenLM/Qwen2?tab=readme-ov-file#vllm">vLLM</a> section for high-throughput GPU deployment or the <a href="https://github.com/QwenLM/Qwen2?tab=readme-ov-file#ollama">Ollama</a> section for local CPU (+GPU) deployment.</p> </li>
</ul>
<h2>Developing Your Own Agent</h2>
<p>Qwen-Agent offers atomic components, such as LLMs (which inherit from <code>class BaseChatModel</code> and come with <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/examples/function_calling.py">function calling</a>) and Tools (which inherit from <code>class BaseTool</code>), along with high-level components like Agents (derived from <code>class Agent</code>).</p>
<p>The following example illustrates the process of creating an agent capable of reading PDF files and utilizing tools, as well as incorporating a custom tool:</p>
<pre><code class="language-py">import pprint
import urllib.parse
import json5
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
# Step 1 (Optional): Add a custom tool named `my_image_gen`.
@register_tool('my_image_gen')
class MyImageGen(BaseTool):
# The `description` tells the agent the functionality of this tool.
description = 'AI painting (image generation) service, input text description, and return the image URL drawn based on text information.'
# The `parameters` tell the agent what input parameters the tool has.
parameters = [{
'name': 'prompt',
'type': 'string',
'description': 'Detailed description of the desired image content, in English',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
# `params` are the arguments generated by the LLM agent.
prompt = json5.loads(params)['prompt']
prompt = urllib.parse.quote(prompt)
return json5.dumps(
{'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},
ensure_ascii=False)
# Step 2: Configure the LLM you are using.
llm_cfg = {
# Use the model service provided by DashScope:
'model': 'qwen-max',
'model_server': 'dashscope',
# 'api_key': 'YOUR_DASHSCOPE_API_KEY',
# It will use the `DASHSCOPE_API_KEY' environment variable if 'api_key' is not set here.
# Use a model service compatible with the OpenAI API, such as vLLM or Ollama:
# 'model': 'Qwen2-7B-Chat',
# 'model_server': 'http://localhost:8000/v1', # base_url, also known as api_base
# 'api_key': 'EMPTY',
# (Optional) LLM hyperparameters for generation:
'generate_cfg': {
'top_p': 0.8
}
}
# Step 3: Create an agent. Here we use the `Assistant` agent as an example, which is capable of using tools and reading files.
system_instruction = '''You are a helpful assistant.
After receiving the user's request, you should:
- first draw an image and obtain the image url,
- then run code `request.get(image_url)` to download the image,
- and finally select an image operation from the given document to process the image.
Please show the image using `plt.show()`.'''
tools = ['my_image_gen', 'code_interpreter'] # `code_interpreter` is a built-in tool for executing code.
files = ['./examples/resource/doc.pdf'] # Give the bot a PDF file to read.
bot = Assistant(llm=llm_cfg,
system_message=system_instruction,
function_list=tools,
files=files)
# Step 4: Run the agent as a chatbot.
messages = [] # This stores the chat history.
while True:
# For example, enter the query "draw a dog and rotate it 90 degrees".
query = input('user query: ')
# Append the user query to the chat history.
messages.append({'role': 'user', 'content': query})
response = []
for response in bot.run(messages=messages):
# Streaming output.
print('bot response:')
pprint.pprint(response, indent=2)
# Append the bot responses to the chat history.
messages.extend(response)
</code></pre>
<p>In addition to using built-in agent implentations such as <code>class Assistant</code>, you can also develop your own agent implemetation by inheriting from <code>class Agent</code>. Please refer to the <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/examples">examples</a> directory for more usage examples.</p>
<h1>FAQ</h1>
<h2>Do you have function calling (aka tool calling)?</h2>
<p>Yes. The LLM classes provide <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/examples/function_calling.py">function calling</a>. Additionally, some Agent classes also are built upon the function calling capability, e.g., FnCallAgent and ReActChat.</p>
<h2>How to do question-answering over super-long documents involving 1M tokens?</h2>
<p>We have released <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/examples/assistant_rag.py">a fast RAG solution</a>, as well as <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/examples/parallel_doc_qa.py">an expensive but competitive agent</a>, for doing question-answering over super-long documents. They have managed to outperform native long-context models on two challenging benchmarks while being more efficient, and perform perfectly in the single-needle "needle-in-the-haystack" pressure test involving 1M-token contexts. See the <a href="https://qwenlm.github.io/blog/qwen-agent-2405/">blog</a> for technical details.</p>
<p align="center"> <img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/assets/qwen_agent/qwen-agent-2405-blog-long-context-results.png" width="400"> </p>
<p> </p>
<h1>Application: BrowserQwen</h1>
<p>BrowserQwen is a browser assistant built upon Qwen-Agent. Please refer to its <a href="https://github.com/QwenLM/Qwen-Agent/raw/main/browser_qwen.md">documentation</a> for details.</p>
<h1>Disclaimer</h1>
<p>The code interpreter is not sandboxed, and it executes code in your own environment. Please do not ask Qwen to perform dangerous tasks, and do not directly use the code interpreter for production purposes.</p>
+
+
\ No newline at end of file
diff --git a/q%23/daily/index.xml b/q%23/daily/index.xml
index 674ba732ff4..b2a10dcaa86 100644
--- a/q%23/daily/index.xml
+++ b/q%23/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Q# Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:47Z
+ 2024-12-01T01:38:08Z
Daily Trending of Q# in GitHub
\ No newline at end of file
diff --git a/q%23/monthly/index.xml b/q%23/monthly/index.xml
new file mode 100644
index 00000000000..a7b4d3abd3b
--- /dev/null
+++ b/q%23/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Q# Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:28Z
+ Monthly Trending of Q# in GitHub
+
+
\ No newline at end of file
diff --git a/q%23/weekly/index.xml b/q%23/weekly/index.xml
new file mode 100644
index 00000000000..7c8d11ef5e6
--- /dev/null
+++ b/q%23/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Q# Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:54Z
+ Weekly Trending of Q# in GitHub
+
+
\ No newline at end of file
diff --git a/q/daily/index.xml b/q/daily/index.xml
index 92cfd334530..df9700769ce 100644
--- a/q/daily/index.xml
+++ b/q/daily/index.xml
@@ -1,7 +1,7 @@
GitHub q Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:40Z
+ 2024-12-01T01:38:01Z
Daily Trending of q in GitHub
\ No newline at end of file
diff --git a/q/monthly/index.xml b/q/monthly/index.xml
new file mode 100644
index 00000000000..8c62f6c8b04
--- /dev/null
+++ b/q/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub q Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:17Z
+ Monthly Trending of q in GitHub
+
+
\ No newline at end of file
diff --git a/q/weekly/index.xml b/q/weekly/index.xml
new file mode 100644
index 00000000000..85f52e2161d
--- /dev/null
+++ b/q/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub q Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:47Z
+ Weekly Trending of q in GitHub
+
+
\ No newline at end of file
diff --git a/qmake/daily/index.xml b/qmake/daily/index.xml
index 42f8b9cc80f..f680c2d541a 100644
--- a/qmake/daily/index.xml
+++ b/qmake/daily/index.xml
@@ -1,7 +1,7 @@
GitHub QMake Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:48Z
+ 2024-12-01T01:38:07Z
Daily Trending of QMake in GitHub
\ No newline at end of file
diff --git a/qmake/monthly/index.xml b/qmake/monthly/index.xml
new file mode 100644
index 00000000000..bc18d98534c
--- /dev/null
+++ b/qmake/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub QMake Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:27Z
+ Monthly Trending of QMake in GitHub
+
+
\ No newline at end of file
diff --git a/qmake/weekly/index.xml b/qmake/weekly/index.xml
new file mode 100644
index 00000000000..af968b08fe3
--- /dev/null
+++ b/qmake/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub QMake Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:54Z
+ Weekly Trending of QMake in GitHub
+
+
\ No newline at end of file
diff --git a/qml/daily/index.xml b/qml/daily/index.xml
index 66f1ee93b99..959c1e3dbd3 100644
--- a/qml/daily/index.xml
+++ b/qml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub QML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:48Z
+ 2024-12-01T01:38:08Z
Daily Trending of QML in GitHub
\ No newline at end of file
diff --git a/qml/monthly/index.xml b/qml/monthly/index.xml
new file mode 100644
index 00000000000..d2cdcdcdf5f
--- /dev/null
+++ b/qml/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub QML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:27Z
+ Monthly Trending of QML in GitHub
+
+
+ luisbocanegra/plasma-panel-colorizer
+ 2024-12-01T01:57:27Z
+ tag:github.com,2024-12-01:/luisbocanegra/plasma-panel-colorizer
+
+ <p>Latte-Dock and WM status bar customization features for the default KDE Plasma panel</p><hr>
+
+
\ No newline at end of file
diff --git a/qml/weekly/index.xml b/qml/weekly/index.xml
new file mode 100644
index 00000000000..32b1e28dc5b
--- /dev/null
+++ b/qml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub QML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:54Z
+ Weekly Trending of QML in GitHub
+
+
\ No newline at end of file
diff --git a/qt-script/daily/index.xml b/qt-script/daily/index.xml
index 38947875dab..42c5aa57beb 100644
--- a/qt-script/daily/index.xml
+++ b/qt-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Qt Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:47Z
+ 2024-12-01T01:38:07Z
Daily Trending of Qt Script in GitHub
\ No newline at end of file
diff --git a/qt-script/monthly/index.xml b/qt-script/monthly/index.xml
new file mode 100644
index 00000000000..b13de1ecc76
--- /dev/null
+++ b/qt-script/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Qt Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:26Z
+ Monthly Trending of Qt Script in GitHub
+
+
\ No newline at end of file
diff --git a/qt-script/weekly/index.xml b/qt-script/weekly/index.xml
new file mode 100644
index 00000000000..f9911094994
--- /dev/null
+++ b/qt-script/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Qt Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:55Z
+ Weekly Trending of Qt Script in GitHub
+
+
\ No newline at end of file
diff --git a/quake/daily/index.xml b/quake/daily/index.xml
index 190f267247a..0e223f421ba 100644
--- a/quake/daily/index.xml
+++ b/quake/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Quake Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:49Z
+ 2024-12-01T01:38:09Z
Daily Trending of Quake in GitHub
\ No newline at end of file
diff --git a/quake/monthly/index.xml b/quake/monthly/index.xml
new file mode 100644
index 00000000000..de19ce6b61d
--- /dev/null
+++ b/quake/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Quake Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:28Z
+ Monthly Trending of Quake in GitHub
+
+
\ No newline at end of file
diff --git a/quake/weekly/index.xml b/quake/weekly/index.xml
new file mode 100644
index 00000000000..8201efd47df
--- /dev/null
+++ b/quake/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Quake Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:56Z
+ Weekly Trending of Quake in GitHub
+
+
\ No newline at end of file
diff --git a/r/daily/index.xml b/r/daily/index.xml
index bb4838867a1..bb0a8460aaf 100644
--- a/r/daily/index.xml
+++ b/r/daily/index.xml
@@ -1,7 +1,7 @@
GitHub R Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:50Z
+ 2024-12-01T01:38:10Z
Daily Trending of R in GitHub
\ No newline at end of file
diff --git a/r/monthly/index.xml b/r/monthly/index.xml
new file mode 100644
index 00000000000..3d18e43e68c
--- /dev/null
+++ b/r/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub R Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:30Z
+ Monthly Trending of R in GitHub
+
+
+ tidyverse/elmer
+ 2024-12-01T01:57:30Z
+ tag:github.com,2024-12-01:/tidyverse/elmer
+
+ <p>Call LLM APIs from R</p><hr><h1>elmer <a href="https://elmer.tidyverse.org"><img src="https://raw.githubusercontent.com/tidyverse/elmer/main/man/figures/logo.png" align="right" height="138" alt="elmer website"></a></h1>
<!-- badges: start -->
<p><a href="https://lifecycle.r-lib.org/articles/stages.html#experimental"><img src="https://img.shields.io/badge/lifecycle-experimental-orange.svg?sanitize=true" alt="Lifecycle: experimental"></a> <a href="https://github.com/tidyverse/elmer/actions/workflows/R-CMD-check.yaml"><img src="https://github.com/tidyverse/elmer/actions/workflows/R-CMD-check.yaml/badge.svg?sanitize=true" alt="R-CMD-check"></a></p>
<!-- badges: end -->
<p>elmer makes it easy to use large language models (LLM) from R. It supports a wider variety of LLM providers and implements a rich set of features including streaming outputs, tool/function calling, structured data extration, and more.</p>
<p>(Looking for something similar to elmer for python? Check out <a href="https://github.com/cpsievert/chatlas">chatlas</a>!)</p>
<h2>Installation</h2>
<p>You can install the development version of elmer from <a href="https://github.com/">GitHub</a> with:</p>
<pre><code class="language-r"># install.packages("pak")
pak::pak("tidyverse/elmer")
</code></pre>
<h2>Providers</h2>
<p>elmer supports a wide variety of model providers:</p>
<ul>
<li>Anthropic’s Claude: <code>chat_claude()</code>.</li>
<li>AWS Bedrock: <code>chat_bedrock()</code>.</li>
<li>Azure OpenAI: <code>chat_azure()</code>.</li>
<li>Databricks: <code>chat_databricks()</code>.</li>
<li>GitHub model marketplace: <code>chat_github()</code>.</li>
<li>Google Gemini: <code>chat_gemini()</code>.</li>
<li>Groq: <code>chat_groq()</code>.</li>
<li>Ollama: <code>chat_ollama()</code>.</li>
<li>OpenAI: <code>chat_openai()</code>.</li>
<li>perplexity.ai: <code>chat_perplexity()</code>.</li>
<li>Snowflake Cortex: <code>chat_cortex()</code>.</li>
</ul>
<h2>Model choice</h2>
<p>If you’re using elmer inside your organisation, you’ll be limited to what your org allows, which is likely to be one provided by a big cloud provider, e.g. <code>chat_azure()</code>, <code>chat_bedrock()</code>, <code>chat_databricks()</code>, or <code>chat_snowflake()</code>. If you’re using elmer for your own personal exploration, you have a lot more freedom so we have a few recommendations to help you get started:</p>
<ul>
<li> <p><code>chat_openai()</code> or <code>chat_claude()</code> are both good places to start. <code>chat_openai()</code> defaults to <strong>GPT-4o</strong>, but you can use <code>model = "gpt-4o-mini"</code> for a cheaper lower-quality model, or <code>model = "o1-mini"</code> for more complex reasoning. <code>chat_claude()</code> is similarly good; it defaults to <strong>Claude 3.5 Sonnet</strong> which we have found to be particularly good at writing code.</p> </li>
<li> <p><code>chat_gemini()</code> is great for large prompt, because it has a much larger context window than other models. It allows up to 1 million tokens, compared to Claude 3.5 Sonnet’s 200k and GPT-4o’s 128k.</p> </li>
<li> <p><code>chat_ollama()</code>, which uses <a href="https://ollama.com">Ollama</a>, allows you to run models on your own computer. The biggest models you can run locally aren’t as good as the state of the art hosted models, but they also don’t share your data and are effectively free.</p> </li>
</ul>
<h2>Using elmer</h2>
<p>You can work with elmer in several different ways, depending on whether you are working interactively or programmatically. They all start with creating a new chat object:</p>
<pre><code class="language-r">library(elmer)
chat <- chat_openai(
model = "gpt-4o-mini",
system_prompt = "You are a friendly but terse assistant.",
)
</code></pre>
<p>Chat objects are stateful <a href="https://r6.r-lib.org">R6 objects</a>: they retain the context of the conversation, so each new query can build on the previous ones, and you call their methods with <code>$</code>.</p>
<h3>Interactive chat console</h3>
<p>The most interactive and least programmatic way of using elmer is to chat directly in your R console or browser with <code>live_console(chat)</code> or <code>live_browser()</code>:</p>
<pre><code class="language-r">live_console(chat)
#> ╔════════════════════════════════════════════════════════╗
#> ║ Entering chat console. Use """ for multi-line input. ║
#> ║ Press Ctrl+C to quit. ║
#> ╚════════════════════════════════════════════════════════╝
#> >>> Who were the original creators of R?
#> R was originally created by Ross Ihaka and Robert Gentleman at the University of
#> Auckland, New Zealand.
#>
#> >>> When was that?
#> R was initially released in 1995. Development began a few years prior to that,
#> in the early 1990s.
</code></pre>
<p>Keep in mind that the chat object retains state, so when you enter the chat console, any previous interactions with that chat object are still part of the conversation, and any interactions you have in the chat console will persist after you exit back to the R prompt. This is true regardless of which of the various chat functions you use.</p>
<h3>Interactive method call</h3>
<p>The second most interactive way to chat is to call the <code>chat()</code> method:</p>
<pre><code class="language-r">chat$chat("What preceding languages most influenced R?")
#> R was primarily influenced by the S programming language, particularly S-PLUS.
#> Other languages that had an impact include Scheme and various data analysis
#> languages.
</code></pre>
<p>If you initialize the chat object in the global environment, the <code>chat</code> method will stream the response to the console as it arrives. When the entire response is received, it is also returned as a character vector (but invisibly, so it’s not printed twice). This mode is useful when you want to see the response as it arrives, but you don’t want to enter the chat console.</p>
<p>If you want to ask a question about an image, you can pass one or more additional input arguments using <code>content_image_file()</code> and/or <code>content_image_url()</code>:</p>
<pre><code class="language-r">chat$chat(
content_image_url("https://www.r-project.org/Rlogo.png"),
"Can you explain this logo?"
)
#> The logo of R features a stylized letter "R" in blue, enclosed in an oval
#> shape that resembles the letter "O," signifying the programming language's
#> name. The design conveys a modern and professional look, reflecting its use
#> in statistical computing and data analysis. The blue color often represents
#> trust and reliability, which aligns with R's role in data science.
</code></pre>
<h3>Programmatic chat</h3>
<p>The most programmataic way to chat is to create the chat object inside a function, where live streaming is automatically suppressed and <code>$chat()</code> returns the result as a string:</p>
<pre><code class="language-r">my_function <- function() {
chat <- chat_openai(
model = "gpt-4o-mini",
system_prompt = "You are a friendly but terse assistant.",
)
chat$chat("Is R a functional programming language?")
}
my_function()
#> [1] "Yes, R supports functional programming concepts. It allows functions to
#> be first-class objects, supports higher-order functions, and encourages the
#> use of functions as core components of code. However, it also supports
#> procedural and object-oriented programming styles."
</code></pre>
<p>If needed, you can manually control this behaviour with the <code>echo</code> argument.</p>
<p>This mode is useful for programming with elmer, when the result is either not intended for human consumption or when you want to process the response before displaying it.</p>
<h2>Learning more</h2>
<p>elmer comes with a bunch of vignettes to help you learn more:</p>
<ul>
<li>Learn key vocabulary and see example use cases in <code>vignette("elmer")</code>.</li>
<li>Learn how to design your prompt in <code>vignette("prompt-design")</code>.</li>
<li>Learn about tool/function calling in <code>vignette("tool-calling")</code>.</li>
<li>Learn how to extract structured data in <code>vignette("structured-data")</code>.</li>
<li>Learn about streaming and async APIs in <code>vignette("streaming-async")</code>.</li>
</ul>
+
+
\ No newline at end of file
diff --git a/r/weekly/index.xml b/r/weekly/index.xml
new file mode 100644
index 00000000000..d4b9c7397da
--- /dev/null
+++ b/r/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub R Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:57Z
+ Weekly Trending of R in GitHub
+
+
+ tidyverse/elmer
+ 2024-12-01T01:48:57Z
+ tag:github.com,2024-12-01:/tidyverse/elmer
+
+ <p>Call LLM APIs from R</p><hr><h1>elmer <a href="https://elmer.tidyverse.org"><img src="https://raw.githubusercontent.com/tidyverse/elmer/main/man/figures/logo.png" align="right" height="138" alt="elmer website"></a></h1>
<!-- badges: start -->
<p><a href="https://lifecycle.r-lib.org/articles/stages.html#experimental"><img src="https://img.shields.io/badge/lifecycle-experimental-orange.svg?sanitize=true" alt="Lifecycle: experimental"></a> <a href="https://github.com/tidyverse/elmer/actions/workflows/R-CMD-check.yaml"><img src="https://github.com/tidyverse/elmer/actions/workflows/R-CMD-check.yaml/badge.svg?sanitize=true" alt="R-CMD-check"></a></p>
<!-- badges: end -->
<p>elmer makes it easy to use large language models (LLM) from R. It supports a wider variety of LLM providers and implements a rich set of features including streaming outputs, tool/function calling, structured data extration, and more.</p>
<p>(Looking for something similar to elmer for python? Check out <a href="https://github.com/cpsievert/chatlas">chatlas</a>!)</p>
<h2>Installation</h2>
<p>You can install the development version of elmer from <a href="https://github.com/">GitHub</a> with:</p>
<pre><code class="language-r"># install.packages("pak")
pak::pak("tidyverse/elmer")
</code></pre>
<h2>Providers</h2>
<p>elmer supports a wide variety of model providers:</p>
<ul>
<li>Anthropic’s Claude: <code>chat_claude()</code>.</li>
<li>AWS Bedrock: <code>chat_bedrock()</code>.</li>
<li>Azure OpenAI: <code>chat_azure()</code>.</li>
<li>Databricks: <code>chat_databricks()</code>.</li>
<li>GitHub model marketplace: <code>chat_github()</code>.</li>
<li>Google Gemini: <code>chat_gemini()</code>.</li>
<li>Groq: <code>chat_groq()</code>.</li>
<li>Ollama: <code>chat_ollama()</code>.</li>
<li>OpenAI: <code>chat_openai()</code>.</li>
<li>perplexity.ai: <code>chat_perplexity()</code>.</li>
<li>Snowflake Cortex: <code>chat_cortex()</code>.</li>
</ul>
<h2>Model choice</h2>
<p>If you’re using elmer inside your organisation, you’ll be limited to what your org allows, which is likely to be one provided by a big cloud provider, e.g. <code>chat_azure()</code>, <code>chat_bedrock()</code>, <code>chat_databricks()</code>, or <code>chat_snowflake()</code>. If you’re using elmer for your own personal exploration, you have a lot more freedom so we have a few recommendations to help you get started:</p>
<ul>
<li> <p><code>chat_openai()</code> or <code>chat_claude()</code> are both good places to start. <code>chat_openai()</code> defaults to <strong>GPT-4o</strong>, but you can use <code>model = "gpt-4o-mini"</code> for a cheaper lower-quality model, or <code>model = "o1-mini"</code> for more complex reasoning. <code>chat_claude()</code> is similarly good; it defaults to <strong>Claude 3.5 Sonnet</strong> which we have found to be particularly good at writing code.</p> </li>
<li> <p><code>chat_gemini()</code> is great for large prompt, because it has a much larger context window than other models. It allows up to 1 million tokens, compared to Claude 3.5 Sonnet’s 200k and GPT-4o’s 128k.</p> </li>
<li> <p><code>chat_ollama()</code>, which uses <a href="https://ollama.com">Ollama</a>, allows you to run models on your own computer. The biggest models you can run locally aren’t as good as the state of the art hosted models, but they also don’t share your data and are effectively free.</p> </li>
</ul>
<h2>Using elmer</h2>
<p>You can work with elmer in several different ways, depending on whether you are working interactively or programmatically. They all start with creating a new chat object:</p>
<pre><code class="language-r">library(elmer)
chat <- chat_openai(
model = "gpt-4o-mini",
system_prompt = "You are a friendly but terse assistant.",
)
</code></pre>
<p>Chat objects are stateful <a href="https://r6.r-lib.org">R6 objects</a>: they retain the context of the conversation, so each new query can build on the previous ones, and you call their methods with <code>$</code>.</p>
<h3>Interactive chat console</h3>
<p>The most interactive and least programmatic way of using elmer is to chat directly in your R console or browser with <code>live_console(chat)</code> or <code>live_browser()</code>:</p>
<pre><code class="language-r">live_console(chat)
#> ╔════════════════════════════════════════════════════════╗
#> ║ Entering chat console. Use """ for multi-line input. ║
#> ║ Press Ctrl+C to quit. ║
#> ╚════════════════════════════════════════════════════════╝
#> >>> Who were the original creators of R?
#> R was originally created by Ross Ihaka and Robert Gentleman at the University of
#> Auckland, New Zealand.
#>
#> >>> When was that?
#> R was initially released in 1995. Development began a few years prior to that,
#> in the early 1990s.
</code></pre>
<p>Keep in mind that the chat object retains state, so when you enter the chat console, any previous interactions with that chat object are still part of the conversation, and any interactions you have in the chat console will persist after you exit back to the R prompt. This is true regardless of which of the various chat functions you use.</p>
<h3>Interactive method call</h3>
<p>The second most interactive way to chat is to call the <code>chat()</code> method:</p>
<pre><code class="language-r">chat$chat("What preceding languages most influenced R?")
#> R was primarily influenced by the S programming language, particularly S-PLUS.
#> Other languages that had an impact include Scheme and various data analysis
#> languages.
</code></pre>
<p>If you initialize the chat object in the global environment, the <code>chat</code> method will stream the response to the console as it arrives. When the entire response is received, it is also returned as a character vector (but invisibly, so it’s not printed twice). This mode is useful when you want to see the response as it arrives, but you don’t want to enter the chat console.</p>
<p>If you want to ask a question about an image, you can pass one or more additional input arguments using <code>content_image_file()</code> and/or <code>content_image_url()</code>:</p>
<pre><code class="language-r">chat$chat(
content_image_url("https://www.r-project.org/Rlogo.png"),
"Can you explain this logo?"
)
#> The logo of R features a stylized letter "R" in blue, enclosed in an oval
#> shape that resembles the letter "O," signifying the programming language's
#> name. The design conveys a modern and professional look, reflecting its use
#> in statistical computing and data analysis. The blue color often represents
#> trust and reliability, which aligns with R's role in data science.
</code></pre>
<h3>Programmatic chat</h3>
<p>The most programmataic way to chat is to create the chat object inside a function, where live streaming is automatically suppressed and <code>$chat()</code> returns the result as a string:</p>
<pre><code class="language-r">my_function <- function() {
chat <- chat_openai(
model = "gpt-4o-mini",
system_prompt = "You are a friendly but terse assistant.",
)
chat$chat("Is R a functional programming language?")
}
my_function()
#> [1] "Yes, R supports functional programming concepts. It allows functions to
#> be first-class objects, supports higher-order functions, and encourages the
#> use of functions as core components of code. However, it also supports
#> procedural and object-oriented programming styles."
</code></pre>
<p>If needed, you can manually control this behaviour with the <code>echo</code> argument.</p>
<p>This mode is useful for programming with elmer, when the result is either not intended for human consumption or when you want to process the response before displaying it.</p>
<h2>Learning more</h2>
<p>elmer comes with a bunch of vignettes to help you learn more:</p>
<ul>
<li>Learn key vocabulary and see example use cases in <code>vignette("elmer")</code>.</li>
<li>Learn how to design your prompt in <code>vignette("prompt-design")</code>.</li>
<li>Learn about tool/function calling in <code>vignette("tool-calling")</code>.</li>
<li>Learn how to extract structured data in <code>vignette("structured-data")</code>.</li>
<li>Learn about streaming and async APIs in <code>vignette("streaming-async")</code>.</li>
</ul>
+
+
\ No newline at end of file
diff --git a/racket/daily/index.xml b/racket/daily/index.xml
index 5c2948f9ae0..5872af7a625 100644
--- a/racket/daily/index.xml
+++ b/racket/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Racket Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:49Z
+ 2024-12-01T01:38:09Z
Daily Trending of Racket in GitHub
\ No newline at end of file
diff --git a/racket/monthly/index.xml b/racket/monthly/index.xml
new file mode 100644
index 00000000000..02dfc673694
--- /dev/null
+++ b/racket/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Racket Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:29Z
+ Monthly Trending of Racket in GitHub
+
+
\ No newline at end of file
diff --git a/racket/weekly/index.xml b/racket/weekly/index.xml
new file mode 100644
index 00000000000..a04bec7129e
--- /dev/null
+++ b/racket/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Racket Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:55Z
+ Weekly Trending of Racket in GitHub
+
+
\ No newline at end of file
diff --git a/ragel/daily/index.xml b/ragel/daily/index.xml
index c4297ed34b6..ee8d2a3f817 100644
--- a/ragel/daily/index.xml
+++ b/ragel/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ragel Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:49Z
+ 2024-12-01T01:38:09Z
Daily Trending of Ragel in GitHub
\ No newline at end of file
diff --git a/ragel/monthly/index.xml b/ragel/monthly/index.xml
new file mode 100644
index 00000000000..5af3969fb9a
--- /dev/null
+++ b/ragel/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ragel Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:29Z
+ Monthly Trending of Ragel in GitHub
+
+
\ No newline at end of file
diff --git a/ragel/weekly/index.xml b/ragel/weekly/index.xml
new file mode 100644
index 00000000000..3891d0e3ba1
--- /dev/null
+++ b/ragel/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ragel Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:48:56Z
+ Weekly Trending of Ragel in GitHub
+
+
\ No newline at end of file
diff --git a/raku/daily/index.xml b/raku/daily/index.xml
index 25121488238..371abc10178 100644
--- a/raku/daily/index.xml
+++ b/raku/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Raku Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:53Z
+ 2024-12-01T01:38:14Z
Daily Trending of Raku in GitHub
\ No newline at end of file
diff --git a/raku/monthly/index.xml b/raku/monthly/index.xml
new file mode 100644
index 00000000000..a72007eaccd
--- /dev/null
+++ b/raku/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Raku Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:33Z
+ Monthly Trending of Raku in GitHub
+
+
\ No newline at end of file
diff --git a/raku/weekly/index.xml b/raku/weekly/index.xml
new file mode 100644
index 00000000000..2238b93b7da
--- /dev/null
+++ b/raku/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Raku Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:02Z
+ Weekly Trending of Raku in GitHub
+
+
\ No newline at end of file
diff --git a/raml/daily/index.xml b/raml/daily/index.xml
index ef1d12515a1..c825626c7c9 100644
--- a/raml/daily/index.xml
+++ b/raml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RAML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:52Z
+ 2024-12-01T01:38:14Z
Daily Trending of RAML in GitHub
\ No newline at end of file
diff --git a/raml/monthly/index.xml b/raml/monthly/index.xml
new file mode 100644
index 00000000000..4bf849e75bc
--- /dev/null
+++ b/raml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RAML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:32Z
+ Monthly Trending of RAML in GitHub
+
+
\ No newline at end of file
diff --git a/raml/weekly/index.xml b/raml/weekly/index.xml
new file mode 100644
index 00000000000..7693d1f622b
--- /dev/null
+++ b/raml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RAML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:01Z
+ Weekly Trending of RAML in GitHub
+
+
\ No newline at end of file
diff --git a/rascal/daily/index.xml b/rascal/daily/index.xml
index d86950562c6..05e9cd313b6 100644
--- a/rascal/daily/index.xml
+++ b/rascal/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Rascal Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:53Z
+ 2024-12-01T01:38:13Z
Daily Trending of Rascal in GitHub
\ No newline at end of file
diff --git a/rascal/monthly/index.xml b/rascal/monthly/index.xml
new file mode 100644
index 00000000000..e0b538d2a5f
--- /dev/null
+++ b/rascal/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rascal Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:33Z
+ Monthly Trending of Rascal in GitHub
+
+
\ No newline at end of file
diff --git a/rascal/weekly/index.xml b/rascal/weekly/index.xml
new file mode 100644
index 00000000000..d72b2652b1a
--- /dev/null
+++ b/rascal/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rascal Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:01Z
+ Weekly Trending of Rascal in GitHub
+
+
\ No newline at end of file
diff --git a/raw-token-data/daily/index.xml b/raw-token-data/daily/index.xml
index 7bfa4a086c1..bb087b23ad9 100644
--- a/raw-token-data/daily/index.xml
+++ b/raw-token-data/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Raw token data Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:52Z
+ 2024-12-01T01:38:14Z
Daily Trending of Raw token data in GitHub
\ No newline at end of file
diff --git a/raw-token-data/monthly/index.xml b/raw-token-data/monthly/index.xml
new file mode 100644
index 00000000000..d8f05855f85
--- /dev/null
+++ b/raw-token-data/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Raw token data Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:33Z
+ Monthly Trending of Raw token data in GitHub
+
+
\ No newline at end of file
diff --git a/raw-token-data/weekly/index.xml b/raw-token-data/weekly/index.xml
new file mode 100644
index 00000000000..b1e5af3f377
--- /dev/null
+++ b/raw-token-data/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Raw token data Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:02Z
+ Weekly Trending of Raw token data in GitHub
+
+
\ No newline at end of file
diff --git a/rdoc/daily/index.xml b/rdoc/daily/index.xml
index addfdbd7ded..cb9beba0d95 100644
--- a/rdoc/daily/index.xml
+++ b/rdoc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RDoc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:54Z
+ 2024-12-01T01:38:15Z
Daily Trending of RDoc in GitHub
\ No newline at end of file
diff --git a/rdoc/monthly/index.xml b/rdoc/monthly/index.xml
new file mode 100644
index 00000000000..368bd18ab30
--- /dev/null
+++ b/rdoc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RDoc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:34Z
+ Monthly Trending of RDoc in GitHub
+
+
\ No newline at end of file
diff --git a/rdoc/weekly/index.xml b/rdoc/weekly/index.xml
new file mode 100644
index 00000000000..b3a69dd09db
--- /dev/null
+++ b/rdoc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RDoc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:04Z
+ Weekly Trending of RDoc in GitHub
+
+
\ No newline at end of file
diff --git a/readline-config/daily/index.xml b/readline-config/daily/index.xml
index 987bc256c33..25edef1d090 100644
--- a/readline-config/daily/index.xml
+++ b/readline-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Readline Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:54Z
+ 2024-12-01T01:38:16Z
Daily Trending of Readline Config in GitHub
\ No newline at end of file
diff --git a/readline-config/monthly/index.xml b/readline-config/monthly/index.xml
new file mode 100644
index 00000000000..8f52f09b8bd
--- /dev/null
+++ b/readline-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Readline Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:34Z
+ Monthly Trending of Readline Config in GitHub
+
+
\ No newline at end of file
diff --git a/readline-config/weekly/index.xml b/readline-config/weekly/index.xml
new file mode 100644
index 00000000000..4cb2aca9f70
--- /dev/null
+++ b/readline-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Readline Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:03Z
+ Weekly Trending of Readline Config in GitHub
+
+
\ No newline at end of file
diff --git a/realbasic/daily/index.xml b/realbasic/daily/index.xml
index f1bcfc328a5..fc0592ce866 100644
--- a/realbasic/daily/index.xml
+++ b/realbasic/daily/index.xml
@@ -1,7 +1,7 @@
GitHub REALbasic Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:55Z
+ 2024-12-01T01:38:15Z
Daily Trending of REALbasic in GitHub
\ No newline at end of file
diff --git a/realbasic/monthly/index.xml b/realbasic/monthly/index.xml
new file mode 100644
index 00000000000..9cf11485725
--- /dev/null
+++ b/realbasic/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub REALbasic Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:35Z
+ Monthly Trending of REALbasic in GitHub
+
+
\ No newline at end of file
diff --git a/realbasic/weekly/index.xml b/realbasic/weekly/index.xml
new file mode 100644
index 00000000000..b095ab1505a
--- /dev/null
+++ b/realbasic/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub REALbasic Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:03Z
+ Weekly Trending of REALbasic in GitHub
+
+
\ No newline at end of file
diff --git a/reason/daily/index.xml b/reason/daily/index.xml
index 8d1100d1f30..f5a262b4611 100644
--- a/reason/daily/index.xml
+++ b/reason/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Reason Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:56Z
+ 2024-12-01T01:38:17Z
Daily Trending of Reason in GitHub
\ No newline at end of file
diff --git a/reason/monthly/index.xml b/reason/monthly/index.xml
new file mode 100644
index 00000000000..5c0e3078c9b
--- /dev/null
+++ b/reason/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Reason Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:36Z
+ Monthly Trending of Reason in GitHub
+
+
\ No newline at end of file
diff --git a/reason/weekly/index.xml b/reason/weekly/index.xml
new file mode 100644
index 00000000000..4eeb0e0c296
--- /dev/null
+++ b/reason/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Reason Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:05Z
+ Weekly Trending of Reason in GitHub
+
+
\ No newline at end of file
diff --git a/rebol/daily/index.xml b/rebol/daily/index.xml
index ad1a8d28a6e..bc2f4fcb713 100644
--- a/rebol/daily/index.xml
+++ b/rebol/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Rebol Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:56Z
+ 2024-12-01T01:38:16Z
Daily Trending of Rebol in GitHub
\ No newline at end of file
diff --git a/rebol/monthly/index.xml b/rebol/monthly/index.xml
new file mode 100644
index 00000000000..99460ffa658
--- /dev/null
+++ b/rebol/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rebol Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:36Z
+ Monthly Trending of Rebol in GitHub
+
+
\ No newline at end of file
diff --git a/rebol/weekly/index.xml b/rebol/weekly/index.xml
new file mode 100644
index 00000000000..a09152e3386
--- /dev/null
+++ b/rebol/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rebol Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:05Z
+ Weekly Trending of Rebol in GitHub
+
+
\ No newline at end of file
diff --git a/record-jar/daily/index.xml b/record-jar/daily/index.xml
index 15a7cf4d758..a653345ce30 100644
--- a/record-jar/daily/index.xml
+++ b/record-jar/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Record Jar Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:56Z
+ 2024-12-01T01:38:17Z
Daily Trending of Record Jar in GitHub
\ No newline at end of file
diff --git a/record-jar/monthly/index.xml b/record-jar/monthly/index.xml
new file mode 100644
index 00000000000..02904e16588
--- /dev/null
+++ b/record-jar/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Record Jar Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:37Z
+ Monthly Trending of Record Jar in GitHub
+
+
\ No newline at end of file
diff --git a/record-jar/weekly/index.xml b/record-jar/weekly/index.xml
new file mode 100644
index 00000000000..5c1682a2deb
--- /dev/null
+++ b/record-jar/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Record Jar Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:04Z
+ Weekly Trending of Record Jar in GitHub
+
+
\ No newline at end of file
diff --git a/red/daily/index.xml b/red/daily/index.xml
index a7b59af6f4e..a22b4493279 100644
--- a/red/daily/index.xml
+++ b/red/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Red Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:57Z
+ 2024-12-01T01:38:19Z
Daily Trending of Red in GitHub
\ No newline at end of file
diff --git a/red/monthly/index.xml b/red/monthly/index.xml
new file mode 100644
index 00000000000..87ac445adc6
--- /dev/null
+++ b/red/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Red Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:38Z
+ Monthly Trending of Red in GitHub
+
+
\ No newline at end of file
diff --git a/red/weekly/index.xml b/red/weekly/index.xml
new file mode 100644
index 00000000000..52c2d678c06
--- /dev/null
+++ b/red/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Red Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:06Z
+ Weekly Trending of Red in GitHub
+
+
\ No newline at end of file
diff --git a/redcode/daily/index.xml b/redcode/daily/index.xml
index 346a60ef261..6e630621801 100644
--- a/redcode/daily/index.xml
+++ b/redcode/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Redcode Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:57Z
+ 2024-12-01T01:38:19Z
Daily Trending of Redcode in GitHub
\ No newline at end of file
diff --git a/redcode/monthly/index.xml b/redcode/monthly/index.xml
new file mode 100644
index 00000000000..bd0be01c039
--- /dev/null
+++ b/redcode/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Redcode Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:37Z
+ Monthly Trending of Redcode in GitHub
+
+
\ No newline at end of file
diff --git a/redcode/weekly/index.xml b/redcode/weekly/index.xml
new file mode 100644
index 00000000000..b6f8cc76c33
--- /dev/null
+++ b/redcode/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Redcode Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:07Z
+ Weekly Trending of Redcode in GitHub
+
+
\ No newline at end of file
diff --git a/redirect-rules/daily/index.xml b/redirect-rules/daily/index.xml
index 991c692b8f8..6894a90b3d3 100644
--- a/redirect-rules/daily/index.xml
+++ b/redirect-rules/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Redirect Rules Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:58Z
+ 2024-12-01T01:38:18Z
Daily Trending of Redirect Rules in GitHub
\ No newline at end of file
diff --git a/redirect-rules/monthly/index.xml b/redirect-rules/monthly/index.xml
new file mode 100644
index 00000000000..2a615426e3e
--- /dev/null
+++ b/redirect-rules/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Redirect Rules Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:38Z
+ Monthly Trending of Redirect Rules in GitHub
+
+
\ No newline at end of file
diff --git a/redirect-rules/weekly/index.xml b/redirect-rules/weekly/index.xml
new file mode 100644
index 00000000000..3fcfc0ec67f
--- /dev/null
+++ b/redirect-rules/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Redirect Rules Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:07Z
+ Weekly Trending of Redirect Rules in GitHub
+
+
\ No newline at end of file
diff --git a/regular-expression/daily/index.xml b/regular-expression/daily/index.xml
index 6265c0d9f18..9b779d3a7b3 100644
--- a/regular-expression/daily/index.xml
+++ b/regular-expression/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Regular Expression Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:58Z
+ 2024-12-01T01:38:18Z
Daily Trending of Regular Expression in GitHub
\ No newline at end of file
diff --git a/regular-expression/monthly/index.xml b/regular-expression/monthly/index.xml
new file mode 100644
index 00000000000..6e4e4a6a634
--- /dev/null
+++ b/regular-expression/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Regular Expression Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:38Z
+ Monthly Trending of Regular Expression in GitHub
+
+
\ No newline at end of file
diff --git a/regular-expression/weekly/index.xml b/regular-expression/weekly/index.xml
new file mode 100644
index 00000000000..98231759262
--- /dev/null
+++ b/regular-expression/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Regular Expression Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:06Z
+ Weekly Trending of Regular Expression in GitHub
+
+
\ No newline at end of file
diff --git a/ren'py/daily/index.xml b/ren'py/daily/index.xml
index c373e2e6963..d4ecdb01a07 100644
--- a/ren'py/daily/index.xml
+++ b/ren'py/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ren'Py Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:59Z
+ 2024-12-01T01:38:21Z
Daily Trending of Ren'Py in GitHub
\ No newline at end of file
diff --git a/ren'py/monthly/index.xml b/ren'py/monthly/index.xml
new file mode 100644
index 00000000000..406efe84c79
--- /dev/null
+++ b/ren'py/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ren'Py Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:40Z
+ Monthly Trending of Ren'Py in GitHub
+
+
\ No newline at end of file
diff --git a/ren'py/weekly/index.xml b/ren'py/weekly/index.xml
new file mode 100644
index 00000000000..dbc1929d3b8
--- /dev/null
+++ b/ren'py/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ren'Py Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:08Z
+ Weekly Trending of Ren'Py in GitHub
+
+
\ No newline at end of file
diff --git a/renderscript/daily/index.xml b/renderscript/daily/index.xml
index bcd2aa11ed0..12c4d5d5f34 100644
--- a/renderscript/daily/index.xml
+++ b/renderscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RenderScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:59Z
+ 2024-12-01T01:38:20Z
Daily Trending of RenderScript in GitHub
\ No newline at end of file
diff --git a/renderscript/monthly/index.xml b/renderscript/monthly/index.xml
new file mode 100644
index 00000000000..c20e99c7aca
--- /dev/null
+++ b/renderscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RenderScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:39Z
+ Monthly Trending of RenderScript in GitHub
+
+
\ No newline at end of file
diff --git a/renderscript/weekly/index.xml b/renderscript/weekly/index.xml
new file mode 100644
index 00000000000..3c2c59425e0
--- /dev/null
+++ b/renderscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RenderScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:07Z
+ Weekly Trending of RenderScript in GitHub
+
+
\ No newline at end of file
diff --git a/rescript/daily/index.xml b/rescript/daily/index.xml
index 8c013c1a86f..ea3b842d7d2 100644
--- a/rescript/daily/index.xml
+++ b/rescript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ReScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:34:59Z
+ 2024-12-01T01:38:20Z
Daily Trending of ReScript in GitHub
\ No newline at end of file
diff --git a/rescript/monthly/index.xml b/rescript/monthly/index.xml
new file mode 100644
index 00000000000..e3df2a44042
--- /dev/null
+++ b/rescript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ReScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:39Z
+ Monthly Trending of ReScript in GitHub
+
+
\ No newline at end of file
diff --git a/rescript/weekly/index.xml b/rescript/weekly/index.xml
new file mode 100644
index 00000000000..00b58bd0771
--- /dev/null
+++ b/rescript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ReScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:08Z
+ Weekly Trending of ReScript in GitHub
+
+
\ No newline at end of file
diff --git a/restructuredtext/daily/index.xml b/restructuredtext/daily/index.xml
index ffd30e9f01c..52e34fd6896 100644
--- a/restructuredtext/daily/index.xml
+++ b/restructuredtext/daily/index.xml
@@ -1,7 +1,7 @@
GitHub reStructuredText Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:00Z
+ 2024-12-01T01:38:20Z
Daily Trending of reStructuredText in GitHub
\ No newline at end of file
diff --git a/restructuredtext/monthly/index.xml b/restructuredtext/monthly/index.xml
new file mode 100644
index 00000000000..7977fcd8785
--- /dev/null
+++ b/restructuredtext/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub reStructuredText Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:40Z
+ Monthly Trending of reStructuredText in GitHub
+
+
\ No newline at end of file
diff --git a/restructuredtext/weekly/index.xml b/restructuredtext/weekly/index.xml
new file mode 100644
index 00000000000..a99de93952f
--- /dev/null
+++ b/restructuredtext/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub reStructuredText Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:09Z
+ Weekly Trending of reStructuredText in GitHub
+
+
\ No newline at end of file
diff --git a/rexx/daily/index.xml b/rexx/daily/index.xml
index 1dae8fff333..2828fab495e 100644
--- a/rexx/daily/index.xml
+++ b/rexx/daily/index.xml
@@ -1,7 +1,7 @@
GitHub REXX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:01Z
+ 2024-12-01T01:38:22Z
Daily Trending of REXX in GitHub
\ No newline at end of file
diff --git a/rexx/monthly/index.xml b/rexx/monthly/index.xml
new file mode 100644
index 00000000000..8323ecc64a9
--- /dev/null
+++ b/rexx/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub REXX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:41Z
+ Monthly Trending of REXX in GitHub
+
+
\ No newline at end of file
diff --git a/rexx/weekly/index.xml b/rexx/weekly/index.xml
new file mode 100644
index 00000000000..ab84610e550
--- /dev/null
+++ b/rexx/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub REXX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:10Z
+ Weekly Trending of REXX in GitHub
+
+
\ No newline at end of file
diff --git a/rich-text-format/daily/index.xml b/rich-text-format/daily/index.xml
index 354a9868fec..5648a94e06d 100644
--- a/rich-text-format/daily/index.xml
+++ b/rich-text-format/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Rich Text Format Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:08Z
+ 2024-12-01T01:38:22Z
Daily Trending of Rich Text Format in GitHub
\ No newline at end of file
diff --git a/rich-text-format/monthly/index.xml b/rich-text-format/monthly/index.xml
new file mode 100644
index 00000000000..b71c885e2c5
--- /dev/null
+++ b/rich-text-format/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rich Text Format Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:42Z
+ Monthly Trending of Rich Text Format in GitHub
+
+
\ No newline at end of file
diff --git a/ring/daily/index.xml b/ring/daily/index.xml
index 21375f8d2e5..595c6a34949 100644
--- a/ring/daily/index.xml
+++ b/ring/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ring Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:01Z
+ 2024-12-01T01:38:22Z
Daily Trending of Ring in GitHub
\ No newline at end of file
diff --git a/ring/monthly/index.xml b/ring/monthly/index.xml
new file mode 100644
index 00000000000..f3481f92492
--- /dev/null
+++ b/ring/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ring Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:41Z
+ Monthly Trending of Ring in GitHub
+
+
\ No newline at end of file
diff --git a/ring/weekly/index.xml b/ring/weekly/index.xml
new file mode 100644
index 00000000000..6378b22d571
--- /dev/null
+++ b/ring/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Ring Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:09Z
+ Weekly Trending of Ring in GitHub
+
+
\ No newline at end of file
diff --git a/riot/daily/index.xml b/riot/daily/index.xml
index 85d3997cb6e..8140047b894 100644
--- a/riot/daily/index.xml
+++ b/riot/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Riot Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:10Z
+ 2024-12-01T01:38:24Z
Daily Trending of Riot in GitHub
\ No newline at end of file
diff --git a/riot/monthly/index.xml b/riot/monthly/index.xml
new file mode 100644
index 00000000000..cf99cfda323
--- /dev/null
+++ b/riot/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Riot Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:43Z
+ Monthly Trending of Riot in GitHub
+
+
\ No newline at end of file
diff --git a/riot/weekly/index.xml b/riot/weekly/index.xml
new file mode 100644
index 00000000000..2a325e2076d
--- /dev/null
+++ b/riot/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Riot Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:21Z
+ Weekly Trending of Riot in GitHub
+
+
\ No newline at end of file
diff --git a/rmarkdown/daily/index.xml b/rmarkdown/daily/index.xml
index d4f4fb8374e..0023d03568d 100644
--- a/rmarkdown/daily/index.xml
+++ b/rmarkdown/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RMarkdown Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:09Z
+ 2024-12-01T01:38:23Z
Daily Trending of RMarkdown in GitHub
\ No newline at end of file
diff --git a/rmarkdown/monthly/index.xml b/rmarkdown/monthly/index.xml
new file mode 100644
index 00000000000..8cb158217cb
--- /dev/null
+++ b/rmarkdown/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RMarkdown Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:42Z
+ Monthly Trending of RMarkdown in GitHub
+
+
\ No newline at end of file
diff --git a/rmarkdown/weekly/index.xml b/rmarkdown/weekly/index.xml
new file mode 100644
index 00000000000..b19aeab7e49
--- /dev/null
+++ b/rmarkdown/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RMarkdown Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:21Z
+ Weekly Trending of RMarkdown in GitHub
+
+
\ No newline at end of file
diff --git a/robotframework/daily/index.xml b/robotframework/daily/index.xml
index c5d38b4f1a3..c0a28476bba 100644
--- a/robotframework/daily/index.xml
+++ b/robotframework/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RobotFramework Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:09Z
+ 2024-12-01T01:38:24Z
Daily Trending of RobotFramework in GitHub
\ No newline at end of file
diff --git a/robotframework/monthly/index.xml b/robotframework/monthly/index.xml
new file mode 100644
index 00000000000..da6d2d55f0b
--- /dev/null
+++ b/robotframework/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RobotFramework Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:43Z
+ Monthly Trending of RobotFramework in GitHub
+
+
\ No newline at end of file
diff --git a/robotframework/weekly/index.xml b/robotframework/weekly/index.xml
new file mode 100644
index 00000000000..06dbcaa40e3
--- /dev/null
+++ b/robotframework/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RobotFramework Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:21Z
+ Weekly Trending of RobotFramework in GitHub
+
+
\ No newline at end of file
diff --git a/robots.txt/daily/index.xml b/robots.txt/daily/index.xml
index e5ebc64190d..8b8aa55cee7 100644
--- a/robots.txt/daily/index.xml
+++ b/robots.txt/daily/index.xml
@@ -1,7 +1,7 @@
GitHub robots.txt Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:08Z
+ 2024-12-01T01:38:23Z
Daily Trending of robots.txt in GitHub
\ No newline at end of file
diff --git a/robots.txt/monthly/index.xml b/robots.txt/monthly/index.xml
new file mode 100644
index 00000000000..37b909e0b2c
--- /dev/null
+++ b/robots.txt/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub robots.txt Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:43Z
+ Monthly Trending of robots.txt in GitHub
+
+
\ No newline at end of file
diff --git a/robots.txt/weekly/index.xml b/robots.txt/weekly/index.xml
new file mode 100644
index 00000000000..71af3029484
--- /dev/null
+++ b/robots.txt/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub robots.txt Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:20Z
+ Weekly Trending of robots.txt in GitHub
+
+
\ No newline at end of file
diff --git a/roff-manpage/daily/index.xml b/roff-manpage/daily/index.xml
index fc71178a475..368d1b6586a 100644
--- a/roff-manpage/daily/index.xml
+++ b/roff-manpage/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Roff Manpage Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:12Z
+ 2024-12-01T01:38:25Z
Daily Trending of Roff Manpage in GitHub
\ No newline at end of file
diff --git a/roff-manpage/monthly/index.xml b/roff-manpage/monthly/index.xml
new file mode 100644
index 00000000000..9c6ef7aeeec
--- /dev/null
+++ b/roff-manpage/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Roff Manpage Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:44Z
+ Monthly Trending of Roff Manpage in GitHub
+
+
\ No newline at end of file
diff --git a/roff-manpage/weekly/index.xml b/roff-manpage/weekly/index.xml
new file mode 100644
index 00000000000..fc91e91435a
--- /dev/null
+++ b/roff-manpage/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Roff Manpage Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:22Z
+ Weekly Trending of Roff Manpage in GitHub
+
+
\ No newline at end of file
diff --git a/roff/daily/index.xml b/roff/daily/index.xml
index 82c7c93a73d..cbad3edea44 100644
--- a/roff/daily/index.xml
+++ b/roff/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Roff Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:11Z
+ 2024-12-01T01:38:26Z
Daily Trending of Roff in GitHub
\ No newline at end of file
diff --git a/roff/monthly/index.xml b/roff/monthly/index.xml
new file mode 100644
index 00000000000..6452279e2cf
--- /dev/null
+++ b/roff/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Roff Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:45Z
+ Monthly Trending of Roff in GitHub
+
+
\ No newline at end of file
diff --git a/roff/weekly/index.xml b/roff/weekly/index.xml
new file mode 100644
index 00000000000..2d235dd253b
--- /dev/null
+++ b/roff/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Roff Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:23Z
+ Weekly Trending of Roff in GitHub
+
+
\ No newline at end of file
diff --git a/rouge/daily/index.xml b/rouge/daily/index.xml
index f7bf932532f..d98a71ea483 100644
--- a/rouge/daily/index.xml
+++ b/rouge/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Rouge Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:13Z
+ 2024-12-01T01:38:27Z
Daily Trending of Rouge in GitHub
\ No newline at end of file
diff --git a/rouge/monthly/index.xml b/rouge/monthly/index.xml
new file mode 100644
index 00000000000..b1bd1b81abd
--- /dev/null
+++ b/rouge/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rouge Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:46Z
+ Monthly Trending of Rouge in GitHub
+
+
\ No newline at end of file
diff --git a/rouge/weekly/index.xml b/rouge/weekly/index.xml
new file mode 100644
index 00000000000..7293241fe8e
--- /dev/null
+++ b/rouge/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Rouge Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:24Z
+ Weekly Trending of Rouge in GitHub
+
+
\ No newline at end of file
diff --git a/rpc/daily/index.xml b/rpc/daily/index.xml
index 59b3704c75b..3159f660694 100644
--- a/rpc/daily/index.xml
+++ b/rpc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RPC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:12Z
+ 2024-12-01T01:38:27Z
Daily Trending of RPC in GitHub
\ No newline at end of file
diff --git a/rpc/monthly/index.xml b/rpc/monthly/index.xml
new file mode 100644
index 00000000000..305a6bba981
--- /dev/null
+++ b/rpc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:47Z
+ Monthly Trending of RPC in GitHub
+
+
\ No newline at end of file
diff --git a/rpc/weekly/index.xml b/rpc/weekly/index.xml
new file mode 100644
index 00000000000..1a076863bbf
--- /dev/null
+++ b/rpc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:25Z
+ Weekly Trending of RPC in GitHub
+
+
\ No newline at end of file
diff --git a/rpgle/daily/index.xml b/rpgle/daily/index.xml
index c85826c3b07..074a2717750 100644
--- a/rpgle/daily/index.xml
+++ b/rpgle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RPGLE Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:13Z
+ 2024-12-01T01:38:27Z
Daily Trending of RPGLE in GitHub
\ No newline at end of file
diff --git a/rpgle/monthly/index.xml b/rpgle/monthly/index.xml
new file mode 100644
index 00000000000..0633e28616e
--- /dev/null
+++ b/rpgle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPGLE Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:46Z
+ Monthly Trending of RPGLE in GitHub
+
+
\ No newline at end of file
diff --git a/rpgle/weekly/index.xml b/rpgle/weekly/index.xml
new file mode 100644
index 00000000000..289000646e3
--- /dev/null
+++ b/rpgle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPGLE Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:24Z
+ Weekly Trending of RPGLE in GitHub
+
+
\ No newline at end of file
diff --git a/rpm-spec/daily/index.xml b/rpm-spec/daily/index.xml
index f02bf73a202..dff92b73409 100644
--- a/rpm-spec/daily/index.xml
+++ b/rpm-spec/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RPM Spec Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:14Z
+ 2024-12-01T01:38:29Z
Daily Trending of RPM Spec in GitHub
\ No newline at end of file
diff --git a/rpm-spec/monthly/index.xml b/rpm-spec/monthly/index.xml
new file mode 100644
index 00000000000..60ae50dc91e
--- /dev/null
+++ b/rpm-spec/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPM Spec Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:48Z
+ Monthly Trending of RPM Spec in GitHub
+
+
\ No newline at end of file
diff --git a/rpm-spec/weekly/index.xml b/rpm-spec/weekly/index.xml
new file mode 100644
index 00000000000..4fc0875f06f
--- /dev/null
+++ b/rpm-spec/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RPM Spec Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:26Z
+ Weekly Trending of RPM Spec in GitHub
+
+
\ No newline at end of file
diff --git a/ruby/daily/index.xml b/ruby/daily/index.xml
index f17dced35b9..215cbc5cb8a 100644
--- a/ruby/daily/index.xml
+++ b/ruby/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Ruby Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:20Z
+ 2024-12-01T01:38:38Z
Daily Trending of Ruby in GitHub
\ No newline at end of file
diff --git a/ruby/monthly/index.xml b/ruby/monthly/index.xml
new file mode 100644
index 00000000000..0112cc7ae75
--- /dev/null
+++ b/ruby/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Ruby Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:53Z
+ Monthly Trending of Ruby in GitHub
+
+
+ puma/puma
+ 2024-12-01T01:57:53Z
+ tag:github.com,2024-12-01:/puma/puma
+
+ <p>A Ruby/Rack web server built for parallelism</p><hr><p align="center"> <img src="https://puma.io/images/logos/puma-logo-large.png"> </p>
<h1>Puma: A Ruby Web Server Built For Parallelism</h1>
<p><a href="https://github.com/puma/puma/actions?query=workflow%3ATests"><img src="https://github.com/puma/puma/workflows/Tests/badge.svg?branch=master" alt="Actions"></a> <a href="https://codeclimate.com/github/puma/puma"><img src="https://codeclimate.com/github/puma/puma.svg?sanitize=true" alt="Code Climate"></a> <a href="https://stackoverflow.com/questions/tagged/puma"><img src="https://img.shields.io/badge/stackoverflow-Puma-blue.svg?sanitize=true" alt="StackOverflow"></a></p>
<p>Puma is a <strong>simple, fast, multi-threaded, and highly parallel HTTP 1.1 server for Ruby/Rack applications</strong>.</p>
<h2>Built For Speed & Parallelism</h2>
<p>Puma is a server for <a href="https://github.com/rack/rack">Rack</a>-powered HTTP applications written in Ruby. It is:</p>
<ul>
<li><strong>Multi-threaded</strong>. Each request is served in a separate thread. This helps you serve more requests per second with less memory use.</li>
<li><strong>Multi-process</strong>. "Pre-forks" in cluster mode, using less memory per-process thanks to copy-on-write memory.</li>
<li><strong>Standalone</strong>. With SSL support, zero-downtime rolling restarts and a built-in request bufferer, you can deploy Puma without any reverse proxy.</li>
<li><strong>Battle-tested</strong>. Our HTTP parser is inherited from Mongrel and has over 15 years of production use. Puma is currently the most popular Ruby webserver, and is the default server for Ruby on Rails.</li>
</ul>
<p>Originally designed as a server for <a href="https://github.com/rubinius/rubinius">Rubinius</a>, Puma also works well with Ruby (MRI) and JRuby.</p>
<p>On MRI, there is a Global VM Lock (GVL) that ensures only one thread can run Ruby code at a time. But if you're doing a lot of blocking IO (such as HTTP calls to external APIs like Twitter), Puma still improves MRI's throughput by allowing IO waiting to be done in parallel. Truly parallel Ruby implementations (TruffleRuby, JRuby) don't have this limitation.</p>
<h2>Quick Start</h2>
<pre><code>$ gem install puma
$ puma
</code></pre>
<p>Without arguments, puma will look for a rackup (.ru) file in working directory called <code>config.ru</code>.</p>
<h2>SSL Connection Support</h2>
<p>Puma will install/compile with support for ssl sockets, assuming OpenSSL development files are installed on the system.</p>
<p>If the system does not have OpenSSL development files installed, Puma will install/compile, but it will not allow ssl connections.</p>
<h2>Frameworks</h2>
<h3>Rails</h3>
<p>Puma is the default server for Rails, included in the generated Gemfile.</p>
<p>Start your server with the <code>rails</code> command:</p>
<pre><code>$ rails server
</code></pre>
<p>Many configuration options and Puma features are not available when using <code>rails server</code>. It is recommended that you use Puma's executable instead:</p>
<pre><code>$ bundle exec puma
</code></pre>
<h3>Sinatra</h3>
<p>You can run your Sinatra application with Puma from the command line like this:</p>
<pre><code>$ ruby app.rb -s Puma
</code></pre>
<p>In order to actually configure Puma using a config file, like <code>puma.rb</code>, however, you need to use the <code>puma</code> executable. To do this, you must add a rackup file to your Sinatra app:</p>
<pre><code class="language-ruby"># config.ru
require './app'
run Sinatra::Application
</code></pre>
<p>You can then start your application using:</p>
<pre><code>$ bundle exec puma
</code></pre>
<h2>Configuration</h2>
<p>Puma provides numerous options. Consult <code>puma -h</code> (or <code>puma --help</code>) for a full list of CLI options, or see <code>Puma::DSL</code> or <a href="https://github.com/puma/puma/raw/master/lib/puma/dsl.rb">dsl.rb</a>.</p>
<p>You can also find several configuration examples as part of the <a href="https://github.com/puma/puma/tree/master/test/config">test</a> suite.</p>
<p>For debugging purposes, you can set the environment variable <code>PUMA_LOG_CONFIG</code> with a value and the loaded configuration will be printed as part of the boot process.</p>
<h3>Thread Pool</h3>
<p>Puma uses a thread pool. You can set the minimum and maximum number of threads that are available in the pool with the <code>-t</code> (or <code>--threads</code>) flag:</p>
<pre><code>$ puma -t 8:32
</code></pre>
<p>Puma will automatically scale the number of threads, from the minimum until it caps out at the maximum, based on how much traffic is present. The current default is <code>0:16</code> and on MRI is <code>0:5</code>. Feel free to experiment, but be careful not to set the number of maximum threads to a large number, as you may exhaust resources on the system (or cause contention for the Global VM Lock, when using MRI).</p>
<p>Be aware that additionally Puma creates threads on its own for internal purposes (e.g. handling slow clients). So, even if you specify -t 1:1, expect around 7 threads created in your application.</p>
<h3>Clustered mode</h3>
<p>Puma also offers "clustered mode". Clustered mode <code>fork</code>s workers from a master process. Each child process still has its own thread pool. You can tune the number of workers with the <code>-w</code> (or <code>--workers</code>) flag:</p>
<pre><code>$ puma -t 8:32 -w 3
</code></pre>
<p>Or with the <code>WEB_CONCURRENCY</code> environment variable:</p>
<pre><code>$ WEB_CONCURRENCY=3 puma -t 8:32
</code></pre>
<p>Note that threads are still used in clustered mode, and the <code>-t</code> thread flag setting is per worker, so <code>-w 2 -t 16:16</code> will spawn 32 threads in total, with 16 in each worker process.</p>
<p>If the <code>WEB_CONCURRENCY</code> environment variable is set to <code>"auto"</code> and the <code>concurrent-ruby</code> gem is available in your application, Puma will set the worker process count to the result of <a href="https://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent.html#available_processor_count-class_method">available processors</a>.</p>
<p>For an in-depth discussion of the tradeoffs of thread and process count settings, <a href="https://github.com/puma/puma/raw/9282a8efa5a0c48e39c60d22ca70051a25df9f55/docs/kubernetes.md#workers-per-pod-and-other-config-issues">see our docs</a>.</p>
<p>In clustered mode, Puma can "preload" your application. This loads all the application code <em>prior</em> to forking. Preloading reduces total memory usage of your application via an operating system feature called <a href="https://en.wikipedia.org/wiki/Copy-on-write">copy-on-write</a>.</p>
<p>If the <code>WEB_CONCURRENCY</code> environment variable is set to a value > 1 (and <code>--prune-bundler</code> has not been specified), preloading will be enabled by default. Otherwise, you can use the <code>--preload</code> flag from the command line:</p>
<pre><code>$ puma -w 3 --preload
</code></pre>
<p>Or, if you're using a configuration file, you can use the <code>preload_app!</code> method:</p>
<pre><code class="language-ruby"># config/puma.rb
workers 3
preload_app!
</code></pre>
<p>Preloading can’t be used with phased restart, since phased restart kills and restarts workers one-by-one, and preloading copies the code of master into the workers.</p>
<h4>Clustered mode hooks</h4>
<p>When using clustered mode, Puma's configuration DSL provides <code>before_fork</code> and <code>on_worker_boot</code> hooks to run code when the master process forks and child workers are booted respectively.</p>
<p>It is recommended to use these hooks with <code>preload_app!</code>, otherwise constants loaded by your application (such as <code>Rails</code>) will not be available inside the hooks.</p>
<pre><code class="language-ruby"># config/puma.rb
before_fork do
# Add code to run inside the Puma master process before it forks a worker child.
end
on_worker_boot do
# Add code to run inside the Puma worker process after forking.
end
</code></pre>
<p>In addition, there is an <code>on_refork</code> and <code>after_refork</code> hooks which are used only in <a href="https://raw.githubusercontent.com/puma/puma/master/docs/fork_worker.md"><code>fork_worker</code> mode</a>, when the worker 0 child process forks a grandchild worker:</p>
<pre><code class="language-ruby">on_refork do
# Used only when fork_worker mode is enabled. Add code to run inside the Puma worker 0
# child process before it forks a grandchild worker.
end
</code></pre>
<pre><code class="language-ruby">after_refork do
# Used only when fork_worker mode is enabled. Add code to run inside the Puma worker 0
# child process after it forks a grandchild worker.
end
</code></pre>
<p>Importantly, note the following considerations when Ruby forks a child process:</p>
<ol>
<li>File descriptors such as network sockets <strong>are</strong> copied from the parent to the forked child process. Dual-use of the same sockets by parent and child will result in I/O conflicts such as <code>SocketError</code>, <code>Errno::EPIPE</code>, and <code>EOFError</code>.</li>
<li>Background Ruby threads, including threads used by various third-party gems for connection monitoring, etc., are <strong>not</strong> copied to the child process. Often this does not cause immediate problems until a third-party connection goes down, at which point there will be no supervisor to reconnect it.</li>
</ol>
<p>Therefore, we recommend the following:</p>
<ol>
<li>If possible, do not establish any socket connections (HTTP, database connections, etc.) inside Puma's master process when booting.</li>
<li>If (1) is not possible, use <code>before_fork</code> and <code>on_refork</code> to disconnect the parent's socket connections when forking, so that they are not accidentally copied to the child process.</li>
<li>Use <code>on_worker_boot</code> to restart any background threads on the forked child.</li>
<li>Use <code>after_refork</code> to restart any background threads on the parent.</li>
</ol>
<h4>Master process lifecycle hooks</h4>
<p>Puma's configuration DSL provides master process lifecycle hooks <code>on_booted</code>, <code>on_restart</code>, and <code>on_stopped</code> which may be used to specify code blocks to run on each event:</p>
<pre><code class="language-ruby"># config/puma.rb
on_booted do
# Add code to run in the Puma master process after it boots,
# and also after a phased restart completes.
end
on_restart do
# Add code to run in the Puma master process when it receives
# a restart command but before it restarts.
end
on_stopped do
# Add code to run in the Puma master process when it receives
# a stop command but before it shuts down.
end
</code></pre>
<h3>Error handling</h3>
<p>If Puma encounters an error outside of the context of your application, it will respond with a 400/500 and a simple textual error message (see <code>Puma::Server#lowlevel_error</code> or <a href="https://github.com/puma/puma/raw/master/lib/puma/server.rb">server.rb</a>). You can specify custom behavior for this scenario. For example, you can report the error to your third-party error-tracking service (in this example, <a href="https://rollbar.com">rollbar</a>):</p>
<pre><code class="language-ruby">lowlevel_error_handler do |e, env, status|
if status == 400
message = "The server could not process the request due to an error, such as an incorrectly typed URL, malformed syntax, or a URL that contains illegal characters.\n"
else
message = "An error has occurred, and engineers have been informed. Please reload the page. If you continue to have problems, contact support@example.com\n"
Rollbar.critical(e)
end
[status, {}, [message]]
end
</code></pre>
<h3>Binding TCP / Sockets</h3>
<p>Bind Puma to a socket with the <code>-b</code> (or <code>--bind</code>) flag:</p>
<pre><code>$ puma -b tcp://127.0.0.1:9292
</code></pre>
<p>To use a UNIX Socket instead of TCP:</p>
<pre><code>$ puma -b unix:///var/run/puma.sock
</code></pre>
<p>If you need to change the permissions of the UNIX socket, just add a umask parameter:</p>
<pre><code>$ puma -b 'unix:///var/run/puma.sock?umask=0111'
</code></pre>
<p>Need a bit of security? Use SSL sockets:</p>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
</code></pre>
<h4>Self-signed SSL certificates (via the <a href="https://github.com/socketry/localhost"><code>localhost</code></a> gem, for development use):</h4>
<p>Puma supports the <a href="https://github.com/socketry/localhost"><code>localhost</code></a> gem for self-signed certificates. This is particularly useful if you want to use Puma with SSL locally, and self-signed certificates will work for your use-case. Currently, the integration can only be used in MRI.</p>
<p>Puma automatically configures SSL when the <a href="https://github.com/socketry/localhost"><code>localhost</code></a> gem is loaded in a <code>development</code> environment:</p>
<p>Add the gem to your Gemfile:</p>
<pre><code class="language-ruby">group(:development) do
gem 'localhost'
end
</code></pre>
<p>And require it implicitly using bundler:</p>
<pre><code class="language-ruby">require "bundler"
Bundler.require(:default, ENV["RACK_ENV"].to_sym)
</code></pre>
<p>Alternatively, you can require the gem in your configuration file, either <code>config/puma/development.rb</code>, <code>config/puma.rb</code>, or set via the <code>-C</code> cli option:</p>
<pre><code class="language-ruby">require 'localhost'
# configuration methods (from Puma::DSL) as needed
</code></pre>
<p>Additionally, Puma must be listening to an SSL socket:</p>
<pre><code class="language-shell">$ puma -b 'ssl://localhost:9292' -C config/use_local_host.rb
# The following options allow you to reach Puma over HTTP as well:
$ puma -b ssl://localhost:9292 -b tcp://localhost:9393 -C config/use_local_host.rb
</code></pre>
<h4>Controlling SSL Cipher Suites</h4>
<p>To use or avoid specific SSL ciphers for TLSv1.2 and below, use <code>ssl_cipher_filter</code> or <code>ssl_cipher_list</code> options.</p>
<h5>Ruby:</h5>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&ssl_cipher_filter=!aNULL:AES+SHA'
</code></pre>
<h5>JRuby:</h5>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?keystore=path_to_keystore&keystore-pass=keystore_password&ssl_cipher_list=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA'
</code></pre>
<p>To configure the available TLSv1.3 ciphersuites, use <code>ssl_ciphersuites</code> option (not available for JRuby).</p>
<h5>Ruby:</h5>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&ssl_ciphersuites=TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256'
</code></pre>
<p>See <a href="https://www.openssl.org/docs/man1.1.1/man1/ciphers.html">https://www.openssl.org/docs/man1.1.1/man1/ciphers.html</a> for cipher filter format and full list of cipher suites.</p>
<p>Disable TLS v1 with the <code>no_tlsv1</code> option:</p>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&no_tlsv1=true'
</code></pre>
<h4>Controlling OpenSSL Verification Flags</h4>
<p>To enable verification flags offered by OpenSSL, use <code>verification_flags</code> (not available for JRuby):</p>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&verification_flags=PARTIAL_CHAIN'
</code></pre>
<p>You can also set multiple verification flags (by separating them with a comma):</p>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&verification_flags=PARTIAL_CHAIN,CRL_CHECK'
</code></pre>
<p>List of available flags: <code>USE_CHECK_TIME</code>, <code>CRL_CHECK</code>, <code>CRL_CHECK_ALL</code>, <code>IGNORE_CRITICAL</code>, <code>X509_STRICT</code>, <code>ALLOW_PROXY_CERTS</code>, <code>POLICY_CHECK</code>, <code>EXPLICIT_POLICY</code>, <code>INHIBIT_ANY</code>, <code>INHIBIT_MAP</code>, <code>NOTIFY_POLICY</code>, <code>EXTENDED_CRL_SUPPORT</code>, <code>USE_DELTAS</code>, <code>CHECK_SS_SIGNATURE</code>, <code>TRUSTED_FIRST</code>, <code>SUITEB_128_LOS_ONLY</code>, <code>SUITEB_192_LOS</code>, <code>SUITEB_128_LOS</code>, <code>PARTIAL_CHAIN</code>, <code>NO_ALT_CHAINS</code>, <code>NO_CHECK_TIME</code> (see <a href="https://www.openssl.org/docs/manmaster/man3/X509_VERIFY_PARAM_set_hostflags.html#VERIFICATION-FLAGS">https://www.openssl.org/docs/manmaster/man3/X509_VERIFY_PARAM_set_hostflags.html#VERIFICATION-FLAGS</a>).</p>
<h4>Controlling OpenSSL Password Decryption</h4>
<p>To enable runtime decryption of an encrypted SSL key (not available for JRuby), use <code>key_password_command</code>:</p>
<pre><code>$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert&key_password_command=/path/to/command.sh'
</code></pre>
<p><code>key_password_command</code> must:</p>
<ol>
<li>Be executable by Puma.</li>
<li>Print the decryption password to stdout.</li>
</ol>
<p>For example:</p>
<pre><code class="language-shell">#!/bin/sh
echo "this is my password"
</code></pre>
<p><code>key_password_command</code> can be used with <code>key</code> or <code>key_pem</code>. If the key is not encrypted, the executable will not be called.</p>
<h3>Control/Status Server</h3>
<p>Puma has a built-in status and control app that can be used to query and control Puma.</p>
<pre><code>$ puma --control-url tcp://127.0.0.1:9293 --control-token foo
</code></pre>
<p>Puma will start the control server on localhost port 9293. All requests to the control server will need to include control token (in this case, <code>token=foo</code>) as a query parameter. This allows for simple authentication. Check out <code>Puma::App::Status</code> or <a href="https://github.com/puma/puma/raw/master/lib/puma/app/status.rb">status.rb</a> to see what the status app has available.</p>
<p>You can also interact with the control server via <code>pumactl</code>. This command will restart Puma:</p>
<pre><code>$ pumactl --control-url 'tcp://127.0.0.1:9293' --control-token foo restart
</code></pre>
<p>To see a list of <code>pumactl</code> options, use <code>pumactl --help</code>.</p>
<h3>Configuration File</h3>
<p>You can also provide a configuration file with the <code>-C</code> (or <code>--config</code>) flag:</p>
<pre><code>$ puma -C /path/to/config
</code></pre>
<p>If no configuration file is specified, Puma will look for a configuration file at <code>config/puma.rb</code>. If an environment is specified (via the <code>--environment</code> flag or through the <code>APP_ENV</code>, <code>RACK_ENV</code>, or <code>RAILS_ENV</code> environment variables) Puma looks for a configuration file at <code>config/puma/<environment_name>.rb</code> and then falls back to <code>config/puma.rb</code>.</p>
<p>If you want to prevent Puma from looking for a configuration file in those locations, include the <code>--no-config</code> flag:</p>
<pre><code>$ puma --no-config
# or
$ puma -C "-"
</code></pre>
<p>The other side-effects of setting the environment are whether to show stack traces (in <code>development</code> or <code>test</code>), and setting RACK_ENV may potentially affect middleware looking for this value to change their behavior. The default puma RACK_ENV value is <code>development</code>. You can see all config default values in <code>Puma::Configuration#puma_default_options</code> or <a href="https://github.com/puma/puma/raw/61c6213fbab/lib/puma/configuration.rb#L182-L204">configuration.rb</a>.</p>
<p>Check out <code>Puma::DSL</code> or <a href="https://github.com/puma/puma/raw/master/lib/puma/dsl.rb">dsl.rb</a> to see all available options.</p>
<h2>Restart</h2>
<p>Puma includes the ability to restart itself. When available (MRI, Rubinius, JRuby), Puma performs a "hot restart". This is the same functionality available in <em>Unicorn</em> and <em>NGINX</em> which keep the server sockets open between restarts. This makes sure that no pending requests are dropped while the restart is taking place.</p>
<p>For more, see the <a href="https://raw.githubusercontent.com/puma/puma/master/docs/restart.md">Restart documentation</a>.</p>
<h2>Signals</h2>
<p>Puma responds to several signals. A detailed guide to using UNIX signals with Puma can be found in the <a href="https://raw.githubusercontent.com/puma/puma/master/docs/signals.md">Signals documentation</a>.</p>
<h2>Platform Constraints</h2>
<p>Some platforms do not support all Puma features.</p>
<ul>
<li><strong>JRuby</strong>, <strong>Windows</strong>: server sockets are not seamless on restart, they must be closed and reopened. These platforms have no way to pass descriptors into a new process that is exposed to Ruby. Also, cluster mode is not supported due to a lack of fork(2).</li>
<li><strong>Windows</strong>: Cluster mode is not supported due to a lack of fork(2).</li>
<li><strong>Kubernetes</strong>: The way Kubernetes handles pod shutdowns interacts poorly with server processes implementing graceful shutdown, like Puma. See the <a href="https://raw.githubusercontent.com/puma/puma/master/docs/kubernetes.md">kubernetes section of the documentation</a> for more details.</li>
</ul>
<h2>Known Bugs</h2>
<p>For MRI versions 2.2.7, 2.2.8, 2.2.9, 2.2.10, 2.3.4 and 2.4.1, you may see <code>stream closed in another thread (IOError)</code>. It may be caused by a <a href="https://bugs.ruby-lang.org/issues/13632">Ruby bug</a>. It can be fixed with the gem <a href="https://rubygems.org/gems/stopgap_13632">https://rubygems.org/gems/stopgap_13632</a>:</p>
<pre><code class="language-ruby">if %w(2.2.7 2.2.8 2.2.9 2.2.10 2.3.4 2.4.1).include? RUBY_VERSION
begin
require 'stopgap_13632'
rescue LoadError
end
end
</code></pre>
<h2>Deployment</h2>
<ul>
<li> <p>Puma has support for Capistrano with an <a href="https://github.com/seuros/capistrano-puma">external gem</a>.</p> </li>
<li> <p>Additionally, Puma has support for built-in daemonization via the <a href="https://github.com/kigster/puma-daemon">puma-daemon</a> ruby gem. The gem restores the <code>daemonize</code> option that was removed from Puma starting version 5, but only for MRI Ruby.</p> </li>
</ul>
<p>It is common to use process monitors with Puma. Modern process monitors like systemd or rc.d provide continuous monitoring and restarts for increased reliability in production environments:</p>
<ul>
<li><a href="https://raw.githubusercontent.com/puma/puma/master/docs/jungle/rc.d/README.md">rc.d</a></li>
<li><a href="https://raw.githubusercontent.com/puma/puma/master/docs/systemd.md">systemd</a></li>
</ul>
<p>Community guides:</p>
<ul>
<li><a href="https://gist.github.com/anon987654321/4532cf8d6c59c1f43ec8973faa031103">Deploying Puma on OpenBSD using relayd and httpd</a></li>
</ul>
<h2>Community Extensions</h2>
<h3>Plugins</h3>
<ul>
<li><a href="https://github.com/harmjanblok/puma-metrics">puma-metrics</a> — export Puma metrics to Prometheus</li>
<li><a href="https://github.com/yob/puma-plugin-statsd">puma-plugin-statsd</a> — send Puma metrics to statsd</li>
<li><a href="https://github.com/sj26/puma-plugin-systemd">puma-plugin-systemd</a> — deeper integration with systemd for notify, status and watchdog. Puma 5.1.0 integrated notify and watchdog, which probably conflicts with this plugin. Puma 6.1.0 added status support which obsoletes the plugin entirely.</li>
<li><a href="https://github.com/babbel/puma-plugin-telemetry">puma-plugin-telemetry</a> - telemetry plugin for Puma offering various targets to publish</li>
<li><a href="https://github.com/anchordotdev/puma-acme">puma-acme</a> - automatic SSL/HTTPS certificate provisioning and setup</li>
</ul>
<h3>Monitoring</h3>
<ul>
<li><a href="https://github.com/ylecuyer/puma-status">puma-status</a> — Monitor CPU/Mem/Load of running puma instances from the CLI</li>
</ul>
<h2>Contributing</h2>
<p>Find details for contributing in the <a href="https://raw.githubusercontent.com/puma/puma/master/CONTRIBUTING.md">contribution guide</a>.</p>
<h2>License</h2>
<p>Puma is copyright Evan Phoenix and contributors, licensed under the BSD 3-Clause license. See the included LICENSE file for details.</p>
+
+
+ endoflife-date/endoflife.date
+ 2024-12-01T01:57:53Z
+ tag:github.com,2024-12-01:/endoflife-date/endoflife.date
+
+ <p>Informative site with EoL dates of everything</p><hr><h1>endoflife.date</h1>
<p><a href="https://app.netlify.com/sites/endoflife-date/deploys"><img src="https://api.netlify.com/api/v1/badges/92f7a2a9-3cca-4916-a75e-f9db4ec39d48/deploy-status" alt="Netlify Status"></a> <a href="https://opensource.guide/how-to-contribute/#opening-a-pull-request"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?sanitize=true" alt="PRs Welcome"></a> <a href="https://jekyllrb.com/"><img src="https://img.shields.io/badge/powered_by-Jekyll-blue.svg?sanitize=true" alt="powered by Jekyll"></a> <a href="https://endoflife.date/"><img src="https://img.shields.io/website-up-down-green-red/https/endoflife.date.svg?sanitize=true" alt="Website shields.io"></a> <a href="https://commonmark.org/"><img src="https://img.shields.io/badge/Made%20with-Markdown-1f425f.svg?sanitize=true" alt="made-with-Markdown"></a> <a href="https://raw.githubusercontent.com/endoflife-date/endoflife.date/master/CODE-OF-CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg?sanitize=true" alt="Contributor Covenant"></a> <a href="https://gitter.im/endoflife-date/community"><img src="https://badges.gitter.im/endoflife-date/community.svg?sanitize=true" alt="Gitter"></a> <a href="https://twitter.com/endoflife_date"><img src="https://img.shields.io/twitter/url.svg?label=@endoflife_date&style=social&url=https%3A%2F%2Ftwitter.com%2Fendoflife_date" alt="Twitter Follow Badge"></a></p>
<p>Keep track of various End of Life dates and support lifecycles for various products. Visit <a href="https://endoflife.date">https://endoflife.date</a> for a list of supported products. This information is very often <a href="https://twitter.com/captn3m0/status/1110504412064239617">hard to track or badly presented</a>. This project collates this data and presents it in an easily accessible format, with URLs that are easy to guess and remember.</p>
<p>If you maintain release information (end-of-life dates, or support information) for a product, we have a <a href="https://endoflife.date/recommendations">set of recommendations</a> along with a checklist on some best practices for publishing this information.</p>
<h2>Contributing</h2>
<p>Please see <a href="https://endoflife.date/contribute">the contributing guide</a> for details. While participating in the project, you must abide by its <a href="https://raw.githubusercontent.com/endoflife-date/endoflife.date/master/CODE-OF-CONDUCT.md">Code of Conduct</a>.</p>
<h2>API</h2>
<p>An API is available for integration with CI platforms. API documentation is available at <a href="https://endoflife.date/docs/api">https://endoflife.date/docs/api</a>. The API is currently in Alpha, and breaking changes can happen.</p>
<h2>License</h2>
<p>Licensed under the <a href="https://raw.githubusercontent.com/endoflife-date/endoflife.date/master/LICENSE">MIT License</a>.</p>
<h2>Credits</h2>
<p>endoflife.date is relying on various amazing software and components :</p>
<ul>
<li><a href="https://github.com/">GitHub</a>, an Internet hosting service for software development and version control,</li>
<li><a href="https://jekyllrb.com/">Jekyll</a>, a static site generator.</li>
<li><a href="https://www.ruby-lang.org/">Ruby</a>, a dynamic and open source programming language with a focus on simplicity and productivity.</li>
<li><a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.</li>
<li><a href="https://stoplight.io/open-source/elements">Stoplight Elements</a>, a collection of UI components for displaying beautiful developer documentation from any OpenAPI document.</li>
<li><a href="https://simpleicons.org/">Simple Icons</a>, free SVG icons for popular brands.</li>
<li>Our icon is derived from <a href="https://commons.wikimedia.org/wiki/File:Hourglass_icon_%28orange%29.svg">Hourglass icon (orange)</a> by David Abián and Serhio Magpie on the English Wikipedia. Remixed under the CC-BY-SA-4.0 license.</li>
<li><a href="https://realfavicongenerator.net/">RealFaviconGenerator</a>, a favicon Generator, for real.</li>
<li><a href="https://www.netlify.com/">Netlify</a>, an all-in-one platform for automating modern web projects.</li>
<li>Product descriptions are adapted from the <a href="https://en.wikipedia.org/">English Wikipedia</a>, under <a href="https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License">CC BY-SA 3.0</a> license.</li>
</ul>
+
+
+ sinatra/sinatra
+ 2024-12-01T01:57:53Z
+ tag:github.com,2024-12-01:/sinatra/sinatra
+
+ <p>Classy web-development dressed in a DSL (official / canonical repo)</p><hr><h1>Sinatra</h1>
<p><a href="https://badge.fury.io/rb/sinatra"><img src="https://badge.fury.io/rb/sinatra.svg?sanitize=true" alt="Gem Version"></a> <a href="https://github.com/sinatra/sinatra/actions/workflows/test.yml"><img src="https://github.com/sinatra/sinatra/actions/workflows/test.yml/badge.svg?sanitize=true" alt="Testing"></a></p>
<p>Sinatra is a <a href="https://en.wikipedia.org/wiki/Domain-specific_language">DSL</a> for quickly creating web applications in Ruby with minimal effort:</p>
<pre><code class="language-ruby"># myapp.rb
require 'sinatra'
get '/' do
'Hello world!'
end
</code></pre>
<p>Install the gems needed:</p>
<pre><code class="language-shell">gem install sinatra rackup puma
</code></pre>
<p>And run with:</p>
<pre><code class="language-shell">ruby myapp.rb
</code></pre>
<p>View at: <a href="http://localhost:4567">http://localhost:4567</a></p>
<p>The code you changed will not take effect until you restart the server. Please restart the server every time you change or use a code reloader like <a href="https://github.com/alexch/rerun">rerun</a> or <a href="https://github.com/jeremyevans/rack-unreloader">rack-unreloader</a>.</p>
<p>It is recommended to also run <code>gem install puma</code>, which Sinatra will pick up if available.</p>
<h2>Table of Contents</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#sinatra">Sinatra</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#table-of-contents">Table of Contents</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#routes">Routes</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#conditions">Conditions</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#return-values">Return Values</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#custom-route-matchers">Custom Route Matchers</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#static-files">Static Files</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#views--templates">Views / Templates</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#literal-templates">Literal Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#available-template-languages">Available Template Languages</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#haml-templates">Haml Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#erb-templates">Erb Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#builder-templates">Builder Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#nokogiri-templates">Nokogiri Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#sass-templates">Sass Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#scss-templates">Scss Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#liquid-templates">Liquid Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#markdown-templates">Markdown Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#rdoc-templates">RDoc Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#asciidoc-templates">AsciiDoc Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#markaby-templates">Markaby Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#rabl-templates">RABL Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#slim-templates">Slim Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#yajl-templates">Yajl Templates</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#accessing-variables-in-templates">Accessing Variables in Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#templates-with-yield-and-nested-layouts">Templates with <code>yield</code> and nested layouts</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#inline-templates">Inline Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#named-templates">Named Templates</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#associating-file-extensions">Associating File Extensions</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#adding-your-own-template-engine">Adding Your Own Template Engine</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#using-custom-logic-for-template-lookup">Using Custom Logic for Template Lookup</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#filters">Filters</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#helpers">Helpers</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#using-sessions">Using Sessions</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#session-secret-security">Session Secret Security</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#session-config">Session Config</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#choosing-your-own-session-middleware">Choosing Your Own Session Middleware</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#halting">Halting</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#passing">Passing</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#triggering-another-route">Triggering Another Route</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#setting-body-status-code-and-headers">Setting Body, Status Code, and Headers</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#streaming-responses">Streaming Responses</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#logging">Logging</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#mime-types">Mime Types</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#generating-urls">Generating URLs</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#browser-redirect">Browser Redirect</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#cache-control">Cache Control</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#sending-files">Sending Files</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#accessing-the-request-object">Accessing the Request Object</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#attachments">Attachments</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#dealing-with-date-and-time">Dealing with Date and Time</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#looking-up-template-files">Looking Up Template Files</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#configuration">Configuration</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#configuring-attack-protection">Configuring attack protection</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#available-settings">Available Settings</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#lifecycle-events">Lifecycle Events</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#environments">Environments</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#error-handling">Error Handling</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#not-found">Not Found</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#error">Error</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#rack-middleware">Rack Middleware</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#testing">Testing</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#sinatrabase---middleware-libraries-and-modular-apps">Sinatra::Base - Middleware, Libraries, and Modular Apps</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#modular-vs-classic-style">Modular vs. Classic Style</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#serving-a-modular-application">Serving a Modular Application</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#using-a-classic-style-application-with-a-configru">Using a Classic Style Application with a config.ru</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#when-to-use-a-configru">When to use a config.ru?</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#using-sinatra-as-middleware">Using Sinatra as Middleware</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#dynamic-application-creation">Dynamic Application Creation</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#scopes-and-binding">Scopes and Binding</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#applicationclass-scope">Application/Class Scope</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#requestinstance-scope">Request/Instance Scope</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#delegation-scope">Delegation Scope</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#command-line">Command Line</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#multi-threading">Multi-threading</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#requirement">Requirement</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#the-bleeding-edge">The Bleeding Edge</a>
<ul>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#with-bundler">With Bundler</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#versioning">Versioning</a></li>
<li><a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#further-reading">Further Reading</a></li>
</ul> </li>
</ul>
<h2>Routes</h2>
<p>In Sinatra, a route is an HTTP method paired with a URL-matching pattern. Each route is associated with a block:</p>
<pre><code class="language-ruby">get '/' do
.. show something ..
end
post '/' do
.. create something ..
end
put '/' do
.. replace something ..
end
patch '/' do
.. modify something ..
end
delete '/' do
.. annihilate something ..
end
options '/' do
.. appease something ..
end
link '/' do
.. affiliate something ..
end
unlink '/' do
.. separate something ..
end
</code></pre>
<p>Routes are matched in the order they are defined. The first route that matches the request is invoked.</p>
<p>Routes with trailing slashes are different from the ones without:</p>
<pre><code class="language-ruby">get '/foo' do
# Does not match "GET /foo/"
end
</code></pre>
<p>Route patterns may include named parameters, accessible via the <code>params</code> hash:</p>
<pre><code class="language-ruby">get '/hello/:name' do
# matches "GET /hello/foo" and "GET /hello/bar"
# params['name'] is 'foo' or 'bar'
"Hello #{params['name']}!"
end
</code></pre>
<p>You can also access named parameters via block parameters:</p>
<pre><code class="language-ruby">get '/hello/:name' do |n|
# matches "GET /hello/foo" and "GET /hello/bar"
# params['name'] is 'foo' or 'bar'
# n stores params['name']
"Hello #{n}!"
end
</code></pre>
<p>Route patterns may also include splat (or wildcard) parameters, accessible via the <code>params['splat']</code> array:</p>
<pre><code class="language-ruby">get '/say/*/to/*' do
# matches /say/hello/to/world
params['splat'] # => ["hello", "world"]
end
get '/download/*.*' do
# matches /download/path/to/file.xml
params['splat'] # => ["path/to/file", "xml"]
end
</code></pre>
<p>Or with block parameters:</p>
<pre><code class="language-ruby">get '/download/*.*' do |path, ext|
[path, ext] # => ["path/to/file", "xml"]
end
</code></pre>
<p>Route matching with Regular Expressions:</p>
<pre><code class="language-ruby">get /\/hello\/([\w]+)/ do
"Hello, #{params['captures'].first}!"
end
</code></pre>
<p>Or with a block parameter:</p>
<pre><code class="language-ruby">get %r{/hello/([\w]+)} do |c|
# Matches "GET /meta/hello/world", "GET /hello/world/1234" etc.
"Hello, #{c}!"
end
</code></pre>
<p>Route patterns may have optional parameters:</p>
<pre><code class="language-ruby">get '/posts/:format?' do
# matches "GET /posts/" and any extension "GET /posts/json", "GET /posts/xml" etc
end
</code></pre>
<p>Routes may also utilize query parameters:</p>
<pre><code class="language-ruby">get '/posts' do
# matches "GET /posts?title=foo&author=bar"
title = params['title']
author = params['author']
# uses title and author variables; query is optional to the /posts route
end
</code></pre>
<p>By the way, unless you disable the path traversal attack protection (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#configuring-attack-protection">below</a>), the request path might be modified before matching against your routes.</p>
<p>You may customize the <a href="https://github.com/sinatra/mustermann#readme">Mustermann</a> options used for a given route by passing in a <code>:mustermann_opts</code> hash:</p>
<pre><code class="language-ruby">get '\A/posts\z', :mustermann_opts => { :type => :regexp, :check_anchors => false } do
# matches /posts exactly, with explicit anchoring
"If you match an anchored pattern clap your hands!"
end
</code></pre>
<p>It looks like a <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#conditions">condition</a>, but it isn't one! These options will be merged into the global <code>:mustermann_opts</code> hash described <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#available-settings">below</a>.</p>
<h2>Conditions</h2>
<p>Routes may include a variety of matching conditions, such as the user agent:</p>
<pre><code class="language-ruby">get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
"You're using Songbird version #{params['agent'][0]}"
end
get '/foo' do
# Matches non-songbird browsers
end
</code></pre>
<p>Other available conditions are <code>host_name</code> and <code>provides</code>:</p>
<pre><code class="language-ruby">get '/', :host_name => /^admin\./ do
"Admin Area, Access denied!"
end
get '/', :provides => 'html' do
haml :index
end
get '/', :provides => ['rss', 'atom', 'xml'] do
builder :feed
end
</code></pre>
<p><code>provides</code> searches the request's Accept header.</p>
<p>You can easily define your own conditions:</p>
<pre><code class="language-ruby">set(:probability) { |value| condition { rand <= value } }
get '/win_a_car', :probability => 0.1 do
"You won!"
end
get '/win_a_car' do
"Sorry, you lost."
end
</code></pre>
<p>For a condition that takes multiple values use a splat:</p>
<pre><code class="language-ruby">set(:auth) do |*roles| # <- notice the splat here
condition do
unless logged_in? && roles.any? {|role| current_user.in_role? role }
redirect "/login/", 303
end
end
end
get "/my/account/", :auth => [:user, :admin] do
"Your Account Details"
end
get "/only/admin/", :auth => :admin do
"Only admins are allowed here!"
end
</code></pre>
<h2>Return Values</h2>
<p>The return value of a route block determines at least the response body passed on to the HTTP client or at least the next middleware in the Rack stack. Most commonly, this is a string, as in the above examples. But other values are also accepted.</p>
<p>You can return an object that would either be a valid Rack response, Rack body object or HTTP status code:</p>
<ul>
<li>An Array with three elements: <code>[status (Integer), headers (Hash), response body (responds to #each)]</code></li>
<li>An Array with two elements: <code>[status (Integer), response body (responds to #each)]</code></li>
<li>An object that responds to <code>#each</code> and passes nothing but strings to the given block</li>
<li>A Integer representing the status code</li>
</ul>
<p>That way we can, for instance, easily implement a streaming example:</p>
<pre><code class="language-ruby">class Stream
def each
100.times { |i| yield "#{i}\n" }
end
end
get('/') { Stream.new }
</code></pre>
<p>You can also use the <code>stream</code> helper method (<a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#streaming-responses">described below</a>) to reduce boilerplate and embed the streaming logic in the route.</p>
<h2>Custom Route Matchers</h2>
<p>As shown above, Sinatra ships with built-in support for using String patterns and regular expressions as route matches. However, it does not stop there. You can easily define your own matchers:</p>
<pre><code class="language-ruby">class AllButPattern
def initialize(except)
@except = except
end
def to_pattern(options)
return self
end
def params(route)
return {} unless @except === route
end
end
def all_but(pattern)
AllButPattern.new(pattern)
end
get all_but("/index") do
# ...
end
</code></pre>
<p>Note that the above example might be over-engineered, as it can also be expressed as:</p>
<pre><code class="language-ruby">get /.*/ do
pass if request.path_info == "/index"
# ...
end
</code></pre>
<h2>Static Files</h2>
<p>Static files are served from the <code>./public</code> directory. You can specify a different location by setting the <code>:public_folder</code> option:</p>
<pre><code class="language-ruby">set :public_folder, __dir__ + '/static'
</code></pre>
<p>Note that the public directory name is not included in the URL. A file <code>./public/css/style.css</code> is made available as <code>http://example.com/css/style.css</code>.</p>
<p>Use the <code>:static_cache_control</code> setting (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#cache-control">below</a>) to add <code>Cache-Control</code> header info.</p>
<h2>Views / Templates</h2>
<p>Each template language is exposed via its own rendering method. These methods simply return a string:</p>
<pre><code class="language-ruby">get '/' do
erb :index
end
</code></pre>
<p>This renders <code>views/index.erb</code>.</p>
<p>Instead of a template name, you can also just pass in the template content directly:</p>
<pre><code class="language-ruby">get '/' do
code = "<%= Time.now %>"
erb code
end
</code></pre>
<p>Templates take a second argument, the options hash:</p>
<pre><code class="language-ruby">get '/' do
erb :index, :layout => :post
end
</code></pre>
<p>This will render <code>views/index.erb</code> embedded in the <code>views/post.erb</code> (default is <code>views/layout.erb</code>, if it exists).</p>
<p>Any options not understood by Sinatra will be passed on to the template engine:</p>
<pre><code class="language-ruby">get '/' do
haml :index, :format => :html5
end
</code></pre>
<p>You can also set options per template language in general:</p>
<pre><code class="language-ruby">set :haml, :format => :html5
get '/' do
haml :index
end
</code></pre>
<p>Options passed to the render method override options set via <code>set</code>.</p>
<p>Available Options:</p>
<dl>
<dt>
locals
</dt>
<dd>
List of locals passed to the document. Handy with partials. Example:
<tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt>
</dd>
<dt>
default_encoding
</dt>
<dd>
String encoding to use if uncertain. Defaults to
<tt>settings.default_encoding</tt>.
</dd>
<dt>
views
</dt>
<dd>
Views folder to load templates from. Defaults to
<tt>settings.views</tt>.
</dd>
<dt>
layout
</dt>
<dd>
Whether to use a layout (
<tt>true</tt> or
<tt>false</tt>). If it's a Symbol, specifies what template to use. Example:
<tt>erb :index, :layout => !request.xhr?</tt>
</dd>
<dt>
content_type
</dt>
<dd>
Content-Type the template produces. Default depends on template language.
</dd>
<dt>
scope
</dt>
<dd>
Scope to render template under. Defaults to the application instance. If you change this, instance variables and helper methods will not be available.
</dd>
<dt>
layout_engine
</dt>
<dd>
Template engine to use for rendering the layout. Useful for languages that do not support layouts otherwise. Defaults to the engine used for the template. Example:
<tt>set :rdoc, :layout_engine => :erb</tt>
</dd>
<dt>
layout_options
</dt>
<dd>
Special options only used for rendering the layout. Example:
<tt>set :rdoc, :layout_options => { :views => 'views/layouts' }</tt>
</dd>
</dl>
<p>Templates are assumed to be located directly under the <code>./views</code> directory. To use a different views directory:</p>
<pre><code class="language-ruby">set :views, settings.root + '/templates'
</code></pre>
<p>One important thing to remember is that you always have to reference templates with symbols, even if they're in a subdirectory (in this case, use: <code>:'subdir/template'</code> or <code>'subdir/template'.to_sym</code>). You must use a symbol because otherwise rendering methods will render any strings passed to them directly.</p>
<h3>Literal Templates</h3>
<pre><code class="language-ruby">get '/' do
haml '%div.title Hello World'
end
</code></pre>
<p>Renders the template string. You can optionally specify <code>:path</code> and <code>:line</code> for a clearer backtrace if there is a filesystem path or line associated with that string:</p>
<pre><code class="language-ruby">get '/' do
haml '%div.title Hello World', :path => 'examples/file.haml', :line => 3
end
</code></pre>
<h3>Available Template Languages</h3>
<p>Some languages have multiple implementations. To specify what implementation to use (and to be thread-safe), you should simply require it first:</p>
<pre><code class="language-ruby">require 'rdiscount'
get('/') { markdown :index }
</code></pre>
<h4>Haml Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="http://haml.info/" title="haml">haml</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.haml</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>haml :index, :format => :html5</tt></td>
</tr>
</tbody>
</table>
<h4>Erb Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td> <a href="https://github.com/jeremyevans/erubi" title="erubi">erubi</a> or erb (included in Ruby) </td>
</tr>
<tr>
<td>File Extensions</td>
<td><tt>.erb</tt>, <tt>.rhtml</tt> or <tt>.erubi</tt> (Erubi only)</td>
</tr>
<tr>
<td>Example</td>
<td><tt>erb :index</tt></td>
</tr>
</tbody>
</table>
<h4>Builder Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td> <a href="https://github.com/jimweirich/builder" title="builder">builder</a> </td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.builder</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>builder { |xml| xml.em "hi" }</tt></td>
</tr>
</tbody>
</table>
<p>It also takes a block for inline templates (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#inline-templates">example</a>).</p>
<h4>Nokogiri Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="http://www.nokogiri.org/" title="nokogiri">nokogiri</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.nokogiri</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>nokogiri { |xml| xml.em "hi" }</tt></td>
</tr>
</tbody>
</table>
<p>It also takes a block for inline templates (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#inline-templates">example</a>).</p>
<h4>Sass Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://github.com/ntkme/sass-embedded-host-ruby" title="sass-embedded">sass-embedded</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.sass</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>sass :stylesheet, :style => :expanded</tt></td>
</tr>
</tbody>
</table>
<h4>Scss Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://github.com/ntkme/sass-embedded-host-ruby" title="sass-embedded">sass-embedded</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.scss</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>scss :stylesheet, :style => :expanded</tt></td>
</tr>
</tbody>
</table>
<h4>Liquid Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://shopify.github.io/liquid/" title="liquid">liquid</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.liquid</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>liquid :index, :locals => { :key => 'value' }</tt></td>
</tr>
</tbody>
</table>
<p>Since you cannot call Ruby methods (except for <code>yield</code>) from a Liquid template, you almost always want to pass locals to it.</p>
<h4>Markdown Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td> Anyone of: <a href="https://github.com/davidfstr/rdiscount" title="RDiscount">RDiscount</a>, <a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>, <a href="https://kramdown.gettalong.org/" title="kramdown">kramdown</a>, <a href="https://github.com/gjtorikian/commonmarker" title="commonmarker">commonmarker</a> <a href="https://github.com/alphabetum/pandoc-ruby" title="pandoc">pandoc</a> </td>
</tr>
<tr>
<td>File Extensions</td>
<td><tt>.markdown</tt>, <tt>.mkd</tt> and <tt>.md</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>markdown :index, :layout_engine => :erb</tt></td>
</tr>
</tbody>
</table>
<p>It is not possible to call methods from Markdown, nor to pass locals to it. You therefore will usually use it in combination with another rendering engine:</p>
<pre><code class="language-ruby">erb :overview, :locals => { :text => markdown(:introduction) }
</code></pre>
<p>Note that you may also call the <code>markdown</code> method from within other templates:</p>
<pre><code class="language-ruby">%h1 Hello From Haml!
%p= markdown(:greetings)
</code></pre>
<p>Since you cannot call Ruby from Markdown, you cannot use layouts written in Markdown. However, it is possible to use another rendering engine for the template than for the layout by passing the <code>:layout_engine</code> option.</p>
<h4>RDoc Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="http://rdoc.sourceforge.net/" title="RDoc">RDoc</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.rdoc</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>rdoc :README, :layout_engine => :erb</tt></td>
</tr>
</tbody>
</table>
<p>It is not possible to call methods from RDoc, nor to pass locals to it. You therefore will usually use it in combination with another rendering engine:</p>
<pre><code class="language-ruby">erb :overview, :locals => { :text => rdoc(:introduction) }
</code></pre>
<p>Note that you may also call the <code>rdoc</code> method from within other templates:</p>
<pre><code class="language-ruby">%h1 Hello From Haml!
%p= rdoc(:greetings)
</code></pre>
<p>Since you cannot call Ruby from RDoc, you cannot use layouts written in RDoc. However, it is possible to use another rendering engine for the template than for the layout by passing the <code>:layout_engine</code> option.</p>
<h4>AsciiDoc Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="http://asciidoctor.org/" title="Asciidoctor">Asciidoctor</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.asciidoc</tt>, <tt>.adoc</tt> and <tt>.ad</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>asciidoc :README, :layout_engine => :erb</tt></td>
</tr>
</tbody>
</table>
<p>Since you cannot call Ruby methods directly from an AsciiDoc template, you almost always want to pass locals to it.</p>
<h4>Markaby Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://markaby.github.io/" title="Markaby">Markaby</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.mab</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>markaby { h1 "Welcome!" }</tt></td>
</tr>
</tbody>
</table>
<p>It also takes a block for inline templates (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#inline-templates">example</a>).</p>
<h4>RABL Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://github.com/nesquena/rabl" title="Rabl">Rabl</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.rabl</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>rabl :index</tt></td>
</tr>
</tbody>
</table>
<h4>Slim Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://slim-template.github.io/" title="Slim Lang">Slim Lang</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.slim</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>slim :index</tt></td>
</tr>
</tbody>
</table>
<h4>Yajl Templates</h4>
<table>
<tbody>
<tr>
<td>Dependency</td>
<td><a href="https://github.com/brianmario/yajl-ruby" title="yajl-ruby">yajl-ruby</a></td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.yajl</tt></td>
</tr>
<tr>
<td>Example</td>
<td> <tt> yajl :index, :locals => { :key => 'qux' }, :callback => 'present', :variable => 'resource' </tt> </td>
</tr>
</tbody>
</table>
<p>The template source is evaluated as a Ruby string, and the resulting json variable is converted using <code>#to_json</code>:</p>
<pre><code class="language-ruby">json = { :foo => 'bar' }
json[:baz] = key
</code></pre>
<p>The <code>:callback</code> and <code>:variable</code> options can be used to decorate the rendered object:</p>
<pre><code class="language-javascript">var resource = {"foo":"bar","baz":"qux"};
present(resource);
</code></pre>
<h3>Accessing Variables in Templates</h3>
<p>Templates are evaluated within the same context as route handlers. Instance variables set in route handlers are directly accessible by templates:</p>
<pre><code class="language-ruby">get '/:id' do
@foo = Foo.find(params['id'])
haml '%h1= @foo.name'
end
</code></pre>
<p>Or, specify an explicit Hash of local variables:</p>
<pre><code class="language-ruby">get '/:id' do
foo = Foo.find(params['id'])
haml '%h1= bar.name', :locals => { :bar => foo }
end
</code></pre>
<p>This is typically used when rendering templates as partials from within other templates.</p>
<h3>Templates with <code>yield</code> and nested layouts</h3>
<p>A layout is usually just a template that calls <code>yield</code>. Such a template can be used either through the <code>:template</code> option as described above, or it can be rendered with a block as follows:</p>
<pre><code class="language-ruby">erb :post, :layout => false do
erb :index
end
</code></pre>
<p>This code is mostly equivalent to <code>erb :index, :layout => :post</code>.</p>
<p>Passing blocks to rendering methods is most useful for creating nested layouts:</p>
<pre><code class="language-ruby">erb :main_layout, :layout => false do
erb :admin_layout do
erb :user
end
end
</code></pre>
<p>This can also be done in fewer lines of code with:</p>
<pre><code class="language-ruby">erb :admin_layout, :layout => :main_layout do
erb :user
end
</code></pre>
<p>Currently, the following rendering methods accept a block: <code>erb</code>, <code>haml</code>, <code>liquid</code>, <code>slim </code>. Also, the general <code>render</code> method accepts a block.</p>
<h3>Inline Templates</h3>
<p>Templates may be defined at the end of the source file:</p>
<pre><code class="language-ruby">require 'sinatra'
get '/' do
haml :index
end
__END__
@@ layout
%html
!= yield
@@ index
%div.title Hello world.
</code></pre>
<p>NOTE: Inline templates defined in the source file that requires Sinatra are automatically loaded. Call <code>enable :inline_templates</code> explicitly if you have inline templates in other source files.</p>
<h3>Named Templates</h3>
<p>Templates may also be defined using the top-level <code>template</code> method:</p>
<pre><code class="language-ruby">template :layout do
"%html\n =yield\n"
end
template :index do
'%div.title Hello World!'
end
get '/' do
haml :index
end
</code></pre>
<p>If a template named "layout" exists, it will be used each time a template is rendered. You can individually disable layouts by passing <code>:layout => false</code> or disable them by default via <code>set :haml, :layout => false</code>:</p>
<pre><code class="language-ruby">get '/' do
haml :index, :layout => !request.xhr?
end
</code></pre>
<h3>Associating File Extensions</h3>
<p>To associate a file extension with a template engine, use <code>Tilt.register</code>. For instance, if you like to use the file extension <code>tt</code> for Haml templates, you can do the following:</p>
<pre><code class="language-ruby">Tilt.register Tilt[:haml], :tt
</code></pre>
<h3>Adding Your Own Template Engine</h3>
<p>First, register your engine with Tilt, then create a rendering method:</p>
<pre><code class="language-ruby">Tilt.register MyAwesomeTemplateEngine, :myat
helpers do
def myat(*args) render(:myat, *args) end
end
get '/' do
myat :index
end
</code></pre>
<p>Renders <code>./views/index.myat</code>. Learn more about <a href="https://github.com/rtomayko/tilt#readme">Tilt</a>.</p>
<h3>Using Custom Logic for Template Lookup</h3>
<p>To implement your own template lookup mechanism you can write your own <code>#find_template</code> method:</p>
<pre><code class="language-ruby">configure do
set :views, [ './views/a', './views/b' ]
end
def find_template(views, name, engine, &block)
Array(views).each do |v|
super(v, name, engine, &block)
end
end
</code></pre>
<h2>Filters</h2>
<p>Before filters are evaluated before each request within the same context as the routes will be and can modify the request and response. Instance variables set in filters are accessible by routes and templates:</p>
<pre><code class="language-ruby">before do
@note = 'Hi!'
request.path_info = '/foo/bar/baz'
end
get '/foo/*' do
@note #=> 'Hi!'
params['splat'] #=> 'bar/baz'
end
</code></pre>
<p>After filters are evaluated after each request within the same context as the routes will be and can also modify the request and response. Instance variables set in before filters and routes are accessible by after filters:</p>
<pre><code class="language-ruby">after do
puts response.status
end
</code></pre>
<p>Note: Unless you use the <code>body</code> method rather than just returning a String from the routes, the body will not yet be available in the after filter, since it is generated later on.</p>
<p>Filters optionally take a pattern, causing them to be evaluated only if the request path matches that pattern:</p>
<pre><code class="language-ruby">before '/protected/*' do
authenticate!
end
after '/create/:slug' do |slug|
session[:last_slug] = slug
end
</code></pre>
<p>Like routes, filters also take conditions:</p>
<pre><code class="language-ruby">before :agent => /Songbird/ do
# ...
end
after '/blog/*', :host_name => 'example.com' do
# ...
end
</code></pre>
<h2>Helpers</h2>
<p>Use the top-level <code>helpers</code> method to define helper methods for use in route handlers and templates:</p>
<pre><code class="language-ruby">helpers do
def bar(name)
"#{name}bar"
end
end
get '/:name' do
bar(params['name'])
end
</code></pre>
<p>Alternatively, helper methods can be separately defined in a module:</p>
<pre><code class="language-ruby">module FooUtils
def foo(name) "#{name}foo" end
end
module BarUtils
def bar(name) "#{name}bar" end
end
helpers FooUtils, BarUtils
</code></pre>
<p>The effect is the same as including the modules in the application class.</p>
<h3>Using Sessions</h3>
<p>A session is used to keep state during requests. If activated, you have one session hash per user session:</p>
<pre><code class="language-ruby">enable :sessions
get '/' do
"value = " << session[:value].inspect
end
get '/:value' do
session['value'] = params['value']
end
</code></pre>
<h4>Session Secret Security</h4>
<p>To improve security, the session data in the cookie is signed with a session secret using <code>HMAC-SHA1</code>. This session secret should optimally be a cryptographically secure random value of an appropriate length which for <code>HMAC-SHA1</code> is greater than or equal to 64 bytes (512 bits, 128 hex characters). You would be advised not to use a secret that is less than 32 bytes of randomness (256 bits, 64 hex characters). It is therefore <strong>very important</strong> that you don't just make the secret up, but instead use a secure random number generator to create it. Humans are extremely bad at generating random values.</p>
<p>By default, a 32 byte secure random session secret is generated for you by Sinatra, but it will change with every restart of your application. If you have multiple instances of your application, and you let Sinatra generate the key, each instance would then have a different session key which is probably not what you want.</p>
<p>For better security and usability it's <a href="https://12factor.net/config">recommended</a> that you generate a secure random secret and store it in an environment variable on each host running your application so that all of your application instances will share the same secret. You should periodically rotate this session secret to a new value. Here are some examples of how you might create a 64-byte secret and set it:</p>
<p><strong>Session Secret Generation</strong></p>
<pre><code class="language-text">$ ruby -e "require 'securerandom'; puts SecureRandom.hex(64)"
99ae8af...snip...ec0f262ac
</code></pre>
<p><strong>Session Secret Environment Variable</strong></p>
<p>Set a <code>SESSION_SECRET</code> environment variable for Sinatra to the value you generated. Make this value persistent across reboots of your host. Since the method for doing this will vary across systems this is for illustrative purposes only:</p>
<pre><code class="language-bash"># echo "export SESSION_SECRET=99ae8af...snip...ec0f262ac" >> ~/.bashrc
</code></pre>
<p><strong>Session Secret App Config</strong></p>
<p>Set up your app config to fail-safe to a secure random secret if the <code>SESSION_SECRET</code> environment variable is not available:</p>
<pre><code class="language-ruby">require 'securerandom'
set :session_secret, ENV.fetch('SESSION_SECRET') { SecureRandom.hex(64) }
</code></pre>
<h4>Session Config</h4>
<p>If you want to configure it further, you may also store a hash with options in the <code>sessions</code> setting:</p>
<pre><code class="language-ruby">set :sessions, :domain => 'foo.com'
</code></pre>
<p>To share your session across other apps on subdomains of foo.com, prefix the domain with a <em>.</em> like this instead:</p>
<pre><code class="language-ruby">set :sessions, :domain => '.foo.com'
</code></pre>
<h4>Choosing Your Own Session Middleware</h4>
<p>Note that <code>enable :sessions</code> actually stores all data in a cookie. This might not always be what you want (storing lots of data will increase your traffic, for instance). You can use any Rack session middleware in order to do so, one of the following methods can be used:</p>
<pre><code class="language-ruby">enable :sessions
set :session_store, Rack::Session::Pool
</code></pre>
<p>Or to set up sessions with a hash of options:</p>
<pre><code class="language-ruby">set :sessions, :expire_after => 2592000
set :session_store, Rack::Session::Pool
</code></pre>
<p>Another option is to <strong>not</strong> call <code>enable :sessions</code>, but instead pull in your middleware of choice as you would any other middleware.</p>
<p>It is important to note that when using this method, session based protection <strong>will not be enabled by default</strong>.</p>
<p>The Rack middleware to do that will also need to be added:</p>
<pre><code class="language-ruby">use Rack::Session::Pool, :expire_after => 2592000
use Rack::Protection::RemoteToken
use Rack::Protection::SessionHijacking
</code></pre>
<p>See '<a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#configuring-attack-protection">Configuring attack protection</a>' for more information.</p>
<h3>Halting</h3>
<p>To immediately stop a request within a filter or route use:</p>
<pre><code class="language-ruby">halt
</code></pre>
<p>You can also specify the status when halting:</p>
<pre><code class="language-ruby">halt 410
</code></pre>
<p>Or the body:</p>
<pre><code class="language-ruby">halt 'this will be the body'
</code></pre>
<p>Or both:</p>
<pre><code class="language-ruby">halt 401, 'go away!'
</code></pre>
<p>With headers:</p>
<pre><code class="language-ruby">halt 402, {'Content-Type' => 'text/plain'}, 'revenge'
</code></pre>
<p>It is of course possible to combine a template with <code>halt</code>:</p>
<pre><code class="language-ruby">halt erb(:error)
</code></pre>
<h3>Passing</h3>
<p>A route can punt processing to the next matching route using <code>pass</code>:</p>
<pre><code class="language-ruby">get '/guess/:who' do
pass unless params['who'] == 'Frank'
'You got me!'
end
get '/guess/*' do
'You missed!'
end
</code></pre>
<p>The route block is immediately exited and control continues with the next matching route. If no matching route is found, a 404 is returned.</p>
<h3>Triggering Another Route</h3>
<p>Sometimes <code>pass</code> is not what you want, instead, you would like to get the result of calling another route. Simply use <code>call</code> to achieve this:</p>
<pre><code class="language-ruby">get '/foo' do
status, headers, body = call env.merge("PATH_INFO" => '/bar')
[status, headers, body.map(&:upcase)]
end
get '/bar' do
"bar"
end
</code></pre>
<p>Note that in the example above, you would ease testing and increase performance by simply moving <code>"bar"</code> into a helper used by both <code>/foo</code> and <code>/bar</code>.</p>
<p>If you want the request to be sent to the same application instance rather than a duplicate, use <code>call!</code> instead of <code>call</code>.</p>
<p>Check out the Rack specification if you want to learn more about <code>call</code>.</p>
<h3>Setting Body, Status Code, and Headers</h3>
<p>It is possible and recommended to set the status code and response body with the return value of the route block. However, in some scenarios, you might want to set the body at an arbitrary point in the execution flow. You can do so with the <code>body</code> helper method. If you do so, you can use that method from thereon to access the body:</p>
<pre><code class="language-ruby">get '/foo' do
body "bar"
end
after do
puts body
end
</code></pre>
<p>It is also possible to pass a block to <code>body</code>, which will be executed by the Rack handler (this can be used to implement streaming, <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#return-values">see "Return Values"</a>).</p>
<p>Similar to the body, you can also set the status code and headers:</p>
<pre><code class="language-ruby">get '/foo' do
status 418
headers \
"Allow" => "BREW, POST, GET, PROPFIND, WHEN",
"Refresh" => "Refresh: 20; https://ietf.org/rfc/rfc2324.txt"
body "I'm a teapot!"
end
</code></pre>
<p>Like <code>body</code>, <code>headers</code> and <code>status</code> with no arguments can be used to access their current values.</p>
<h3>Streaming Responses</h3>
<p>Sometimes you want to start sending out data while still generating parts of the response body. In extreme examples, you want to keep sending data until the client closes the connection. You can use the <code>stream</code> helper to avoid creating your own wrapper:</p>
<pre><code class="language-ruby">get '/' do
stream do |out|
out << "It's gonna be legen -\n"
sleep 0.5
out << " (wait for it) \n"
sleep 1
out << "- dary!\n"
end
end
</code></pre>
<p>This allows you to implement streaming APIs, <a href="https://w3c.github.io/eventsource/">Server Sent Events</a>, and can be used as the basis for <a href="https://en.wikipedia.org/wiki/WebSocket">WebSockets</a>. It can also be used to increase throughput if some but not all content depends on a slow resource.</p>
<p>Note that the streaming behavior, especially the number of concurrent requests, highly depends on the webserver used to serve the application. Some servers might not even support streaming at all. If the server does not support streaming, the body will be sent all at once after the block passed to <code>stream</code> finishes executing. Streaming does not work at all with Shotgun.</p>
<p>If the optional parameter is set to <code>keep_open</code>, it will not call <code>close</code> on the stream object, allowing you to close it at any later point in the execution flow.</p>
<p>You can have a look at the <a href="https://github.com/sinatra/sinatra/raw/main/examples/chat.rb">chat example</a></p>
<p>It's also possible for the client to close the connection when trying to write to the socket. Because of this, it's recommended to check <code>out.closed?</code> before trying to write.</p>
<h3>Logging</h3>
<p>In the request scope, the <code>logger</code> helper exposes a <code>Logger</code> instance:</p>
<pre><code class="language-ruby">get '/' do
logger.info "loading data"
# ...
end
</code></pre>
<p>This logger will automatically take your Rack handler's logging settings into account. If logging is disabled, this method will return a dummy object, so you do not have to worry about it in your routes and filters.</p>
<p>Note that logging is only enabled for <code>Sinatra::Application</code> by default, so if you inherit from <code>Sinatra::Base</code>, you probably want to enable it yourself:</p>
<pre><code class="language-ruby">class MyApp < Sinatra::Base
configure :production, :development do
enable :logging
end
end
</code></pre>
<p>To avoid any logging middleware to be set up, set the <code>logging</code> option to <code>nil</code>. However, keep in mind that <code>logger</code> will in that case return <code>nil</code>. A common use case is when you want to set your own logger. Sinatra will use whatever it will find in <code>env['rack.logger']</code>.</p>
<h3>Mime Types</h3>
<p>When using <code>send_file</code> or static files you may have mime types Sinatra doesn't understand. Use <code>mime_type</code> to register them by file extension:</p>
<pre><code class="language-ruby">configure do
mime_type :foo, 'text/foo'
end
</code></pre>
<p>You can also use it with the <code>content_type</code> helper:</p>
<pre><code class="language-ruby">get '/' do
content_type :foo
"foo foo foo"
end
</code></pre>
<h3>Generating URLs</h3>
<p>For generating URLs you should use the <code>url</code> helper method, for instance, in Haml:</p>
<pre><code class="language-ruby">%a{:href => url('/foo')} foo
</code></pre>
<p>It takes reverse proxies and Rack routers into account - if present.</p>
<p>This method is also aliased to <code>to</code> (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#browser-redirect">below</a> for an example).</p>
<h3>Browser Redirect</h3>
<p>You can trigger a browser redirect with the <code>redirect</code> helper method:</p>
<pre><code class="language-ruby">get '/foo' do
redirect to('/bar')
end
</code></pre>
<p>Any additional parameters are handled like arguments passed to <code>halt</code>:</p>
<pre><code class="language-ruby">redirect to('/bar'), 303
redirect 'http://www.google.com/', 'wrong place, buddy'
</code></pre>
<p>You can also easily redirect back to the page the user came from with <code>redirect back</code>:</p>
<pre><code class="language-ruby">get '/foo' do
"<a href='/bar'>do something</a>"
end
get '/bar' do
do_something
redirect back
end
</code></pre>
<p>To pass arguments with a redirect, either add them to the query:</p>
<pre><code class="language-ruby">redirect to('/bar?sum=42')
</code></pre>
<p>Or use a session:</p>
<pre><code class="language-ruby">enable :sessions
get '/foo' do
session[:secret] = 'foo'
redirect to('/bar')
end
get '/bar' do
session[:secret]
end
</code></pre>
<h3>Cache Control</h3>
<p>Setting your headers correctly is the foundation for proper HTTP caching.</p>
<p>You can easily set the Cache-Control header like this:</p>
<pre><code class="language-ruby">get '/' do
cache_control :public
"cache it!"
end
</code></pre>
<p>Pro tip: Set up caching in a before filter:</p>
<pre><code class="language-ruby">before do
cache_control :public, :must_revalidate, :max_age => 60
end
</code></pre>
<p>If you are using the <code>expires</code> helper to set the corresponding header, <code>Cache-Control</code> will be set automatically for you:</p>
<pre><code class="language-ruby">before do
expires 500, :public, :must_revalidate
end
</code></pre>
<p>To properly use caches, you should consider using <code>etag</code> or <code>last_modified</code>. It is recommended to call those helpers <em>before</em> doing any heavy lifting, as they will immediately flush a response if the client already has the current version in its cache:</p>
<pre><code class="language-ruby">get "/article/:id" do
@article = Article.find params['id']
last_modified @article.updated_at
etag @article.sha1
erb :article
end
</code></pre>
<p>It is also possible to use a <a href="https://en.wikipedia.org/wiki/HTTP_ETag#Strong_and_weak_validation">weak ETag</a>:</p>
<pre><code class="language-ruby">etag @article.sha1, :weak
</code></pre>
<p>These helpers will not do any caching for you, but rather feed the necessary information to your cache. If you are looking for a quick reverse-proxy caching solution, try <a href="https://github.com/rtomayko/rack-cache#readme">rack-cache</a>:</p>
<pre><code class="language-ruby">require "rack/cache"
require "sinatra"
use Rack::Cache
get '/' do
cache_control :public, :max_age => 36000
sleep 5
"hello"
end
</code></pre>
<p>Use the <code>:static_cache_control</code> setting (see <a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#cache-control">below</a>) to add <code>Cache-Control</code> header info to static files.</p>
<p>According to RFC 2616, your application should behave differently if the If-Match or If-None-Match header is set to <code>*</code>, depending on whether the resource requested is already in existence. Sinatra assumes resources for safe (like get) and idempotent (like put) requests are already in existence, whereas other resources (for instance post requests) are treated as new resources. You can change this behavior by passing in a <code>:new_resource</code> option:</p>
<pre><code class="language-ruby">get '/create' do
etag '', :new_resource => true
Article.create
erb :new_article
end
</code></pre>
<p>If you still want to use a weak ETag, pass in a <code>:kind</code> option:</p>
<pre><code class="language-ruby">etag '', :new_resource => true, :kind => :weak
</code></pre>
<h3>Sending Files</h3>
<p>To return the contents of a file as the response, you can use the <code>send_file</code> helper method:</p>
<pre><code class="language-ruby">get '/' do
send_file 'foo.png'
end
</code></pre>
<p>It also takes options:</p>
<pre><code class="language-ruby">send_file 'foo.png', :type => :jpg
</code></pre>
<p>The options are:</p>
<dl>
<dt>
filename
</dt>
<dd>
File name to be used in the response, defaults to the real file name.
</dd>
<dt>
last_modified
</dt>
<dd>
Value for Last-Modified header, defaults to the file's mtime.
</dd>
<dt>
type
</dt>
<dd>
Value for Content-Type header, guessed from the file extension if missing.
</dd>
<dt>
disposition
</dt>
<dd>
Value for Content-Disposition header, possible values:
<tt>nil</tt> (default),
<tt>:attachment</tt> and
<tt>:inline</tt>
</dd>
<dt>
length
</dt>
<dd>
Value for Content-Length header, defaults to file size.
</dd>
<dt>
status
</dt>
<dd>
Status code to be sent. Useful when sending a static file as an error page. If supported by the Rack handler, other means than streaming from the Ruby process will be used. If you use this helper method, Sinatra will automatically handle range requests.
</dd>
</dl>
<h3>Accessing the Request Object</h3>
<p>The incoming request object can be accessed from request level (filter, routes, error handlers) through the <code>request</code> method:</p>
<pre><code class="language-ruby"># app running on http://example.com/example
get '/foo' do
t = %w[text/css text/html application/javascript]
request.accept # ['text/html', '*/*']
request.accept? 'text/xml' # true
request.preferred_type(t) # 'text/html'
request.body # request body sent by the client (see below)
request.scheme # "http"
request.script_name # "/example"
request.path_info # "/foo"
request.port # 80
request.request_method # "GET"
request.query_string # ""
request.content_length # length of request.body
request.media_type # media type of request.body
request.host # "example.com"
request.get? # true (similar methods for other verbs)
request.form_data? # false
request["some_param"] # value of some_param parameter. [] is a shortcut to the params hash.
request.referrer # the referrer of the client or '/'
request.user_agent # user agent (used by :agent condition)
request.cookies # hash of browser cookies
request.xhr? # is this an ajax request?
request.url # "http://example.com/example/foo"
request.path # "/example/foo"
request.ip # client IP address
request.secure? # false (would be true over ssl)
request.forwarded? # true (if running behind a reverse proxy)
request.env # raw env hash handed in by Rack
end
</code></pre>
<p>Some options, like <code>script_name</code> or <code>path_info</code>, can also be written:</p>
<pre><code class="language-ruby">before { request.path_info = "/" }
get "/" do
"all requests end up here"
end
</code></pre>
<p>The <code>request.body</code> is an IO or StringIO object:</p>
<pre><code class="language-ruby">post "/api" do
request.body.rewind # in case someone already read it
data = JSON.parse request.body.read
"Hello #{data['name']}!"
end
</code></pre>
<h3>Attachments</h3>
<p>You can use the <code>attachment</code> helper to tell the browser the response should be stored on disk rather than displayed in the browser:</p>
<pre><code class="language-ruby">get '/' do
attachment
"store it!"
end
</code></pre>
<p>You can also pass it a file name:</p>
<pre><code class="language-ruby">get '/' do
attachment "info.txt"
"store it!"
end
</code></pre>
<h3>Dealing with Date and Time</h3>
<p>Sinatra offers a <code>time_for</code> helper method that generates a Time object from the given value. It is also able to convert <code>DateTime</code>, <code>Date</code> and similar classes:</p>
<pre><code class="language-ruby">get '/' do
pass if Time.now > time_for('Dec 23, 2016')
"still time"
end
</code></pre>
<p>This method is used internally by <code>expires</code>, <code>last_modified</code> and akin. You can therefore easily extend the behavior of those methods by overriding <code>time_for</code> in your application:</p>
<pre><code class="language-ruby">helpers do
def time_for(value)
case value
when :yesterday then Time.now - 24*60*60
when :tomorrow then Time.now + 24*60*60
else super
end
end
end
get '/' do
last_modified :yesterday
expires :tomorrow
"hello"
end
</code></pre>
<h3>Looking Up Template Files</h3>
<p>The <code>find_template</code> helper is used to find template files for rendering:</p>
<pre><code class="language-ruby">find_template settings.views, 'foo', Tilt[:haml] do |file|
puts "could be #{file}"
end
</code></pre>
<p>This is not really useful. But it is useful that you can actually override this method to hook in your own lookup mechanism. For instance, if you want to be able to use more than one view directory:</p>
<pre><code class="language-ruby">set :views, ['views', 'templates']
helpers do
def find_template(views, name, engine, &block)
Array(views).each { |v| super(v, name, engine, &block) }
end
end
</code></pre>
<p>Another example would be using different directories for different engines:</p>
<pre><code class="language-ruby">set :views, :haml => 'templates', :default => 'views'
helpers do
def find_template(views, name, engine, &block)
_, folder = views.detect { |k,v| engine == Tilt[k] }
folder ||= views[:default]
super(folder, name, engine, &block)
end
end
</code></pre>
<p>You can also easily wrap this up in an extension and share it with others!</p>
<p>Note that <code>find_template</code> does not check if the file really exists but rather calls the given block for all possible paths. This is not a performance issue, since <code>render</code> will use <code>break</code> as soon as a file is found. Also, template locations (and content) will be cached if you are not running in development mode. You should keep that in mind if you write a really crazy method.</p>
<h2>Configuration</h2>
<p>Run once, at startup, in any environment:</p>
<pre><code class="language-ruby">configure do
# setting one option
set :option, 'value'
# setting multiple options
set :a => 1, :b => 2
# same as `set :option, true`
enable :option
# same as `set :option, false`
disable :option
# you can also have dynamic settings with blocks
set(:css_dir) { File.join(views, 'css') }
end
</code></pre>
<p>Run only when the environment (<code>APP_ENV</code> environment variable) is set to <code>:production</code>:</p>
<pre><code class="language-ruby">configure :production do
...
end
</code></pre>
<p>Run when the environment is set to either <code>:production</code> or <code>:test</code>:</p>
<pre><code class="language-ruby">configure :production, :test do
...
end
</code></pre>
<p>You can access those options via <code>settings</code>:</p>
<pre><code class="language-ruby">configure do
set :foo, 'bar'
end
get '/' do
settings.foo? # => true
settings.foo # => 'bar'
...
end
</code></pre>
<h3>Configuring attack protection</h3>
<p>Sinatra is using <a href="https://github.com/sinatra/sinatra/tree/main/rack-protection#readme">Rack::Protection</a> to defend your application against common, opportunistic attacks. You can easily disable this behavior (which will open up your application to tons of common vulnerabilities):</p>
<pre><code class="language-ruby">disable :protection
</code></pre>
<p>To skip a single defense layer, set <code>protection</code> to an options hash:</p>
<pre><code class="language-ruby">set :protection, :except => :path_traversal
</code></pre>
<p>You can also hand in an array in order to disable a list of protections:</p>
<pre><code class="language-ruby">set :protection, :except => [:path_traversal, :remote_token]
</code></pre>
<p>By default, Sinatra will only set up session based protection if <code>:sessions</code> have been enabled. See '<a href="https://raw.githubusercontent.com/sinatra/sinatra/main/#using-sessions">Using Sessions</a>'. Sometimes you may want to set up sessions "outside" of the Sinatra app, such as in the config.ru or with a separate <code>Rack::Builder</code> instance. In that case, you can still set up session based protection by passing the <code>:session</code> option:</p>
<pre><code class="language-ruby">set :protection, :session => true
</code></pre>
<h3>Available Settings</h3>
<dl>
<dt>
absolute_redirects
</dt>
<dd>
If disabled, Sinatra will allow relative redirects, however, Sinatra will no longer conform with RFC 2616 (HTTP 1.1), which only allows absolute redirects.
</dd>
<dd>
Enable if your app is running behind a reverse proxy that has not been set up properly. Note that the
<tt>url</tt> helper will still produce absolute URLs, unless you pass in
<tt>false</tt> as the second parameter.
</dd>
<dd>
Disabled by default.
</dd>
<dt>
add_charset
</dt>
<dd>
Mime types the
<tt>content_type</tt> helper will automatically add the charset info to. You should add to it rather than overriding this option:
<tt>settings.add_charset << "application/foobar"</tt>
</dd>
<dt>
app_file
</dt>
<dd>
Path to the main application file, used to detect project root, views and public folder and inline templates.
</dd>
<dt>
bind
</dt>
<dd>
IP address to bind to (default:
<tt>0.0.0.0</tt>
<em>or</em>
<tt>localhost</tt> if your `environment` is set to development). Only used for built-in server.
</dd>
<dt>
default_content_type
</dt>
<dd>
Content-Type to assume if unknown (defaults to
<tt>"text/html"</tt>). Set to
<tt>nil</tt> to not set a default Content-Type on every response; when configured so, you must set the Content-Type manually when emitting content or the user-agent will have to sniff it (or, if
<tt>nosniff</tt> is enabled in Rack::Protection::XSSHeader, assume
<tt>application/octet-stream</tt>).
</dd>
<dt>
default_encoding
</dt>
<dd>
Encoding to assume if unknown (defaults to
<tt>"utf-8"</tt>).
</dd>
<dt>
dump_errors
</dt>
<dd>
Display errors in the log. Enabled by default unless environment is "test".
</dd>
<dt>
environment
</dt>
<dd>
Current environment. Defaults to
<tt>ENV['APP_ENV']</tt>, or
<tt>"development"</tt> if not available.
</dd>
<dt>
host_authorization
</dt>
<dd>
<p> You can pass a hash of options to <tt>host_authorization</tt>, to be used by the <tt>Rack::Protection::HostAuthorization</tt> middleware. </p>
<p> The middleware can block requests with unrecognized hostnames, to prevent DNS rebinding and other host header attacks. It checks the <tt>Host</tt>, <tt>X-Forwarded-Host</tt> and <tt>Forwarded</tt> headers. </p>
<p> Useful options are: </p>
<ul>
<li><tt>permitted_hosts</tt> – an array of hostnames (and <tt>IPAddr</tt> objects) your app recognizes
<ul>
<li>in the <tt>development</tt> environment, it is set to <tt>.localhost</tt>, <tt>.test</tt> and any IPv4/IPv6 address</li>
<li>if empty, any hostname is permitted (the default for any other environment)</li>
</ul> </li>
<li><tt>status</tt> – the HTTP status code used in the response when a request is blocked (defaults to <tt>403</tt>)</li>
<li><tt>message</tt> – the body used in the response when a request is blocked (defaults to <tt>Host not permitted</tt>)</li>
<li><tt>allow_if</tt> – supply a <tt>Proc</tt> to use custom allow/deny logic, the proc is passed the request environment</li>
</ul>
<p></p>
</dd>
<dt>
logging
</dt>
<dd>
Use the logger.
</dd>
<dt>
lock
</dt>
<dd>
Places a lock around every request, only running processing on request per Ruby process concurrently.
</dd>
<dd>
Enabled if your app is not thread-safe. Disabled by default.
</dd>
<dt>
method_override
</dt>
<dd>
Use
<tt>_method</tt> magic to allow put/delete forms in browsers that don't support it.
</dd>
<dt>
mustermann_opts
</dt>
<dd>
A default hash of options to pass to Mustermann.new when compiling routing paths.
</dd>
<dt>
port
</dt>
<dd>
Port to listen on. Only used for built-in server.
</dd>
<dt>
prefixed_redirects
</dt>
<dd>
Whether or not to insert
<tt>request.script_name</tt> into redirects if no absolute path is given. That way
<tt>redirect '/foo'</tt> would behave like
<tt>redirect to('/foo')</tt>. Disabled by default.
</dd>
<dt>
protection
</dt>
<dd>
Whether or not to enable web attack protections. See protection section above.
</dd>
<dt>
public_dir
</dt>
<dd>
Alias for
<tt>public_folder</tt>. See below.
</dd>
<dt>
public_folder
</dt>
<dd>
Path to the folder public files are served from. Only used if static file serving is enabled (see
<tt>static</tt> setting below). Inferred from
<tt>app_file</tt> setting if not set.
</dd>
<dt>
quiet
</dt>
<dd>
Disables logs generated by Sinatra's start and stop commands.
<tt>false</tt> by default.
</dd>
<dt>
reload_templates
</dt>
<dd>
Whether or not to reload templates between requests. Enabled in development mode.
</dd>
<dt>
root
</dt>
<dd>
Path to project root folder. Inferred from
<tt>app_file</tt> setting if not set.
</dd>
<dt>
raise_errors
</dt>
<dd>
Raise unhandled errors (will stop application). Enabled by default when
<tt>environment</tt> is set to
<tt>"test"</tt>, disabled otherwise.
</dd>
<dd>
Any explicitly defined error handlers always override this setting. See the "Error" section below.
</dd>
<dt>
run
</dt>
<dd>
If enabled, Sinatra will handle starting the web server. Do not enable if using rackup or other means.
</dd>
<dt>
running
</dt>
<dd>
Is the built-in server running now? Do not change this setting!
</dd>
<dt>
server
</dt>
<dd>
Server or list of servers to use for built-in server. Order indicates priority, default depends on Ruby implementation.
</dd>
<dt>
server_settings
</dt>
<dd>
You can pass a hash of options to
<tt>server_settings</tt>, such as
<tt>Host</tt> or
<tt>Port</tt>.
</dd>
<dt>
sessions
</dt>
<dd>
Enable cookie-based sessions support using
<tt>Rack::Session::Cookie</tt>. See 'Using Sessions' section for more information.
</dd>
<dt>
session_store
</dt>
<dd>
The Rack session middleware used. Defaults to
<tt>Rack::Session::Cookie</tt>. See 'Using Sessions' section for more information.
</dd>
<dt>
show_exceptions
</dt>
<dd>
Show a stack trace in the browser when an exception happens. Enabled by default when
<tt>environment</tt> is set to
<tt>"development"</tt>, disabled otherwise.
</dd>
<dd>
Can also be set to
<tt>:after_handler</tt> to trigger app-specified error handling before showing a stack trace in the browser.
</dd>
<dt>
static
</dt>
<dd>
Whether Sinatra should handle serving static files.
</dd>
<dd>
Disable when using a server able to do this on its own.
</dd>
<dd>
Disabling will boost performance.
</dd>
<dd>
Enabled by default in classic style, disabled for modular apps.
</dd>
<dt>
static_cache_control
</dt>
<dd>
When Sinatra is serving static files, set this to add
<tt>Cache-Control</tt> headers to the responses. Uses the
<tt>cache_control</tt> helper. Disabled by default.
</dd>
<dd>
Use an explicit array when setting multiple values:
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>
</dd>
<dt>
threaded
</dt>
<dd>
If set to
<tt>true</tt>, will tell server to use
<tt>EventMachine.defer</tt> for processing the request.
</dd>
<dt>
traps
</dt>
<dd>
Whether Sinatra should handle system signals.
</dd>
<dt>
views
</dt>
<dd>
Path to the views folder. Inferred from
<tt>app_file</tt> setting if not set.
</dd>
<dt>
x_cascade
</dt>
<dd>
Whether or not to set the X-Cascade header if no route matches. Defaults to
<tt>true</tt>.
</dd>
</dl>
<h2>Lifecycle Events</h2>
<p>There are 2 lifecycle events currently exposed by Sinatra. One when the server starts and one when it stops.</p>
<p>They can be used like this:</p>
<pre><code class="language-ruby">on_start do
puts "===== Booting up ====="
end
on_stop do
puts "===== Shutting down ====="
end
</code></pre>
<p>Note that these callbacks only work when using Sinatra to start the web server.</p>
<h2>Environments</h2>
<p>There are three predefined <code>environments</code>: <code>"development"</code>, <code>"production"</code> and <code>"test"</code>. Environments can be set through the <code>APP_ENV</code> environment variable. The default value is <code>"development"</code>. In the <code>"development"</code> environment all templates are reloaded between requests, and special <code>not_found</code> and <code>error</code> handlers display stack traces in your browser. In the <code>"production"</code> and <code>"test"</code> environments, templates are cached by default.</p>
<p>To run different environments, set the <code>APP_ENV</code> environment variable:</p>
<pre><code class="language-shell">APP_ENV=production ruby my_app.rb
</code></pre>
<p>You can use predefined methods: <code>development?</code>, <code>test?</code> and <code>production?</code> to check the current environment setting:</p>
<pre><code class="language-ruby">get '/' do
if settings.development?
"development!"
else
"not development!"
end
end
</code></pre>
<h2>Error Handling</h2>
<p>Error handlers run within the same context as routes and before filters, which means you get all the goodies it has to offer, like <code>haml</code>, <code>erb</code>, <code>halt</code>, etc.</p>
<h3>Not Found</h3>
<p>When a <code>Sinatra::NotFound</code> exception is raised, or the response's status code is 404, the <code>not_found</code> handler is invoked:</p>
<pre><code class="language-ruby">not_found do
'This is nowhere to be found.'
end
</code></pre>
<h3>Error</h3>
<p>The <code>error</code> handler is invoked any time an exception is raised from a route block or a filter. But note in development it will only run if you set the show exceptions option to <code>:after_handler</code>:</p>
<pre><code class="language-ruby">set :show_exceptions, :after_handler
</code></pre>
<p>A catch-all error handler can be defined with <code>error</code> and a block:</p>
<pre><code class="language-ruby">error do
'Sorry there was a nasty error'
end
</code></pre>
<p>The exception object can be obtained from the <code>sinatra.error</code> Rack variable:</p>
<pre><code class="language-ruby">error do
'Sorry there was a nasty error - ' + env['sinatra.error'].message
end
</code></pre>
<p>Pass an error class as an argument to create handlers for custom errors:</p>
<pre><code class="language-ruby">error MyCustomError do
'So what happened was...' + env['sinatra.error'].message
end
</code></pre>
<p>Then, if this happens:</p>
<pre><code class="language-ruby">get '/' do
raise MyCustomError, 'something bad'
end
</code></pre>
<p>You get this:</p>
<pre><code>So what happened was... something bad
</code></pre>
<p>Alternatively, you can install an error handler for a status code:</p>
<pre><code class="language-ruby">error 403 do
'Access forbidden'
end
get '/secret' do
403
end
</code></pre>
<p>Or a range:</p>
<pre><code class="language-ruby">error 400..510 do
'Boom'
end
</code></pre>
<p>Sinatra installs special <code>not_found</code> and <code>error</code> handlers when running under the development environment to display nice stack traces and additional debugging information in your browser.</p>
<h3>Behavior with <code>raise_errors</code> option</h3>
<p>When <code>raise_errors</code> option is <code>true</code>, errors that are unhandled are raised outside of the application. Additionally, any errors that would have been caught by the catch-all error handler are raised.</p>
<p>For example, consider the following configuration:</p>
<pre><code class="language-ruby"># First handler
error MyCustomError do
'A custom message'
end
# Second handler
error do
'A catch-all message'
end
</code></pre>
<p>If <code>raise_errors</code> is <code>false</code>:</p>
<ul>
<li>When <code>MyCustomError</code> or descendant is raised, the first handler is invoked. The HTTP response body will contain <code>"A custom message"</code>.</li>
<li>When any other error is raised, the second handler is invoked. The HTTP response body will contain <code>"A catch-all message"</code>.</li>
</ul>
<p>If <code>raise_errors</code> is <code>true</code>:</p>
<ul>
<li>When <code>MyCustomError</code> or descendant is raised, the behavior is identical to when <code>raise_errors</code> is <code>false</code>, described above.</li>
<li>When any other error is raised, the second handler is <em>not</em> invoked, and the error is raised outside of the application.
<ul>
<li>If the environment is <code>production</code>, the HTTP response body will contain a generic error message, e.g. <code>"An unhandled lowlevel error occurred. The application logs may have details."</code></li>
<li>If the environment is not <code>production</code>, the HTTP response body will contain the verbose error backtrace.</li>
<li>Regardless of environment, if <code>show_exceptions</code> is set to <code>:after_handler</code>, the HTTP response body will contain the verbose error backtrace.</li>
</ul> </li>
</ul>
<p>In the <code>test</code> environment, <code>raise_errors</code> is set to <code>true</code> by default. This means that in order to write a test for a catch-all error handler, <code>raise_errors</code> must temporarily be set to <code>false</code> for that particular test.</p>
<h2>Rack Middleware</h2>
<p>Sinatra rides on <a href="https://rack.github.io/">Rack</a>, a minimal standard interface for Ruby web frameworks. One of Rack's most interesting capabilities for application developers is support for "middleware" -- components that sit between the server and your application monitoring and/or manipulating the HTTP request/response to provide various types of common functionality.</p>
<p>Sinatra makes building Rack middleware pipelines a cinch via a top-level <code>use</code> method:</p>
<pre><code class="language-ruby">require 'sinatra'
require 'my_custom_middleware'
use Rack::Lint
use MyCustomMiddleware
get '/hello' do
'Hello World'
end
</code></pre>
<p>The semantics of <code>use</code> are identical to those defined for the <a href="https://www.rubydoc.info/github/rack/rack/main/Rack/Builder">Rack::Builder</a> DSL (most frequently used from rackup files). For example, the <code>use</code> method accepts multiple/variable args as well as blocks:</p>
<pre><code class="language-ruby">use Rack::Auth::Basic do |username, password|
username == 'admin' && password == 'secret'
end
</code></pre>
<p>Rack is distributed with a variety of standard middleware for logging, debugging, URL routing, authentication, and session handling. Sinatra uses many of these components automatically based on configuration so you typically don't have to <code>use</code> them explicitly.</p>
<p>You can find useful middleware in <a href="https://github.com/rack/rack/tree/main/lib/rack">rack</a>, <a href="https://github.com/rack/rack-contrib#readme">rack-contrib</a>, or in the <a href="https://github.com/rack/rack/wiki/List-of-Middleware">Rack wiki</a>.</p>
<h2>Testing</h2>
<p>Sinatra tests can be written using any Rack-based testing library or framework. <a href="https://www.rubydoc.info/github/rack/rack-test/main/frames">Rack::Test</a> is recommended:</p>
<pre><code class="language-ruby">require 'my_sinatra_app'
require 'minitest/autorun'
require 'rack/test'
class MyAppTest < Minitest::Test
include Rack::Test::Methods
def app
Sinatra::Application
end
def test_my_default
get '/'
assert_equal 'Hello World!', last_response.body
end
def test_with_params
get '/meet', :name => 'Frank'
assert_equal 'Hello Frank!', last_response.body
end
def test_with_user_agent
get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
assert_equal "You're using Songbird!", last_response.body
end
end
</code></pre>
<p>Note: If you are using Sinatra in the modular style, replace <code>Sinatra::Application</code> above with the class name of your app.</p>
<h2>Sinatra::Base - Middleware, Libraries, and Modular Apps</h2>
<p>Defining your app at the top-level works well for micro-apps but has considerable drawbacks when building reusable components such as Rack middleware, Rails metal, simple libraries with a server component, or even Sinatra extensions. The top-level assumes a micro-app style configuration (e.g., a single application file, <code>./public</code> and <code>./views</code> directories, logging, exception detail page, etc.). That's where <code>Sinatra::Base</code> comes into play:</p>
<pre><code class="language-ruby">require 'sinatra/base'
class MyApp < Sinatra::Base
set :sessions, true
set :foo, 'bar'
get '/' do
'Hello world!'
end
end
</code></pre>
<p>The methods available to <code>Sinatra::Base</code> subclasses are exactly the same as those available via the top-level DSL. Most top-level apps can be converted to <code>Sinatra::Base</code> components with two modifications:</p>
<ul>
<li>Your file should require <code>sinatra/base</code> instead of <code>sinatra</code>; otherwise, all of Sinatra's DSL methods are imported into the main namespace.</li>
<li>Put your app's routes, error handlers, filters, and options in a subclass of <code>Sinatra::Base</code>.</li>
</ul>
<p><code>Sinatra::Base</code> is a blank slate. Most options are disabled by default, including the built-in server. See <a href="http://www.sinatrarb.com/configuration.html">Configuring Settings</a> for details on available options and their behavior. If you want behavior more similar to when you define your app at the top level (also known as Classic style), you can subclass <code>Sinatra::Application</code>:</p>
<pre><code class="language-ruby">require 'sinatra/base'
class MyApp < Sinatra::Application
get '/' do
'Hello world!'
end
end
</code></pre>
<h3>Modular vs. Classic Style</h3>
<p>Contrary to common belief, there is nothing wrong with the classic style. If it suits your application, you do not have to switch to a modular application.</p>
<p>The main disadvantage of using the classic style rather than the modular style is that you will only have one Sinatra application per Ruby process. If you plan to use more than one, switch to the modular style. There is no reason you cannot mix the modular and classic styles.</p>
<p>If switching from one style to the other, you should be aware of slightly different default settings:</p>
<table>
<tbody>
<tr>
<th>Setting</th>
<th>Classic</th>
<th>Modular</th>
<th>Modular</th>
</tr>
<tr>
<td>app_file</td>
<td>file loading sinatra</td>
<td>file subclassing Sinatra::Base</td>
<td>file subclassing Sinatra::Application</td>
</tr>
<tr>
<td>run</td>
<td>$0 == app_file</td>
<td>false</td>
<td>false</td>
</tr>
<tr>
<td>logging</td>
<td>true</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>method_override</td>
<td>true</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>inline_templates</td>
<td>true</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>static</td>
<td>true</td>
<td>File.exist?(public_folder)</td>
<td>true</td>
</tr>
</tbody>
</table>
<h3>Serving a Modular Application</h3>
<p>There are two common options for starting a modular app, actively starting with <code>run!</code>:</p>
<pre><code class="language-ruby"># my_app.rb
require 'sinatra/base'
class MyApp < Sinatra::Base
# ... app code here ...
# start the server if ruby file executed directly
run! if app_file == $0
end
</code></pre>
<p>Start with:</p>
<pre><code class="language-shell">ruby my_app.rb
</code></pre>
<p>Or with a <code>config.ru</code> file, which allows using any Rack handler:</p>
<pre><code class="language-ruby"># config.ru (run with rackup)
require './my_app'
run MyApp
</code></pre>
<p>Run:</p>
<pre><code class="language-shell">rackup -p 4567
</code></pre>
<h3>Using a Classic Style Application with a config.ru</h3>
<p>Write your app file:</p>
<pre><code class="language-ruby"># app.rb
require 'sinatra'
get '/' do
'Hello world!'
end
</code></pre>
<p>And a corresponding <code>config.ru</code>:</p>
<pre><code class="language-ruby">require './app'
run Sinatra::Application
</code></pre>
<h3>When to use a config.ru?</h3>
<p>A <code>config.ru</code> file is recommended if:</p>
<ul>
<li>You want to deploy with a different Rack handler (Passenger, Unicorn, Heroku, ...).</li>
<li>You want to use more than one subclass of <code>Sinatra::Base</code>.</li>
<li>You want to use Sinatra only for middleware, and not as an endpoint.</li>
</ul>
<p><strong>There is no need to switch to a <code>config.ru</code> simply because you switched to the modular style, and you don't have to use the modular style for running with a <code>config.ru</code>.</strong></p>
<h3>Using Sinatra as Middleware</h3>
<p>Not only is Sinatra able to use other Rack middleware, any Sinatra application can, in turn, be added in front of any Rack endpoint as middleware itself. This endpoint could be another Sinatra application, or any other Rack-based application (Rails/Hanami/Roda/...):</p>
<pre><code class="language-ruby">require 'sinatra/base'
class LoginScreen < Sinatra::Base
enable :sessions
get('/login') { haml :login }
post('/login') do
if params['name'] == 'admin' && params['password'] == 'admin'
session['user_name'] = params['name']
else
redirect '/login'
end
end
end
class MyApp < Sinatra::Base
# middleware will run before filters
use LoginScreen
before do
unless session['user_name']
halt "Access denied, please <a href='/login'>login</a>."
end
end
get('/') { "Hello #{session['user_name']}." }
end
</code></pre>
<h3>Dynamic Application Creation</h3>
<p>Sometimes you want to create new applications at runtime without having to assign them to a constant. You can do this with <code>Sinatra.new</code>:</p>
<pre><code class="language-ruby">require 'sinatra/base'
my_app = Sinatra.new { get('/') { "hi" } }
my_app.run!
</code></pre>
<p>It takes the application to inherit from as an optional argument:</p>
<pre><code class="language-ruby"># config.ru (run with rackup)
require 'sinatra/base'
controller = Sinatra.new do
enable :logging
helpers MyHelpers
end
map('/a') do
run Sinatra.new(controller) { get('/') { 'a' } }
end
map('/b') do
run Sinatra.new(controller) { get('/') { 'b' } }
end
</code></pre>
<p>This is especially useful for testing Sinatra extensions or using Sinatra in your own library.</p>
<p>This also makes using Sinatra as middleware extremely easy:</p>
<pre><code class="language-ruby">require 'sinatra/base'
use Sinatra do
get('/') { ... }
end
run RailsProject::Application
</code></pre>
<h2>Scopes and Binding</h2>
<p>The scope you are currently in determines what methods and variables are available.</p>
<h3>Application/Class Scope</h3>
<p>Every Sinatra application corresponds to a subclass of <code>Sinatra::Base</code>. If you are using the top-level DSL (<code>require 'sinatra'</code>), then this class is <code>Sinatra::Application</code>, otherwise it is the subclass you created explicitly. At the class level, you have methods like <code>get</code> or <code>before</code>, but you cannot access the <code>request</code> or <code>session</code> objects, as there is only a single application class for all requests.</p>
<p>Options created via <code>set</code> are methods at class level:</p>
<pre><code class="language-ruby">class MyApp < Sinatra::Base
# Hey, I'm in the application scope!
set :foo, 42
foo # => 42
get '/foo' do
# Hey, I'm no longer in the application scope!
end
end
</code></pre>
<p>You have the application scope binding inside:</p>
<ul>
<li>Your application class body</li>
<li>Methods defined by extensions</li>
<li>The block passed to <code>helpers</code></li>
<li>Procs/blocks used as a value for <code>set</code></li>
<li>The block passed to <code>Sinatra.new</code></li>
</ul>
<p>You can reach the scope object (the class) like this:</p>
<ul>
<li>Via the object passed to configure blocks (<code>configure { |c| ... }</code>)</li>
<li><code>settings</code> from within the request scope</li>
</ul>
<h3>Request/Instance Scope</h3>
<p>For every incoming request, a new instance of your application class is created, and all handler blocks run in that scope. From within this scope you can access the <code>request</code> and <code>session</code> objects or call rendering methods like <code>erb</code> or <code>haml</code>. You can access the application scope from within the request scope via the <code>settings</code> helper:</p>
<pre><code class="language-ruby">class MyApp < Sinatra::Base
# Hey, I'm in the application scope!
get '/define_route/:name' do
# Request scope for '/define_route/:name'
@value = 42
settings.get("/#{params['name']}") do
# Request scope for "/#{params['name']}"
@value # => nil (not the same request)
end
"Route defined!"
end
end
</code></pre>
<p>You have the request scope binding inside:</p>
<ul>
<li>get, head, post, put, delete, options, patch, link and unlink blocks</li>
<li>before and after filters</li>
<li>helper methods</li>
<li>templates/views</li>
</ul>
<h3>Delegation Scope</h3>
<p>The delegation scope just forwards methods to the class scope. However, it does not behave exactly like the class scope, as you do not have the class binding. Only methods explicitly marked for delegation are available, and you do not share variables/state with the class scope (read: you have a different <code>self</code>). You can explicitly add method delegations by calling <code>Sinatra::Delegator.delegate :method_name</code>.</p>
<p>You have the delegate scope binding inside:</p>
<ul>
<li>The top-level binding, if you did <code>require "sinatra"</code></li>
<li>An object extended with the <code>Sinatra::Delegator</code> mixin</li>
</ul>
<p>Have a look at the code for yourself: here's the <a href="https://github.com/sinatra/sinatra/raw/ca06364/lib/sinatra/base.rb#L1609-1633">Sinatra::Delegator mixin</a> being <a href="https://github.com/sinatra/sinatra/raw/ca06364/lib/sinatra/main.rb#L28-30">extending the main object</a>.</p>
<h2>Command Line</h2>
<p>Sinatra applications can be run directly:</p>
<pre><code class="language-shell">ruby myapp.rb [-h] [-x] [-q] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
</code></pre>
<p>Options are:</p>
<pre><code>-h # help
-p # set the port (default is 4567)
-o # set the host (default is 0.0.0.0)
-e # set the environment (default is development)
-s # specify rack server/handler (default is puma)
-q # turn on quiet mode for server (default is off)
-x # turn on the mutex lock (default is off)
</code></pre>
<h3>Multi-threading</h3>
<p><em>Paraphrasing from <a href="https://stackoverflow.com/a/6282999/5245129">this StackOverflow answer</a> by Konstantin</em></p>
<p>Sinatra doesn't impose any concurrency model but leaves that to the underlying Rack handler (server) like Puma or Falcon. Sinatra itself is thread-safe, so there won't be any problem if the Rack handler uses a threaded model of concurrency.</p>
<h2>Requirement</h2>
<p>The following Ruby versions are officially supported:</p>
<dl>
<dt>
Ruby
</dt>
<dd>
<a href="https://www.ruby-lang.org/en/downloads/">The stable releases</a> are fully supported and recommended.
</dd>
<dt>
TruffleRuby
</dt>
<dd>
The latest stable release of TruffleRuby is supported.
</dd>
<dt>
JRuby
</dt>
<dd>
The latest stable release of JRuby is supported. It is not recommended to use C extensions with JRuby.
</dd>
</dl>
<p>Versions of Ruby before 2.7.8 are no longer supported as of Sinatra 4.0.0.</p>
<p>Sinatra should work on any operating system supported by the chosen Ruby implementation.</p>
<p>Running Sinatra on a not officially supported Ruby flavor means that if things only break there we assume it's not our issue but theirs.</p>
<h2>The Bleeding Edge</h2>
<p>If you would like to use Sinatra's latest bleeding-edge code, feel free to run your application against the main branch, it should be rather stable.</p>
<p>We also push out prerelease gems from time to time, so you can do a</p>
<pre><code class="language-shell">gem install sinatra --pre
</code></pre>
<p>to get some of the latest features.</p>
<h3>With Bundler</h3>
<p>If you want to run your application with the latest Sinatra, using <a href="https://bundler.io">Bundler</a> is the recommended way.</p>
<p>First, install bundler, if you haven't:</p>
<pre><code class="language-shell">gem install bundler
</code></pre>
<p>Then, in your project directory, create a <code>Gemfile</code>:</p>
<pre><code class="language-ruby">source 'https://rubygems.org'
gem 'sinatra', :github => 'sinatra/sinatra'
# other dependencies
gem 'haml' # for instance, if you use haml
</code></pre>
<p>Note that you will have to list all your application's dependencies in the <code>Gemfile</code>. Sinatra's direct dependencies (Rack and Tilt) will, however, be automatically fetched and added by Bundler.</p>
<p>Now you can run your app like this:</p>
<pre><code class="language-shell">bundle exec ruby myapp.rb
</code></pre>
<h2>Versioning</h2>
<p>Sinatra follows <a href="https://semver.org/">Semantic Versioning</a>, both SemVer and SemVerTag.</p>
<h2>Further Reading</h2>
<ul>
<li><a href="https://sinatrarb.com/">Project Website</a> - Additional documentation, news, and links to other resources.</li>
<li><a href="https://sinatrarb.com/contributing">Contributing</a> - Find a bug? Need help? Have a patch?</li>
<li><a href="https://github.com/sinatra/sinatra/issues">Issue tracker</a></li>
<li><a href="https://twitter.com/sinatra">Twitter</a></li>
<li><a href="https://groups.google.com/forum/#!forum/sinatrarb">Mailing List</a></li>
<li>IRC: <a href="irc://chat.freenode.net/#sinatra">#sinatra</a> on <a href="https://freenode.net">Freenode</a></li>
<li><a href="https://discord.gg/ncjsfsNHh7">Sinatra & Friends</a> on Discord</li>
<li><a href="https://github.com/sinatra/sinatra-book">Sinatra Book</a> - Cookbook Tutorial</li>
<li><a href="http://recipes.sinatrarb.com/">Sinatra Recipes</a> - Community contributed recipes</li>
<li>API documentation for the <a href="https://www.rubydoc.info/gems/sinatra">latest release</a> or the <a href="https://www.rubydoc.info/github/sinatra/sinatra">current HEAD</a> on <a href="https://www.rubydoc.info/">RubyDoc</a></li>
<li><a href="https://github.com/sinatra/sinatra/actions">CI Actions</a></li>
</ul>
+
+
\ No newline at end of file
diff --git a/runoff/daily/index.xml b/runoff/daily/index.xml
index b85b876e027..8f70c87bdb5 100644
--- a/runoff/daily/index.xml
+++ b/runoff/daily/index.xml
@@ -1,7 +1,7 @@
GitHub RUNOFF Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:14Z
+ 2024-12-01T01:38:28Z
Daily Trending of RUNOFF in GitHub
\ No newline at end of file
diff --git a/runoff/monthly/index.xml b/runoff/monthly/index.xml
new file mode 100644
index 00000000000..a1ff9ed2b13
--- /dev/null
+++ b/runoff/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RUNOFF Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:47Z
+ Monthly Trending of RUNOFF in GitHub
+
+
\ No newline at end of file
diff --git a/runoff/weekly/index.xml b/runoff/weekly/index.xml
new file mode 100644
index 00000000000..e2cdf7a0ba8
--- /dev/null
+++ b/runoff/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub RUNOFF Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:26Z
+ Weekly Trending of RUNOFF in GitHub
+
+
\ No newline at end of file
diff --git a/rust/daily/index.xml b/rust/daily/index.xml
index ac52e80800f..02cc8c33260 100644
--- a/rust/daily/index.xml
+++ b/rust/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Rust Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:17Z
+ 2024-12-01T01:38:30Z
Daily Trending of Rust in GitHub
+
+ rust-cli/config-rs
+ 2024-12-01T01:38:30Z
+ tag:github.com,2024-12-01:/rust-cli/config-rs
+
+ <p>⚙️ Layered configuration system for Rust applications (with strong support for 12-factor applications).</p><hr><h1>config-rs</h1>
<p><img src="https://img.shields.io/badge/rust-stable-brightgreen.svg?sanitize=true" alt="Rust"> <a href="https://travis-ci.org/mehcode/config-rs"><img src="https://travis-ci.org/mehcode/config-rs.svg?branch=master" alt="Build Status"></a> <a href="https://crates.io/crates/config"><img src="https://img.shields.io/crates/d/config.svg?sanitize=true" alt="Crates.io"></a> <a href="https://docs.rs/config"><img src="https://docs.rs/config/badge.svg?sanitize=true" alt="Docs.rs"></a></p>
<blockquote>
<p>Layered configuration system for Rust applications (with strong support for <a href="https://12factor.net/config">12-factor</a> applications).</p>
</blockquote>
<ul>
<li>Set defaults</li>
<li>Set explicit values (to programmatically override)</li>
<li>Read from <a href="https://github.com/serde-rs/json">JSON</a>, <a href="https://github.com/toml-lang/toml">TOML</a>, <a href="https://github.com/Ethiraric/yaml-rust2">YAML</a>, <a href="https://github.com/zonyitoo/rust-ini">INI</a>, <a href="https://github.com/ron-rs/ron">RON</a>, <a href="https://github.com/callum-oakley/json5-rs">JSON5</a> files</li>
<li>Read from environment</li>
<li>Loosely typed — Configuration values may be read in any supported type, as long as there exists a reasonable conversion</li>
<li>Access nested fields using a formatted path — Uses a subset of JSONPath; currently supports the child ( <code>redis.port</code> ) and subscript operators ( <code>databases[0].name</code> )</li>
</ul>
<p>Please note this library</p>
<ul>
<li>can not be used to write changed configuration values back to the configuration file(s)!</li>
<li>Is case insensitive and all the keys are converted to lowercase internally</li>
</ul>
<h2>Usage</h2>
<pre><code class="language-toml">[dependencies]
config = "0.14.0"
</code></pre>
<h3>Feature flags</h3>
<ul>
<li><code>ini</code> - Adds support for reading INI files</li>
<li><code>json</code> - Adds support for reading JSON files</li>
<li><code>yaml</code> - Adds support for reading YAML files</li>
<li><code>toml</code> - Adds support for reading TOML files</li>
<li><code>ron</code> - Adds support for reading RON files</li>
<li><code>json5</code> - Adds support for reading JSON5 files</li>
</ul>
<h3>Support for custom formats</h3>
<p>Library provides out of the box support for most renowned data formats such as JSON or Yaml. Nonetheless, it contains an extensibility point - a <code>Format</code> trait that, once implemented, allows seamless integration with library's APIs using custom, less popular or proprietary data formats.</p>
<p>See <a href="https://github.com/mehcode/config-rs/tree/master/examples/custom_file_format">custom_file_format</a> example for more information.</p>
<h3>More</h3>
<p>See the <a href="https://docs.rs/config">documentation</a> or <a href="https://github.com/mehcode/config-rs/tree/master/examples">examples</a> for more usage information.</p>
<h2>License</h2>
<p>Licensed under either of</p>
<ul>
<li>Apache License, Version 2.0, (<a href="https://raw.githubusercontent.com/rust-cli/config-rs/main/LICENSE-APACHE">LICENSE-APACHE</a> or <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
<li>MIT license (<a href="https://raw.githubusercontent.com/rust-cli/config-rs/main/LICENSE-MIT">LICENSE-MIT</a> or <a href="http://opensource.org/licenses/MIT">http://opensource.org/licenses/MIT</a>)</li>
</ul>
<p>at your option.</p>
+
\ No newline at end of file
diff --git a/rust/monthly/index.xml b/rust/monthly/index.xml
new file mode 100644
index 00000000000..32a0a3de53d
--- /dev/null
+++ b/rust/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Rust Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:50Z
+ Monthly Trending of Rust in GitHub
+
+
+ chroma-core/chroma
+ 2024-12-01T01:57:50Z
+ tag:github.com,2024-12-01:/chroma-core/chroma
+
+ <p>the AI-native open-source embedding database</p><hr><p align="center"> <a href="https://trychroma.com"><img src="https://user-images.githubusercontent.com/891664/227103090-6624bf7d-9524-4e05-9d2c-c28d5d451481.png" alt="Chroma logo"></a> </p>
<p align="center"> <b>Chroma - the open-source embedding database</b>. <br> The fastest way to build Python or JavaScript LLM apps with memory! </p>
<p align="center"> <a href="https://discord.gg/MMeYNTmh3x" target="_blank"> <img src="https://img.shields.io/discord/1073293645303795742?cacheSeconds=3600" alt="Discord"> </a> | <a href="https://github.com/chroma-core/chroma/raw/master/LICENSE" target="_blank"> <img src="https://img.shields.io/static/v1?label=license&message=Apache%202.0&color=white" alt="License"> </a> | <a href="https://docs.trychroma.com/" target="_blank"> Docs </a> | <a href="https://www.trychroma.com/" target="_blank"> Homepage </a> </p>
<pre><code class="language-bash">pip install chromadb # python client
# for javascript, npm install chromadb!
# for client-server mode, chroma run --path /chroma_db_path
</code></pre>
<p>The core API is only 4 functions (run our <a href="https://colab.research.google.com/drive/1QEzFyqnoFxq7LUGyP1vzR4iLt9PpCDXv?usp=sharing">💡 Google Colab</a> or <a href="https://replit.com/@swyx/BasicChromaStarter?v=1">Replit template</a>):</p>
<pre><code class="language-python">import chromadb
# setup Chroma in-memory, for easy prototyping. Can add persistence easily!
client = chromadb.Client()
# Create collection. get_collection, get_or_create_collection, delete_collection also available!
collection = client.create_collection("all-my-documents")
# Add docs to the collection. Can also update and delete. Row-based API coming soon!
collection.add(
documents=["This is document1", "This is document2"], # we handle tokenization, embedding, and indexing automatically. You can skip that and add your own embeddings as well
metadatas=[{"source": "notion"}, {"source": "google-docs"}], # filter on these!
ids=["doc1", "doc2"], # unique for each doc
)
# Query/search 2 most similar results. You can also .get by id
results = collection.query(
query_texts=["This is a query document"],
n_results=2,
# where={"metadata_field": "is_equal_to_this"}, # optional filter
# where_document={"$contains":"search_string"} # optional filter
)
</code></pre>
<h2>Features</h2>
<ul>
<li><strong>Simple</strong>: Fully-typed, fully-tested, fully-documented == happiness</li>
<li><strong>Integrations</strong>: <a href="https://blog.langchain.dev/langchain-chroma/"><code>🦜️🔗 LangChain</code></a> (python and js), <a href="https://twitter.com/atroyn/status/1628557389762007040"><code>🦙 LlamaIndex</code></a> and more soon</li>
<li><strong>Dev, Test, Prod</strong>: the same API that runs in your python notebook, scales to your cluster</li>
<li><strong>Feature-rich</strong>: Queries, filtering, density estimation and more</li>
<li><strong>Free & Open Source</strong>: Apache 2.0 Licensed</li>
</ul>
<h2>Use case: ChatGPT for ______</h2>
<p>For example, the <code>"Chat your data"</code> use case:</p>
<ol>
<li>Add documents to your database. You can pass in your own embeddings, embedding function, or let Chroma embed them for you.</li>
<li>Query relevant documents with natural language.</li>
<li>Compose documents into the context window of an LLM like <code>GPT3</code> for additional summarization or analysis.</li>
</ol>
<h2>Embeddings?</h2>
<p>What are embeddings?</p>
<ul>
<li><a href="https://platform.openai.com/docs/guides/embeddings/what-are-embeddings">Read the guide from OpenAI</a></li>
<li><strong>Literal</strong>: Embedding something turns it from image/text/audio into a list of numbers. 🖼️ or 📄 => <code>[1.2, 2.1, ....]</code>. This process makes documents "understandable" to a machine learning model.</li>
<li><strong>By analogy</strong>: An embedding represents the essence of a document. This enables documents and queries with the same essence to be "near" each other and therefore easy to find.</li>
<li><strong>Technical</strong>: An embedding is the latent-space position of a document at a layer of a deep neural network. For models trained specifically to embed data, this is the last layer.</li>
<li><strong>A small example</strong>: If you search your photos for "famous bridge in San Francisco". By embedding this query and comparing it to the embeddings of your photos and their metadata - it should return photos of the Golden Gate Bridge.</li>
</ul>
<p>Embeddings databases (also known as <strong>vector databases</strong>) store embeddings and allow you to search by nearest neighbors rather than by substrings like a traditional database. By default, Chroma uses <a href="https://docs.trychroma.com/guides/embeddings#default:-all-minilm-l6-v2">Sentence Transformers</a> to embed for you but you can also use OpenAI embeddings, Cohere (multilingual) embeddings, or your own.</p>
<h2>Get involved</h2>
<p>Chroma is a rapidly developing project. We welcome PR contributors and ideas for how to improve the project.</p>
<ul>
<li><a href="https://discord.gg/MMeYNTmh3x">Join the conversation on Discord</a> - <code>#contributing</code> channel</li>
<li><a href="https://docs.trychroma.com/roadmap">Review the 🛣️ Roadmap and contribute your ideas</a></li>
<li><a href="https://github.com/chroma-core/chroma/issues">Grab an issue and open a PR</a> - <a href="https://github.com/chroma-core/chroma/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22"><code>Good first issue tag</code></a></li>
<li><a href="https://docs.trychroma.com/contributing">Read our contributing guide</a></li>
</ul>
<p><strong>Release Cadence</strong> We currently release new tagged versions of the <code>pypi</code> and <code>npm</code> packages on Mondays. Hotfixes go out at any time during the week.</p>
<h2>License</h2>
<p><a href="https://raw.githubusercontent.com/chroma-core/chroma/main/LICENSE">Apache 2.0</a></p>
+
+
+ solana-labs/solana-program-library
+ 2024-12-01T01:57:50Z
+ tag:github.com,2024-12-01:/solana-labs/solana-program-library
+
+ <p>A collection of Solana programs maintained by Solana Labs</p><hr><h1>Solana Program Library</h1>
<p>The Solana Program Library (SPL) is a collection of on-chain programs targeting the <a href="https://medium.com/solana-labs/sealevel-parallel-processing-thousands-of-smart-contracts-d814b378192">Sealevel parallel runtime</a>. These programs are tested against Solana's implementation of Sealevel, solana-runtime, and some are deployed to Mainnet Beta. As others implement Sealevel, we will graciously accept patches to ensure the programs here are portable across all implementations.</p>
<p>For more information see the <a href="https://spl.solana.com">SPL documentation</a> and the <a href="https://solana-labs.github.io/solana-program-library/token/js/">Token TypeDocs</a>.</p>
<h2>Deployments</h2>
<p>Only a subset of programs within the Solana Program Library repo are deployed to the Solana Mainnet Beta. Currently, this includes:</p>
<table>
<thead>
<tr>
<th>Program</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/token/program">token</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/token-v3.4.0">3.4.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/associated-token-account/program">associated-token-account</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/associated-token-account-v1.1.0">1.1.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/token/program-2022">token-2022</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/token-2022-v1.0.0">1.0.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/governance/program">governance</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/governance-v3.1.0">3.1.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/stake-pool/program">stake-pool</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/stake-pool-v1.0.0">1.0.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/account-compression/programs/account-compression">account-compression</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/account-compression-v0.1.3">0.1.3</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/shared-memory/program">shared-memory</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/b40e0dd3fd6c0e509dc1e8dd3da0a6d609035bbd">1.0.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/feature-proposal/program">feature-proposal</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/feature-proposal-v1.0.0">1.0.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/name-service/program">name-service</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/name-service-v0.3.0">0.3.0</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/memo/program">memo</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/memo-v3.0.0">3.0.0</a></td>
</tr>
</tbody>
</table>
<p>In addition, one program is planned for deployment to Solana Mainnet Beta:</p>
<table>
<thead>
<tr>
<th>Program</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/single-pool/program">single-pool</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/releases/tag/single-pool-v1.0.1">1.0.1</a></td>
</tr>
</tbody>
</table>
<h2>Audits</h2>
<p>Only a subset of programs within the Solana Program Library repo are audited. Currently, this includes:</p>
<table>
<thead>
<tr>
<th>Program</th>
<th>Last Audit Date</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/token/program">token</a></td>
<td>2022-08-04 (Peer review)</td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/4fadd553e1c549afd1d62aeb5ffa7ef31d1999d1">4fadd55</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/associated-token-account/program">associated-token-account</a></td>
<td>2022-08-04 (Peer review)</td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/c00194d2257302f028f44a403c6dee95c0f9c3bc">c00194d</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/token/program-2022">token-2022</a></td>
<td><a href="https://github.com/solana-labs/security-audits/raw/master/spl/OtterSecToken2022Audit-2023-11-03.pdf">2023-11-03</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/e924132d65ba0896249fb4983f6f97caff15721a">e924132</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/stake-pool/program">stake-pool</a></td>
<td><a href="https://github.com/solana-labs/security-audits/raw/master/spl/HalbornStakePoolAudit-2023-12-31.pdf">2023-12-31</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/a17fffe70d6cc13742abfbc4a4a375b087580bc1">a17fffe</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/account-compression/programs/account-compression">account-compression</a></td>
<td><a href="https://github.com/solana-labs/security-audits/raw/master/spl/OtterSecAccountCompressionAudit-2022-12-03.pdf">2022-12-05</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/6e81794">6e81794</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/shared-memory/program">shared-memory</a></td>
<td><a href="https://github.com/solana-labs/security-audits/raw/master/spl/KudelskiTokenSwapSharedMemAudit-2021-02-25.pdf">2021-02-25</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/b40e0dd3fd6c0e509dc1e8dd3da0a6d609035bbd">b40e0dd</a></td>
</tr>
<tr>
<td><a href="https://github.com/solana-labs/solana-program-library/tree/master/single-pool/program">single-pool</a></td>
<td><a href="https://github.com/solana-labs/security-audits/raw/master/spl/ZellicSinglePoolAudit-2024-01-02.pdf">2024-01-02</a></td>
<td><a href="https://github.com/solana-labs/solana-program-library/commit/ef44df985e76a697ee9a8aabb3a223610e4cf1dc">ef44df9</a></td>
</tr>
</tbody>
</table>
<p>All other programs may be updated from time to time. These programs are not audited, so fork and deploy them at your own risk. Here is the full list of unaudited programs:</p>
<ul>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/binary-option/program">binary-option</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/binary-oracle-pair/program">binary-oracle-pair</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/feature-proposal/program">feature-proposal</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/instruction-padding/program">instruction-padding</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/managed-token/program">managed-token</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/memo/program">memo</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/name-service/program">name-service</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/record/program">record</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/stateless-asks/program">stateless-asks</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/token-lending/program">token-lending</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/token-swap/program">token-swap</a></li>
<li><a href="https://github.com/solana-labs/solana-program-library/tree/master/token-upgrade/program">token-upgrade</a></li>
</ul>
<p>More information about the repository's security policy at <a href="https://github.com/solana-labs/solana-program-library/tree/master/SECURITY.md">SECURITY.md</a>.</p>
<p>The <a href="https://github.com/solana-labs/security-audits">security-audits repo</a> contains all past and present program audits.</p>
<h2>Program Packages</h2>
<table>
<thead>
<tr>
<th align="left">Package</th>
<th align="left">Description</th>
<th align="left">Version</th>
<th align="left">Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>spl-token</code></td>
<td align="left">ERC20-like token program on Solana</td>
<td align="left"><a href="https://crates.io/crates/spl-token"><img src="https://img.shields.io/crates/v/spl-token" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-token"><img src="https://docs.rs/spl-token/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-2022</code></td>
<td align="left">Token program compatible with <code>spl-token</code>, with extensions</td>
<td align="left"><a href="https://crates.io/crates/spl-token-2022"><img src="https://img.shields.io/crates/v/spl-token-2022" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-token-2022"><img src="https://docs.rs/spl-token-2022/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-associated-token-account</code></td>
<td align="left">Stateless protocol defining a canonical "associated" token account for a wallet</td>
<td align="left"><a href="https://crates.io/crates/spl-associated-token-account"><img src="https://img.shields.io/crates/v/spl-associated-token-account" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-associated-token-account"><img src="https://docs.rs/spl-associated-token-account/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-governance</code></td>
<td align="left">DAO program using tokens for voting</td>
<td align="left"><a href="https://crates.io/crates/spl-governance"><img src="https://img.shields.io/crates/v/spl-governance" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-governance"><img src="https://docs.rs/spl-governance/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-account-compression</code></td>
<td align="left">Program for managing compressed accounts stored in an off-chain merkle tree</td>
<td align="left"><a href="https://crates.io/crates/spl-account-compression"><img src="https://img.shields.io/crates/v/spl-account-compression" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-account-compression"><img src="https://docs.rs/spl-account-compression/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-feature-proposal</code></td>
<td align="left">Program using tokens to vote on enabling Solana network features</td>
<td align="left"><a href="https://crates.io/crates/spl-feature-proposal"><img src="https://img.shields.io/crates/v/spl-feature-proposal" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-feature-proposal"><img src="https://docs.rs/spl-feature-proposal/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-noop</code></td>
<td align="left">Program that does nothing, used for logging instruction data</td>
<td align="left"><a href="https://crates.io/crates/spl-noop"><img src="https://img.shields.io/crates/v/spl-noop" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-noop"><img src="https://docs.rs/spl-noop/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-memo</code></td>
<td align="left">Program for logging signed memos on-chain</td>
<td align="left"><a href="https://crates.io/crates/spl-memo"><img src="https://img.shields.io/crates/v/spl-memo" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-memo"><img src="https://docs.rs/spl-memo/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-name-service</code></td>
<td align="left">Program for managing ownership of data on-chain</td>
<td align="left"><a href="https://crates.io/crates/spl-name-service"><img src="https://img.shields.io/crates/v/spl-name-service" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-name-service"><img src="https://docs.rs/spl-name-service/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-shared-memory</code></td>
<td align="left">Program for sharing data between programs</td>
<td align="left"><a href="https://crates.io/crates/spl-shared-memory"><img src="https://img.shields.io/crates/v/spl-shared-memory" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-shared-memory"><img src="https://docs.rs/spl-shared-memory/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-stake-pool</code></td>
<td align="left">Program for pooling stake accounts, managed by another entity</td>
<td align="left"><a href="https://crates.io/crates/spl-stake-pool"><img src="https://img.shields.io/crates/v/spl-stake-pool" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-stake-pool"><img src="https://docs.rs/spl-stake-pool/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-instruction-padding</code></td>
<td align="left">Program to padding to other instructions</td>
<td align="left"><a href="https://crates.io/crates/spl-instruction-padding"><img src="https://img.shields.io/crates/v/spl-instruction-padding" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-instruction-padding"><img src="https://docs.rs/spl-instruction-padding/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-concurrent-merkle-tree</code></td>
<td align="left">Library for on-chain representation of merkle tree</td>
<td align="left"><a href="https://crates.io/crates/spl-concurrent-merkle-tree"><img src="https://img.shields.io/crates/v/spl-concurrent-merkle-tree" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-concurrent-merkle-tree"><img src="https://docs.rs/spl-concurrent-merkle-tree/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-math</code></td>
<td align="left">Library for on-chain math</td>
<td align="left"><a href="https://crates.io/crates/spl-math"><img src="https://img.shields.io/crates/v/spl-math" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-math"><img src="https://docs.rs/spl-math/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-lending</code></td>
<td align="left">Over-collateralized lending program for tokens</td>
<td align="left"><a href="https://crates.io/crates/spl-token-lending"><img src="https://img.shields.io/crates/v/spl-token-lending" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-token-lending"><img src="https://docs.rs/spl-token-lending/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-swap</code></td>
<td align="left">AMM for trading tokens</td>
<td align="left"><a href="https://crates.io/crates/spl-token-swap"><img src="https://img.shields.io/crates/v/spl-token-swap" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-token-swap"><img src="https://docs.rs/spl-token-swap/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-upgrade</code></td>
<td align="left">Protocol for burning one token type in exchange for another</td>
<td align="left"><a href="https://crates.io/crates/spl-token-upgrade"><img src="https://img.shields.io/crates/v/spl-token-upgrade" alt="Crates.io"></a></td>
<td align="left"><a href="https://docs.rs/spl-token-upgrade"><img src="https://docs.rs/spl-token-upgrade/badge.svg?sanitize=true" alt="Docs.rs"></a></td>
</tr>
</tbody>
</table>
<h2>CLI Packages</h2>
<table>
<thead>
<tr>
<th align="left">Package</th>
<th align="left">Description</th>
<th align="left">Version</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>spl-token-cli</code></td>
<td align="left">CLI for the token, token-2022, and associated-token-account programs</td>
<td align="left"><a href="https://crates.io/crates/spl-token-cli"><img src="https://img.shields.io/crates/v/spl-token-cli" alt="Crates.io"></a></td>
</tr>
<tr>
<td align="left"><code>spl-stake-pool-cli</code></td>
<td align="left">CLI for the stake-pool program</td>
<td align="left"><a href="https://crates.io/crates/spl-stake-pool-cli"><img src="https://img.shields.io/crates/v/spl-stake-pool-cli" alt="Crates.io"></a></td>
</tr>
<tr>
<td align="left"><code>spl-feature-proposal-cli</code></td>
<td align="left">CLI for the feature-proposal program</td>
<td align="left"><a href="https://crates.io/crates/spl-feature-proposal-cli"><img src="https://img.shields.io/crates/v/spl-feature-proposal-cli" alt="Crates.io"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-lending-cli</code></td>
<td align="left">CLI for the token-lending program</td>
<td align="left"><a href="https://crates.io/crates/spl-token-lending-cli"><img src="https://img.shields.io/crates/v/spl-token-lending-cli" alt="Crates.io"></a></td>
</tr>
<tr>
<td align="left"><code>spl-token-upgrade-cli</code></td>
<td align="left">CLI for the token-upgrade program</td>
<td align="left"><a href="https://crates.io/crates/spl-token-upgrade-cli"><img src="https://img.shields.io/crates/v/spl-token-upgrade-cli" alt="Crates.io"></a></td>
</tr>
</tbody>
</table>
<h2>JavaScript Packages</h2>
<table>
<thead>
<tr>
<th align="left">Package</th>
<th align="left">Description</th>
<th align="left">Version</th>
<th align="left">Docs</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>@solana/spl-token</code></td>
<td align="left">Bindings for the token, token-2022, and associated-token-account programs</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-token"><img src="https://img.shields.io/npm/v/@solana/spl-token.svg?sanitize=true" alt="npm"></a></td>
<td align="left"><a href="https://solana-labs.github.io/solana-program-library/token/js"><img src="https://img.shields.io/badge/docs-typedoc-blue" alt="Docs"></a></td>
</tr>
<tr>
<td align="left"><code>@solana/spl-governance</code></td>
<td align="left">Bindings for the governance program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-governance"><img src="https://img.shields.io/npm/v/@solana/spl-governance.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>@solana/spl-account-compression</code></td>
<td align="left">Bindings for the account-compression program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-account-compression"><img src="https://img.shields.io/npm/v/@solana/spl-account-compression.svg?sanitize=true" alt="npm"></a></td>
<td align="left"><a href="https://solana-labs.github.io/solana-program-library/account-compression/sdk/docs"><img src="https://img.shields.io/badge/docs-typedoc-blue" alt="Docs"></a></td>
</tr>
<tr>
<td align="left"><code>@solana/spl-memo</code></td>
<td align="left">Bindings for the memo program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-memo"><img src="https://img.shields.io/npm/v/@solana/spl-memo.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>@solana/spl-name-service</code></td>
<td align="left">Bindings for the name-service program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-name-service"><img src="https://img.shields.io/npm/v/@solana/spl-name-service.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>@solana/spl-stake-pool</code></td>
<td align="left">Bindings for the stake-pool program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-stake-pool"><img src="https://img.shields.io/npm/v/@solana/spl-stake-pool.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>@solana/spl-token-lending</code></td>
<td align="left">Bindings for the token-lending program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-token-lending"><img src="https://img.shields.io/npm/v/@solana/spl-token-lending.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
<tr>
<td align="left"><code>@solana/spl-token-swap</code></td>
<td align="left">Bindings for the token-swap program</td>
<td align="left"><a href="https://www.npmjs.com/package/@solana/spl-token-swap"><img src="https://img.shields.io/npm/v/@solana/spl-token-swap.svg?sanitize=true" alt="npm"></a></td>
<td align="left">N/A</td>
</tr>
</tbody>
</table>
<h2>Development</h2>
<h3>Environment Setup</h3>
<ol>
<li>Install the latest <a href="https://docs.solana.com/cli/install-solana-cli-tools">Solana tools</a>.</li>
<li>Install the latest <a href="https://rustup.rs/">Rust stable</a>. If you already have Rust, run <code>rustup update</code> to get the latest version.</li>
<li>Install the <code>libudev</code> development package for your distribution (<code>libudev-dev</code> on Debian-derived distros, <code>libudev-devel</code> on Redhat-derived).</li>
</ol>
<h3>Build</h3>
<h3>Build on-chain programs</h3>
<pre><code class="language-bash"># To build all on-chain programs
$ cargo build-sbf
# To build a specific on-chain program
$ cd <program_name>/program
$ cargo build-sbf
</code></pre>
<h3>Build clients</h3>
<pre><code class="language-bash"># To build all clients
$ cargo build
# To build a specific client
$ cd <program_name>/cli
$ cargo build
</code></pre>
<h3>Test</h3>
<p>Unit tests contained within all projects can be run with:</p>
<pre><code class="language-bash">$ cargo test # <-- runs host-based tests
$ cargo test-sbf # <-- runs BPF program tests
</code></pre>
<p>To run a specific program's tests, such as SPL Token:</p>
<pre><code class="language-bash">$ cd token/program
$ cargo test # <-- runs host-based tests
$ cargo test-sbf # <-- runs BPF program tests
</code></pre>
<p>Integration testing may be performed via the per-project .js bindings. See the <a href="https://raw.githubusercontent.com/solana-labs/solana-program-library/master/token/js">token program's js project</a> for an example.</p>
<h3>Common Issues</h3>
<p>Solutions to a few issues you might run into are mentioned here.</p>
<ol>
<li> <p><code>Failed to open: ../../deploy/spl_<program-name>.so</code></p> <p>Update your Rust and Cargo to the latest versions and re-run <code>cargo build-sbf</code> in the relevant <code><program-name></code> directory, or run it at the repository root to rebuild all on-chain programs.</p> </li>
<li> <p><a href="https://solana.stackexchange.com/q/3029/36">Error while loading shared libraries. (libssl.so.1.1)</a></p> <p>A working solution was mentioned <a href="https://solana.stackexchange.com/q/3029/36">here</a>. Install libssl.</p> <pre><code class="language-bash">wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1l-1ubuntu1.2_amd64.deb
</code></pre> </li>
<li> <p>CPU or Memory usage at 100%</p> <p>This is to be expected while building some of the programs in this library. The simplest solution is to add the <code>--jobs 1</code> flag to the build commands to limit the number of parallel jobs to 1 and check if that fixes the issue. Although this will mean much longer build times.</p> </li>
</ol>
<h3>Clippy</h3>
<pre><code class="language-bash">$ cargo clippy
</code></pre>
<h3>Coverage</h3>
<pre><code class="language-bash">$ ./coverage.sh # Help wanted! Coverage build currently fails on MacOS due to an XCode `grcov` mismatch...
</code></pre>
<h4>MacOS</h4>
<p>You may need to pin your grcov version, and then rustup with the apple-darwin nightly toolchain:</p>
<pre><code class="language-bash">$ cargo install grcov --version 0.6.1
$ rustup toolchain install nightly-x86_64-apple-darwin
</code></pre>
<h2>Release Process</h2>
<p>SPL programs are currently tagged and released manually. Each program is versioned independently of the others, with all new development occurring on master. Once a program is tested and deemed ready for release:</p>
<h3>Bump Version</h3>
<ul>
<li>Increment the version number in the program's Cargo.toml</li>
<li>Run <code>cargo build-sbf <program></code> to build binary. Note the location of the generated <code>spl_<program>.so</code> for attaching to the GitHub release.</li>
<li>Open a PR with these version changes and merge after passing CI.</li>
</ul>
<h3>Create GitHub tag</h3>
<p>Program tags are of the form <code><program>-vX.Y.Z</code>. Create the new tag at the version-bump commit and push to the solana-program-library repository, eg:</p>
<pre><code>$ git tag token-v1.0.0 b24bfe7
$ git push upstream --tags
</code></pre>
<h3>Publish GitHub release</h3>
<ul>
<li>Go to <a href="https://github.com/solana-labs/solana-program-library/releases">GitHub Releases UI</a></li>
<li>Click "Draft new release", and enter the new tag in the "Tag version" box.</li>
<li>Title the release "SPL
<program>
vX.Y.Z", complete the description, and attach the
<code>spl_<program>.so</code> binary
</program></li>
<li>Click "Publish release"</li>
</ul>
<h3>Publish to Crates.io</h3>
<p>Navigate to the program directory and run <code>cargo package</code> to test the build. Then run <code>cargo publish</code>.</p>
<h1>Disclaimer</h1>
<p>All claims, content, designs, algorithms, estimates, roadmaps, specifications, and performance measurements described in this project are done with the Solana Labs, Inc. (“SL”) best efforts. It is up to the reader to check and validate their accuracy and truthfulness. Furthermore nothing in this project constitutes a solicitation for investment.</p>
<p>Any content produced by SL or developer resources that SL provides, are for educational and inspiration purposes only. SL does not encourage, induce or sanction the deployment, integration or use of any such applications (including the code comprising the Solana blockchain protocol) in violation of applicable laws or regulations and hereby prohibits any such deployment, integration or use. This includes use of any such applications by the reader (a) in violation of export control or sanctions laws of the United States or any other applicable jurisdiction, (b) if the reader is located in or ordinarily resident in a country or territory subject to comprehensive sanctions administered by the U.S. Office of Foreign Assets Control (OFAC), or (c) if the reader is or is working on behalf of a Specially Designated National (SDN) or a person subject to similar blocking or denied party prohibitions.</p>
<p>The reader should be aware that U.S. export control and sanctions laws prohibit U.S. persons (and other persons that are subject to such laws) from transacting with persons in certain countries and territories or that are on the SDN list. Accordingly, there is a risk to individuals that other persons using any of the code contained in this repo, or a derivation thereof, may be sanctioned persons and that transactions with such persons would be a violation of U.S. export controls and sanctions law.</p>
+
+
+ TabbyML/tabby
+ 2024-12-01T01:57:50Z
+ tag:github.com,2024-12-01:/TabbyML/tabby
+
+ <p>Self-hosted AI coding assistant</p><hr><div align="center">
<h1>🐾 Tabby</h1>
<p><a href="https://tabby.tabbyml.com/docs/welcome/">📚 Docs</a> • <a href="https://links.tabbyml.com/join-slack">💬 Slack</a> • <a href="https://tabby.tabbyml.com/docs/roadmap/">🗺️ Roadmap</a></p>
<p><a href="https://github.com/TabbyML/tabby/releases/latest"><img src="https://shields.io/github/v/release/TabbyML/tabby" alt="latest release"></a> <a href="https://makeapullrequest.com"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square" alt="PRs Welcome"></a> <a href="https://hub.docker.com/r/tabbyml/tabby"><img src="https://img.shields.io/docker/pulls/tabbyml/tabby" alt="Docker pulls"></a> <a href="https://codecov.io/gh/TabbyML/tabby"><img src="https://codecov.io/gh/TabbyML/tabby/graph/badge.svg?token=WYVVH8MKK3" alt="codecov"></a></p>
</div>
<p>Tabby is a self-hosted AI coding assistant, offering an open-source and on-premises alternative to GitHub Copilot. It boasts several key features:</p>
<ul>
<li>Self-contained, with no need for a DBMS or cloud service.</li>
<li>OpenAPI interface, easy to integrate with existing infrastructure (e.g Cloud IDE).</li>
<li>Supports consumer-grade GPUs.</li>
</ul>
<p align="center"> <a target="_blank" href="https://tabby.tabbyml.com"><img alt="Open Live Demo" src="https://img.shields.io/badge/OPEN_LIVE_DEMO-blue?logo=xcode&style=for-the-badge&logoColor=green"></a> </p>
<p align="center"> <img alt="Demo" src="https://user-images.githubusercontent.com/388154/230440226-9bc01d05-9f57-478b-b04d-81184eba14ca.gif"> </p>
<h2>🔥 What's New</h2>
<ul>
<li><strong>10/30/2024</strong> Tabby <a href="https://github.com/TabbyML/tabby/releases/tag/v0.19.0">v0.19.0</a> featuring recent shared threads on the main page to improve their discoverability.</li>
<li><strong>07/09/2024</strong> 🎉Announce <a href="https://tabby.tabbyml.com/blog/2024/07/09/tabby-codestral/">Codestral integration in Tabby</a>!</li>
<li><strong>07/05/2024</strong> Tabby <a href="https://github.com/TabbyML/tabby/releases/tag/v0.13.0">v0.13.0</a> introduces <em><strong>Answer Engine</strong></em>, a central knowledge engine for internal engineering teams. It seamlessly integrates with dev team's internal data, delivering reliable and precise answers to empower developers.</li>
<li><strong>06/13/2024</strong> <a href="https://marketplace.visualstudio.com/items/TabbyML.vscode-tabby/changelog">VSCode 1.7</a> marks a significant milestone with a versatile Chat experience throughout your coding experience. Come and they the latest <strong>chat in side-panel</strong> and <strong>editing via chat command</strong>!</li>
<li><strong>06/10/2024</strong> Latest 📃blogpost drop on <a href="https://tabby.tabbyml.com/blog/2024/06/11/rank-fusion-in-tabby-code-completion/">an enhanced code context understanding</a> in Tabby!</li>
<li><strong>06/06/2024</strong> Tabby <a href="https://github.com/TabbyML/tabby/releases/tag/v0.12.0">v0.12.0</a> release brings 🔗<strong>seamless integrations</strong> (Gitlab SSO, Self-hosted GitHub/GitLab, etc.), to ⚙️<strong>flexible configurations</strong> (HTTP API integration) and 🌐<strong>expanded capabilities</strong> (repo-context in Code Browser)!</li>
</ul>
<details>
<summary>Archived</summary>
<ul>
<li><strong>05/22/2024</strong> Tabby <a href="https://marketplace.visualstudio.com/items?itemName=TabbyML.vscode-tabby">VSCode 1.6</a> comes with <strong>multiple choices</strong> in inline completion, and the <strong>auto-generated commit messages</strong>🐱💻!</li>
<li><strong>05/11/2024</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.11.0">v0.11.0</a> brings significant enterprise upgrades, including 📊<strong>storage usage</strong> stats, 🔗<strong>GitHub & GitLab</strong> integration, 📋<strong>Activities</strong> page, and the long-awaited 🤖<strong>Ask Tabby</strong> feature!</li>
<li><strong>04/22/2024</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.10.0">v0.10.0</a> released, featuring the latest <strong>Reports</strong> tab with team-wise analytics for Tabby usage.</li>
<li><strong>04/19/2024</strong> 📣 Tabby now incorporates <a href="https://github.com/TabbyML/tabby/pull/1844">locally relevant snippets</a>(declarations from local LSP, and recently modified code) for code completion!</li>
<li><strong>04/17/2024</strong> CodeGemma and CodeQwen model series have now been added to the <a href="https://tabby.tabbyml.com/docs/models/">official registry</a>!</li>
<li><strong>03/20/2024</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.9.1">v0.9</a> released, highlighting a full feature admin UI.</li>
<li><strong>12/23/2023</strong> Seamlessly <a href="https://tabby.tabbyml.com/docs/installation/skypilot/">deploy Tabby on any cloud</a> with <a href="https://skypilot.readthedocs.io/en/latest/serving/sky-serve.html">SkyServe</a> 🛫 from SkyPilot.</li>
<li><strong>12/15/2023</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.7.0">v0.7.0</a> released with team management and secured access!</li>
<li><strong>10/15/2023</strong> RAG-based code completion is enabled by detail in <a href="https://github.com/TabbyML/tabby/releases/tag/v0.3.0">v0.3.0</a>🎉! Check out the <a href="https://tabby.tabbyml.com/blog/2023/10/16/repository-context-for-code-completion/">blogpost</a> explaining how Tabby utilizes repo-level context to get even smarter!</li>
<li><strong>11/27/2023</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.6.0">v0.6.0</a> released!</li>
<li><strong>11/09/2023</strong> <a href="https://github.com/TabbyML/tabby/releases/tag/v0.5.5">v0.5.5</a> released! With a redesign of UI + performance improvement.</li>
<li><strong>10/24/2023</strong> ⛳️ Major updates for Tabby IDE plugins across <a href="https://tabby.tabbyml.com/docs/extensions">VSCode/Vim/IntelliJ</a>!</li>
<li><strong>10/04/2023</strong> Check out the <a href="https://tabby.tabbyml.com/docs/models/">model directory</a> for the latest models supported by Tabby.</li>
<li><strong>09/18/2023</strong> Apple's M1/M2 Metal inference support has landed in <a href="https://github.com/TabbyML/tabby/releases/tag/v0.1.1">v0.1.1</a>!</li>
<li><strong>08/31/2023</strong> Tabby's first stable release <a href="https://github.com/TabbyML/tabby/releases/tag/v0.0.1">v0.0.1</a> 🥳.</li>
<li><strong>08/28/2023</strong> Experimental support for the <a href="https://github.com/TabbyML/tabby/issues/370">CodeLlama 7B</a>.</li>
<li><strong>08/24/2023</strong> Tabby is now on <a href="https://plugins.jetbrains.com/plugin/22379-tabby">JetBrains Marketplace</a>!</li>
</ul>
</details>
<h2>👋 Getting Started</h2>
<p>You can find our documentation <a href="https://tabby.tabbyml.com/docs/getting-started">here</a>.</p>
<ul>
<li>📚 <a href="https://tabby.tabbyml.com/docs/installation/">Installation</a></li>
<li>💻 <a href="https://tabby.tabbyml.com/docs/extensions/">IDE/Editor Extensions</a></li>
<li>⚙️ <a href="https://tabby.tabbyml.com/docs/configuration">Configuration</a></li>
</ul>
<h3>Run Tabby in 1 Minute</h3>
<p>The easiest way to start a Tabby server is by using the following Docker command:</p>
<pre><code class="language-bash">docker run -it \
--gpus all -p 8080:8080 -v $HOME/.tabby:/data \
tabbyml/tabby \
serve --model StarCoder-1B --device cuda --chat-model Qwen2-1.5B-Instruct
</code></pre>
<p>For additional options (e.g inference type, parallelism), please refer to the <a href="https://tabbyml.github.io/tabby">documentation page</a>.</p>
<h2>🤝 Contributing</h2>
<p>Full guide at <a href="https://github.com/TabbyML/tabby/raw/main/CONTRIBUTING.md">CONTRIBUTING.md</a>;</p>
<h3>Get the Code</h3>
<pre><code class="language-bash">git clone --recurse-submodules https://github.com/TabbyML/tabby
cd tabby
</code></pre>
<p>If you have already cloned the repository, you could run the <code>git submodule update --recursive --init</code> command to fetch all submodules.</p>
<h3>Build</h3>
<ol>
<li> <p>Set up the Rust environment by following this <a href="https://www.rust-lang.org/learn/get-started">tutorial</a>.</p> </li>
<li> <p>Install the required dependencies:</p> </li>
</ol>
<pre><code class="language-bash"># For MacOS
brew install protobuf
# For Ubuntu / Debian
apt install protobuf-compiler libopenblas-dev
</code></pre>
<ol start="3">
<li>Install useful tools:</li>
</ol>
<pre><code class="language-bash"># For Ubuntu
apt install make sqlite3 graphviz
</code></pre>
<ol start="4">
<li>Now, you can build Tabby by running the command <code>cargo build</code>.</li>
</ol>
<h3>Start Hacking!</h3>
<p>... and don't forget to submit a <a href="https://github.com/TabbyML/tabby/compare">Pull Request</a></p>
<h2>🌍 Community</h2>
<ul>
<li>🎤 <a href="https://twitter.com/Tabby_ML">Twitter / X</a> - engage with TabbyML for all things possible</li>
<li>📚 <a href="https://www.linkedin.com/company/tabbyml/">LinkedIn</a> - follow for the latest from the community</li>
<li>💌 <a href="https://newsletter.tabbyml.com/archive">Newsletter</a> - subscribe to unlock Tabby insights and secrets</li>
</ul>
<h3>🔆 Activity</h3>
<p><img src="https://repobeats.axiom.co/api/embed/e4ef0fbd12e586ef9ea7d72d1fb4f5c5b88d78d5.svg?sanitize=true" alt="Git Repository Activity" title="Repobeats analytics image"></p>
<h3>🌟 Star History</h3>
<p><a href="https://star-history.com/#tabbyml/tabby&Date"><img src="https://api.star-history.com/svg?repos=tabbyml/tabby&type=Date" alt="Star History Chart"></a></p>
+
+
\ No newline at end of file
diff --git a/rust/weekly/index.xml b/rust/weekly/index.xml
new file mode 100644
index 00000000000..d2cafeef6e9
--- /dev/null
+++ b/rust/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Rust Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:28Z
+ Weekly Trending of Rust in GitHub
+
+
+ HigherOrderCO/Bend
+ 2024-12-01T01:49:28Z
+ tag:github.com,2024-12-01:/HigherOrderCO/Bend
+
+ <p>A massively parallel, high-level programming language</p><hr><h1>Bend</h1>
<p>A high-level, massively parallel programming language</p>
<h2>Index</h2>
<ol>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#introduction">Introduction</a></li>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#important-notes">Important Notes</a></li>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#install">Install</a></li>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#getting-started">Getting Started</a></li>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#speedup-examples">Speedup Example</a></li>
<li><a href="https://raw.githubusercontent.com/HigherOrderCO/Bend/main/#additional-resources">Additional Resources</a></li>
</ol>
<h2>Introduction</h2>
<p>Bend offers the feel and features of expressive languages like Python and Haskell. This includes fast object allocations, full support for higher-order functions with closures, unrestricted recursion, and even continuations.<br> Bend scales like CUDA, it runs on massively parallel hardware like GPUs, with nearly linear acceleration based on core count, and without explicit parallelism annotations: no thread creation, locks, mutexes, or atomics.<br> Bend is powered by the <a href="https://github.com/higherorderco/hvm">HVM2</a> runtime.</p>
<h2>Important Notes</h2>
<ul>
<li>Bend is designed to excel in scaling performance with cores, supporting over 10000 concurrent threads.</li>
<li>The current version may have lower single-core performance.</li>
<li>You can expect substantial improvements in performance as we advance our code generation and optimization techniques.</li>
<li>We are still working to support Windows. Use <a href="https://learn.microsoft.com/en-us/windows/wsl/install">WSL2</a> as an alternative solution.</li>
<li><a href="https://github.com/HigherOrderCO/Bend/issues/341">We only support NVIDIA Gpus currently</a>.</li>
</ul>
<h2>Install</h2>
<h3>Install dependencies</h3>
<h4>On Linux</h4>
<pre><code class="language-sh"># Install Rust if you haven't already.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# For the C version of Bend, use GCC. We recommend a version up to 12.x.
sudo apt install gcc
</code></pre>
<p>For the CUDA runtime <a href="https://developer.nvidia.com/cuda-downloads?target_os=Linux">install the CUDA toolkit for Linux</a> version 12.x.</p>
<h4>On Mac</h4>
<pre><code class="language-sh"># Install Rust if you haven't it already.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# For the C version of Bend, use GCC. We recommend a version up to 12.x.
brew install gcc
</code></pre>
<h3>Install Bend</h3>
<ol>
<li>Install HVM2 by running:</li>
</ol>
<pre><code class="language-sh"># HVM2 is HOC's massively parallel Interaction Combinator evaluator.
cargo install hvm
# This ensures HVM is correctly installed and accessible.
hvm --version
</code></pre>
<ol start="2">
<li>Install Bend by running:</li>
</ol>
<pre><code class="language-sh"># This command will install Bend
cargo install bend-lang
# This ensures Bend is correctly installed and accessible.
bend --version
</code></pre>
<h3>Getting Started</h3>
<h4>Running Bend Programs</h4>
<pre><code class="language-sh">bend run <file.bend> # uses the C interpreter by default (parallel)
bend run-rs <file.bend> # uses the Rust interpreter (sequential)
bend run-c <file.bend> # uses the C interpreter (parallel)
bend run-cu <file.bend> # uses the CUDA interpreter (massively parallel)
# Notes
# You can also compile Bend to standalone C/CUDA files using gen-c and gen-cu for maximum performance.
# The code generator is still in its early stages and not as mature as compilers like GCC and GHC.
# You can use the -s flag to have more information on
# Reductions
# Time the code took to run
# Interaction per second (In millions)
</code></pre>
<h4>Testing Bend Programs</h4>
<p>The example below sums all the numbers in the range from <code>start</code> to <code>target</code>. It can be written in two different methods: one that is inherently sequential (and thus cannot be parallelized), and another that is easily parallelizable. (We will be using the <code>-s</code>flag in most examples, for the sake of visibility)</p>
<h4>Sequential version:</h4>
<p>First, create a file named <code>sequential_sum.bend</code></p>
<pre><code class="language-sh"># Write this command on your terminal
touch sequential_sum.bend
</code></pre>
<p>Then with your text editor, open the file <code>sequential_sum.bend</code>, copy the code below and paste in the file.</p>
<pre><code class="language-py"># Defines the function Sum with two parameters: start and target
def Sum(start, target):
if start == target:
# If the value of start is the same as target, returns start.
return start
else:
# If start is not equal to target, recursively call Sum with
# start incremented by 1, and add the result to start.
return start + Sum(start + 1, target)
def main():
# This translates to (1 + (2 + (3 + (...... + (999999 + 1000000)))))
# Note that this will overflow the maximum value of a number in Bend
return Sum(1, 1_000_000)
</code></pre>
<h5>Running the file</h5>
<p>You can run it using Rust interpreter (Sequential)</p>
<pre><code class="language-sh">bend run sequential_sum.bend -s
</code></pre>
<p>Or you can run it using C interpreter (Sequential)</p>
<pre><code class="language-sh">bend run-c sequential_sum.bend -s
</code></pre>
<p>If you have a NVIDIA GPU, you can also run in CUDA (Sequential)</p>
<pre><code class="language-sh">bend run-cu sequential_sum.bend -s
</code></pre>
<p>In this version, the next value to be calculated depends on the previous sum, meaning that it cannot proceed until the current computation is complete. Now, let's look at the easily parallelizable version.</p>
<h4>Parallelizable version:</h4>
<p>First close the old file and then proceed to your terminal to create <code>parallel_sum.bend</code></p>
<pre><code class="language-sh"># Write this command on your terminal
touch parallel_sum.bend
</code></pre>
<p>Then with your text editor, open the file <code>parallel_sum.bend</code>, copy the code below and paste in the file.</p>
<pre><code class="language-py"># Defines the function Sum with two parameters: start and target
def Sum(start, target):
if start == target:
# If the value of start is the same as target, returns start.
return start
else:
# If start is not equal to target, calculate the midpoint (half),
# then recursively call Sum on both halves.
half = (start + target) / 2
left = Sum(start, half) # (Start -> Half)
right = Sum(half + 1, target)
return left + right
# A parallelizable sum of numbers from 1 to 1000000
def main():
# This translates to (((1 + 2) + (3 + 4)) + ... (999999 + 1000000)...)
return Sum(1, 1_000_000)
</code></pre>
<p>In this example, the (3 + 4) sum does not depend on the (1 + 2), meaning that it can run in parallel because both computations can happen at the same time.</p>
<h5>Running the file</h5>
<p>You can run it using Rust interpreter (Sequential)</p>
<pre><code class="language-sh">bend run parallel_sum.bend -s
</code></pre>
<p>Or you can run it using C interpreter (Parallel)</p>
<pre><code class="language-sh">bend run-c parallel_sum.bend -s
</code></pre>
<p>If you have a NVIDIA GPU, you can also run in CUDA (Massively parallel)</p>
<pre><code class="language-sh">bend run-cu parallel_sum.bend -s
</code></pre>
<p>In Bend, it can be parallelized by just changing the run command. If your code <strong>can</strong> run in parallel it <strong>will</strong> run in parallel.</p>
<h3>Speedup Examples</h3>
<p>The code snippet below implements a <a href="https://en.wikipedia.org/wiki/Bitonic_sorter">bitonic sorter</a> with <em>immutable tree rotations</em>. It's not the type of algorithm you would expect to run fast on GPUs. However, since it uses a divide and conquer approach, which is inherently parallel, Bend will execute it on multiple threads, no thread creation, no explicit lock management.</p>
<h4>Bitonic Sorter Benchmark</h4>
<ul>
<li><code>bend run</code>: CPU, Apple M3 Max: 12.15 seconds</li>
<li><code>bend run-c</code>: CPU, Apple M3 Max: 0.96 seconds</li>
<li><code>bend run-cu</code>: GPU, NVIDIA RTX 4090: 0.21 seconds</li>
</ul>
<details>
<summary><b>Click here for the Bitonic Sorter code</b></summary>
<pre><code class="language-py"># Sorting Network = just rotate trees!
def sort(d, s, tree):
switch d:
case 0:
return tree
case _:
(x,y) = tree
lft = sort(d-1, 0, x)
rgt = sort(d-1, 1, y)
return rots(d, s, (lft, rgt))
# Rotates sub-trees (Blue/Green Box)
def rots(d, s, tree):
switch d:
case 0:
return tree
case _:
(x,y) = tree
return down(d, s, warp(d-1, s, x, y))
# Swaps distant values (Red Box)
def warp(d, s, a, b):
switch d:
case 0:
return swap(s ^ (a > b), a, b)
case _:
(a.a, a.b) = a
(b.a, b.b) = b
(A.a, A.b) = warp(d-1, s, a.a, b.a)
(B.a, B.b) = warp(d-1, s, a.b, b.b)
return ((A.a,B.a),(A.b,B.b))
# Propagates downwards
def down(d,s,t):
switch d:
case 0:
return t
case _:
(t.a, t.b) = t
return (rots(d-1, s, t.a), rots(d-1, s, t.b))
# Swaps a single pair
def swap(s, a, b):
switch s:
case 0:
return (a,b)
case _:
return (b,a)
# Testing
# -------
# Generates a big tree
def gen(d, x):
switch d:
case 0:
return x
case _:
return (gen(d-1, x * 2 + 1), gen(d-1, x * 2))
# Sums a big tree
def sum(d, t):
switch d:
case 0:
return t
case _:
(t.a, t.b) = t
return sum(d-1, t.a) + sum(d-1, t.b)
# Sorts a big tree
def main:
return sum(20, sort(20, 0, gen(20, 0)))
</code></pre>
</details>
<p>if you are interested in some other algorithms, you can check our <a href="https://github.com/HigherOrderCO/Bend/tree/main/examples">examples folder</a></p>
<h3>Additional Resources</h3>
<ul>
<li>To understand the technology behind Bend, check out the HVM2 <a href="https://paper.higherorderco.com/">paper</a>.</li>
<li>We are working on an official documentation, meanwhile for a more in depth explanation check <a href="https://github.com/HigherOrderCO/Bend/raw/main/GUIDE.md">GUIDE.md</a></li>
<li>Read about our features at <a href="https://github.com/HigherOrderCO/Bend/raw/main/FEATURES.md">FEATURES.md</a></li>
<li>Bend is developed by <a href="https://higherorderco.com/">HigherOrderCO</a> - join our <a href="https://discord.higherorderco.com">Discord</a>!</li>
</ul>
+
+
+ awslabs/aws-lambda-web-adapter
+ 2024-12-01T01:49:28Z
+ tag:github.com,2024-12-01:/awslabs/aws-lambda-web-adapter
+
+ <p>Run web applications on AWS Lambda</p><hr><h1>AWS Lambda Web Adapter</h1>
<p>A tool to run web applications on AWS Lambda</p>
<p>AWS Lambda Web Adapter allows developers to build web apps (http api) with familiar frameworks (e.g. Express.js, Next.js, Flask, SpringBoot, ASP.NET and Laravel, anything speaks HTTP 1.1/1.0) and run it on AWS Lambda. The same docker image can run on AWS Lambda, Amazon EC2, AWS Fargate, and local computers.</p>
<p><img src="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/docs/images/lambda-adapter-overview.png" alt="Lambda Web Adapter"></p>
<h2>Features</h2>
<ul>
<li>Run web applications on AWS Lambda</li>
<li>Supports Amazon API Gateway Rest API and Http API endpoints, Lambda Function URLs, and Application Load Balancer</li>
<li>Supports Lambda managed runtimes, custom runtimes and docker OCI images</li>
<li>Supports any web frameworks and languages, no new code dependency to include</li>
<li>Automatic encode binary response</li>
<li>Enables graceful shutdown</li>
<li>Supports response payload compression</li>
<li>Supports response streaming</li>
<li>Supports non-http event triggers</li>
</ul>
<h2>Usage</h2>
<p>AWS Lambda Web Adapter work with Lambda functions packaged as both docker images and Zip packages.</p>
<h3>Lambda functions packaged as Docker Images or OCI Images</h3>
<p>To use Lambda Web Adapter with docker images, package your web app (http api) in a Dockerfile, and add one line to copy Lambda Web Adapter binary to /opt/extensions inside your container:</p>
<pre><code class="language-dockerfile">COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
</code></pre>
<p><a href="https://docs.aws.amazon.com/lambda/latest/dg/images-create.html">Non-AWS base images</a> may be used since the <a href="https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-ric">Runtime Interface Client</a> ships with the Lambda Web Adapter.</p>
<p>By default, Lambda Web Adapter assumes the web app is listening on port 8080. If not, you can specify the port via <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/#configurations">configuration</a>.</p>
<p>Pre-compiled Lambda Web Adapter binaries are provided in ECR public repo: <a href="https://gallery.ecr.aws/awsguru/aws-lambda-adapter">public.ecr.aws/awsguru/aws-lambda-adapter</a>. Multi-arch images are also provided in this repo. It works on both x86_64 and arm64 CPU architecture.</p>
<p>Below is a Dockerfile for <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs">an example nodejs application</a>.</p>
<pre><code class="language-dockerfile">FROM public.ecr.aws/docker/library/node:20-slim
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.4 /lambda-adapter /opt/extensions/lambda-adapter
ENV PORT=7000
WORKDIR "/var/task"
ADD src/package.json /var/task/package.json
ADD src/package-lock.json /var/task/package-lock.json
RUN npm install --omit=dev
ADD src/ /var/task
CMD ["node", "index.js"]
</code></pre>
<p>This works with any base images except AWS managed base images. To use AWS managed base images, you need to override the ENTRYPOINT to start your web app.</p>
<h3>Lambda functions packaged as Zip package for AWS managed runtimes</h3>
<p>AWS Lambda Web Adapter also works with AWS managed Lambda runtimes. You need to do three things:</p>
<ol>
<li> <p>attach Lambda Web Adapter layer to your function.</p> <h4>AWS Commercial Regions</h4>
<ol>
<li>x86_64: <code>arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:23</code></li>
<li>arm64: <code>arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerArm64:23</code></li>
</ol> <h4>AWS China Regions</h4>
<ol>
<li>cn-north-1 (Beijing)
<ul>
<li>x86_64: <code>arn:aws-cn:lambda:cn-north-1:041581134020:layer:LambdaAdapterLayerX86:23</code></li>
</ul> </li>
<li>cn-northwest-1 (Ningxia)
<ul>
<li>x86_64: <code>arn:aws-cn:lambda:cn-northwest-1:069767869989:layer:LambdaAdapterLayerX86:23</code></li>
</ul> </li>
</ol> </li>
<li> <p>configure Lambda environment variable <code>AWS_LAMBDA_EXEC_WRAPPER</code> to <code>/opt/bootstrap</code>.</p> </li>
<li> <p>set function handler to your web application start up script. e.g. <code>run.sh</code>.</p> </li>
</ol>
<p>For details, please check out <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs-zip">the example Node.js application</a>.</p>
<h2>Readiness Check</h2>
<p>When a new Lambda Execution Environment starts up, Lambda Web Adapter will boot up as a Lambda Extension, followed by the web application.</p>
<p>By default, Lambda Web Adapter will send HTTP GET requests to the web application at <code>http://127.0.0.1:8080/</code>. The port and path can be customized with two environment variables: <code>AWS_LWA_READINESS_CHECK_PORT</code> and <code>AWS_LWA_READINESS_CHECK_PATH</code>.</p>
<p>Lambda Web Adapter will retry this request every 10 milliseconds until the web application returns an HTTP response (<strong>status code >= 100 and < 500</strong>) or the function times out.</p>
<p>In addition, you can configure the adapter to preform readiness check with TCP connect, by setting <code>AWS_LWA_READINESS_CHECK_PROTOCOL</code> to <code>tcp</code>.</p>
<p>After passing readiness check, Lambda Web Adapter will start Lambda Runtime and forward the invokes to the web application.</p>
<h2>Configurations</h2>
<p>The readiness check port/path and traffic port can be configured using environment variables. These environment variables can be defined either within docker file or as Lambda function configuration.</p>
<table>
<thead>
<tr>
<th>Environment Variable</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>AWS_LWA_PORT / PORT*</td>
<td>traffic port</td>
<td>"8080"</td>
</tr>
<tr>
<td>AWS_LWA_READINESS_CHECK_PORT / READINESS_CHECK_PORT*</td>
<td>readiness check port, default to the traffic port</td>
<td>PORT</td>
</tr>
<tr>
<td>AWS_LWA_READINESS_CHECK_PATH / READINESS_CHECK_PATH*</td>
<td>readiness check path</td>
<td>"/"</td>
</tr>
<tr>
<td>AWS_LWA_READINESS_CHECK_PROTOCOL / READINESS_CHECK_PROTOCOL*</td>
<td>readiness check protocol: "http" or "tcp", default is "http"</td>
<td>"http"</td>
</tr>
<tr>
<td>AWS_LWA_READINESS_CHECK_MIN_UNHEALTHY_STATUS</td>
<td>The minimum HTTP status code that is considered unhealthy</td>
<td>"500"</td>
</tr>
<tr>
<td>AWS_LWA_ASYNC_INIT / ASYNC_INIT*</td>
<td>enable asynchronous initialization for long initialization functions</td>
<td>"false"</td>
</tr>
<tr>
<td>AWS_LWA_REMOVE_BASE_PATH / REMOVE_BASE_PATH*</td>
<td>the base path to be removed from request path</td>
<td>None</td>
</tr>
<tr>
<td>AWS_LWA_ENABLE_COMPRESSION</td>
<td>enable gzip compression for response body</td>
<td>"false"</td>
</tr>
<tr>
<td>AWS_LWA_INVOKE_MODE</td>
<td>Lambda function invoke mode: "buffered" or "response_stream", default is "buffered"</td>
<td>"buffered"</td>
</tr>
<tr>
<td>AWS_LWA_PASS_THROUGH_PATH</td>
<td>the path for receiving event payloads that are passed through from non-http triggers</td>
<td>"/events"</td>
</tr>
<tr>
<td>AWS_LWA_AUTHORIZATION_SOURCE</td>
<td>a header name to be replaced to <code>Authorization</code></td>
<td>None</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>Note:</strong> We use "AWS_LWA_" prefix to namespacing all environment variables used by Lambda Web Adapter. The original ones will be supported until we reach version 1.0.</p>
</blockquote>
<p><strong>AWS_LWA_PORT / PORT</strong> - Lambda Web Adapter will send traffic to this port. This is the port your web application listening on. Inside Lambda execution environment, the web application runs as a non-root user, and not allowed to listen on ports lower than 1024. Please also avoid port 9001 and 3000. Lambda Runtime API is on port 9001. CloudWatch Lambda Insight extension uses port 3000.</p>
<p><strong>AWS_LWA_ASYNC_INIT / ASYNC_INIT</strong> - Lambda managed runtimes offer up to 10 seconds for function initialization. During this period of time, Lambda functions have burst of CPU to accelerate initialization, and it is free. If a lambda function couldn't complete the initialization within 10 seconds, Lambda will restart the function, and bill for the initialization. To help functions to use this 10 seconds free initialization time and avoid the restart, Lambda Web Adapter supports asynchronous initialization. When this feature is enabled, Lambda Web Adapter performs readiness check up to 9.8 seconds. If the web app is not ready by then, Lambda Web Adapter signals to Lambda service that the init is completed, and continues readiness check in the handler. This feature is disabled by default. Enable it by setting environment variable <code>AWS_LWA_ASYNC_INIT</code> to <code>true</code>.</p>
<p><strong>AWS_LWA_REMOVE_BASE_PATH / REMOVE_BASE_PATH</strong> - The value of this environment variable tells the adapter whether the application is running under a base path. For example, you could have configured your API Gateway to have a /orders/{proxy+} and a /catalog/{proxy+} resource. Each resource is handled by a separate Lambda functions. For this reason, the application inside Lambda may not be aware of the fact that the /orders path exists. Use REMOVE_BASE_PATH to remove the /orders prefix when routing requests to the application. Defaults to empty string. Checkout <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/springboot">SpringBoot</a> example.</p>
<p><strong>AWS_LWA_ENABLE_COMPRESSION</strong> - Lambda Web Adapter supports gzip compression for response body. This feature is disabled by default. Enable it by setting environment variable <code>AWS_LWA_ENABLE_COMPRESSION</code> to <code>true</code>. When enabled, this will compress responses unless it's an image as determined by the content-type starting with <code>image</code> or the response is less than 32 bytes. This will also compress HTTP/1.1 chunked streaming response.</p>
<p><strong>AWS_LWA_INVOKE_MODE</strong> - Lambda function invoke mode, this should match Function Url invoke mode. The default is "buffered". When configured as "response_stream", Lambda Web Adapter will stream response to Lambda service <a href="https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/">blog</a>. Please check out <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-response-streaming">FastAPI with Response Streaming</a> example.</p>
<p><strong>AWS_LWA_READINESS_CHECK_MIN_UNHEALTHY_STATUS</strong> - allows you to customize which HTTP status codes are considered healthy and which ones are not</p>
<p><strong>AWS_LWA_PASS_THROUGH_PATH</strong> - Path to receive events payloads passed through from non-http event triggers. The default is "/events".</p>
<p><strong>AWS_LWA_AUTHORIZATION_SOURCE</strong> - When set, Lambda Web Adapter replaces the specified header name to <code>Authorization</code> before proxying a request. This is useful when you use Lambda function URL with <a href="https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html">IAM auth type</a>, which reserves Authorization header for IAM authentication, but you want to still use Authorization header for your backend apps. This feature is disabled by default.</p>
<h2>Request Context</h2>
<p><strong>Request Context</strong> is metadata API Gateway sends to Lambda for a request. It usually contains requestId, requestTime, apiId, identity, and authorizer. Identity and authorizer are useful to get client identity for authorization. API Gateway Developer Guide contains more details <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format">here</a>.</p>
<p>Lambda Web Adapter forwards this information to the web application in a Http Header named "x-amzn-request-context". In the web application, you can retrieve the value of this http header and deserialize it into a JSON object. Check out <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs-zip">Express.js in Zip</a> on how to use it.</p>
<h2>Lambda Context</h2>
<p><strong>Lambda Context</strong> is an object that Lambda passes to the function handler. This object provides information about the invocation, function, and execution environment. You can find a full list of properties accessible through the Lambda Context <a href="https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html">here</a></p>
<p>Lambda Web Adapter forwards this information to the web application in a Http Header named "x-amzn-lambda-context". In the web application, you can retrieve the value of this http header and deserialize it into a JSON object. Check out <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs-zip">Express.js in Zip</a> on how to use it.</p>
<h2>Graceful Shutdown</h2>
<p>For a function with Lambda Extensions registered, Lambda enables shutdown phase for the function. When Lambda service is about to shut down a Lambda execution environment, it sends a SIGTERM signal to the runtime and then a SHUTDOWN event to each registered external extensions. Developers could catch the SIGTERM signal in the lambda functions and perform graceful shutdown tasks. The <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs/app/src/index.js">Express.js</a> gives a simple example. More details in <a href="https://github.com/aws-samples/graceful-shutdown-with-aws-lambda">this repo</a>.</p>
<h2>Local Debugging</h2>
<p>Lambda Web Adapter allows developers to develop web applications locally with familiar tools and debuggers: just run the web app locally and test it. If you want to simulate Lambda Runtime environment locally, you can use AWS SAM CLI. The following command starts a local api gateway endpoint and simulate the Lambda runtime execution environment.</p>
<pre><code class="language-bash">sam local start-api
</code></pre>
<p>Please note that <code>sam local</code> starts a Lambda Runtime Interface Emulator on port 8080. So your web application should avoid port <code>8080</code> if you plan to use <code>sam local</code>.</p>
<h2>Non-HTTP Event Triggers</h2>
<p>The Lambda Web Adapter also supports all non-HTTP event triggers, such as SQS, SNS, S3, DynamoDB, Kinesis, Kafka, EventBridge, and Bedrock Agents. The adapter forwards the event payload to the web application via http post to a path defined by the <code>AWS_LWA_PASS_THROUGH_PATH</code> environment variable. By default, this path is set to <code>/events</code>. Upon receiving the event payload from the request body, the web application should processes it and returns the results as a JSON response. Please checkout <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/sqs-expressjs">SQS Express.js</a> and <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/bedrock-agent-fastapi-zip">Bedrock Agent FastAPI in Zip</a> examples.</p>
<h2>Examples</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi">FastAPI</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-zip">FastAPI in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-background-tasks">FastAPI with Background Tasks</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-response-streaming">FastAPI with Response Streaming</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-response-streaming-zip">FastAPI with Response Streaming in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fastapi-backend-only-response-streaming/">FastAPI Response Streaming Backend with IAM Auth</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/flask">Flask</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/flask-zip">Flask in Zip</a></li>
<li><a href="https://github.com/aws-hebrew-book/serverless-django">Serverless Django</a> by <a href="https://github.com/efi-mk">@efi-mk</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs">Express.js</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/expressjs-zip">Express.js in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/nextjs">Next.js</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/nextjs-zip">Next.js in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/nextjs-response-streaming">Next.js Response Streaming</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/springboot">SpringBoot</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/springboot-zip">SpringBoot in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/springboot-response-streaming-zip">SpringBoot Response Streaming</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/nginx">Nginx</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/php">PHP</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/rust-actix-web-zip">Rust Actix Web in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/rust-axum-zip">Rust Axum in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/gin">Golang Gin</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/gin-zip">Golang Gin in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/deno-zip">Deno Oak in Zip</a></li>
<li><a href="https://github.com/aws-samples/lambda-laravel">Laravel on Lambda</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/aspnet-mvc">ASP.NET MVC</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/aspnet-mvc-zip">ASP.NET MVC in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/aspnet-webapi-zip">ASP.NET Web API in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/sqs-expressjs">SQS Express.js</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/bedrock-agent-fastapi">Bedrock Agent FastAPI</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/bedrock-agent-fastapi-zip">Bedrock Agent FastAPI in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fasthtml">FastHTML</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fasthtml-zip">FastHTML in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fasthtml-response-streaming">FastHTML with Response Streaming</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/fasthtml-response-streaming-zip">FastHTML with Response Streaming in Zip</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/remix/">Remix</a></li>
<li><a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/examples/remix-zip/">Remix in Zip</a></li>
</ul>
<h2>Acknowledgement</h2>
<p>This project was inspired by several community projects.</p>
<ul>
<li><a href="https://github.com/apparentorder/reweb">re:Web</a></li>
<li><a href="https://github.com/glassechidna/serverlessish">Serverlessish</a></li>
</ul>
<h2>Similar Projects</h2>
<p>Several projects also provide similar capabilities as language specific packages/frameworks.</p>
<ul>
<li><a href="https://github.com/awslabs/aws-serverless-java-container">Serverless Java Container</a></li>
<li><a href="https://github.com/vendia/serverless-express">Serverless Express</a></li>
<li><a href="https://github.com/zappa/Zappa">Serverless Python - Zappa</a></li>
<li><a href="https://github.com/customink/lamby">Serverless Rails - Lamby</a></li>
<li><a href="https://github.com/brefphp/bref">Serverless PHP - Bref</a></li>
</ul>
<h2>Security</h2>
<p>See <a href="https://raw.githubusercontent.com/awslabs/aws-lambda-web-adapter/main/CONTRIBUTING.md#security-issue-notifications">CONTRIBUTING</a> for more information.</p>
<h2>License</h2>
<p>This project is licensed under the Apache-2.0 License.</p>
+
+
+ tensorzero/tensorzero
+ 2024-12-01T01:49:28Z
+ tag:github.com,2024-12-01:/tensorzero/tensorzero
+
+ <p>TensorZero creates a feedback loop for optimizing LLM applications — turning production data into smarter, faster, and cheaper models.</p><hr><img src="https://github.com/user-attachments/assets/47d67430-386d-4675-82ad-d4734d3262d9" width="128" height="128">
<h1>TensorZero</h1>
<p><strong>TensorZero creates a feedback loop for optimizing LLM applications — turning production data into smarter, faster, and cheaper models.</strong></p>
<ol>
<li>Integrate our model gateway</li>
<li>Send metrics or feedback</li>
<li>Optimize prompts, models, and inference strategies</li>
<li>Watch your LLMs improve over time</li>
</ol>
<p>It provides a <strong>data & learning flywheel for LLMs</strong> by unifying:</p>
<ul>
<li><input type="checkbox" checked disabled> <strong>Inference:</strong> one API for all LLMs, with <1ms P99 overhead</li>
<li><input type="checkbox" checked disabled> <strong>Observability:</strong> inference & feedback → your database</li>
<li><input type="checkbox" checked disabled> <strong>Optimization:</strong> from prompts to fine-tuning and RL (& even 🍓? <strong><a href="https://www.tensorzero.com/docs/gateway/guides/inference-time-optimizations">→</a></strong>)</li>
<li><input type="checkbox" checked disabled> <strong>Experimentation:</strong> built-in A/B testing, routing, fallbacks</li>
</ul>
<p align="center"> <b><a href="https://www.tensorzero.com/" target="_blank">Website</a></b> · <b><a href="https://www.tensorzero.com/docs" target="_blank">Docs</a></b> · <b><a href="https://www.x.com/tensorzero" target="_blank">Twitter</a></b> · <b><a href="https://www.tensorzero.com/slack" target="_blank">Slack</a></b> · <b><a href="https://www.tensorzero.com/discord" target="_blank">Discord</a></b> <br> <br> <b><a href="https://www.tensorzero.com/docs/gateway/quickstart" target="_blank">Quick Start (5min)</a></b> · <b><a href="https://www.tensorzero.com/docs/gateway/tutorial" target="_blank">Comprehensive Tutorial</a></b> · <b><a href="https://www.tensorzero.com/docs/gateway/deployment" target="_blank">Deployment Guide</a></b> · <b><a href="https://www.tensorzero.com/docs/gateway/api-reference" target="_blank">API Reference</a></b> · <b><a href="https://www.tensorzero.com/docs/gateway/deployment" target="_blank">Configuration Reference</a></b> </p>
<h2>Overview</h2>
<br>
<p align="center"> <a href="https://www.tensorzero.com/docs">
<picture>
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/34a92c18-242e-4d76-a99c-861283de68a6">
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/e8bc699b-6378-4c2a-9cc1-6d189025e270">
<img alt="TensorZero Flywheel" src="https://github.com/user-attachments/assets/34a92c18-242e-4d76-a99c-861283de68a6" width="720">
</picture> </a> </p>
<br>
<ol>
<li>The <strong><a href="https://www.tensorzero.com/docs/gateway/">TensorZero Gateway</a></strong> is a high-performance model gateway written in Rust 🦀 that provides a unified API interface for all major LLM providers, allowing for seamless cross-platform integration and fallbacks.</li>
<li>It handles structured schema-based inference with <1ms P99 latency overhead (see <strong><a href="https://www.tensorzero.com/docs/gateway/benchmarks">Benchmarks</a></strong>) and built-in observability, experimentation, and <strong><a href="https://www.tensorzero.com/docs/gateway/guides/inference-time-optimizations">inference-time optimizations</a></strong>.</li>
<li>It also collects downstream metrics and feedback associated with these inferences, with first-class support for multi-step LLM systems.</li>
<li>Everything is stored in a ClickHouse data warehouse that you control for real-time, scalable, and developer-friendly analytics.</li>
<li>Over time, <strong><a href="https://www.tensorzero.com/docs/recipes">TensorZero Recipes</a></strong> leverage this structured dataset to optimize your prompts and models: run pre-built recipes for common workflows like fine-tuning, or create your own with complete flexibility using any language and platform.</li>
<li>Finally, the gateway's experimentation features and GitOps orchestration enable you to iterate and deploy with confidence, be it a single LLM or thousands of LLMs.</li>
</ol>
<p>Our goal is to help engineers build, manage, and optimize the next generation of LLM applications: systems that learn from real-world experience. Read more about our <strong><a href="https://www.tensorzero.com/docs/vision-roadmap/">Vision & Roadmap</a></strong>.</p>
<h2>Get Started</h2>
<p><strong>Next steps?</strong> The <strong><a href="https://www.tensorzero.com/docs/gateway/quickstart">Quick Start</a></strong> shows it's easy to set up an LLM application with TensorZero. If you want to dive deeper, the <strong><a href="https://www.tensorzero.com/docs/gateway/tutorial">Tutorial</a></strong> teaches how to build a simple chatbot, an email copilot, a weather RAG system, and a structured data extraction pipeline.</p>
<p><strong>Questions?</strong> Ask us on <strong><a href="https://www.tensorzero.com/slack">Slack</a></strong> or <strong><a href="https://www.tensorzero.com/discord">Discord</a></strong>.</p>
<p><strong>Using TensorZero at work?</strong> Email us at <strong><a href="mailto:hello@tensorzero.com">hello@tensorzero.com</a></strong> to set up a Slack or Teams channel with your team (free).</p>
<h2>Examples</h2>
<p>We are working on a series of <strong>complete runnable examples</strong> illustrating TensorZero's data & learning flywheel.</p>
<blockquote>
<p><strong><a href="https://github.com/tensorzero/tensorzero/tree/main/examples/haiku-hidden-preferences">Writing Haikus to Satisfy a Judge with Hidden Preferences</a></strong></p>
<p>This example fine-tunes GPT-4o Mini to generate haikus tailored to a specific taste. You'll see TensorZero's "data flywheel in a box" in action: better variants leads to better data, and better data leads to better variants. You'll see progress by fine-tuning the LLM multiple times.</p>
</blockquote>
<blockquote>
<p><strong><a href="https://github.com/tensorzero/tensorzero/tree/main/examples/ner-fine-tuning">Improving Data Extraction (NER) by Fine-Tuning a Llama 3 Model</a></strong></p>
<p>This example shows that an optimized Llama 3.1 8B model can be trained to outperform GPT-4o on a Named Entity Recognition (NER) task using a small amount of training data, and served by Fireworks at a fraction of the cost and latency.</p>
</blockquote>
<blockquote>
<p><strong><a href="https://github.com/tensorzero/tensorzero/tree/main/examples/chess-puzzles-best-of-n-sampling/">Improving LLM Chess Ability with Best-of-N Sampling</a></strong></p>
<p>This example showcases how best-of-N sampling can significantly enhance an LLM's chess-playing abilities by selecting the most promising moves from multiple generated options.</p>
</blockquote>
<blockquote>
<p><strong><a href="https://github.com/tensorzero/tensorzero/tree/main/examples/ner-dicl">Improving Data Extraction (NER) with Dynamic In-Context Learning</a></strong></p>
<p>This example demonstrates how Dynamic In-Context Learning (DICL) can enhance Named Entity Recognition (NER) performance by leveraging relevant historical examples to improve data extraction accuracy and consistency without having to fine-tune a model.</p>
</blockquote>
<blockquote>
<p><strong><a href="https://github.com/tensorzero/tensorzero/tree/main/examples/gsm8k-custom-recipe-dspy">Improving Math Reasoning with a Custom Recipe for Automated Prompt Engineering (DSPy)</a></strong></p>
<p>TensorZero provides a number of pre-built optimization recipes covering common LLM engineering workflows. But you can also easily create your own recipes and workflows! This example shows how to optimize a TensorZero function using an arbitrary tool — here, DSPy.</p>
</blockquote>
<p><em>& many more on the way!</em></p>
+
+
\ No newline at end of file
diff --git a/sage/daily/index.xml b/sage/daily/index.xml
index 00db54ede0f..364ab151fab 100644
--- a/sage/daily/index.xml
+++ b/sage/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Sage Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:25Z
+ 2024-12-01T01:38:40Z
Daily Trending of Sage in GitHub
\ No newline at end of file
diff --git a/sage/monthly/index.xml b/sage/monthly/index.xml
new file mode 100644
index 00000000000..c6e61aaecd4
--- /dev/null
+++ b/sage/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sage Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:57Z
+ Monthly Trending of Sage in GitHub
+
+
\ No newline at end of file
diff --git a/sage/weekly/index.xml b/sage/weekly/index.xml
new file mode 100644
index 00000000000..01bec5c3746
--- /dev/null
+++ b/sage/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sage Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:37Z
+ Weekly Trending of Sage in GitHub
+
+
\ No newline at end of file
diff --git a/saltstack/daily/index.xml b/saltstack/daily/index.xml
index 98e1e2adad6..48e0181dc89 100644
--- a/saltstack/daily/index.xml
+++ b/saltstack/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SaltStack Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:25Z
+ 2024-12-01T01:38:40Z
Daily Trending of SaltStack in GitHub
\ No newline at end of file
diff --git a/saltstack/monthly/index.xml b/saltstack/monthly/index.xml
new file mode 100644
index 00000000000..786b1a4c45f
--- /dev/null
+++ b/saltstack/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SaltStack Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:57Z
+ Monthly Trending of SaltStack in GitHub
+
+
\ No newline at end of file
diff --git a/saltstack/weekly/index.xml b/saltstack/weekly/index.xml
new file mode 100644
index 00000000000..341d0c87f96
--- /dev/null
+++ b/saltstack/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SaltStack Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:37Z
+ Weekly Trending of SaltStack in GitHub
+
+
\ No newline at end of file
diff --git a/sas/daily/index.xml b/sas/daily/index.xml
index 374750f2e85..7feb8f7581a 100644
--- a/sas/daily/index.xml
+++ b/sas/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SAS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:25Z
+ 2024-12-01T01:38:39Z
Daily Trending of SAS in GitHub
\ No newline at end of file
diff --git a/sas/monthly/index.xml b/sas/monthly/index.xml
new file mode 100644
index 00000000000..65262f00798
--- /dev/null
+++ b/sas/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SAS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:58Z
+ Monthly Trending of SAS in GitHub
+
+
\ No newline at end of file
diff --git a/sas/weekly/index.xml b/sas/weekly/index.xml
new file mode 100644
index 00000000000..13288cb8dd2
--- /dev/null
+++ b/sas/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SAS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:37Z
+ Weekly Trending of SAS in GitHub
+
+
\ No newline at end of file
diff --git a/sass/daily/index.xml b/sass/daily/index.xml
index 7d9d9c5f4f1..92a9ab4b5cf 100644
--- a/sass/daily/index.xml
+++ b/sass/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Sass Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:26Z
+ 2024-12-01T01:38:40Z
Daily Trending of Sass in GitHub
\ No newline at end of file
diff --git a/sass/monthly/index.xml b/sass/monthly/index.xml
new file mode 100644
index 00000000000..9d8be4a875b
--- /dev/null
+++ b/sass/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sass Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:58Z
+ Monthly Trending of Sass in GitHub
+
+
\ No newline at end of file
diff --git a/sass/weekly/index.xml b/sass/weekly/index.xml
new file mode 100644
index 00000000000..ab81f7e73ba
--- /dev/null
+++ b/sass/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sass Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:38Z
+ Weekly Trending of Sass in GitHub
+
+
\ No newline at end of file
diff --git a/scala/daily/index.xml b/scala/daily/index.xml
index 3a9ccfc87b9..dab55e632b9 100644
--- a/scala/daily/index.xml
+++ b/scala/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Scala Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:30Z
+ 2024-12-01T01:38:45Z
Daily Trending of Scala in GitHub
+
+ aimacode/aima-scala
+ 2024-12-01T01:38:45Z
+ tag:github.com,2024-12-01:/aimacode/aima-scala
+
+ <p></p><hr><h1><img src="https://github.com/aimacode/aima-java/raw/gh-pages/aima3e/images/aima3e.jpg" alt="">aima-scala <a href="https://travis-ci.org/aimacode/aima-scala"><img src="https://travis-ci.org/aimacode/aima-scala.svg?branch=master" alt="Build Status"></a> <a href="https://gitter.im/aima-scala/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge"><img src="https://badges.gitter.im/aima-scala/community.svg?sanitize=true" alt="Gitter"></a></h1>
<p>Scala implementation of algorithms from <a href="http://www.cs.berkeley.edu/~russell/">Russell</a> And <a href="http://www.norvig.com/">Norvig's</a> <a href="http://aima.cs.berkeley.edu/">Artificial Intelligence - A Modern Approach 3rd Edition</a>. You can use this in conjunction with a course on AI, or for study on your own.</p>
<h2>Formating the code</h2>
<pre><code class="language-bash">sbt scalafmt
</code></pre>
<h2>Test Coverage</h2>
<pre><code>sbt ";clean;test"
sbt coverageReport
</code></pre>
<p>reports are generated in the target/scoverage-report folder of the sub-projects</p>
+
\ No newline at end of file
diff --git a/scala/monthly/index.xml b/scala/monthly/index.xml
new file mode 100644
index 00000000000..ff61ac51cb0
--- /dev/null
+++ b/scala/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scala Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:01Z
+ Monthly Trending of Scala in GitHub
+
+
\ No newline at end of file
diff --git a/scala/weekly/index.xml b/scala/weekly/index.xml
new file mode 100644
index 00000000000..a64b7a62c52
--- /dev/null
+++ b/scala/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scala Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:44Z
+ Weekly Trending of Scala in GitHub
+
+
\ No newline at end of file
diff --git a/scaml/daily/index.xml b/scaml/daily/index.xml
index f553e505dcf..7b7b5b778c8 100644
--- a/scaml/daily/index.xml
+++ b/scaml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Scaml Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:26Z
+ 2024-12-01T01:38:41Z
Daily Trending of Scaml in GitHub
\ No newline at end of file
diff --git a/scaml/monthly/index.xml b/scaml/monthly/index.xml
new file mode 100644
index 00000000000..c343889a0be
--- /dev/null
+++ b/scaml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scaml Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:57:59Z
+ Monthly Trending of Scaml in GitHub
+
+
\ No newline at end of file
diff --git a/scaml/weekly/index.xml b/scaml/weekly/index.xml
new file mode 100644
index 00000000000..eb93146d087
--- /dev/null
+++ b/scaml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scaml Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:38Z
+ Weekly Trending of Scaml in GitHub
+
+
\ No newline at end of file
diff --git a/scheme/daily/index.xml b/scheme/daily/index.xml
index 9f17214718c..6342b925777 100644
--- a/scheme/daily/index.xml
+++ b/scheme/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Scheme Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:27Z
+ 2024-12-01T01:38:42Z
Daily Trending of Scheme in GitHub
\ No newline at end of file
diff --git a/scheme/monthly/index.xml b/scheme/monthly/index.xml
new file mode 100644
index 00000000000..c7662bd0011
--- /dev/null
+++ b/scheme/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Scheme Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:00Z
+ Monthly Trending of Scheme in GitHub
+
+
+ totvs/tds-vscode
+ 2024-12-01T01:58:00Z
+ tag:github.com,2024-12-01:/totvs/tds-vscode
+
+ <p>Totvs Developer Studio for vscode</p><hr>
+
+
\ No newline at end of file
diff --git a/scheme/weekly/index.xml b/scheme/weekly/index.xml
new file mode 100644
index 00000000000..b4b4f11d8d6
--- /dev/null
+++ b/scheme/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scheme Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:39Z
+ Weekly Trending of Scheme in GitHub
+
+
\ No newline at end of file
diff --git a/scilab/daily/index.xml b/scilab/daily/index.xml
index fe5f4809279..b87787979fa 100644
--- a/scilab/daily/index.xml
+++ b/scilab/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Scilab Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:33Z
+ 2024-12-01T01:38:50Z
Daily Trending of Scilab in GitHub
\ No newline at end of file
diff --git a/scilab/monthly/index.xml b/scilab/monthly/index.xml
new file mode 100644
index 00000000000..6e0c3d97a91
--- /dev/null
+++ b/scilab/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scilab Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:06Z
+ Monthly Trending of Scilab in GitHub
+
+
\ No newline at end of file
diff --git a/scilab/weekly/index.xml b/scilab/weekly/index.xml
new file mode 100644
index 00000000000..c7d39a37999
--- /dev/null
+++ b/scilab/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Scilab Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:46Z
+ Weekly Trending of Scilab in GitHub
+
+
\ No newline at end of file
diff --git a/scss/daily/index.xml b/scss/daily/index.xml
index 943db43745c..446628878e4 100644
--- a/scss/daily/index.xml
+++ b/scss/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SCSS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:34Z
+ 2024-12-01T01:38:52Z
Daily Trending of SCSS in GitHub
\ No newline at end of file
diff --git a/scss/monthly/index.xml b/scss/monthly/index.xml
new file mode 100644
index 00000000000..fa832ccef30
--- /dev/null
+++ b/scss/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub SCSS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:07Z
+ Monthly Trending of SCSS in GitHub
+
+
+ piharpi/jekyll-klise
+ 2024-12-01T01:58:07Z
+ tag:github.com,2024-12-01:/piharpi/jekyll-klise
+
+ <p>🏖️ Klisé is a minimalist Jekyll theme for running a personal site or blog, light & dark mode support. (https://klise.vercel.app)</p><hr>
+
+
+ Keldos-Li/typora-latex-theme
+ 2024-12-01T01:58:07Z
+ tag:github.com,2024-12-01:/Keldos-Li/typora-latex-theme
+
+ <p>将Typora伪装成LaTeX的中文样式主题,本科生轻量级课程论文撰写的好帮手。This is a theme disguising Typora into Chinese LaTeX style.</p><hr>
+
+
+ andrewbanchich/forty-jekyll-theme
+ 2024-12-01T01:58:07Z
+ tag:github.com,2024-12-01:/andrewbanchich/forty-jekyll-theme
+
+ <p>A Jekyll version of the "Forty" theme by HTML5 UP.</p><hr>
+
+
\ No newline at end of file
diff --git a/scss/weekly/index.xml b/scss/weekly/index.xml
new file mode 100644
index 00000000000..8cfd93d9fc7
--- /dev/null
+++ b/scss/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SCSS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:47Z
+ Weekly Trending of SCSS in GitHub
+
+
\ No newline at end of file
diff --git a/sed/daily/index.xml b/sed/daily/index.xml
index 94f98aaf5a9..0e612f4e09b 100644
--- a/sed/daily/index.xml
+++ b/sed/daily/index.xml
@@ -1,7 +1,7 @@
GitHub sed Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:33Z
+ 2024-12-01T01:38:50Z
Daily Trending of sed in GitHub
\ No newline at end of file
diff --git a/sed/monthly/index.xml b/sed/monthly/index.xml
new file mode 100644
index 00000000000..17fb177a155
--- /dev/null
+++ b/sed/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub sed Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:05Z
+ Monthly Trending of sed in GitHub
+
+
\ No newline at end of file
diff --git a/sed/weekly/index.xml b/sed/weekly/index.xml
new file mode 100644
index 00000000000..62c211a2827
--- /dev/null
+++ b/sed/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub sed Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:46Z
+ Weekly Trending of sed in GitHub
+
+
\ No newline at end of file
diff --git a/self/daily/index.xml b/self/daily/index.xml
index 6a0b772468c..5b680368eb3 100644
--- a/self/daily/index.xml
+++ b/self/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Self Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:33Z
+ 2024-12-01T01:38:51Z
Daily Trending of Self in GitHub
\ No newline at end of file
diff --git a/self/monthly/index.xml b/self/monthly/index.xml
new file mode 100644
index 00000000000..5f96f2ba265
--- /dev/null
+++ b/self/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Self Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:06Z
+ Monthly Trending of Self in GitHub
+
+
\ No newline at end of file
diff --git a/self/weekly/index.xml b/self/weekly/index.xml
new file mode 100644
index 00000000000..bd15199ce5f
--- /dev/null
+++ b/self/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Self Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:47Z
+ Weekly Trending of Self in GitHub
+
+
\ No newline at end of file
diff --git a/selinux-policy/daily/index.xml b/selinux-policy/daily/index.xml
index d4bcff8f580..17f2825674b 100644
--- a/selinux-policy/daily/index.xml
+++ b/selinux-policy/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SELinux Policy Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:35Z
+ 2024-12-01T01:38:53Z
Daily Trending of SELinux Policy in GitHub
\ No newline at end of file
diff --git a/selinux-policy/monthly/index.xml b/selinux-policy/monthly/index.xml
new file mode 100644
index 00000000000..421dd0f8daa
--- /dev/null
+++ b/selinux-policy/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SELinux Policy Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:07Z
+ Monthly Trending of SELinux Policy in GitHub
+
+
\ No newline at end of file
diff --git a/selinux-policy/weekly/index.xml b/selinux-policy/weekly/index.xml
new file mode 100644
index 00000000000..9e70d41532e
--- /dev/null
+++ b/selinux-policy/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SELinux Policy Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:48Z
+ Weekly Trending of SELinux Policy in GitHub
+
+
\ No newline at end of file
diff --git a/shaderlab/daily/index.xml b/shaderlab/daily/index.xml
index f5277ca0125..8b9b92bd502 100644
--- a/shaderlab/daily/index.xml
+++ b/shaderlab/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ShaderLab Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:35Z
+ 2024-12-01T01:38:53Z
Daily Trending of ShaderLab in GitHub
\ No newline at end of file
diff --git a/shaderlab/monthly/index.xml b/shaderlab/monthly/index.xml
new file mode 100644
index 00000000000..b1863e6b6f2
--- /dev/null
+++ b/shaderlab/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShaderLab Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:08Z
+ Monthly Trending of ShaderLab in GitHub
+
+
\ No newline at end of file
diff --git a/shaderlab/weekly/index.xml b/shaderlab/weekly/index.xml
new file mode 100644
index 00000000000..b4be34d6c55
--- /dev/null
+++ b/shaderlab/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShaderLab Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:49Z
+ Weekly Trending of ShaderLab in GitHub
+
+
\ No newline at end of file
diff --git a/shell/daily/index.xml b/shell/daily/index.xml
index 86c2ffb49cf..d80eb1cef8c 100644
--- a/shell/daily/index.xml
+++ b/shell/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Shell Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:42Z
+ 2024-12-01T01:38:54Z
Daily Trending of Shell in GitHub
\ No newline at end of file
diff --git a/shell/monthly/index.xml b/shell/monthly/index.xml
new file mode 100644
index 00000000000..19eaa0dc38e
--- /dev/null
+++ b/shell/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Shell Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:10Z
+ Monthly Trending of Shell in GitHub
+
+
+ CISOfy/lynis
+ 2024-12-01T01:58:10Z
+ tag:github.com,2024-12-01:/CISOfy/lynis
+
+ <p>Lynis - Security auditing tool for Linux, macOS, and UNIX-based systems. Assists with compliance testing (HIPAA/ISO27001/PCI DSS) and system hardening. Agentless, and installation optional.</p><hr><p><a href="https://linuxsecurity.expert/tools/lynis/"><img src="https://badges.linuxsecurity.expert/tools/ranking/lynis.svg?sanitize=true" alt="Linux Security Expert badge"></a> <a href="https://travis-ci.org/CISOfy/lynis"><img src="https://travis-ci.org/CISOfy/lynis.svg?branch=master" alt="Build Status"></a> <a href="https://bestpractices.coreinfrastructure.org/projects/96"><img src="https://bestpractices.coreinfrastructure.org/projects/96/badge" alt="CII Best Practices"></a> <a href="https://cisofy.com/documentation/lynis/">Documentation</a></p>
<p>Do you like this software? <strong>Star the project</strong> and become a <a href="https://github.com/CISOfy/lynis/stargazers">stargazer</a>.</p>
<hr>
<h1>lynis</h1>
<blockquote>
<p>Lynis - Security auditing and hardening tool, for UNIX-based systems.</p>
</blockquote>
<p>Lynis is a security auditing tool for systems based on UNIX like Linux, macOS, BSD, and others. It performs an <strong>in-depth security scan</strong> and runs on the system itself. The primary goal is to test security defenses and <strong>provide tips for further system hardening</strong>. It will also scan for general system information, vulnerable software packages, and possible configuration issues. Lynis was commonly used by system administrators and auditors to assess the security defenses of their systems. Besides the "blue team," nowadays penetration testers also have Lynis in their toolkit.</p>
<p>We believe software should be <strong>simple</strong>, <strong>updated on a regular basis</strong>, and <strong>open</strong>. You should be able to trust, understand, and have the option to change the software. Many agree with us, as the software is being used by thousands every day to protect their systems.</p>
<h2>Goals</h2>
<p>The main goals are:</p>
<ul>
<li>Automated security auditing</li>
<li>Compliance testing (e.g. ISO27001, PCI-DSS, HIPAA)</li>
<li>Vulnerability detection</li>
</ul>
<p>The software (also) assists with:</p>
<ul>
<li>Configuration and asset management</li>
<li>Software patch management</li>
<li>System hardening</li>
<li>Penetration testing (privilege escalation)</li>
<li>Intrusion detection</li>
</ul>
<h3>Audience</h3>
<p>Typical users of the software:</p>
<ul>
<li>System administrators</li>
<li>Auditors</li>
<li>Security officers</li>
<li>Penetration testers</li>
<li>Security professionals</li>
</ul>
<h2>Installation</h2>
<p>There are multiple options available to install Lynis.</p>
<h3>Software Package</h3>
<p>For systems running Linux, BSD, and macOS, there is typically a package available. This is the preferred method of obtaining Lynis, as it is quick to install and easy to update. The Lynis project itself also provides <a href="https://packages.cisofy.com/">packages</a> in RPM or DEB format suitable for systems systems running: <code>CentOS</code>, <code>Debian</code>, <code>Fedora</code>, <code>OEL</code>, <code>openSUSE</code>, <code>RHEL</code>, <code>Ubuntu</code>, and others.</p>
<p>Some distributions may also have Lynis in their software repository: <a href="https://repology.org/project/lynis/versions"><img src="https://repology.org/badge/tiny-repos/lynis.svg?sanitize=true" alt="Repology"></a></p>
<p>Note: Some distributions don't provide an up-to-date version. In that case it is better to use the CISOfy software repository, download the tarball from the website, or download the latest GitHub release.</p>
<h3>Git</h3>
<p>The very latest developments can be obtained via git.</p>
<ol>
<li> <p>Clone or download the project files (<strong>no compilation nor installation</strong> is required) ;</p> <pre><code> git clone https://github.com/CISOfy/lynis
</code></pre> </li>
<li> <p>Execute:</p> <pre><code> cd lynis && ./lynis audit system
</code></pre> </li>
</ol>
<p>If you want to run the software as <code>root</code> (or sudo), we suggest changing the ownership of the files. Use <code>chown -R 0:0</code> to recursively alter the owner and group and set it to user ID <code>0</code> (<code>root</code>). Otherwise Lynis will warn you about the file permissions. After all, you are executing files owned by a non-privileged user.</p>
<h3>Enterprise Version</h3>
<p>This software component is also part of an enterprise solution. Same quality, yet with more functionality.</p>
<p>Focus areas include compliance (<code>PCI DSS</code>, <code>HIPAA</code>, <code>ISO27001</code>, and others). The Enterprise version comes with:</p>
<ul>
<li>a web interface;</li>
<li>dashboard and reporting;</li>
<li>hardening snippets;</li>
<li>improvement plan (based on risk);</li>
<li>commercial support.</li>
</ul>
<h2>Documentation</h2>
<p>Full documentation: <a href="https://cisofy.com/documentation/lynis/">https://cisofy.com/documentation/lynis/</a>.</p>
<h2>Customization</h2>
<p>If you want to create your own tests, have a look at the <a href="https://github.com/CISOfy/lynis-sdk">Lynis software development kit</a>.</p>
<h2>Security</h2>
<p>We participate in the <a href="https://bestpractices.coreinfrastructure.org/projects/96">CII best practices</a> badge program of the Linux Foundation.</p>
<h2>Media and Awards</h2>
<p>Lynis is collecting some awards along the way and we are proud of that.</p>
<ul>
<li> <p>2016</p>
<ul>
<li><a href="http://www.infoworld.com/article/3121251/open-source-tools/bossie-awards-2016-the-best-open-source-networking-and-security-software.html#slide13">Best of Open Source Software Awards 2016</a>.</li>
<li>Article by TechRepublic, considering Lynis a "must-have" tool: <a href="http://www.techrepublic.com/article/how-to-quickly-audit-a-linux-system-from-the-command-line/">How to quickly audit a Linux system from the command line</a></li>
<li><a href="https://www.toolswatch.org/2017/02/2016-top-security-tools-as-voted-by-toolswatch-org-readers/"><img src="https://www.toolswatch.org/badges/toptools/2016.svg?sanitize=true" alt="ToolsWatch Best Tools (top 10)"></a></li>
</ul> </li>
<li> <p>2015</p>
<ul>
<li><a href="https://www.toolswatch.org/2016/02/2015-top-security-tools-as-voted-by-toolswatch-org-readers/"><img src="https://www.toolswatch.org/badges/toptools/2015.svg?sanitize=true" alt="ToolsWatch Best Tools (second place)"></a></li>
<li><a href="http://www.idgenterprise.com/news/press-release/infoworld-announces-the-2015-best-of-open-source-software-awards/">Best of Open Source Software Awards 2015</a> (<a href="https://web.archive.org/web/20210313082124/https://www.idg.com/news/infoworld-announces-the-2015-best-of-open-source-software-awards/">mirror</a>).</li>
</ul> </li>
<li> <p>2014</p>
<ul>
<li><a href="https://www.toolswatch.org/2015/01/2014-top-security-tools-as-voted-by-toolswatch-org-readers/"><img src="https://www.toolswatch.org/badges/toptools/2014.svg?sanitize=true" alt="ToolsWatch Best Tools (third place)"></a></li>
</ul> </li>
<li> <p>2013</p>
<ul>
<li><a href="https://www.toolswatch.org/2013/12/2013-top-security-tools-as-voted-by-toolswatch-org-readers/"><img src="https://www.toolswatch.org/badges/toptools/2013.svg?sanitize=true" alt="ToolsWatch Best Tools (sixth place)"></a></li>
</ul> </li>
</ul>
<h2>Contribute</h2>
<blockquote>
<p>We love contributors.</p>
</blockquote>
<p>Do you have something to share? Want to help out with translating Lynis into your own language? Create an issue or pull request on GitHub, or send us an e-mail: <a href="mailto:lynis-dev@cisofy.com">lynis-dev@cisofy.com</a>.</p>
<p>More details can be found in the <a href="https://github.com/CISOfy/lynis/raw/master/CONTRIBUTING.md">Contributors Guide</a>.</p>
<p>You can also simply contribute to the project by <em>starring</em> the project and show your appreciation that way.</p>
<p>Thanks!</p>
<h3>License</h3>
<blockquote>
<p>GPLv3</p>
</blockquote>
+
+
+ RROrg/rr
+ 2024-12-01T01:58:10Z
+ tag:github.com,2024-12-01:/RROrg/rr
+
+ <p>Redpill Recovery (arpl-i18n)</p><hr><img src="https://avatars.githubusercontent.com/u/151816514?s=200&v=4" alt="logo" width="140" height="140" align="left">
<h1>RR: <small>redpill’s preinstallation and recovery environment</small></h1>
<p><a href="https://github.com/rrorg/rr"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https://github.com/rrorg/rr&edge_flat=true" alt="点击数"></a> <a href="https://github.com/rrorg/rr/releases/latest"><img src="https://img.shields.io/github/v/release/rrorg/rr?logo=github&style=flat-square" alt="GitHub Release"></a> <a href="https://github.com/rrorg/rr/releases"><img src="https://img.shields.io/github/downloads/rrorg/rr/total?logo=github&style=flat-square" alt="GitHub Downloads (all assets, all releases)"></a> <a href="https://rrorg.github.io/rr/"><img src="https://img.shields.io/github/issues-closed-raw/rrorg/rr/custom?logo=github&style=flat-square&label=custom" alt="GitHub Issues or Pull Requests by label"></a></p>
<blockquote>
<p>The ultimate solution to self-centralized Synology DSM OS on any local machine with any x86/x64 CPU architecture via a single flash of bootload pre-installation process in addition within recovery environment.</p>
</blockquote>
<h3>1: Disclaimer</h3>
<ul>
<li>硬盘有价,数据无价,任何对引导的修改都是有风险的,本人/组织不承担数据丢失的责任。本工具仅用作学习交流,严禁用于商业用途。</li>
</ul>
<hr>
<ul>
<li>Hardware/hard-drives are priced whilst data are priceless, any user-specific custom modification of the tested & prebuilt bootloader images could potentially cause irreversible data destruction towards your local machine. Us, as (RROrg) are not responsibly liable for damage nor personal loss of any types. The project with its affiliation is released for educational and learning purpose only, commercial application of the software is strictly prohibited.</li>
</ul>
<h3>2: Documentation & FAQ</h3>
<ul>
<li><a href="https://github.com/T-REX-XP/RRManager">RRManager</a></li>
<li><a href="https://rrorg.cn">blog</a></li>
<li><a href="https://rrorg.github.io/rr-docs">docs</a></li>
<li><a href="https://github.com/orgs/RROrg/discussions">📣</a></li>
</ul>
<h3>3: Components</h3>
<ul>
<li>During the compilation process, you need to connect to the Internet to obtain model and version information and download the corresponding ROM. If you cannot connect to the Internet, please build a pre-compiled bootloader through <a href="https://rrorg.github.io/rr/">RR-CUSTOM</a>.</li>
</ul>
<blockquote>
<p>Models: <a href="https://github.com/RROrg/rr/raw/main/docs/models.xlsx">models</a><br> PATs: <a href="https://github.com/RROrg/rr/raw/main/docs/pats.xlsx">pats</a><br> Addons: <a href="https://github.com/RROrg/rr/raw/main/docs/addons.xlsx">addons</a><br> Modules: <a href="https://github.com/RROrg/rr/raw/main/docs/modules.xlsx">modules</a></p>
</blockquote>
<h3>4: GPU:</h3>
<ul>
<li>vGPU:
<ul>
<li><a href="https://blog.kkk.rs/">蔚然小站</a></li>
<li><a href="https://github.com/pdbear/syno_nvidia_gpu_driver/">syno_nvidia_gpu_driver</a></li>
</ul> </li>
<li>iGPU:
<ul>
<li><a href="https://jim.plus/">Jim's Blog</a></li>
</ul> </li>
<li>iGPU:
<ul>
<li><a href="https://github.com/MoetaYuko/intel-gpu-i915-backports">intel-gpu-i915-backports</a></li>
</ul> </li>
</ul>
<h2>5: Contributing</h2>
<ul>
<li>The following is a roughly truncated guide to involve in project localization for internationalization.</li>
</ul>
<pre><code class="language-shell"># If deletion nor addition proces of code hunk is not required, comply with the following process
sudo apt install gettext
git clone https://github.com/rrorg/rr.git
cd files/initrd/opt/rr
xgettext -L Shell --keyword=TEXT *.sh -o lang/rr.pot
sed -i 's/charset=CHARSET/charset=UTF-8/' lang/rr.pot
# If you have to replace certain language string of the project, please suggest and modify translation changes within each correlated PO file
mkdir -p lang/zh_CN/LC_MESSAGES
msginit -i lang/rr.pot -l zh_CN.UTF-8 -o lang/zh_CN/LC_MESSAGES/rr.po
# Update translation files
for I in $(find lang -path *rr.po); do msgmerge --width=256 -U ${I} lang/rr.pot; done
# This formatting process will be automatically conducted during packaging.
for I in $(find lang -path *rr.po); do msgfmt ${I} -o ${I/.po/.mo}; done
</code></pre>
<ul>
<li> <p>PRs of new language translations towards the project is welcomed with appreciation.</p> </li>
<li> <p>Community maintainers of each supporting list of languages are accredited below.</p>
<ul>
<li><code>de_DE</code>: <code>@Tim Krämer</code>: <a href="https://tim-kraemer.de">Tim Krämer</a></li>
<li><code>en_US</code>: <code>@rrorg</code></li>
<li><code>ja_JP</code>: <code>@andatoshiki</code> & <code>@toshikidev</code></li>
<li><code>ko_KR</code>: <code>@EXP</code> : jeong1986</li>
<li><code>ru_RU</code>: <code>@Alex</code>: TG</li>
<li><code>tr_TR</code>: <code>@miraç bahadır öztürk</code>: miracozturk</li>
<li><code>vi_VN</code>: <code>@Ngọc Anh Trần</code>: mr.ngocanhtran</li>
<li><code>zh_CN</code>: <code>@rrorg</code></li>
<li><code>zh_HK</code>: <code>@rrorg</code></li>
<li><code>zh_TW</code>: <code>@March Fun</code>: <a href="https://cyber.suma.tw/">豪客幫</a></li>
</ul> </li>
</ul>
<h3>6: Acknowledgment & Credits</h3>
<ul>
<li><a href="https://github.com/fbelavenuto/arpl">ARPL</a>: <code>@fbelavenuto</code></li>
<li>Redpill: <code>@RedPill-TTG</code> <code>@pocopico</code> <code>@jim3ma</code> <code>@fbelavenuto</code> <code>@MoetaYuko</code>
<ul>
<li><a href="https://github.com/RedPill-TTG">RedPill-TTG</a></li>
<li><a href="https://github.com/XPEnology-Community/redpill-lkm5">redpill-lkm5</a></li>
<li><a href="https://github.com/MoetaYuko/linux_dsm_epyc7002">linux_dsm_epyc7002</a></li>
</ul> </li>
<li>Framework:
<ul>
<li><a href="https://github.com/buildroot/buildroot">Buildroot</a></li>
<li><a href="https://github.com/eudev-project/eudev">Eudev</a></li>
<li><a href="https://git.savannah.gnu.org/git/grub">Grub</a></li>
</ul> </li>
<li>Addons: <code>@xbl3&@wirgen</code> <code>@007revad</code> <code>@PeterSuh-Q3</code> <code>@jim3ma</code> <code>@jinlife</code>
<ul>
<li><a href="https://github.com/xbl3/synocodectool-patch">synocodectool-patch</a></li>
<li><a href="https://github.com/007revad/Synology_HDD_db">Synology_HDD_db</a></li>
<li><a href="https://github.com/PeterSuh-Q3/tcrp-addons/tree/main/nvme-cache">nvme-cache</a></li>
<li><a href="https://github.com/007revad/Synology_enable_M2_volume">Synology_enable_M2_volume</a></li>
<li><a href="https://jim.plus/blog/post/jim/synology-installation-with-nvme-disks-only">synology-installation-with-nvme-disks-only</a></li>
<li><a href="https://github.com/jinlife/Synology_Photos_Face_Patch">Synology_Photos_Face_Patch</a></li>
</ul> </li>
<li>Modules:<code>@jim3ma</code> <code>@MoetaYuko</code>
<ul>
<li><a href="https://github.com/jim3ma/synology-igc">synology-igc</a></li>
<li><a href="https://github.com/MoetaYuko/intel-gpu-i915-backports">intel-gpu-i915-backports</a></li>
</ul> </li>
</ul>
<h3>7: Links & Community</h3>
<h4>7.1: Group</h4>
<ul>
<li><code>QQ群1: 21609194</code> <a href="https://qm.qq.com/q/YTPvSXfeU0"><code>点击加入QQ群</code></a></li>
<li><code>QQ群2: 73119176</code> <a href="https://qm.qq.com/q/YV1B0NFvWK"><code>点击加入QQ群</code></a></li>
<li><code>QQ群3: 51929774</code> <a href="https://qm.qq.com/q/aVjM3Wb6KY"><code>点击加入QQ群</code></a></li>
<li><code>QQ群4: 49756829</code> <a href="https://qm.qq.com/q/9PHzmZDkqI"><code>点击加入QQ群</code></a></li>
<li><code>QQ群5: 30267817</code> <a href="https://qm.qq.com/q/6RgVDfOSXe"><code>点击加入QQ群</code></a></li>
<li><code>QQ群6: 68640297</code> <a href="https://qm.qq.com/q/PU71eSXAic"><code>点击加入QQ群</code></a></li>
<li><code>QQ Channel: RROrg</code> <a href="https://pd.qq.com/s/aklqb0uij"><code>点击加入QQ频道</code></a></li>
<li><code>Telegram Channel: RROrg</code> <a href="https://t.me/RR_Org"><code>Click to join</code></a></li>
</ul>
<h3>7: Sponsoring</h3>
<ul>
<li> <img src="https://raw.githubusercontent.com/wjz304/wjz304/master/my/buymeacoffee.png" width="700"> </li>
</ul>
<h3>8: License</h3>
<ul>
<li><a href="https://github.com/RROrg/rr/raw/main/LICENSE">GPL-V3</a></li>
</ul>
+
+
+ Joshua-Riek/ubuntu-rockchip
+ 2024-12-01T01:58:10Z
+ tag:github.com,2024-12-01:/Joshua-Riek/ubuntu-rockchip
+
+ <p>Ubuntu for Rockchip RK35XX Devices</p><hr><h2>Overview</h2>
<p><a href="https://github.com/Joshua-Riek/ubuntu-rockchip/releases/latest"><img src="https://img.shields.io/github/release/Joshua-Riek/ubuntu-rockchip.svg?label=Latest%20Release" alt="Latest GitHub Release"></a> <a href="https://github.com/Joshua-Riek/ubuntu-rockchip/releases"><img src="https://img.shields.io/github/downloads/Joshua-Riek/ubuntu-rockchip/total.svg?&color=E95420&label=Total%20Downloads" alt="Total GitHub Downloads"></a> <a href="https://github.com/Joshua-Riek/ubuntu-rockchip/actions/workflows/nightly.yml"><img src="https://github.com/Joshua-Riek/ubuntu-rockchip/actions/workflows/nightly.yml/badge.svg?sanitize=true" alt="Nightly GitHub Build"></a></p>
<p>Ubuntu Rockchip is a community project porting Ubuntu to Rockchip hardware with the goal of providing a stable and fully functional environment.</p>
<h2>Highlights</h2>
<ul>
<li>Available for both Ubuntu 22.04 LTS (with Rockchip Linux 5.10) and Ubuntu 24.04 LTS (with Rockchip Linux 6.1)</li>
<li>Package management via apt using the official Ubuntu repositories</li>
<li>Receive all updates and changes through apt</li>
<li>Desktop first-run wizard for user setup and configuration</li>
<li>3D hardware acceleration support via panfork</li>
<li>Fully working GNOME desktop using wayland</li>
<li>Chromium browser with smooth 4k youtube video playback</li>
<li>MPV video player capable of smooth 4k video playback</li>
</ul>
<h2>Installation</h2>
<p>Make sure you use a good, reliable, and fast SD card. For example, suppose you encounter boot or stability troubles. Most of the time, this is due to either an insufficient power supply or related to your SD card (bad card, bad card reader, something went wrong when burning the image, or the card is too slow).</p>
<p>Download the Ubuntu image for your specific board from the latest <a href="https://github.com/Joshua-Riek/ubuntu-rockchip/releases">release</a> on GitHub or from the dedicated download <a href="https://joshua-riek.github.io/ubuntu-rockchip-download/">website</a>. Then write the xz compressed image (no previous unpacking necessary) to your SD card using <a href="https://bztsrc.gitlab.io/usbimager/">USBimager</a> or <a href="https://www.balena.io/etcher">balenaEtcher</a> since, unlike other tools, these can validate burning results, saving you from corrupted SD card contents.</p>
<h2>Boot the System</h2>
<p>Insert your SD card into the slot on the board and power on the device. The first boot may take up to two minutes, so please be patient.</p>
<h2>Login Information</h2>
<p>For Ubuntu Server you will be able to login through HDMI, a serial console connection, or SSH. The predefined user is <code>ubuntu</code> and the password is <code>ubuntu</code>.</p>
<p>For Ubuntu Desktop you must connect through HDMI and follow the setup-wizard.</p>
<h2>Support the Project</h2>
<p>There are a few things you can do to support the project:</p>
<ul>
<li>Star the repository and follow me on GitHub</li>
<li>Share and upvote on sites like Twitter, Reddit, and YouTube</li>
<li>Report any bugs, glitches, or errors that you find (some bugs I may not be able to fix)</li>
<li>Sponsor me on GitHub; any contribution will be greatly appreciated</li>
</ul>
<p>These things motivate me to continue development and provide validation that my work is appreciated. Thanks in advance!</p>
<hr>
<blockquote>
<p>Ubuntu is a trademark of Canonical Ltd. Rockchip is a trademark of Fuzhou Rockchip Electronics Co., Ltd. The Ubuntu Rockchip project is not affiliated with Canonical Ltd or Fuzhou Rockchip Electronics Co., Ltd. All other product names, logos, and brands are property of their respective owners. The Ubuntu name is owned by <a href="https://ubuntu.com/">Canonical Limited</a>.</p>
</blockquote>
+
+
\ No newline at end of file
diff --git a/shell/weekly/index.xml b/shell/weekly/index.xml
new file mode 100644
index 00000000000..6c629c47ba1
--- /dev/null
+++ b/shell/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Shell Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:50Z
+ Weekly Trending of Shell in GitHub
+
+
\ No newline at end of file
diff --git a/shellcheck-config/daily/index.xml b/shellcheck-config/daily/index.xml
index d88c2635b5c..7b1debf5046 100644
--- a/shellcheck-config/daily/index.xml
+++ b/shellcheck-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ShellCheck Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:35Z
+ 2024-12-01T01:38:53Z
Daily Trending of ShellCheck Config in GitHub
\ No newline at end of file
diff --git a/shellcheck-config/monthly/index.xml b/shellcheck-config/monthly/index.xml
new file mode 100644
index 00000000000..8d90f0f7f44
--- /dev/null
+++ b/shellcheck-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShellCheck Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:08Z
+ Monthly Trending of ShellCheck Config in GitHub
+
+
\ No newline at end of file
diff --git a/shellcheck-config/weekly/index.xml b/shellcheck-config/weekly/index.xml
new file mode 100644
index 00000000000..795798c5e31
--- /dev/null
+++ b/shellcheck-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShellCheck Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:48Z
+ Weekly Trending of ShellCheck Config in GitHub
+
+
\ No newline at end of file
diff --git a/shellsession/daily/index.xml b/shellsession/daily/index.xml
index a90b2acce97..40d6d809f04 100644
--- a/shellsession/daily/index.xml
+++ b/shellsession/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ShellSession Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:47Z
+ 2024-12-01T01:38:59Z
Daily Trending of ShellSession in GitHub
\ No newline at end of file
diff --git a/shellsession/monthly/index.xml b/shellsession/monthly/index.xml
new file mode 100644
index 00000000000..a4f66414548
--- /dev/null
+++ b/shellsession/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShellSession Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:15Z
+ Monthly Trending of ShellSession in GitHub
+
+
\ No newline at end of file
diff --git a/shellsession/weekly/index.xml b/shellsession/weekly/index.xml
new file mode 100644
index 00000000000..bdc520e19fa
--- /dev/null
+++ b/shellsession/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ShellSession Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:52Z
+ Weekly Trending of ShellSession in GitHub
+
+
\ No newline at end of file
diff --git a/shen/daily/index.xml b/shen/daily/index.xml
index 0a2eb871ac5..eb465ee9f98 100644
--- a/shen/daily/index.xml
+++ b/shen/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Shen Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:47Z
+ 2024-12-01T01:38:58Z
Daily Trending of Shen in GitHub
\ No newline at end of file
diff --git a/shen/monthly/index.xml b/shen/monthly/index.xml
new file mode 100644
index 00000000000..c75591033c1
--- /dev/null
+++ b/shen/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Shen Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:15Z
+ Monthly Trending of Shen in GitHub
+
+
\ No newline at end of file
diff --git a/shen/weekly/index.xml b/shen/weekly/index.xml
new file mode 100644
index 00000000000..a17762eda55
--- /dev/null
+++ b/shen/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Shen Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:52Z
+ Weekly Trending of Shen in GitHub
+
+
\ No newline at end of file
diff --git a/sieve/daily/index.xml b/sieve/daily/index.xml
index 8c42f0888f3..66b8df24c4a 100644
--- a/sieve/daily/index.xml
+++ b/sieve/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Sieve Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:47Z
+ 2024-12-01T01:38:59Z
Daily Trending of Sieve in GitHub
\ No newline at end of file
diff --git a/sieve/monthly/index.xml b/sieve/monthly/index.xml
new file mode 100644
index 00000000000..6be401260af
--- /dev/null
+++ b/sieve/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sieve Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:16Z
+ Monthly Trending of Sieve in GitHub
+
+
\ No newline at end of file
diff --git a/sieve/weekly/index.xml b/sieve/weekly/index.xml
new file mode 100644
index 00000000000..4342b9b69d8
--- /dev/null
+++ b/sieve/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Sieve Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:51Z
+ Weekly Trending of Sieve in GitHub
+
+
\ No newline at end of file
diff --git a/singularity/daily/index.xml b/singularity/daily/index.xml
index eb15f8e2a3b..099339cbd23 100644
--- a/singularity/daily/index.xml
+++ b/singularity/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Singularity Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:48Z
+ 2024-12-01T01:39:01Z
Daily Trending of Singularity in GitHub
\ No newline at end of file
diff --git a/singularity/monthly/index.xml b/singularity/monthly/index.xml
new file mode 100644
index 00000000000..30d750e9144
--- /dev/null
+++ b/singularity/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Singularity Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:17Z
+ Monthly Trending of Singularity in GitHub
+
+
\ No newline at end of file
diff --git a/singularity/weekly/index.xml b/singularity/weekly/index.xml
new file mode 100644
index 00000000000..7fdeefee94d
--- /dev/null
+++ b/singularity/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Singularity Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:54Z
+ Weekly Trending of Singularity in GitHub
+
+
\ No newline at end of file
diff --git a/slash/daily/index.xml b/slash/daily/index.xml
index 02bb2d61879..a6bc8fb6df9 100644
--- a/slash/daily/index.xml
+++ b/slash/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Slash Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:48Z
+ 2024-12-01T01:39:00Z
Daily Trending of Slash in GitHub
\ No newline at end of file
diff --git a/slash/monthly/index.xml b/slash/monthly/index.xml
new file mode 100644
index 00000000000..192dd1d1a2f
--- /dev/null
+++ b/slash/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slash Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:17Z
+ Monthly Trending of Slash in GitHub
+
+
\ No newline at end of file
diff --git a/slash/weekly/index.xml b/slash/weekly/index.xml
new file mode 100644
index 00000000000..1d56aa82cdc
--- /dev/null
+++ b/slash/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slash Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:54Z
+ Weekly Trending of Slash in GitHub
+
+
\ No newline at end of file
diff --git a/slice/daily/index.xml b/slice/daily/index.xml
index ad041541790..e7a5d0856ad 100644
--- a/slice/daily/index.xml
+++ b/slice/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Slice Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:49Z
+ 2024-12-01T01:39:01Z
Daily Trending of Slice in GitHub
\ No newline at end of file
diff --git a/slice/monthly/index.xml b/slice/monthly/index.xml
new file mode 100644
index 00000000000..c8e6c59a4de
--- /dev/null
+++ b/slice/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slice Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:16Z
+ Monthly Trending of Slice in GitHub
+
+
\ No newline at end of file
diff --git a/slice/weekly/index.xml b/slice/weekly/index.xml
new file mode 100644
index 00000000000..06593ff1af2
--- /dev/null
+++ b/slice/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slice Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:53Z
+ Weekly Trending of Slice in GitHub
+
+
\ No newline at end of file
diff --git a/slim/daily/index.xml b/slim/daily/index.xml
index 4ef4ff91240..244ce9df612 100644
--- a/slim/daily/index.xml
+++ b/slim/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Slim Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:49Z
+ 2024-12-01T01:39:00Z
Daily Trending of Slim in GitHub
\ No newline at end of file
diff --git a/slim/monthly/index.xml b/slim/monthly/index.xml
new file mode 100644
index 00000000000..0046c0de5c5
--- /dev/null
+++ b/slim/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slim Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:17Z
+ Monthly Trending of Slim in GitHub
+
+
\ No newline at end of file
diff --git a/slim/weekly/index.xml b/slim/weekly/index.xml
new file mode 100644
index 00000000000..9b01d22c24f
--- /dev/null
+++ b/slim/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Slim Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:53Z
+ Weekly Trending of Slim in GitHub
+
+
\ No newline at end of file
diff --git a/smali/daily/index.xml b/smali/daily/index.xml
index 7427e02ae8f..8e018597e50 100644
--- a/smali/daily/index.xml
+++ b/smali/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Smali Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:50Z
+ 2024-12-01T01:39:02Z
Daily Trending of Smali in GitHub
\ No newline at end of file
diff --git a/smali/monthly/index.xml b/smali/monthly/index.xml
new file mode 100644
index 00000000000..ff474dca234
--- /dev/null
+++ b/smali/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Smali Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:18Z
+ Monthly Trending of Smali in GitHub
+
+
\ No newline at end of file
diff --git a/smali/weekly/index.xml b/smali/weekly/index.xml
new file mode 100644
index 00000000000..cf6ffc5062e
--- /dev/null
+++ b/smali/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Smali Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:55Z
+ Weekly Trending of Smali in GitHub
+
+
\ No newline at end of file
diff --git a/smalltalk/daily/index.xml b/smalltalk/daily/index.xml
index 4fd28be1370..81e551a5b22 100644
--- a/smalltalk/daily/index.xml
+++ b/smalltalk/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Smalltalk Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:50Z
+ 2024-12-01T01:39:02Z
Daily Trending of Smalltalk in GitHub
\ No newline at end of file
diff --git a/smalltalk/monthly/index.xml b/smalltalk/monthly/index.xml
new file mode 100644
index 00000000000..5ce22133a3b
--- /dev/null
+++ b/smalltalk/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Smalltalk Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:19Z
+ Monthly Trending of Smalltalk in GitHub
+
+
\ No newline at end of file
diff --git a/smalltalk/weekly/index.xml b/smalltalk/weekly/index.xml
new file mode 100644
index 00000000000..d4e3bd5f2cb
--- /dev/null
+++ b/smalltalk/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Smalltalk Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:55Z
+ Weekly Trending of Smalltalk in GitHub
+
+
\ No newline at end of file
diff --git a/smarty/daily/index.xml b/smarty/daily/index.xml
index c7fba8ce622..7ac87ce8b5f 100644
--- a/smarty/daily/index.xml
+++ b/smarty/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Smarty Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:51Z
+ 2024-12-01T01:39:03Z
Daily Trending of Smarty in GitHub
\ No newline at end of file
diff --git a/smarty/monthly/index.xml b/smarty/monthly/index.xml
new file mode 100644
index 00000000000..81aa5bc862a
--- /dev/null
+++ b/smarty/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Smarty Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:19Z
+ Monthly Trending of Smarty in GitHub
+
+
+ sidpalas/devops-directive-kubernetes-course
+ 2024-12-01T01:58:19Z
+ tag:github.com,2024-12-01:/sidpalas/devops-directive-kubernetes-course
+
+ <p>This is the companion repo for the DevOps Directive "Kubernetes: Beginner to Pro" course!</p><hr>
+
+
\ No newline at end of file
diff --git a/smarty/weekly/index.xml b/smarty/weekly/index.xml
new file mode 100644
index 00000000000..19786fbae51
--- /dev/null
+++ b/smarty/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Smarty Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:57Z
+ Weekly Trending of Smarty in GitHub
+
+
\ No newline at end of file
diff --git a/smpl/daily/index.xml b/smpl/daily/index.xml
index 25fd7ba1372..0ad8ad6b36f 100644
--- a/smpl/daily/index.xml
+++ b/smpl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SmPL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:52Z
+ 2024-12-01T01:39:05Z
Daily Trending of SmPL in GitHub
\ No newline at end of file
diff --git a/smpl/monthly/index.xml b/smpl/monthly/index.xml
new file mode 100644
index 00000000000..cb9682c07fa
--- /dev/null
+++ b/smpl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SmPL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:21Z
+ Monthly Trending of SmPL in GitHub
+
+
\ No newline at end of file
diff --git a/smpl/weekly/index.xml b/smpl/weekly/index.xml
new file mode 100644
index 00000000000..20c4b948c4d
--- /dev/null
+++ b/smpl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SmPL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:58Z
+ Weekly Trending of SmPL in GitHub
+
+
\ No newline at end of file
diff --git a/smt/daily/index.xml b/smt/daily/index.xml
index eff68549990..3b65d10ff02 100644
--- a/smt/daily/index.xml
+++ b/smt/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SMT Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:53Z
+ 2024-12-01T01:39:05Z
Daily Trending of SMT in GitHub
\ No newline at end of file
diff --git a/smt/monthly/index.xml b/smt/monthly/index.xml
new file mode 100644
index 00000000000..8ec460fc04c
--- /dev/null
+++ b/smt/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SMT Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:20Z
+ Monthly Trending of SMT in GitHub
+
+
\ No newline at end of file
diff --git a/smt/weekly/index.xml b/smt/weekly/index.xml
new file mode 100644
index 00000000000..b4dabd2c73e
--- /dev/null
+++ b/smt/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SMT Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:58Z
+ Weekly Trending of SMT in GitHub
+
+
\ No newline at end of file
diff --git a/solidity/daily/index.xml b/solidity/daily/index.xml
index 7cdcc46ecc5..856f4a26e4b 100644
--- a/solidity/daily/index.xml
+++ b/solidity/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Solidity Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:55Z
+ 2024-12-01T01:39:07Z
Daily Trending of Solidity in GitHub
\ No newline at end of file
diff --git a/solidity/monthly/index.xml b/solidity/monthly/index.xml
new file mode 100644
index 00000000000..cce8e4d861b
--- /dev/null
+++ b/solidity/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Solidity Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:23Z
+ Monthly Trending of Solidity in GitHub
+
+
+ WTFAcademy/WTF-Dapp
+ 2024-12-01T01:58:23Z
+ tag:github.com,2024-12-01:/WTFAcademy/WTF-Dapp
+
+ <p>⭐ Minimal tutorials to build Dapps | DEX Development Tutorial | Uniswap 代码解析 | 去中心化交易所实战教程 | DApp 智能合约和前端教程 ⭐</p><hr>
+
+
+ smartcontractkit/chainlink-brownie-contracts
+ 2024-12-01T01:58:23Z
+ tag:github.com,2024-12-01:/smartcontractkit/chainlink-brownie-contracts
+
+ <p>A repository for automatically using the latest chainlink repo from the core chainlink repo.</p><hr>
+
+
+ liquity/bold
+ 2024-12-01T01:58:23Z
+ tag:github.com,2024-12-01:/liquity/bold
+
+ <p>Liquity v2 monorepo containing the contracts, subgraph and frontend.</p><hr>
+
+
\ No newline at end of file
diff --git a/solidity/weekly/index.xml b/solidity/weekly/index.xml
new file mode 100644
index 00000000000..55a27dd096c
--- /dev/null
+++ b/solidity/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Solidity Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:01Z
+ Weekly Trending of Solidity in GitHub
+
+
\ No newline at end of file
diff --git a/soong/daily/index.xml b/soong/daily/index.xml
index 9c63109ec5c..8e68ca3c101 100644
--- a/soong/daily/index.xml
+++ b/soong/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Soong Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:54Z
+ 2024-12-01T01:39:06Z
Daily Trending of Soong in GitHub
\ No newline at end of file
diff --git a/soong/monthly/index.xml b/soong/monthly/index.xml
new file mode 100644
index 00000000000..9ee4dbc04b2
--- /dev/null
+++ b/soong/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Soong Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:22Z
+ Monthly Trending of Soong in GitHub
+
+
\ No newline at end of file
diff --git a/soong/weekly/index.xml b/soong/weekly/index.xml
new file mode 100644
index 00000000000..f3cfca81c33
--- /dev/null
+++ b/soong/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Soong Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:59Z
+ Weekly Trending of Soong in GitHub
+
+
\ No newline at end of file
diff --git a/sourcepawn/daily/index.xml b/sourcepawn/daily/index.xml
index b0137435172..a477e9e31a4 100644
--- a/sourcepawn/daily/index.xml
+++ b/sourcepawn/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SourcePawn Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:54Z
+ 2024-12-01T01:39:06Z
Daily Trending of SourcePawn in GitHub
\ No newline at end of file
diff --git a/sourcepawn/monthly/index.xml b/sourcepawn/monthly/index.xml
new file mode 100644
index 00000000000..6ac02af73dd
--- /dev/null
+++ b/sourcepawn/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SourcePawn Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:22Z
+ Monthly Trending of SourcePawn in GitHub
+
+
\ No newline at end of file
diff --git a/sourcepawn/weekly/index.xml b/sourcepawn/weekly/index.xml
new file mode 100644
index 00000000000..674fa5fbf3c
--- /dev/null
+++ b/sourcepawn/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SourcePawn Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:49:59Z
+ Weekly Trending of SourcePawn in GitHub
+
+
\ No newline at end of file
diff --git a/sparql/daily/index.xml b/sparql/daily/index.xml
index 21d7a025366..4230ae425f6 100644
--- a/sparql/daily/index.xml
+++ b/sparql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SPARQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:54Z
+ 2024-12-01T01:39:06Z
Daily Trending of SPARQL in GitHub
\ No newline at end of file
diff --git a/sparql/monthly/index.xml b/sparql/monthly/index.xml
new file mode 100644
index 00000000000..8bbb499ba27
--- /dev/null
+++ b/sparql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SPARQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:22Z
+ Monthly Trending of SPARQL in GitHub
+
+
\ No newline at end of file
diff --git a/sparql/weekly/index.xml b/sparql/weekly/index.xml
new file mode 100644
index 00000000000..7b587bc0b82
--- /dev/null
+++ b/sparql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SPARQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:00Z
+ Weekly Trending of SPARQL in GitHub
+
+
\ No newline at end of file
diff --git a/spline-font-database/daily/index.xml b/spline-font-database/daily/index.xml
index 90d74395593..a296913d610 100644
--- a/spline-font-database/daily/index.xml
+++ b/spline-font-database/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Spline Font Database Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:57Z
+ 2024-12-01T01:39:08Z
Daily Trending of Spline Font Database in GitHub
\ No newline at end of file
diff --git a/spline-font-database/monthly/index.xml b/spline-font-database/monthly/index.xml
new file mode 100644
index 00000000000..57d1312d078
--- /dev/null
+++ b/spline-font-database/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Spline Font Database Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:25Z
+ Monthly Trending of Spline Font Database in GitHub
+
+
\ No newline at end of file
diff --git a/spline-font-database/weekly/index.xml b/spline-font-database/weekly/index.xml
new file mode 100644
index 00000000000..7d064f592b1
--- /dev/null
+++ b/spline-font-database/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Spline Font Database Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:01Z
+ Weekly Trending of Spline Font Database in GitHub
+
+
\ No newline at end of file
diff --git a/sqf/daily/index.xml b/sqf/daily/index.xml
index f6f571c8d33..768ae71906f 100644
--- a/sqf/daily/index.xml
+++ b/sqf/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SQF Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:56Z
+ 2024-12-01T01:39:09Z
Daily Trending of SQF in GitHub
\ No newline at end of file
diff --git a/sqf/monthly/index.xml b/sqf/monthly/index.xml
new file mode 100644
index 00000000000..07244a9f91b
--- /dev/null
+++ b/sqf/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQF Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:24Z
+ Monthly Trending of SQF in GitHub
+
+
\ No newline at end of file
diff --git a/sqf/weekly/index.xml b/sqf/weekly/index.xml
new file mode 100644
index 00000000000..d6f7eeded67
--- /dev/null
+++ b/sqf/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQF Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:02Z
+ Weekly Trending of SQF in GitHub
+
+
\ No newline at end of file
diff --git a/sql/daily/index.xml b/sql/daily/index.xml
index de38afe7e77..c3519347fe0 100644
--- a/sql/daily/index.xml
+++ b/sql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:56Z
+ 2024-12-01T01:39:08Z
Daily Trending of SQL in GitHub
\ No newline at end of file
diff --git a/sql/monthly/index.xml b/sql/monthly/index.xml
new file mode 100644
index 00000000000..0ec098c945e
--- /dev/null
+++ b/sql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:25Z
+ Monthly Trending of SQL in GitHub
+
+
\ No newline at end of file
diff --git a/sql/weekly/index.xml b/sql/weekly/index.xml
new file mode 100644
index 00000000000..367999a6e93
--- /dev/null
+++ b/sql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:02Z
+ Weekly Trending of SQL in GitHub
+
+
\ No newline at end of file
diff --git a/sqlpl/daily/index.xml b/sqlpl/daily/index.xml
index 98e4951c5e4..5b5e006be01 100644
--- a/sqlpl/daily/index.xml
+++ b/sqlpl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SQLPL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:56Z
+ 2024-12-01T01:39:08Z
Daily Trending of SQLPL in GitHub
\ No newline at end of file
diff --git a/sqlpl/monthly/index.xml b/sqlpl/monthly/index.xml
new file mode 100644
index 00000000000..a33d562f276
--- /dev/null
+++ b/sqlpl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQLPL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:24Z
+ Monthly Trending of SQLPL in GitHub
+
+
\ No newline at end of file
diff --git a/sqlpl/weekly/index.xml b/sqlpl/weekly/index.xml
new file mode 100644
index 00000000000..860b992d77f
--- /dev/null
+++ b/sqlpl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SQLPL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:02Z
+ Weekly Trending of SQLPL in GitHub
+
+
\ No newline at end of file
diff --git a/squirrel/daily/index.xml b/squirrel/daily/index.xml
index d4a96a83ca0..8fc765a4437 100644
--- a/squirrel/daily/index.xml
+++ b/squirrel/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Squirrel Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:57Z
+ 2024-12-01T01:39:10Z
Daily Trending of Squirrel in GitHub
\ No newline at end of file
diff --git a/squirrel/monthly/index.xml b/squirrel/monthly/index.xml
new file mode 100644
index 00000000000..7e6598baedc
--- /dev/null
+++ b/squirrel/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Squirrel Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:26Z
+ Monthly Trending of Squirrel in GitHub
+
+
\ No newline at end of file
diff --git a/squirrel/weekly/index.xml b/squirrel/weekly/index.xml
new file mode 100644
index 00000000000..6394b83a56c
--- /dev/null
+++ b/squirrel/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Squirrel Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:04Z
+ Weekly Trending of Squirrel in GitHub
+
+
\ No newline at end of file
diff --git a/srecode-template/daily/index.xml b/srecode-template/daily/index.xml
index a5e97121cd7..9c19fa4943d 100644
--- a/srecode-template/daily/index.xml
+++ b/srecode-template/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SRecode Template Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:58Z
+ 2024-12-01T01:39:10Z
Daily Trending of SRecode Template in GitHub
\ No newline at end of file
diff --git a/srecode-template/monthly/index.xml b/srecode-template/monthly/index.xml
new file mode 100644
index 00000000000..c1df9a59347
--- /dev/null
+++ b/srecode-template/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SRecode Template Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:26Z
+ Monthly Trending of SRecode Template in GitHub
+
+
\ No newline at end of file
diff --git a/srecode-template/weekly/index.xml b/srecode-template/weekly/index.xml
new file mode 100644
index 00000000000..ab6f366ace7
--- /dev/null
+++ b/srecode-template/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SRecode Template Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:03Z
+ Weekly Trending of SRecode Template in GitHub
+
+
\ No newline at end of file
diff --git a/ssh-config/daily/index.xml b/ssh-config/daily/index.xml
index 849b7815fd1..3d99d3fbc00 100644
--- a/ssh-config/daily/index.xml
+++ b/ssh-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SSH Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:58Z
+ 2024-12-01T01:39:10Z
Daily Trending of SSH Config in GitHub
\ No newline at end of file
diff --git a/ssh-config/monthly/index.xml b/ssh-config/monthly/index.xml
new file mode 100644
index 00000000000..bfa60a4c963
--- /dev/null
+++ b/ssh-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SSH Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:26Z
+ Monthly Trending of SSH Config in GitHub
+
+
\ No newline at end of file
diff --git a/ssh-config/weekly/index.xml b/ssh-config/weekly/index.xml
new file mode 100644
index 00000000000..2bed973d33c
--- /dev/null
+++ b/ssh-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SSH Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:03Z
+ Weekly Trending of SSH Config in GitHub
+
+
\ No newline at end of file
diff --git a/stan/daily/index.xml b/stan/daily/index.xml
index fce39ce016f..45f136a710b 100644
--- a/stan/daily/index.xml
+++ b/stan/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Stan Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:58Z
+ 2024-12-01T01:39:09Z
Daily Trending of Stan in GitHub
\ No newline at end of file
diff --git a/stan/monthly/index.xml b/stan/monthly/index.xml
new file mode 100644
index 00000000000..2901383282d
--- /dev/null
+++ b/stan/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stan Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:26Z
+ Monthly Trending of Stan in GitHub
+
+
\ No newline at end of file
diff --git a/stan/weekly/index.xml b/stan/weekly/index.xml
new file mode 100644
index 00000000000..60aef4fc01d
--- /dev/null
+++ b/stan/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stan Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:04Z
+ Weekly Trending of Stan in GitHub
+
+
\ No newline at end of file
diff --git a/standard-ml/daily/index.xml b/standard-ml/daily/index.xml
index 92d2a087d56..1ebdc924ff9 100644
--- a/standard-ml/daily/index.xml
+++ b/standard-ml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Standard ML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:59Z
+ 2024-12-01T01:39:12Z
Daily Trending of Standard ML in GitHub
\ No newline at end of file
diff --git a/standard-ml/monthly/index.xml b/standard-ml/monthly/index.xml
new file mode 100644
index 00000000000..9d59a2a1d62
--- /dev/null
+++ b/standard-ml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Standard ML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:28Z
+ Monthly Trending of Standard ML in GitHub
+
+
\ No newline at end of file
diff --git a/standard-ml/weekly/index.xml b/standard-ml/weekly/index.xml
new file mode 100644
index 00000000000..f56a60e6299
--- /dev/null
+++ b/standard-ml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Standard ML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:05Z
+ Weekly Trending of Standard ML in GitHub
+
+
\ No newline at end of file
diff --git a/starlark/daily/index.xml b/starlark/daily/index.xml
index 26a1c3c3df8..c9ea83b80d5 100644
--- a/starlark/daily/index.xml
+++ b/starlark/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Starlark Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:00Z
+ 2024-12-01T01:39:13Z
Daily Trending of Starlark in GitHub
\ No newline at end of file
diff --git a/starlark/monthly/index.xml b/starlark/monthly/index.xml
new file mode 100644
index 00000000000..06dcaa1876b
--- /dev/null
+++ b/starlark/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Starlark Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:29Z
+ Monthly Trending of Starlark in GitHub
+
+
+ mvukov/rules_ros
+ 2024-12-01T01:58:29Z
+ tag:github.com,2024-12-01:/mvukov/rules_ros
+
+ <p>Build ROS (1) with Bazel</p><hr>
+
+
+ aspect-build/rules_ts
+ 2024-12-01T01:58:29Z
+ tag:github.com,2024-12-01:/aspect-build/rules_ts
+
+ <p>Bazel rules for the `tsc` compiler from http://typescriptlang.org</p><hr>
+
+
+ bazel-contrib/rules_jvm_external
+ 2024-12-01T01:58:29Z
+ tag:github.com,2024-12-01:/bazel-contrib/rules_jvm_external
+
+ <p>Bazel rules to resolve, fetch and export Maven artifacts</p><hr>
+
+
\ No newline at end of file
diff --git a/starlark/weekly/index.xml b/starlark/weekly/index.xml
new file mode 100644
index 00000000000..5f10ca9c8dc
--- /dev/null
+++ b/starlark/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Starlark Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:06Z
+ Weekly Trending of Starlark in GitHub
+
+
+ masmovil/masorange_rules_helm
+ 2024-12-01T01:50:06Z
+ tag:github.com,2024-12-01:/masmovil/masorange_rules_helm
+
+ <p>Bazel rules to manipulate and operate Helm charts with Bazel, decrpyt sops secrets, and run operations over cloud services</p><hr>
+
+
\ No newline at end of file
diff --git a/stata/daily/index.xml b/stata/daily/index.xml
index c9d2bbaf8f1..9a660358c92 100644
--- a/stata/daily/index.xml
+++ b/stata/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Stata Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:35:59Z
+ 2024-12-01T01:39:11Z
Daily Trending of Stata in GitHub
\ No newline at end of file
diff --git a/stata/monthly/index.xml b/stata/monthly/index.xml
new file mode 100644
index 00000000000..b7de2167437
--- /dev/null
+++ b/stata/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stata Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:27Z
+ Monthly Trending of Stata in GitHub
+
+
\ No newline at end of file
diff --git a/stata/weekly/index.xml b/stata/weekly/index.xml
new file mode 100644
index 00000000000..d2abe314184
--- /dev/null
+++ b/stata/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stata Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:05Z
+ Weekly Trending of Stata in GitHub
+
+
\ No newline at end of file
diff --git a/ston/daily/index.xml b/ston/daily/index.xml
index b42527cef50..28bfd5184a4 100644
--- a/ston/daily/index.xml
+++ b/ston/daily/index.xml
@@ -1,7 +1,7 @@
GitHub STON Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:02Z
+ 2024-12-01T01:39:14Z
Daily Trending of STON in GitHub
\ No newline at end of file
diff --git a/ston/monthly/index.xml b/ston/monthly/index.xml
new file mode 100644
index 00000000000..d0b3ea06520
--- /dev/null
+++ b/ston/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub STON Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:30Z
+ Monthly Trending of STON in GitHub
+
+
\ No newline at end of file
diff --git a/ston/weekly/index.xml b/ston/weekly/index.xml
new file mode 100644
index 00000000000..172c8c5ff9f
--- /dev/null
+++ b/ston/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub STON Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:07Z
+ Weekly Trending of STON in GitHub
+
+
\ No newline at end of file
diff --git a/stringtemplate/daily/index.xml b/stringtemplate/daily/index.xml
index 98ec9551fa8..da28f10526f 100644
--- a/stringtemplate/daily/index.xml
+++ b/stringtemplate/daily/index.xml
@@ -1,7 +1,7 @@
GitHub StringTemplate Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:01Z
+ 2024-12-01T01:39:13Z
Daily Trending of StringTemplate in GitHub
\ No newline at end of file
diff --git a/stringtemplate/monthly/index.xml b/stringtemplate/monthly/index.xml
new file mode 100644
index 00000000000..b698a0719a0
--- /dev/null
+++ b/stringtemplate/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub StringTemplate Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:30Z
+ Monthly Trending of StringTemplate in GitHub
+
+
\ No newline at end of file
diff --git a/stringtemplate/weekly/index.xml b/stringtemplate/weekly/index.xml
new file mode 100644
index 00000000000..affbbd7b222
--- /dev/null
+++ b/stringtemplate/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub StringTemplate Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:07Z
+ Weekly Trending of StringTemplate in GitHub
+
+
\ No newline at end of file
diff --git a/stylus/daily/index.xml b/stylus/daily/index.xml
index 1206ac366ee..e16bb7ddda5 100644
--- a/stylus/daily/index.xml
+++ b/stylus/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Stylus Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:02Z
+ 2024-12-01T01:39:14Z
Daily Trending of Stylus in GitHub
\ No newline at end of file
diff --git a/stylus/monthly/index.xml b/stylus/monthly/index.xml
new file mode 100644
index 00000000000..9de7a6f6c83
--- /dev/null
+++ b/stylus/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stylus Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:30Z
+ Monthly Trending of Stylus in GitHub
+
+
\ No newline at end of file
diff --git a/stylus/weekly/index.xml b/stylus/weekly/index.xml
new file mode 100644
index 00000000000..665aa742b5f
--- /dev/null
+++ b/stylus/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Stylus Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:08Z
+ Weekly Trending of Stylus in GitHub
+
+
\ No newline at end of file
diff --git a/subrip-text/daily/index.xml b/subrip-text/daily/index.xml
index 1f3866c92d1..de2cece4dd8 100644
--- a/subrip-text/daily/index.xml
+++ b/subrip-text/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SubRip Text Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:03Z
+ 2024-12-01T01:39:15Z
Daily Trending of SubRip Text in GitHub
\ No newline at end of file
diff --git a/subrip-text/monthly/index.xml b/subrip-text/monthly/index.xml
new file mode 100644
index 00000000000..9dbcbd4b551
--- /dev/null
+++ b/subrip-text/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SubRip Text Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:32Z
+ Monthly Trending of SubRip Text in GitHub
+
+
\ No newline at end of file
diff --git a/subrip-text/weekly/index.xml b/subrip-text/weekly/index.xml
new file mode 100644
index 00000000000..6acf09432dc
--- /dev/null
+++ b/subrip-text/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SubRip Text Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:08Z
+ Weekly Trending of SubRip Text in GitHub
+
+
\ No newline at end of file
diff --git a/sugarss/daily/index.xml b/sugarss/daily/index.xml
index 73b80e957e8..edc4cf8e68d 100644
--- a/sugarss/daily/index.xml
+++ b/sugarss/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SugarSS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:03Z
+ 2024-12-01T01:39:15Z
Daily Trending of SugarSS in GitHub
\ No newline at end of file
diff --git a/sugarss/monthly/index.xml b/sugarss/monthly/index.xml
new file mode 100644
index 00000000000..619837567f0
--- /dev/null
+++ b/sugarss/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SugarSS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:31Z
+ Monthly Trending of SugarSS in GitHub
+
+
\ No newline at end of file
diff --git a/sugarss/weekly/index.xml b/sugarss/weekly/index.xml
new file mode 100644
index 00000000000..8595bcddda9
--- /dev/null
+++ b/sugarss/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SugarSS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:09Z
+ Weekly Trending of SugarSS in GitHub
+
+
\ No newline at end of file
diff --git a/supercollider/daily/index.xml b/supercollider/daily/index.xml
index 94696af3119..ea6633760a3 100644
--- a/supercollider/daily/index.xml
+++ b/supercollider/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SuperCollider Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:03Z
+ 2024-12-01T01:39:16Z
Daily Trending of SuperCollider in GitHub
\ No newline at end of file
diff --git a/supercollider/monthly/index.xml b/supercollider/monthly/index.xml
new file mode 100644
index 00000000000..5f0500a3337
--- /dev/null
+++ b/supercollider/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SuperCollider Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:31Z
+ Monthly Trending of SuperCollider in GitHub
+
+
\ No newline at end of file
diff --git a/supercollider/weekly/index.xml b/supercollider/weekly/index.xml
new file mode 100644
index 00000000000..4a1ac1b20e0
--- /dev/null
+++ b/supercollider/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SuperCollider Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:09Z
+ Weekly Trending of SuperCollider in GitHub
+
+
\ No newline at end of file
diff --git a/svelte/daily/index.xml b/svelte/daily/index.xml
index 6e362f56c5b..27703181d7f 100644
--- a/svelte/daily/index.xml
+++ b/svelte/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Svelte Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:04Z
+ 2024-12-01T01:39:16Z
Daily Trending of Svelte in GitHub
\ No newline at end of file
diff --git a/svelte/monthly/index.xml b/svelte/monthly/index.xml
new file mode 100644
index 00000000000..bfd750ec8f1
--- /dev/null
+++ b/svelte/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Svelte Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:33Z
+ Monthly Trending of Svelte in GitHub
+
+
+ imputnet/cobalt
+ 2024-12-01T01:58:33Z
+ tag:github.com,2024-12-01:/imputnet/cobalt
+
+ <p>best way to save what you love</p><hr>
+
+
+ leaningtech/webvm
+ 2024-12-01T01:58:33Z
+ tag:github.com,2024-12-01:/leaningtech/webvm
+
+ <p>Virtual Machine for the Web</p><hr>
+
+
+ sveltejs/svelte.dev
+ 2024-12-01T01:58:33Z
+ tag:github.com,2024-12-01:/sveltejs/svelte.dev
+
+ <p>The Svelte omnisite</p><hr>
+
+
\ No newline at end of file
diff --git a/svelte/weekly/index.xml b/svelte/weekly/index.xml
new file mode 100644
index 00000000000..7c73736a9c8
--- /dev/null
+++ b/svelte/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Svelte Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:10Z
+ Weekly Trending of Svelte in GitHub
+
+
\ No newline at end of file
diff --git a/svg/daily/index.xml b/svg/daily/index.xml
index d048e24ab36..e5f34a4b84f 100644
--- a/svg/daily/index.xml
+++ b/svg/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SVG Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:06Z
+ 2024-12-01T01:39:19Z
Daily Trending of SVG in GitHub
\ No newline at end of file
diff --git a/svg/monthly/index.xml b/svg/monthly/index.xml
new file mode 100644
index 00000000000..7ef6365fc7a
--- /dev/null
+++ b/svg/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SVG Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:35Z
+ Monthly Trending of SVG in GitHub
+
+
\ No newline at end of file
diff --git a/svg/weekly/index.xml b/svg/weekly/index.xml
new file mode 100644
index 00000000000..1625f0ee1f8
--- /dev/null
+++ b/svg/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SVG Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:12Z
+ Weekly Trending of SVG in GitHub
+
+
\ No newline at end of file
diff --git a/swift/daily/index.xml b/swift/daily/index.xml
index e924db4528b..72573eb218d 100644
--- a/swift/daily/index.xml
+++ b/swift/daily/index.xml
@@ -1,14 +1,7 @@
GitHub Swift Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:07Z
+ 2024-12-01T01:39:19Z
Daily Trending of Swift in GitHub
-
- apple/swift-metrics
- 2024-11-30T01:36:07Z
- tag:github.com,2024-11-30:/apple/swift-metrics
-
- <p>Metrics API for Swift</p><hr><h1>SwiftMetrics</h1>
<p>A Metrics API package for Swift.</p>
<p>Almost all production server software needs to emit metrics information for observability. Because it's unlikely that all parties can agree on one specific metrics backend implementation, this API is designed to establish a standard that can be implemented by various metrics libraries which then post the metrics data to backends like <a href="https://prometheus.io/">Prometheus</a>, <a href="https://graphiteapp.org">Graphite</a>, publish over <a href="https://github.com/statsd/statsd">statsd</a>, write to disk, etc.</p>
<p>This is the beginning of a community-driven open-source project actively seeking contributions, be it code, documentation, or ideas. Apart from contributing to SwiftMetrics itself, we need metrics compatible libraries which send the metrics over to backend such as the ones mentioned above. What SwiftMetrics provides today is covered in the <a href="https://apple.github.io/swift-metrics/">API docs</a>, but it will continue to evolve with community input.</p>
<h2>Getting started</h2>
<p>If you have a server-side Swift application, or maybe a cross-platform (e.g. Linux, macOS) application or library, and you would like to emit metrics, targeting this metrics API package is a great idea. Below you'll find all you need to know to get started.</p>
<h3>Adding the dependency</h3>
<p>To add a dependency on the metrics API package, you need to declare it in your <code>Package.swift</code>:</p>
<pre><code class="language-swift">// swift-metrics 1.x and 2.x are almost API compatible, so most clients should use
.package(url: "https://github.com/apple/swift-metrics.git", "1.0.0" ..< "3.0.0"),
</code></pre>
<p>and to your application/library target, add "Metrics" to your dependencies:</p>
<pre><code class="language-swift">.target(
name: "BestExampleApp",
dependencies: [
// ...
.product(name: "Metrics", package: "swift-metrics"),
]
),
</code></pre>
<h3>Emitting metrics information</h3>
<pre><code class="language-swift">// 1) let's import the metrics API package
import Metrics
// 2) we need to create a concrete metric object, the label works similarly to a `DispatchQueue` label
let counter = Counter(label: "com.example.BestExampleApp.numberOfRequests")
// 3) we're now ready to use it
counter.increment()
</code></pre>
<h3>Selecting a metrics backend implementation (applications only)</h3>
<p>Note: If you are building a library, you don't need to concern yourself with this section. It is the end users of your library (the applications) who will decide which metrics backend to use. Libraries should never change the metrics implementation as that is something owned by the application.</p>
<p>SwiftMetrics only provides the metrics system API. As an application owner, you need to select a metrics backend (such as the ones mentioned above) to make the metrics information useful.</p>
<p>Selecting a backend is done by adding a dependency on the desired backend client implementation and invoking the <code>MetricsSystem.bootstrap</code> function at the beginning of the program:</p>
<pre><code class="language-swift">MetricsSystem.bootstrap(SelectedMetricsImplementation())
</code></pre>
<p>This instructs the <code>MetricsSystem</code> to install <code>SelectedMetricsImplementation</code> (actual name will differ) as the metrics backend to use.</p>
<p>As the API has just launched, not many implementations exist yet. If you are interested in implementing one see the "Implementing a metrics backend" section below explaining how to do so. List of existing SwiftMetrics API compatible libraries:</p>
<ul>
<li><a href="https://github.com/MrLotU/SwiftPrometheus">SwiftPrometheus</a>, support for <a href="https://prometheus.io">Prometheus</a></li>
<li><a href="https://github.com/apple/swift-statsd-client">StatsD Client</a>, support for StatsD</li>
<li><a href="https://github.com/open-telemetry/opentelemetry-swift">OpenTelemetry Swift</a>, support for <a href="https://opentelemetry.io/">OpenTelemetry</a> which also implements other metrics and tracing backends</li>
<li>Your library? <a href="https://forums.swift.org/c/server">Get in touch!</a></li>
</ul>
<h3>Swift Metrics Extras</h3>
<p>You may also be interested in some "extra" modules which are collected in the <a href="https://github.com/apple/swift-metrics-extras">Swift Metrics Extras</a> repository.</p>
<h2>Detailed design</h2>
<h3>Architecture</h3>
<p>We believe that for the Swift on Server ecosystem, it's crucial to have a metrics API that can be adopted by anybody so a multitude of libraries from different parties can all provide metrics information. More concretely this means that we believe all the metrics events from all libraries should end up in the same place, be one of the backends mentioned above or wherever else the application owner may choose.</p>
<p>In the real world, there are so many opinions over how exactly a metrics system should behave, how metrics should be aggregated and calculated, and where/how to persist them. We think it's not feasible to wait for one metrics package to support everything that a specific deployment needs while still being simple enough to use and remain performant. That's why we decided to split the problem into two:</p>
<ol>
<li>a metrics API</li>
<li>a metrics backend implementation</li>
</ol>
<p>This package only provides the metrics API itself, and therefore, SwiftMetrics is a "metrics API package." SwiftMetrics can be configured (using <code>MetricsSystem.bootstrap</code>) to choose any compatible metrics backend implementation. This way, packages can adopt the API, and the application can choose any compatible metrics backend implementation without requiring any changes from any of the libraries.</p>
<p>This API was designed with the contributors to the Swift on Server community and approved by the SSWG (Swift Server Work Group) to the "sandbox level" of the SSWG's incubation process.</p>
<p><a href="https://forums.swift.org/t/metrics/19353">pitch</a> | <a href="https://forums.swift.org/t/discussion-server-metrics-api/">discussion</a> | <a href="https://forums.swift.org/t/feedback-server-metrics-api/">feedback</a></p>
<h3>Metric types</h3>
<p>The API supports four metric types:</p>
<p><code>Counter</code>: A counter is a cumulative metric that represents a single monotonically increasing counter whose value can only increase or be reset to zero on restart. For example, you can use a counter to represent the number of requests served, tasks completed, or errors.</p>
<pre><code class="language-swift">counter.increment(by: 100)
</code></pre>
<p><code>Gauge</code>: A Gauge is a metric that represents a single numerical value that can arbitrarily go up and down. Gauges are typically used for measured values like temperatures or current memory usage, but also "counts" that can go up and down, like the number of active threads. Gauges are modeled as a <code>Recorder</code> with a sample size of 1 that does not perform any aggregation.</p>
<pre><code class="language-swift">gauge.record(100)
</code></pre>
<p><code>Meter</code>: A Meter is similar to <code>Gauge</code> - a metric that represents a single numerical value that can arbitrarily go up and down. Meters are typically used for measured values like temperatures or current memory usage, but also "counts" that can go up and down, like the number of active threads. Unlike <code>Gauge</code>, <code>Meter</code> also supports atomic incerements and decerements.</p>
<pre><code class="language-swift">meter.record(100)
</code></pre>
<p><code>Recorder</code>: A recorder collects observations within a time window (usually things like response sizes) and <em>can</em> provide aggregated information about the data sample, for example count, sum, min, max and various quantiles.</p>
<pre><code class="language-swift">recorder.record(100)
</code></pre>
<p><code>Timer</code>: A timer collects observations within a time window (usually things like request duration) and provides aggregated information about the data sample, for example min, max and various quantiles. It is similar to a <code>Recorder</code> but specialized for values that represent durations.</p>
<pre><code class="language-swift">timer.recordMilliseconds(100)
</code></pre>
<h3>Implementing a metrics backend (e.g. Prometheus client library)</h3>
<p>Note: Unless you need to implement a custom metrics backend, everything in this section is likely not relevant, so please feel free to skip.</p>
<p>As seen above, each constructor for <code>Counter</code>, <code>Gauge</code>, <code>Meter</code>, <code>Recorder</code> and <code>Timer</code> provides a metric object. This uncertainty obscures the selected metrics backend calling these constructors by design. <em>Each application</em> can select and configure its desired backend. The application sets up the metrics backend it wishes to use. Configuring the metrics backend is straightforward:</p>
<pre><code class="language-swift">let metricsImplementation = MyFavoriteMetricsImplementation()
MetricsSystem.bootstrap(metricsImplementation)
</code></pre>
<p>This instructs the <code>MetricsSystem</code> to install <code>MyFavoriteMetricsImplementation</code> as the metrics backend (<code>MetricsFactory</code>) to use. This should only be done once at the beginning of the program.</p>
<p>Given the above, an implementation of a metric backend needs to conform to <code>protocol MetricsFactory</code>:</p>
<pre><code class="language-swift">public protocol MetricsFactory {
func makeCounter(label: String, dimensions: [(String, String)]) -> CounterHandler
func makeMeter(label: String, dimensions: [(String, String)]) -> MeterHandler
func makeRecorder(label: String, dimensions: [(String, String)], aggregate: Bool) -> RecorderHandler
func makeTimer(label: String, dimensions: [(String, String)]) -> TimerHandler
func destroyCounter(_ handler: CounterHandler)
func destroyMeter(_ handler: MeterHandler)
func destroyRecorder(_ handler: RecorderHandler)
func destroyTimer(_ handler: TimerHandler)
}
</code></pre>
<p>The <code>MetricsFactory</code> is responsible for instantiating the concrete metrics classes that capture the metrics and perform aggregation and calculation of various quantiles as needed.</p>
<p><strong>Counter</strong></p>
<pre><code class="language-swift">public protocol CounterHandler: AnyObject {
func increment(by: Int64)
func reset()
}
</code></pre>
<p><strong>Meter</strong></p>
<pre><code class="language-swift">public protocol MeterHandler: AnyObject {
func set(_ value: Int64)
func set(_ value: Double)
func increment(by: Double)
func decrement(by: Double)
}
</code></pre>
<p><strong>Recorder</strong></p>
<pre><code class="language-swift">public protocol RecorderHandler: AnyObject {
func record(_ value: Int64)
func record(_ value: Double)
}
</code></pre>
<p><strong>Timer</strong></p>
<pre><code class="language-swift">public protocol TimerHandler: AnyObject {
func recordNanoseconds(_ duration: Int64)
}
</code></pre>
<h4>Dealing with Overflows</h4>
<p>Implementation of metric objects that deal with integers, like <code>Counter</code> and <code>Timer</code> should be careful with overflow. The expected behavior is to cap at <code>.max</code>, and never crash the program due to overflow . For example:</p>
<pre><code class="language-swift">class ExampleCounter: CounterHandler {
var value: Int64 = 0
func increment(by amount: Int64) {
let result = self.value.addingReportingOverflow(amount)
if result.overflow {
self.value = Int64.max
} else {
self.value = result.partialValue
}
}
}
</code></pre>
<h4>Full example</h4>
<p>Here is a full, but contrived, example of an in-memory implementation:</p>
<pre><code class="language-swift">class SimpleMetricsLibrary: MetricsFactory {
init() {}
func makeCounter(label: String, dimensions: [(String, String)]) -> CounterHandler {
return ExampleCounter(label, dimensions)
}
func makeMeter(label: String, dimensions: [(String, String)]) -> MeterHandler {
return ExampleMeter(label, dimensions)
}
func makeRecorder(label: String, dimensions: [(String, String)], aggregate: Bool) -> RecorderHandler {
return ExampleRecorder(label, dimensions, aggregate)
}
func makeTimer(label: String, dimensions: [(String, String)]) -> TimerHandler {
return ExampleTimer(label, dimensions)
}
// implementation is stateless, so nothing to do on destroy calls
func destroyCounter(_ handler: CounterHandler) {}
func destroyMeter(_ handler: TimerHandler) {}
func destroyRecorder(_ handler: RecorderHandler) {}
func destroyTimer(_ handler: TimerHandler) {}
private class ExampleCounter: CounterHandler {
init(_: String, _: [(String, String)]) {}
let lock = NSLock()
var value: Int64 = 0
func increment(by amount: Int64) {
self.lock.withLock {
self.value += amount
}
}
func reset() {
self.lock.withLock {
self.value = 0
}
}
}
private class ExampleMeter: MeterHandler {
init(_: String, _: [(String, String)]) {}
let lock = NSLock()
var _value: Double = 0
func set(_ value: Int64) {
self.set(Double(value))
}
func set(_ value: Double) {
self.lock.withLock { _value = value }
}
func increment(by value: Double) {
self.lock.withLock { self._value += value }
}
func decrement(by value: Double) {
self.lock.withLock { self._value -= value }
}
}
private class ExampleRecorder: RecorderHandler {
init(_: String, _: [(String, String)], _: Bool) {}
private let lock = NSLock()
var values = [(Int64, Double)]()
func record(_ value: Int64) {
self.record(Double(value))
}
func record(_ value: Double) {
// TODO: sliding window
lock.withLock {
values.append((Date().nanoSince1970, value))
self._count += 1
self._sum += value
self._min = Swift.min(self._min, value)
self._max = Swift.max(self._max, value)
}
}
var _sum: Double = 0
var sum: Double {
return self.lock.withLock { _sum }
}
private var _count: Int = 0
var count: Int {
return self.lock.withLock { _count }
}
private var _min: Double = 0
var min: Double {
return self.lock.withLock { _min }
}
private var _max: Double = 0
var max: Double {
return self.lock.withLock { _max }
}
}
private class ExampleTimer: TimerHandler {
init(_: String, _: [(String, String)]) {}
let lock = NSLock()
var _value: Int64 = 0
func recordNanoseconds(_ duration: Int64) {
self.lock.withLock { _value = duration }
}
}
}
</code></pre>
<h2>Security</h2>
<p>Please see <a href="https://raw.githubusercontent.com/apple/swift-metrics/main/SECURITY.md">SECURITY.md</a> for details on the security process.</p>
<h2>Getting involved</h2>
<p>Do not hesitate to get in touch as well, over on <a href="https://forums.swift.org/c/server">https://forums.swift.org/c/server</a></p>
-
\ No newline at end of file
diff --git a/swift/monthly/index.xml b/swift/monthly/index.xml
new file mode 100644
index 00000000000..2507460bc29
--- /dev/null
+++ b/swift/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Swift Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:36Z
+ Monthly Trending of Swift in GitHub
+
+
+ SwiftyJSON/SwiftyJSON
+ 2024-12-01T01:58:36Z
+ tag:github.com,2024-12-01:/SwiftyJSON/SwiftyJSON
+
+ <p>The better way to deal with JSON data in Swift.</p><hr><h1>SwiftyJSON</h1>
<p><a href="https://github.com/Carthage/Carthage"><img src="https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat" alt="Carthage compatible"></a> <img src="https://img.shields.io/cocoapods/v/SwiftyJSON.svg?sanitize=true" alt="CocoaPods"> <img src="https://img.shields.io/badge/platforms-iOS%208.0%20%7C%20macOS%2010.10%20%7C%20tvOS%209.0%20%7C%20watchOS%203.0-F28D00.svg?sanitize=true" alt="Platform"> <a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg?sanitize=true" alt="Reviewed by Hound"></a></p>
<p>SwiftyJSON makes it easy to deal with JSON data in Swift.</p>
<table>
<thead>
<tr>
<th>Platform</th>
<th>Build Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>*OS</td>
<td><a href="https://travis-ci.org/SwiftyJSON/SwiftyJSON"><img src="https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master" alt="Travis CI"></a></td>
</tr>
<tr>
<td><a href="https://github.com/IBM-Swift/SwiftyJSON">Linux</a></td>
<td><a href="https://travis-ci.org/IBM-Swift/SwiftyJSON"><img src="https://travis-ci.org/IBM-Swift/SwiftyJSON.svg?branch=master" alt="Build Status"></a></td>
</tr>
</tbody>
</table>
<ol>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#why-is-the-typical-json-handling-in-swift-not-good">Why is the typical JSON handling in Swift NOT good</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#requirements">Requirements</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#integration">Integration</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#usage">Usage</a>
<ul>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#initialization">Initialization</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#subscript">Subscript</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#loop">Loop</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#error">Error</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#optional-getter">Optional getter</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#non-optional-getter">Non-optional getter</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#setter">Setter</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#raw-object">Raw object</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#literal-convertibles">Literal convertibles</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#merging">Merging</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#removing-elements">Removing elements</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#work-with-alamofire">Work with Alamofire</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#work-with-moya">Work with Moya</a></li>
<li><a href="https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/#swiftyjson-model-generator">SwiftyJSON Model Generator</a></li>
</ol>
<h2>Why is the typical JSON handling in Swift NOT good?</h2>
<p>Swift is very strict about types. But although explicit typing is good for saving us from mistakes, it becomes painful when dealing with JSON and other areas that are, by nature, implicit about types.</p>
<p>Take the Twitter API for example. Say we want to retrieve a user's "name" value of some tweet in Swift (according to <a href="https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline">Twitter's API</a>).</p>
<p>The code would look like this:</p>
<pre><code class="language-swift">if let statusesArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let user = statusesArray[0]["user"] as? [String: Any],
let username = user["name"] as? String {
// Finally we got the username
}
</code></pre>
<p>It's not good.</p>
<p>Even if we use optional chaining, it would be messy:</p>
<pre><code class="language-swift">if let JSONObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let username = (JSONObject[0]["user"] as? [String: Any])?["name"] as? String {
// There's our username
}
</code></pre>
<p>An unreadable mess--for something that should really be simple!</p>
<p>With SwiftyJSON all you have to do is:</p>
<pre><code class="language-swift">let json = try? JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
//Now you got your value
}
</code></pre>
<p>And don't worry about the Optional Wrapping thing. It's done for you automatically.</p>
<pre><code class="language-swift">let json = try? JSON(data: dataFromNetworking)
let result = json[999999]["wrong_key"]["wrong_name"]
if let userName = result.string {
//Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety
} else {
//Print the error
print(result.error)
}
</code></pre>
<h2>Requirements</h2>
<ul>
<li>iOS 8.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 2.0+</li>
<li>Xcode 8</li>
</ul>
<h2>Integration</h2>
<h4>CocoaPods (iOS 8+, OS X 10.9+)</h4>
<p>You can use <a href="http://cocoapods.org/">CocoaPods</a> to install <code>SwiftyJSON</code> by adding it to your <code>Podfile</code>:</p>
<pre><code class="language-ruby">platform :ios, '8.0'
use_frameworks!
target 'MyApp' do
pod 'SwiftyJSON', '~> 4.0'
end
</code></pre>
<h4>Carthage (iOS 8+, OS X 10.9+)</h4>
<p>You can use <a href="https://github.com/Carthage/Carthage">Carthage</a> to install <code>SwiftyJSON</code> by adding it to your <code>Cartfile</code>:</p>
<pre><code>github "SwiftyJSON/SwiftyJSON" ~> 4.0
</code></pre>
<p>If you use Carthage to build your dependencies, make sure you have added <code>SwiftyJSON.framework</code> to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase.</p>
<h4>Swift Package Manager</h4>
<p>You can use <a href="https://swift.org/package-manager">The Swift Package Manager</a> to install <code>SwiftyJSON</code> by adding the proper description to your <code>Package.swift</code> file:</p>
<pre><code class="language-swift">// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
dependencies: [
.package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0"),
]
)
</code></pre>
<p>Then run <code>swift build</code> whenever you get prepared.</p>
<h4>Manually (iOS 7+, OS X 10.9+)</h4>
<p>To use this library in your project manually you may:</p>
<ol>
<li>for Projects, just drag SwiftyJSON.swift to the project tree</li>
<li>for Workspaces, include the whole SwiftyJSON.xcodeproj</li>
</ol>
<h2>Usage</h2>
<h4>Initialization</h4>
<pre><code class="language-swift">import SwiftyJSON
</code></pre>
<pre><code class="language-swift">let json = try? JSON(data: dataFromNetworking)
</code></pre>
<p>Or</p>
<pre><code class="language-swift">let json = JSON(jsonObject)
</code></pre>
<p>Or</p>
<pre><code class="language-swift">if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
}
</code></pre>
<h4>Subscript</h4>
<pre><code class="language-swift">// Getting a double from a JSON Array
let name = json[0].double
</code></pre>
<pre><code class="language-swift">// Getting an array of string from a JSON Array
let arrayNames = json["users"].arrayValue.map {$0["name"].stringValue}
</code></pre>
<pre><code class="language-swift">// Getting a string from a JSON Dictionary
let name = json["name"].stringValue
</code></pre>
<pre><code class="language-swift">// Getting a string using a path to the element
let path: [JSONSubscriptType] = [1,"list",2,"name"]
let name = json[path].string
// Just the same
let name = json[1]["list"][2]["name"].string
// Alternatively
let name = json[1,"list",2,"name"].string
</code></pre>
<pre><code class="language-swift">// With a hard way
let name = json[].string
</code></pre>
<pre><code class="language-swift">// With a custom way
let keys:[JSONSubscriptType] = [1,"list",2,"name"]
let name = json[keys].string
</code></pre>
<h4>Loop</h4>
<pre><code class="language-swift">// If json is .Dictionary
for (key,subJson):(String, JSON) in json {
// Do something you want
}
</code></pre>
<p><em>The first element is always a String, even if the JSON is an Array</em></p>
<pre><code class="language-swift">// If json is .Array
// The `index` is 0..<json.count's string value
for (index,subJson):(String, JSON) in json {
// Do something you want
}
</code></pre>
<h4>Error</h4>
<h5>SwiftyJSON 4.x</h5>
<p>SwiftyJSON 4.x introduces an enum type called <code>SwiftyJSONError</code>, which includes <code>unsupportedType</code>, <code>indexOutOfBounds</code>, <code>elementTooDeep</code>, <code>wrongType</code>, <code>notExist</code> and <code>invalidJSON</code>, at the same time, <code>ErrorDomain</code> are being replaced by <code>SwiftyJSONError.errorDomain</code>. Note: Those old error types are deprecated in SwiftyJSON 4.x and will be removed in the future release.</p>
<h5>SwiftyJSON 3.x</h5>
<p>Use a subscript to get/set a value in an Array or Dictionary</p>
<p>If the JSON is:</p>
<ul>
<li>an array, the app may crash with "index out-of-bounds."</li>
<li>a dictionary, it will be assigned to <code>nil</code> without a reason.</li>
<li>not an array or a dictionary, the app may crash with an "unrecognised selector" exception.</li>
</ul>
<p>This will never happen in SwiftyJSON.</p>
<pre><code class="language-swift">let json = JSON(["name", "age"])
if let name = json[999].string {
// Do something you want
} else {
print(json[999].error!) // "Array[999] is out of bounds"
}
</code></pre>
<pre><code class="language-swift">let json = JSON(["name":"Jack", "age": 25])
if let name = json["address"].string {
// Do something you want
} else {
print(json["address"].error!) // "Dictionary["address"] does not exist"
}
</code></pre>
<pre><code class="language-swift">let json = JSON(12345)
if let age = json[0].string {
// Do something you want
} else {
print(json[0]) // "Array[0] failure, It is not an array"
print(json[0].error!) // "Array[0] failure, It is not an array"
}
if let name = json["name"].string {
// Do something you want
} else {
print(json["name"]) // "Dictionary[\"name"] failure, It is not an dictionary"
print(json["name"].error!) // "Dictionary[\"name"] failure, It is not an dictionary"
}
</code></pre>
<h4>Optional getter</h4>
<pre><code class="language-swift">// NSNumber
if let id = json["user"]["favourites_count"].number {
// Do something you want
} else {
// Print the error
print(json["user"]["favourites_count"].error!)
}
</code></pre>
<pre><code class="language-swift">// String
if let id = json["user"]["name"].string {
// Do something you want
} else {
// Print the error
print(json["user"]["name"].error!)
}
</code></pre>
<pre><code class="language-swift">// Bool
if let id = json["user"]["is_translator"].bool {
// Do something you want
} else {
// Print the error
print(json["user"]["is_translator"].error!)
}
</code></pre>
<pre><code class="language-swift">// Int
if let id = json["user"]["id"].int {
// Do something you want
} else {
// Print the error
print(json["user"]["id"].error!)
}
...
</code></pre>
<h4>Non-optional getter</h4>
<p>Non-optional getter is named <code>xxxValue</code></p>
<pre><code class="language-swift">// If not a Number or nil, return 0
let id: Int = json["id"].intValue
</code></pre>
<pre><code class="language-swift">// If not a String or nil, return ""
let name: String = json["name"].stringValue
</code></pre>
<pre><code class="language-swift">// If not an Array or nil, return []
let list: Array<JSON> = json["list"].arrayValue
</code></pre>
<pre><code class="language-swift">// If not a Dictionary or nil, return [:]
let user: Dictionary<String, JSON> = json["user"].dictionaryValue
</code></pre>
<h4>Setter</h4>
<pre><code class="language-swift">json["name"] = JSON("new-name")
json[0] = JSON(1)
</code></pre>
<pre><code class="language-swift">json["id"].int = 1234567890
json["coordinate"].double = 8766.766
json["name"].string = "Jack"
json.arrayObject = [1,2,3,4]
json.dictionaryObject = ["name":"Jack", "age":25]
</code></pre>
<h4>Raw object</h4>
<pre><code class="language-swift">let rawObject: Any = json.object
</code></pre>
<pre><code class="language-swift">let rawValue: Any = json.rawValue
</code></pre>
<pre><code class="language-swift">//convert the JSON to raw NSData
do {
let rawData = try json.rawData()
//Do something you want
} catch {
print("Error \(error)")
}
</code></pre>
<pre><code class="language-swift">//convert the JSON to a raw String
if let rawString = json.rawString() {
//Do something you want
} else {
print("json.rawString is nil")
}
</code></pre>
<h4>Existence</h4>
<pre><code class="language-swift">// shows you whether value specified in JSON or not
if json["name"].exists()
</code></pre>
<h4>Literal convertibles</h4>
<p>For more info about literal convertibles: <a href="http://nshipster.com/swift-literal-convertible/">Swift Literal Convertibles</a></p>
<pre><code class="language-swift">// StringLiteralConvertible
let json: JSON = "I'm a json"
</code></pre>
<pre><code class="language-swift">// IntegerLiteralConvertible
let json: JSON = 12345
</code></pre>
<pre><code class="language-swift">// BooleanLiteralConvertible
let json: JSON = true
</code></pre>
<pre><code class="language-swift">// FloatLiteralConvertible
let json: JSON = 2.8765
</code></pre>
<pre><code class="language-swift">// DictionaryLiteralConvertible
let json: JSON = ["I":"am", "a":"json"]
</code></pre>
<pre><code class="language-swift">// ArrayLiteralConvertible
let json: JSON = ["I", "am", "a", "json"]
</code></pre>
<pre><code class="language-swift">// With subscript in array
var json: JSON = [1,2,3]
json[0] = 100
json[1] = 200
json[2] = 300
json[999] = 300 // Don't worry, nothing will happen
</code></pre>
<pre><code class="language-swift">// With subscript in dictionary
var json: JSON = ["name": "Jack", "age": 25]
json["name"] = "Mike"
json["age"] = "25" // It's OK to set String
json["address"] = "L.A." // Add the "address": "L.A." in json
</code></pre>
<pre><code class="language-swift">// Array & Dictionary
var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]]
json["list"][3]["what"] = "that"
json["list",3,"what"] = "that"
let path: [JSONSubscriptType] = ["list",3,"what"]
json[path] = "that"
</code></pre>
<pre><code class="language-swift">// With other JSON objects
let user: JSON = ["username" : "Steve", "password": "supersecurepassword"]
let auth: JSON = [
"user": user.object, // use user.object instead of just user
"apikey": "supersecretapitoken"
]
</code></pre>
<h4>Merging</h4>
<p>It is possible to merge one JSON into another JSON. Merging a JSON into another JSON adds all non existing values to the original JSON which are only present in the <code>other</code> JSON.</p>
<p>If both JSONs contain a value for the same key, <em>mostly</em> this value gets overwritten in the original JSON, but there are two cases where it provides some special treatment:</p>
<ul>
<li>In case of both values being a <code>JSON.Type.array</code> the values form the array found in the <code>other</code> JSON getting appended to the original JSON's array value.</li>
<li>In case of both values being a <code>JSON.Type.dictionary</code> both JSON-values are getting merged the same way the encapsulating JSON is merged.</li>
</ul>
<p>In a case where two fields in a JSON have different types, the value will get always overwritten.</p>
<p>There are two different fashions for merging: <code>merge</code> modifies the original JSON, whereas <code>merged</code> works non-destructively on a copy.</p>
<pre><code class="language-swift">let original: JSON = [
"first_name": "John",
"age": 20,
"skills": ["Coding", "Reading"],
"address": [
"street": "Front St",
"zip": "12345",
]
]
let update: JSON = [
"last_name": "Doe",
"age": 21,
"skills": ["Writing"],
"address": [
"zip": "12342",
"city": "New York City"
]
]
let updated = original.merge(with: update)
// [
// "first_name": "John",
// "last_name": "Doe",
// "age": 21,
// "skills": ["Coding", "Reading", "Writing"],
// "address": [
// "street": "Front St",
// "zip": "12342",
// "city": "New York City"
// ]
// ]
</code></pre>
<h4>Removing elements</h4>
<p>If you are storing dictionaries, you can remove elements using <code>dictionaryObject.removeValue(forKey:)</code>. This mutates the JSON object in place.</p>
<p>For example:</p>
<pre><code class="language-swift">var object = JSON([
"one": ["color": "blue"],
"two": ["city": "tokyo",
"country": "japan",
"foods": [
"breakfast": "tea",
"lunch": "sushi"
]
]
])
</code></pre>
<p>Lets remove the <code>country</code> key:</p>
<pre><code class="language-swift">object["two"].dictionaryObject?.removeValue(forKey: "country")
</code></pre>
<p>If you <code>print(object)</code>, you'll see that the <code>country</code> key no longer exists.</p>
<pre><code class="language-json">{
"one" : {
"color" : "blue"
},
"two" : {
"city" : "tokyo",
"foods" : {
"breakfast" : "tea",
"lunch" : "sushi"
}
}
}
</code></pre>
<p>This also works for nested dictionaries:</p>
<pre><code class="language-swift">object["two"]["foods"].dictionaryObject?.removeValue(forKey: "breakfast")
</code></pre>
<pre><code class="language-json">{
"one" : {
"color" : "blue"
},
"two" : {
"city" : "tokyo",
"foods" : {
"lunch" : "sushi"
}
}
}
</code></pre>
<h2>String representation</h2>
<p>There are two options available:</p>
<ul>
<li>use the default Swift one</li>
<li>use a custom one that will handle optionals well and represent <code>nil</code> as <code>"null"</code>:</li>
</ul>
<pre><code class="language-swift">let dict = ["1":2, "2":"two", "3": nil] as [String: Any?]
let json = JSON(dict)
let representation = json.rawString(options: [.castNilToNSNull: true])
// representation is "{\"1\":2,\"2\":\"two\",\"3\":null}", which represents {"1":2,"2":"two","3":null}
</code></pre>
<h2>Work with <a href="https://github.com/Alamofire/Alamofire">Alamofire</a></h2>
<p>SwiftyJSON nicely wraps the result of the Alamofire JSON response handler:</p>
<pre><code class="language-swift">Alamofire.request(url, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
case .failure(let error):
print(error)
}
}
</code></pre>
<p>We also provide an extension of Alamofire for serializing NSData to SwiftyJSON's JSON.</p>
<p>See: <a href="https://github.com/SwiftyJSON/Alamofire-SwiftyJSON">Alamofire-SwiftyJSON</a></p>
<h2>Work with <a href="https://github.com/Moya/Moya">Moya</a></h2>
<p>SwiftyJSON parse data to JSON:</p>
<pre><code class="language-swift">let provider = MoyaProvider<Backend>()
provider.request(.showProducts) { result in
switch result {
case let .success(moyaResponse):
let data = moyaResponse.data
let json = JSON(data: data) // convert network data to json
print(json)
case let .failure(error):
print("error: \(error)")
}
}
</code></pre>
<h2>SwiftyJSON Model Generator</h2>
<p>Tools to generate SwiftyJSON Models</p>
<ul>
<li><a href="https://github.com/Ahmed-Ali/JSONExport">JSON Export</a></li>
</ul>
+
+
+ apple/swift-log
+ 2024-12-01T01:58:36Z
+ tag:github.com,2024-12-01:/apple/swift-log
+
+ <p>A Logging API for Swift</p><hr><h1>SwiftLog</h1>
<p>First things first: This is the beginning of a community-driven open-source project actively seeking contributions, be it code, documentation, or ideas. Apart from contributing to <code>SwiftLog</code> itself, there's another huge gap at the moment: <code>SwiftLog</code> is an <em>API package</em> which tries to establish a common API the ecosystem can use. To make logging really work for real-world workloads, we need <code>SwiftLog</code>-compatible <em>logging backends</em> which then either persist the log messages in files, render them in nicer colors on the terminal, or send them over to Splunk or ELK.</p>
<p>What <code>SwiftLog</code> provides today can be found in the <a href="https://apple.github.io/swift-log/docs/current/Logging/Structs/Logger.html">API docs</a>.</p>
<h2>Getting started</h2>
<p>If you have a server-side Swift application, or maybe a cross-platform (for example Linux & macOS) app/library, and you would like to log, we think targeting this logging API package is a great idea. Below you'll find all you need to know to get started.</p>
<h4>Adding the dependency</h4>
<p><code>SwiftLog</code> is designed for Swift 5.8 and later. To depend on the logging API package, you need to declare your dependency in your <code>Package.swift</code>:</p>
<pre><code class="language-swift">.package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"),
</code></pre>
<p>and to your application/library target, add <code>"Logging"</code> to your <code>dependencies</code>, e.g. like this:</p>
<pre><code class="language-swift">.target(name: "BestExampleApp", dependencies: [
.product(name: "Logging", package: "swift-log")
],
</code></pre>
<h4>Let's log</h4>
<pre><code class="language-swift">// 1) let's import the logging API package
import Logging
// 2) we need to create a logger, the label works similarly to a DispatchQueue label
let logger = Logger(label: "com.example.BestExampleApp.main")
// 3) we're now ready to use it
logger.info("Hello World!")
</code></pre>
<h4>Output</h4>
<pre><code>2019-03-13T15:46:38+0000 info: Hello World!
</code></pre>
<h4>Default <code>Logger</code> behavior</h4>
<p><code>SwiftLog</code> provides for very basic console logging out-of-the-box by way of <code>StreamLogHandler</code>. It is possible to switch the default output to <code>stderr</code> like so:</p>
<pre><code class="language-swift">LoggingSystem.bootstrap(StreamLogHandler.standardError)
</code></pre>
<p><code>StreamLogHandler</code> is primarily a convenience only and does not provide any substantial customization. Library maintainers who aim to build their own logging backends for integration and consumption should implement the <code>LogHandler</code> protocol directly as laid out in <a href="https://raw.githubusercontent.com/apple/swift-log/main/#on-the-implementation-of-a-logging-backend-a-loghandler">the "On the implementation of a logging backend" section</a>.</p>
<p>For further information, please check the <a href="https://apple.github.io/swift-log/docs/current/Logging/Structs/Logger.html">API documentation</a>.</p>
<p><a name="backends"></a></p>
<h2>Available Logging Backends For Applications</h2>
<p>You can choose from one of the following backends to consume your logs. If you are interested in implementing one see the "Implementation considerations" section below explaining how to do so. List of existing SwiftLog API compatible libraries:</p>
<table>
<thead>
<tr>
<th>Repository</th>
<th>Handler Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://github.com/Kitura/HeliumLogger">Kitura/HeliumLogger</a></td>
<td>a logging backend widely used in the Kitura ecosystem</td>
</tr>
<tr>
<td><a href="https://github.com/ianpartridge/swift-log-syslog">ianpartridge/swift-log-<strong>syslog</strong></a></td>
<td>a <a href="https://en.wikipedia.org/wiki/Syslog">syslog</a> backend</td>
</tr>
<tr>
<td><a href="https://github.com/Adorkable/swift-log-format-and-pipe">Adorkable/swift-log-<strong>format-and-pipe</strong></a></td>
<td>a backend that allows customization of the output format and the resulting destination</td>
</tr>
<tr>
<td><a href="https://github.com/chrisaljoudi/swift-log-oslog">chrisaljoudi/swift-log-<strong>oslog</strong></a></td>
<td>an OSLog <a href="https://developer.apple.com/documentation/os/logging">Unified Logging</a> backend for use on Apple platforms. <strong>Important Note:</strong> we recommend using os_log directly as described <a href="https://developer.apple.com/documentation/os/logging">here</a>. Using os_log through swift-log using this backend will be less efficient and will also prevent specifying the privacy of the message. The backend always uses <code>%{public}@</code> as the format string and eagerly converts all string interpolations to strings. This has two drawbacks: 1. the static components of the string interpolation would be eagerly copied by the unified logging system, which will result in loss of performance. 2. It makes all messages public, which changes the default privacy policy of os_log, and doesn't allow specifying fine-grained privacy of sections of the message. In a separate on-going work, Swift APIs for os_log are being improved and made to align closely with swift-log APIs. References: <a href="https://forums.swift.org/t/custom-string-interpolation-and-compile-time-interpretation-applied-to-logging/18799">Unifying Logging Levels</a>, <a href="https://forums.swift.org/t/logging-levels-for-swifts-server-side-logging-apis-and-new-os-log-apis/20365">Making os_log accept string interpolations using compile-time interpretation</a>.</td>
</tr>
<tr>
<td><a href="https://github.com/Brainfinance/StackdriverLogging">Brainfinance/StackdriverLogging</a></td>
<td>a structured JSON logging backend for use on Google Cloud Platform with the <a href="https://cloud.google.com/logging/docs/agent">Stackdriver logging agent</a></td>
</tr>
<tr>
<td><a href="https://github.com/DnV1eX/GoogleCloudLogging">DnV1eX/GoogleCloudLogging</a></td>
<td>a client-side library for logging application events in <a href="https://console.cloud.google.com/logs">Google Cloud</a> via REST API v2.</td>
</tr>
<tr>
<td><a href="https://github.com/vapor/console-kit/">vapor/console-kit</a></td>
<td>a logger to the current terminal or stdout with stylized (<a href="https://en.wikipedia.org/wiki/ANSI_escape_code">ANSI</a>) output. The default logger for all Vapor applications</td>
</tr>
<tr>
<td><a href="https://github.com/neallester/swift-log-testing">neallester/swift-log-testing</a></td>
<td>provides access to log messages for use in assertions (within test targets)</td>
</tr>
<tr>
<td><a href="https://github.com/wlisac/swift-log-slack">wlisac/swift-log-slack</a></td>
<td>a logging backend that sends critical log messages to Slack</td>
</tr>
<tr>
<td><a href="https://github.com/NSHipster/swift-log-github-actions">NSHipster/swift-log-github-actions</a></td>
<td>a logging backend that translates logging messages into <a href="https://help.github.com/en/actions/reference/workflow-commands-for-github-actions">workflow commands for GitHub Actions</a>.</td>
</tr>
<tr>
<td><a href="https://github.com/stevapple/swift-log-telegram">stevapple/swift-log-telegram</a></td>
<td>a logging backend that sends log messages to any Telegram chat (Inspired by and forked from <a href="https://github.com/wlisac/swift-log-slack">wlisac/swift-log-slack</a>)</td>
</tr>
<tr>
<td><a href="https://github.com/jagreenwood/swift-log-datadog">jagreenwood/swift-log-datadog</a></td>
<td>a logging backend which sends log messages to the <a href="https://www.datadoghq.com/log-management/">Datadog</a> log management service</td>
</tr>
<tr>
<td><a href="https://github.com/google/swiftlogfirecloud">google/SwiftLogFireCloud</a></td>
<td>a logging backend for time series logging which pushes logs as flat files to Firebase Cloud Storage.</td>
</tr>
<tr>
<td><a href="https://github.com/crspybits/swift-log-file">crspybits/swift-log-file</a></td>
<td>a simple local file logger (using <code>Foundation</code> <code>FileManager</code>)</td>
</tr>
<tr>
<td><a href="https://github.com/sushichop/Puppy">sushichop/Puppy</a></td>
<td>a logging backend that supports multiple transports(console, file, syslog, etc.) and has the feature with formatting and file log rotation</td>
</tr>
<tr>
<td><a href="https://github.com/ShivaHuang/swift-log-SwiftyBeaver">ShivaHuang/swift-log-SwiftyBeaver</a></td>
<td>a logging backend for printing colored logging to Xcode console / file, or sending encrypted logging to <a href="https://swiftybeaver.com">SwiftyBeaver</a> platform.</td>
</tr>
<tr>
<td><a href="https://github.com/Apodini/swift-log-elk">Apodini/swift-log-elk</a></td>
<td>a logging backend that formats, caches and sends log data to <a href="https://github.com/elastic/logstash">elastic/logstash</a></td>
</tr>
<tr>
<td><a href="https://github.com/binaryscraping/swift-log-supabase">binaryscraping/swift-log-supabase</a></td>
<td>a logging backend that sends log entries to <a href="https://github.com/supabase/supabase">Supabase</a>.</td>
</tr>
<tr>
<td><a href="https://swiftpackageindex.com/kiliankoe/swift-log-matrix">kiliankoe/swift-log-matrix</a></td>
<td>a logging backend for sending logs directly to a <a href="https://matrix.org">Matrix</a> room</td>
</tr>
<tr>
<td><a href="https://github.com/DiscordBM/DiscordLogger">DiscordBM/DiscordLogger</a></td>
<td>a Discord logging implementation to send your logs over to a Discord channel in a good-looking manner and with a lot of configuration options including the ability to send only a few important log-levels such as <code>warning</code>/<code>error</code>/<code>critical</code>.</td>
</tr>
<tr>
<td><a href="https://github.com/CocoaLumberjack/CocoaLumberjack">CocoaLumberjack</a></td>
<td>a fast & simple, yet powerful & flexible logging framework for macOS, iOS, tvOS and watchOS, which includes a logging backend for swift-log.</td>
</tr>
<tr>
<td><a href="https://github.com/rwbutler/swift-log-ecs">rwbutler/swift-log-ecs</a></td>
<td>a logging backend for logging in <a href="https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html">ECS Log format</a>. Compatible with <a href="https://github.com/vapor/vapor">Vapor</a> and allows chaining of multiple LogHandlers.</td>
</tr>
<tr>
<td><a href="https://github.com/ShipBook/swift-log-shipbook">ShipBook/swift-log-<strong>shipbook</strong></a></td>
<td>a logging backend that sends log entries to <a href="https://www.shipbook.io">Shipbook</a> - Shipbook gives you the power to remotely gather, search and analyze your user logs and exceptions in the cloud, on a per-user & session basis.</td>
</tr>
<tr>
<td><a href="https://github.com/kasianov-mikhail/scout">kasianov-mikhail/scout</a></td>
<td>CloudKit as a log storage</td>
</tr>
<tr>
<td><a href="https://github.com/PADL/AndroidLogging">PADL/AndroidLogging</a></td>
<td>a logging backend for the Android in-kernel log buffer</td>
</tr>
<tr>
<td>Your library?</td>
<td><a href="https://forums.swift.org/c/server">Get in touch!</a></td>
</tr>
</tbody>
</table>
<h2>What is an API package?</h2>
<p>Glad you asked. We believe that for the Swift on Server ecosystem, it's crucial to have a logging API that can be adopted by anybody so a multitude of libraries from different parties can all log to a shared destination. More concretely this means that we believe all the log messages from all libraries end up in the same file, database, Elastic Stack/Splunk instance, or whatever you may choose.</p>
<p>In the real-world however, there are so many opinions over how exactly a logging system should behave, what a log message should be formatted like, and where/how it should be persisted. We think it's not feasible to wait for one logging package to support everything that a specific deployment needs whilst still being easy enough to use and remain performant. That's why we decided to cut the problem in half:</p>
<ol>
<li>a logging API</li>
<li>a logging backend implementation</li>
</ol>
<p>This package only provides the logging API itself and therefore <code>SwiftLog</code> is a 'logging API package'. <code>SwiftLog</code> (using <code>LoggingSystem.bootstrap</code>) can be configured to choose any compatible logging backend implementation. This way packages can adopt the API and the <em>application</em> can choose any compatible logging backend implementation without requiring any changes from any of the libraries.</p>
<p>Just for completeness sake: This API package does actually include an overly simplistic and non-configurable logging backend implementation which simply writes all log messages to <code>stdout</code>. The reason to include this overly simplistic logging backend implementation is to improve the first-time usage experience. Let's assume you start a project and try out <code>SwiftLog</code> for the first time, it's just a whole lot better to see something you logged appear on <code>stdout</code> in a simplistic format rather than nothing happening at all. For any real-world application, we advise configuring another logging backend implementation that logs in the style you like.</p>
<h2>The core concepts</h2>
<h3>Loggers</h3>
<p><code>Logger</code>s are used to emit log messages and therefore the most important type in <code>SwiftLog</code>, so their use should be as simple as possible. Most commonly, they are used to emit log messages in a certain log level. For example:</p>
<pre><code class="language-swift">// logging an informational message
logger.info("Hello World!")
// ouch, something went wrong
logger.error("Houston, we have a problem: \(problem)")
</code></pre>
<h3>Log levels</h3>
<p>The following log levels are supported:</p>
<ul>
<li><code>trace</code></li>
<li><code>debug</code></li>
<li><code>info</code></li>
<li><code>notice</code></li>
<li><code>warning</code></li>
<li><code>error</code></li>
<li><code>critical</code></li>
</ul>
<p>The log level of a given logger can be changed, but the change will only affect the specific logger you changed it on. You could say the <code>Logger</code> is a <em>value type</em> regarding the log level.</p>
<h3>Logging metadata</h3>
<p>Logging metadata is metadata that can be attached to loggers to add information that is crucial when debugging a problem. In servers, the usual example is attaching a request UUID to a logger that will then be present on all log messages logged with that logger. Example:</p>
<pre><code class="language-swift">var logger = logger
logger[metadataKey: "request-uuid"] = "\(UUID())"
logger.info("hello world")
</code></pre>
<p>will print</p>
<pre><code>2019-03-13T18:30:02+0000 info: request-uuid=F8633013-3DD8-481C-9256-B296E43443ED hello world
</code></pre>
<p>with the default logging backend implementation that ships with <code>SwiftLog</code>. Needless to say, the format is fully defined by the logging backend you choose.</p>
<h2>On the implementation of a logging backend (a <code>LogHandler</code>)</h2>
<p>Note: If you don't want to implement a custom logging backend, everything in this section is probably not very relevant, so please feel free to skip.</p>
<p>To become a compatible logging backend that all <code>SwiftLog</code> consumers can use, you need to do two things: 1) Implement a type (usually a <code>struct</code>) that implements <code>LogHandler</code>, a protocol provided by <code>SwiftLog</code> and 2) instruct <code>SwiftLog</code> to use your logging backend implementation.</p>
<p>A <code>LogHandler</code> or logging backend implementation is anything that conforms to the following protocol</p>
<pre><code class="language-swift">public protocol LogHandler {
func log(level: Logger.Level, message: Logger.Message, metadata: Logger.Metadata?, source: String, file: String, function: String, line: UInt)
subscript(metadataKey _: String) -> Logger.Metadata.Value? { get set }
var metadata: Logger.Metadata { get set }
var logLevel: Logger.Level { get set }
}
</code></pre>
<p>Instructing <code>SwiftLog</code> to use your logging backend as the one the whole application (including all libraries) should use is very simple:</p>
<pre><code class="language-swift">LoggingSystem.bootstrap(MyLogHandler.init)
</code></pre>
<h3>Implementation considerations</h3>
<p><code>LogHandler</code>s control most parts of the logging system:</p>
<h4>Under control of a <code>LogHandler</code></h4>
<h5>Configuration</h5>
<p><code>LogHandler</code>s control the two crucial pieces of <code>Logger</code> configuration, namely:</p>
<ul>
<li>log level (<code>logger.logLevel</code> property)</li>
<li>logging metadata (<code>logger[metadataKey:]</code> and <code>logger.metadata</code>)</li>
</ul>
<p>For the system to work, however, it is important that <code>LogHandler</code> treat the configuration as <em>value types</em>. This means that <code>LogHandler</code>s should be <code>struct</code>s and a change in log level or logging metadata should only affect the very <code>LogHandler</code> it was changed on.</p>
<p>However, in special cases, it is acceptable that a <code>LogHandler</code> provides some global log level override that may affect all <code>LogHandler</code>s created.</p>
<h5>Emitting</h5>
<ul>
<li>emitting the log message itself</li>
</ul>
<h3>Not under control of <code>LogHandler</code>s</h3>
<p><code>LogHandler</code>s do not control if a message should be logged or not. <code>Logger</code> will only invoke the <code>log</code> function of a <code>LogHandler</code> if <code>Logger</code> determines that a log message should be emitted given the configured log level.</p>
<h2>Source vs Label</h2>
<p>A <code>Logger</code> carries an (immutable) <code>label</code> and each log message carries a <code>source</code> parameter (since SwiftLog 1.3.0). The <code>Logger</code>'s label identifies the creator of the <code>Logger</code>. If you are using structured logging by preserving metadata across multiple modules, the <code>Logger</code>'s <code>label</code> is not a good way to identify where a log message originated from as it identifies the creator of a <code>Logger</code> which is often passed around between libraries to preserve metadata and the like.</p>
<p>If you want to filter all log messages originating from a certain subsystem, filter by <code>source</code> which defaults to the module that is emitting the log message.</p>
<h2>Security</h2>
<p>Please see <a href="https://raw.githubusercontent.com/apple/swift-log/main/SECURITY.md">SECURITY.md</a> for SwiftLog's security process.</p>
<h2>Design</h2>
<p>This logging API was designed with the contributors to the Swift on Server community and approved by the <a href="https://swift.org/server/">SSWG (Swift Server Work Group)</a> to the 'sandbox level' of the SSWG's <a href="https://www.swift.org/sswg/incubation-process.html">incubation process</a>.</p>
<ul>
<li><a href="https://forums.swift.org/t/logging/16027">pitch</a>, <a href="https://forums.swift.org/t/discussion-server-logging-api/18834">discussion</a>, <a href="https://forums.swift.org/t/feedback-server-logging-api-with-revisions/19375">feedback</a></li>
<li><a href="https://forums.swift.org/t/logging-levels-for-swifts-server-side-logging-apis-and-new-os-log-apis/20365">log levels</a></li>
</ul>
+
+
+ gonzalezreal/swift-markdown-ui
+ 2024-12-01T01:58:36Z
+ tag:github.com,2024-12-01:/gonzalezreal/swift-markdown-ui
+
+ <p>Display and customize Markdown text in SwiftUI</p><hr><h1>MarkdownUI</h1>
<p><a href="https://github.com/gonzalezreal/MarkdownUI/actions?query=workflow%3ACI"><img src="https://github.com/gonzalezreal/MarkdownUI/workflows/CI/badge.svg?sanitize=true" alt="CI"></a> <a href="https://swiftpackageindex.com/gonzalezreal/swift-markdown-ui"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fgonzalezreal%2Fswift-markdown-ui%2Fbadge%3Ftype%3Dswift-versions" alt=""></a> <a href="https://swiftpackageindex.com/gonzalezreal/swift-markdown-ui"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Fgonzalezreal%2Fswift-markdown-ui%2Fbadge%3Ftype%3Dplatforms" alt=""></a></p>
<p>Display and customize Markdown text in SwiftUI.</p>
<ul>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#overview">Overview</a></li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#minimum-requirements">Minimum requirements</a></li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#getting-started">Getting started</a>
<ul>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#creating-a-markdown-view">Creating a Markdown view</a></li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#styling-markdown">Styling Markdown</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#documentation">Documentation</a>
<ul>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#related-content">Related content</a></li>
</ul> </li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#demo">Demo</a></li>
<li><a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/#installation">Installation</a></li>
</ul>
<h2>Overview</h2>
<p>MarkdownUI is a powerful library for displaying and customizing Markdown text in SwiftUI. It is compatible with the <a href="https://github.github.com/gfm/">GitHub Flavored Markdown Spec</a> and can display images, headings, lists (including task lists), blockquotes, code blocks, tables, and thematic breaks, besides styled text and links.</p>
<p>MarkdownUI offers comprehensible theming features to customize how it displays Markdown text. You can use the built-in themes, create your own or override specific text and block styles.</p>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownUI@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownUI~dark@2x.png#gh-dark-mode-only" alt=""></p>
<h2>Minimum requirements</h2>
<p>You can use MarkdownUI on the following platforms:</p>
<ul>
<li>macOS 12.0+</li>
<li>iOS 15.0+</li>
<li>tvOS 15.0+</li>
<li>watchOS 8.0+</li>
</ul>
<p>Some features, like displaying tables or multi-image paragraphs, require macOS 13.0+, iOS 16.0+, tvOS 16.0+, and watchOS 9.0+.</p>
<h2>Getting started</h2>
<h3>Creating a Markdown view</h3>
<p>A <code>Markdown</code> view displays rich structured text using the Markdown syntax. It can display images, headings, lists (including task lists), blockquotes, code blocks, tables, and thematic breaks, besides styled text and links.</p>
<p>The simplest way of creating a <code>Markdown</code> view is to pass a Markdown string to the <code>init(_:baseURL:imageBaseURL:)</code> initializer.</p>
<pre><code class="language-swift">let markdownString = """
## Try MarkdownUI
**MarkdownUI** is a native Markdown renderer for SwiftUI
compatible with the
[GitHub Flavored Markdown Spec](https://github.github.com/gfm/).
"""
var body: some View {
Markdown(markdownString)
}
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownString@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownString~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>A more convenient way to create a <code>Markdown</code> view is by using the <code>init(baseURL:imageBaseURL:content:)</code> initializer, which takes a Markdown content builder in which you can compose the view content, either by providing Markdown strings or by using an expressive domain-specific language.</p>
<pre><code class="language-swift">var body: some View {
Markdown {
"""
## Using a Markdown Content Builder
Use Markdown strings or an expressive domain-specific language
to build the content.
"""
Heading(.level2) {
"Try MarkdownUI"
}
Paragraph {
Strong("MarkdownUI")
" is a native Markdown renderer for SwiftUI"
" compatible with the "
InlineLink(
"GitHub Flavored Markdown Spec",
destination: URL(string: "https://github.github.com/gfm/")!
)
"."
}
}
}
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownContentBuilder@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/MarkdownContentBuilder~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>You can also create a <code>MarkdownContent</code> value in your model layer and later create a <code>Markdown</code> view by passing the content value to the <code>init(_:baseURL:imageBaseURL:)</code> initializer. The <code>MarkdownContent</code> value pre-parses the Markdown string preventing the view from doing this step.</p>
<pre><code class="language-swift">// Somewhere in the model layer
let content = MarkdownContent("You can try **CommonMark** [here](https://spec.commonmark.org/dingus/).")
// Later in the view layer
var body: some View {
Markdown(self.model.content)
}
</code></pre>
<h3>Styling Markdown</h3>
<p>Markdown views use a basic default theme to display the contents. For more information, read about the <code>basic</code> theme.</p>
<pre><code class="language-swift">Markdown {
"""
You can quote text with a `>`.
> Outside of a dog, a book is man's best friend. Inside of a
> dog it's too dark to read.
– Groucho Marx
"""
}
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/BlockquoteContent@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/BlockquoteContent~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>You can customize the appearance of Markdown content by applying different themes using the <code>markdownTheme(_:)</code> modifier. For example, you can apply one of the built-in themes, like <code>gitHub</code>, to either a Markdown view or a view hierarchy that contains Markdown views.</p>
<pre><code class="language-swift">Markdown {
"""
You can quote text with a `>`.
> Outside of a dog, a book is man's best friend. Inside of a
> dog it's too dark to read.
– Groucho Marx
"""
}
.markdownTheme(.gitHub)
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/GitHubBlockquote@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/GitHubBlockquote~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>To override a specific text style from the current theme, use the <code>markdownTextStyle(_:textStyle:)</code> modifier. The following example shows how to override the <code>code</code> text style.</p>
<pre><code class="language-swift">Markdown {
"""
Use `git status` to list all new or modified files
that haven't yet been committed.
"""
}
.markdownTextStyle(\.code) {
FontFamilyVariant(.monospaced)
FontSize(.em(0.85))
ForegroundColor(.purple)
BackgroundColor(.purple.opacity(0.25))
}
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/CustomInlineCode@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/CustomInlineCode~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>You can also use the <code>markdownBlockStyle(_:body:)</code> modifier to override a specific block style. For example, you can override only the <code>blockquote</code> block style, leaving other block styles untouched.</p>
<pre><code class="language-swift">Markdown {
"""
You can quote text with a `>`.
> Outside of a dog, a book is man's best friend. Inside of a
> dog it's too dark to read.
– Groucho Marx
"""
}
.markdownBlockStyle(\.blockquote) { configuration in
configuration.label
.padding()
.markdownTextStyle {
FontCapsVariant(.lowercaseSmallCaps)
FontWeight(.semibold)
BackgroundColor(nil)
}
.overlay(alignment: .leading) {
Rectangle()
.fill(Color.teal)
.frame(width: 4)
}
.background(Color.teal.opacity(0.5))
}
</code></pre>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/CustomBlockquote@2x.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Sources/MarkdownUI/Documentation.docc/Resources/CustomBlockquote~dark@2x.png#gh-dark-mode-only" alt=""></p>
<p>Another way to customize the appearance of Markdown content is to create your own theme. To create a theme, start by instantiating an empty <code>Theme</code> and chain together the different text and block styles in a single expression.</p>
<pre><code class="language-swift">extension Theme {
static let fancy = Theme()
.code {
FontFamilyVariant(.monospaced)
FontSize(.em(0.85))
}
.link {
ForegroundColor(.purple)
}
// More text styles...
.paragraph { configuration in
configuration.label
.relativeLineSpacing(.em(0.25))
.markdownMargin(top: 0, bottom: 16)
}
.listItem { configuration in
configuration.label
.markdownMargin(top: .em(0.25))
}
// More block styles...
}
</code></pre>
<h2>Documentation</h2>
<p><a href="https://swiftpackageindex.com">Swift Package Index</a> kindly hosts the online documentation for all versions, available here:</p>
<ul>
<li><a href="https://swiftpackageindex.com/gonzalezreal/swift-markdown-ui/main/documentation/markdownui">main</a></li>
<li><a href="https://swiftpackageindex.com/gonzalezreal/swift-markdown-ui/2.1.0/documentation/markdownui">2.1.0</a></li>
<li><a href="https://swiftpackageindex.com/gonzalezreal/swift-markdown-ui/2.0.2/documentation/markdownui">2.0.2</a></li>
</ul>
<h3>Related content</h3>
<p>You can learn more about MarkdownUI by referring to the following articles and third-party resources:</p>
<ul>
<li><a href="https://gonzalezreal.github.io/2023/02/18/better-markdown-rendering-in-swiftui.html">Better Markdown Rendering in SwiftUI</a></li>
<li><a href="https://youtu.be/gVy06iJQFWQ">Unlock the Power of Markdown in SwiftUI with THIS Hack!</a> by <a href="https://twitter.com/Rebeloper">@Rebeloper</a></li>
</ul>
<h2>Demo</h2>
<p>MarkdownUI comes with a few more tricks on the sleeve. You can explore the <a href="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Examples/Demo/">companion demo project</a> and discover its complete set of capabilities.</p>
<p><img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Examples/Demo/Screenshot.png#gh-light-mode-only" alt=""> <img src="https://raw.githubusercontent.com/gonzalezreal/swift-markdown-ui/main/Examples/Demo/Screenshot~dark.png#gh-dark-mode-only" alt=""></p>
<h2>Installation</h2>
<h3>Adding MarkdownUI to a Swift package</h3>
<p>To use MarkdownUI in a Swift Package Manager project, add the following line to the dependencies in your <code>Package.swift</code> file:</p>
<pre><code class="language-swift">.package(url: "https://github.com/gonzalezreal/swift-markdown-ui", from: "2.0.2")
</code></pre>
<p>Include <code>"MarkdownUI"</code> as a dependency for your executable target:</p>
<pre><code class="language-swift">.target(name: "<target>", dependencies: [
.product(name: "MarkdownUI", package: "swift-markdown-ui")
]),
</code></pre>
<p>Finally, add <code>import MarkdownUI</code> to your source code.</p>
<h3>Adding MarkdownUI to an Xcode project</h3>
<ol>
<li>From the <strong>File</strong> menu, select <strong>Add Packages…</strong></li>
<li>Enter <code>https://github.com/gonzalezreal/swift-markdown-ui</code> into the <em>Search or Enter Package URL</em> search field</li>
<li>Link <strong>MarkdownUI</strong> to your application target</li>
</ol>
+
+
\ No newline at end of file
diff --git a/swift/weekly/index.xml b/swift/weekly/index.xml
new file mode 100644
index 00000000000..88f4029c716
--- /dev/null
+++ b/swift/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Swift Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:13Z
+ Weekly Trending of Swift in GitHub
+
+
+ khanhduytran0/LiveContainer
+ 2024-12-01T01:50:13Z
+ tag:github.com,2024-12-01:/khanhduytran0/LiveContainer
+
+ <p>Run iOS app without actually installing it!</p><hr><h1>LiveContainer</h1>
<p>Run iOS app without actually installing it!</p>
<ul>
<li>Allows you to install unlimited apps (10 apps limit of free developer account do not apply here!), have multiple versions of an app installed and multiple data containers.</li>
<li>When JIT is available, codesign is entirely bypassed, no need to sign your apps before installing. Otherwise, app will be signed with the same certificate used by LiveContainer.</li>
</ul>
<h2>Compatibility</h2>
<p>Unfortunately, not all apps work in LiveContainer, so we have a <a href="https://github.com/khanhduytran0/LiveContainer/labels/compatibility">compatibility list</a> to tell if there is apps that have issues. If they aren't on this list, then it's likely going run. However, if it doesn't work, please make an <a href="https://github.com/khanhduytran0/LiveContainer/issues/new/choose">issue</a> about it.</p>
<h2>Usage</h2>
<p>Requires AltStore or SideStore</p>
<ul>
<li>Build from source or get prebuilt ipa in <a href="https://github.com/khanhduytran0/LiveContainer/actions">the Actions tab</a></li>
<li>Open LiveContainer, tap the plus icon in the upper right hand corner and select IPA files to install.</li>
<li>Choose the app you want to open in the next launch.</li>
<li>You can long-press the app to manage it.</li>
</ul>
<h3>Without JIT</h3>
<p>Without JIT, guest apps need to be codesigned, which requires retrieving the certificate and password from SideStore or AltStore. This process involves applying a tweak to SideStore/AltStore, allowing it to expose the certificate to LiveContainer.</p>
<ul>
<li>Open Settings in LiveContainer, tap "Patch SideStore/AltStore", and the app will switch to SideStore/AltStore to reinstall it with the tweak applied. If you use AltWidget, select "Keep Extension."</li>
<li>Wait for the installation to finish, then <strong>reopen SideStore/AltStore</strong>.</li>
<li>Return to LiveContainer and press "Test JIT-Less Mode." If it says "Test Passed," JIT-less mode is ready.</li>
<li>Install your app via the "Apps" tab.</li>
<li>Tap the run icon, it will attempt to restart LiveContainer with guest app loaded.</li>
</ul>
<p>Note: If you update or reinstall SideStore/AltStore, you'll need to reapply the patch.</p>
<h3>With JIT (requires SideStore)</h3>
<ul>
<li>Tap the play icon, it will jump to SideStore and exit.</li>
<li>In SideStore, hold down LiveContainer and tap <code>Enable JIT</code>. If you have SideStore build supporting JIT URL scheme, it jumps back to LiveContainer with JIT enabled and the guest app is ready to use.</li>
</ul>
<h3>Add to Home Screen</h3>
<p>Long press the app and you will see 2 ways to add your app to home screen:</p>
<ol>
<li><strong>Launch URL</strong>: Copy the provided URL, create a shortcut that opens the app, and add it to your home screen. You’ll need to create a separate shortcut for each app.</li>
<li><strong>Create App Clip</strong>: Install an App Clip MDM profile, which adds the app to your home screen. Note that launching the app includes an extra jump, and the App Clip will remain in the app switcher.</li>
</ol>
<h3>Multiple LiveContainers</h3>
<p>Using two LiveContainers allows you to run two different apps simultaneously, with <em>almost</em> seamless data transfer between the LiveContainers.</p>
<p>To install a second LiveContainer, go to Settings and tap "Install Another LiveContainer."</p>
<p>The first LiveContainer (blue icon) always launches by default. If an app is already running in the first container, you'll be prompted to either open it in the second LiveContainer (gray icon) or terminate the current app and relaunch it in the first. If the app is already running in the second container, it will switch automatically. To use an app in the second container, you must convert this app to a shared app. You can do that by opening the first LiveContainer (blue), long press on your app, open the settings of your app and then "Convert to Shared App". After that, you can launch your app using LiveContainer2 (grey).</p>
<h3>Fix File Picker</h3>
<p>Some apps may experience issues with their file pickers in LiveContainer. To resolve this, enable "Fix File Picker" in the app-specific settings.</p>
<h3>"Open In App" Support</h3>
<ul>
<li>Tap the link icon in the top-right corner of the "Apps" tab and input the URL. LiveContainer will detect the appropriate app and ask if you want to launch it.</li>
<li>What's more, you can share a web page to LiveContainer using <a href="https://www.icloud.com/shortcuts/44ea82ce7ed8469ea24198c375db09a0">this shortcut</a>. Be sure to add this shortcut to "Favorites" in share sheet actions.</li>
</ul>
<h3>JIT Support</h3>
<p>To enable JIT for a guest app:</p>
<ul>
<li>Enter your SideJITServer/JITStreamer address and device UDID in LiveContainer settings.</li>
<li>Enable "Launch with JIT" in its app-specific settings.</li>
<li>LiveContainer will communicate with the server before launching the app to enable JIT.</li>
</ul>
<h3>Installing external tweaks</h3>
<p>LiveContainer comes with its own TweakLoader, which automatically load CydiaSubstrate and tweaks. TweakLoader is injected to every app you install. You can override <code>TweakLoader.dylib</code> symlink with your own implementation if you wish.</p>
<p>.dylib files in <code>Tweaks</code> folder are global, they are loaded to all apps. You can create app-specific tweaks folder and switch between them instantly.</p>
<p>To install tweaks, you can use the built-in tweak manager in LiveContainer, which will automatically sign tweaks as you import. Otherwise, you can manually add them and then use the tweak manager to sign them.</p>
<h3>Hiding Apps</h3>
<p>LiveContainer offers three levels of app hiding:</p>
<ul>
<li><strong>Lock Apps</strong>: In the app-specific settings, you can lock an app, requiring Face ID or a password to launch it.</li>
<li><strong>Hide Locked Apps</strong>: Once locked, you can hide the app. It will appear as a placeholder in the "Hidden Apps" section, and authentication is needed to view or launch it.</li>
<li><strong>Strict Hiding Mode</strong>: For complete invisibility, enable "Strict Hiding Mode" in LiveContainer's settings after authentication. Hidden apps will no longer appear in the interface. To access them, triple-tap the "x Apps in total" text on the main screen and authenticate to unlock the apps when you relaunch LiveContainer.</li>
</ul>
<h2>Building</h2>
<pre><code>export THEOS=/path/to/theos
git submodule update --init --recursive
make package
</code></pre>
<h2>Project structure</h2>
<h3>Main executable</h3>
<ul>
<li>Core of LiveContainer</li>
<li>Contains the logic of setting up guest environment and loading guest app.</li>
<li>If no app is selected, it loads LiveContainerSwiftUI.</li>
</ul>
<h3>LiveContainerSwiftUI</h3>
<ul>
<li>SwiftUI rewrite of LiveContainerUI (by @hugeBlack)</li>
<li>Lanaguage file <code>Localizable.xcstrings</code> is in here for multilingual support</li>
</ul>
<h3>TweakLoader</h3>
<ul>
<li>A simple tweak injector, which loads CydiaSubstrate and load tweaks.</li>
<li>Injected to every app you install in LiveContainer.</li>
</ul>
<h3>AltStoreTweak</h3>
<ul>
<li>The tweak that got injected into SideStore/AltStore to retrieve certificate from it everytime it launches.</li>
</ul>
<h2>How does it work?</h2>
<h3>Patching guest executable</h3>
<ul>
<li>Patch <code>__PAGEZERO</code> segment:
<ul>
<li>Change <code>vmaddr</code> to <code>0xFFFFC000</code> (<code>0x100000000 - 0x4000</code>)</li>
<li>Change <code>vmsize</code> to <code>0x4000</code></li>
</ul> </li>
<li>Change <code>MH_EXECUTE</code> to <code>MH_DYLIB</code>.</li>
<li>Inject a load command to load <code>TweakLoader.dylib</code></li>
</ul>
<h3>Patching <code>@executable_path</code></h3>
<ul>
<li>Call <code>_NSGetExecutablePath</code> with an invalid buffer pointer input -> SIGSEGV</li>
<li>Do some <a href="https://github.com/khanhduytran0/LiveContainer/raw/5ef1e6a/main.m#L74-L115">magic stuff</a> to overwrite the contents of executable_path.</li>
</ul>
<h3>Patching <code>NSBundle.mainBundle</code></h3>
<ul>
<li>This property is overwritten with the guest app's bundle.</li>
</ul>
<h3>Bypassing Library Validation</h3>
<ul>
<li>JIT is optional to bypass codesigning. In JIT-less mode, all executables are signed so this does not apply.</li>
<li>Derived from <a href="https://blog.xpnsec.com/restoring-dyld-memory-loading">Restoring Dyld Memory Loading</a></li>
</ul>
<h3>dlopening the executable</h3>
<ul>
<li>Call <code>dlopen</code> with the guest app's executable</li>
<li>TweakLoader loads all tweaks in the selected folder</li>
<li>Find the entry point</li>
<li>Jump to the entry point</li>
<li>The guest app's entry point calls <code>UIApplicationMain</code> and start up like any other iOS apps.</li>
</ul>
<h2>Limitations</h2>
<ul>
<li>Entitlements from the guest app are not applied to the host app. This isn't a big deal since sideloaded apps requires only basic entitlements.</li>
<li>App Permissions are globally applied.</li>
<li>Guest app containers are not sandboxed. This means one guest app can access other guest apps' data.</li>
<li>Only one guest app can run at a time. This is much more like 3 apps limit where you have to disable an app to run another (switching between app in LiveContainer is instant).</li>
<li>Remote push notification might not work. <del>If you have a paid developer account then you don't even have to use LiveContainer</del></li>
<li>Querying custom URL schemes might not work(?)</li>
</ul>
<h2>TODO</h2>
<ul>
<li>Isolate Keychain per app</li>
<li>Use ChOma instead of custom MachO parser</li>
</ul>
<h2>License</h2>
<p><a href="https://github.com/khanhduytran0/LiveContainer/raw/main/LICENSE">Apache License 2.0</a></p>
<h2>Credits</h2>
<ul>
<li><a href="https://blog.xpnsec.com/restoring-dyld-memory-loading">xpn's blogpost: Restoring Dyld Memory Loading</a></li>
<li><a href="https://github.com/pinauten/PatchfinderUtils/raw/master/Sources/CFastFind/CFastFind.c">LinusHenze's CFastFind</a>: <a href="https://github.com/pinauten/PatchfinderUtils/raw/master/LICENSE">MIT license</a></li>
<li><a href="https://github.com/facebook/fishhook">fishhook</a>: <a href="https://github.com/facebook/fishhook/raw/main/LICENSE">BSD 3-Clause license</a></li>
<li><a href="https://gist.github.com/saturngod/1224648">MBRoundProgressView</a></li>
<li>@haxi0 for icon</li>
<li>@Vishram1123 for the initial shortcut implementation.</li>
<li>@hugeBlack for SwiftUI contribution</li>
<li>@Staubgeborener for automatic AltStore/SideStore source updater</li>
<li>@fkunn1326 for improved app hiding</li>
<li>@slds1 for dynamic color feature</li>
</ul>
+
+
\ No newline at end of file
diff --git a/swig/daily/index.xml b/swig/daily/index.xml
index b28bc4382f3..bd9aa29085b 100644
--- a/swig/daily/index.xml
+++ b/swig/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SWIG Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:14Z
+ 2024-12-01T01:39:26Z
Daily Trending of SWIG in GitHub
\ No newline at end of file
diff --git a/swig/monthly/index.xml b/swig/monthly/index.xml
new file mode 100644
index 00000000000..fe3e8985ac7
--- /dev/null
+++ b/swig/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SWIG Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:41Z
+ Monthly Trending of SWIG in GitHub
+
+
\ No newline at end of file
diff --git a/swig/weekly/index.xml b/swig/weekly/index.xml
new file mode 100644
index 00000000000..ac641b2cb01
--- /dev/null
+++ b/swig/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SWIG Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:20Z
+ Weekly Trending of SWIG in GitHub
+
+
\ No newline at end of file
diff --git a/systemverilog/daily/index.xml b/systemverilog/daily/index.xml
index 7343bd4cbe1..8c8fb657b3c 100644
--- a/systemverilog/daily/index.xml
+++ b/systemverilog/daily/index.xml
@@ -1,7 +1,7 @@
GitHub SystemVerilog Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:15Z
+ 2024-12-01T01:39:27Z
Daily Trending of SystemVerilog in GitHub
\ No newline at end of file
diff --git a/systemverilog/monthly/index.xml b/systemverilog/monthly/index.xml
new file mode 100644
index 00000000000..5c0f046ede8
--- /dev/null
+++ b/systemverilog/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub SystemVerilog Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:42Z
+ Monthly Trending of SystemVerilog in GitHub
+
+
+ openhwgroup/cvw
+ 2024-12-01T01:58:42Z
+ tag:github.com,2024-12-01:/openhwgroup/cvw
+
+ <p>CORE-V Wally is a configurable RISC-V Processor associated with RISC-V System-on-Chip Design textbook. Contains a 5-stage pipeline, support for A, B, C, D, F, M and Q extensions, and optional caches, BP, FPU, VM/MMU, AHB, RAMs, and peripherals.</p><hr>
+
+
\ No newline at end of file
diff --git a/systemverilog/weekly/index.xml b/systemverilog/weekly/index.xml
new file mode 100644
index 00000000000..1c27126c205
--- /dev/null
+++ b/systemverilog/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub SystemVerilog Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:20Z
+ Weekly Trending of SystemVerilog in GitHub
+
+
\ No newline at end of file
diff --git a/talon/daily/index.xml b/talon/daily/index.xml
index 3c08ca6ad7e..0004f850325 100644
--- a/talon/daily/index.xml
+++ b/talon/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Talon Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:14Z
+ 2024-12-01T01:39:26Z
Daily Trending of Talon in GitHub
\ No newline at end of file
diff --git a/talon/monthly/index.xml b/talon/monthly/index.xml
new file mode 100644
index 00000000000..7e3c5988906
--- /dev/null
+++ b/talon/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Talon Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:41Z
+ Monthly Trending of Talon in GitHub
+
+
\ No newline at end of file
diff --git a/talon/weekly/index.xml b/talon/weekly/index.xml
new file mode 100644
index 00000000000..729be8339cb
--- /dev/null
+++ b/talon/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Talon Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:20Z
+ Weekly Trending of Talon in GitHub
+
+
\ No newline at end of file
diff --git a/tcl/daily/index.xml b/tcl/daily/index.xml
index 3fc099a3afb..730be218f0e 100644
--- a/tcl/daily/index.xml
+++ b/tcl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Tcl Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:15Z
+ 2024-12-01T01:39:27Z
Daily Trending of Tcl in GitHub
\ No newline at end of file
diff --git a/tcl/monthly/index.xml b/tcl/monthly/index.xml
new file mode 100644
index 00000000000..e41472a5b87
--- /dev/null
+++ b/tcl/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Tcl Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:42Z
+ Monthly Trending of Tcl in GitHub
+
+
+ BRL-CAD/brlcad
+ 2024-12-01T01:58:42Z
+ tag:github.com,2024-12-01:/BRL-CAD/brlcad
+
+ <p>BRL-CAD is a powerful cross-platform open source combinatorial solid modeling system</p><hr>
+
+
\ No newline at end of file
diff --git a/tcl/weekly/index.xml b/tcl/weekly/index.xml
new file mode 100644
index 00000000000..74d34468897
--- /dev/null
+++ b/tcl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Tcl Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:22Z
+ Weekly Trending of Tcl in GitHub
+
+
\ No newline at end of file
diff --git a/tcsh/daily/index.xml b/tcsh/daily/index.xml
index 1256ece5fb8..133cb6a5ea2 100644
--- a/tcsh/daily/index.xml
+++ b/tcsh/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Tcsh Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:16Z
+ 2024-12-01T01:39:28Z
Daily Trending of Tcsh in GitHub
\ No newline at end of file
diff --git a/tcsh/monthly/index.xml b/tcsh/monthly/index.xml
new file mode 100644
index 00000000000..feba4434c84
--- /dev/null
+++ b/tcsh/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Tcsh Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:43Z
+ Monthly Trending of Tcsh in GitHub
+
+
\ No newline at end of file
diff --git a/tcsh/weekly/index.xml b/tcsh/weekly/index.xml
new file mode 100644
index 00000000000..de1f18be313
--- /dev/null
+++ b/tcsh/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Tcsh Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:23Z
+ Weekly Trending of Tcsh in GitHub
+
+
\ No newline at end of file
diff --git a/tea/daily/index.xml b/tea/daily/index.xml
index 1e397c2ca47..5dc46fc020e 100644
--- a/tea/daily/index.xml
+++ b/tea/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Tea Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:17Z
+ 2024-12-01T01:39:28Z
Daily Trending of Tea in GitHub
\ No newline at end of file
diff --git a/tea/monthly/index.xml b/tea/monthly/index.xml
new file mode 100644
index 00000000000..47468b55c01
--- /dev/null
+++ b/tea/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Tea Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:43Z
+ Monthly Trending of Tea in GitHub
+
+
\ No newline at end of file
diff --git a/tea/weekly/index.xml b/tea/weekly/index.xml
new file mode 100644
index 00000000000..1523c07a127
--- /dev/null
+++ b/tea/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Tea Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:24Z
+ Weekly Trending of Tea in GitHub
+
+
\ No newline at end of file
diff --git a/terra/daily/index.xml b/terra/daily/index.xml
index 382b143cac0..21066a7246d 100644
--- a/terra/daily/index.xml
+++ b/terra/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Terra Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:17Z
+ 2024-12-01T01:39:28Z
Daily Trending of Terra in GitHub
\ No newline at end of file
diff --git a/terra/monthly/index.xml b/terra/monthly/index.xml
new file mode 100644
index 00000000000..634e6672fd7
--- /dev/null
+++ b/terra/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Terra Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:43Z
+ Monthly Trending of Terra in GitHub
+
+
\ No newline at end of file
diff --git a/terra/weekly/index.xml b/terra/weekly/index.xml
new file mode 100644
index 00000000000..245276442ea
--- /dev/null
+++ b/terra/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Terra Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:23Z
+ Weekly Trending of Terra in GitHub
+
+
\ No newline at end of file
diff --git a/tex/daily/index.xml b/tex/daily/index.xml
index 2bacece2be3..18e948df865 100644
--- a/tex/daily/index.xml
+++ b/tex/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TeX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:19Z
+ 2024-12-01T01:39:32Z
Daily Trending of TeX in GitHub
\ No newline at end of file
diff --git a/tex/monthly/index.xml b/tex/monthly/index.xml
new file mode 100644
index 00000000000..ddde100189f
--- /dev/null
+++ b/tex/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TeX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:46Z
+ Monthly Trending of TeX in GitHub
+
+
\ No newline at end of file
diff --git a/tex/weekly/index.xml b/tex/weekly/index.xml
new file mode 100644
index 00000000000..9d8df550d0e
--- /dev/null
+++ b/tex/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TeX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:27Z
+ Weekly Trending of TeX in GitHub
+
+
\ No newline at end of file
diff --git a/texinfo/daily/index.xml b/texinfo/daily/index.xml
index c3593e20d28..ec9859cb7f9 100644
--- a/texinfo/daily/index.xml
+++ b/texinfo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Texinfo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:18Z
+ 2024-12-01T01:39:30Z
Daily Trending of Texinfo in GitHub
\ No newline at end of file
diff --git a/texinfo/monthly/index.xml b/texinfo/monthly/index.xml
new file mode 100644
index 00000000000..34f0099208a
--- /dev/null
+++ b/texinfo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Texinfo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:45Z
+ Monthly Trending of Texinfo in GitHub
+
+
\ No newline at end of file
diff --git a/texinfo/weekly/index.xml b/texinfo/weekly/index.xml
new file mode 100644
index 00000000000..ee1b08f90cc
--- /dev/null
+++ b/texinfo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Texinfo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:25Z
+ Weekly Trending of Texinfo in GitHub
+
+
\ No newline at end of file
diff --git a/text/daily/index.xml b/text/daily/index.xml
index 3d5d310941f..a2d8848b4b8 100644
--- a/text/daily/index.xml
+++ b/text/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Text Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:18Z
+ 2024-12-01T01:39:30Z
Daily Trending of Text in GitHub
\ No newline at end of file
diff --git a/text/monthly/index.xml b/text/monthly/index.xml
new file mode 100644
index 00000000000..fb5bfc36cd4
--- /dev/null
+++ b/text/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Text Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:45Z
+ Monthly Trending of Text in GitHub
+
+
\ No newline at end of file
diff --git a/text/weekly/index.xml b/text/weekly/index.xml
new file mode 100644
index 00000000000..af9bd2fe73b
--- /dev/null
+++ b/text/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Text Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:25Z
+ Weekly Trending of Text in GitHub
+
+
\ No newline at end of file
diff --git a/textile/daily/index.xml b/textile/daily/index.xml
index 51ccdbae792..1810badd19b 100644
--- a/textile/daily/index.xml
+++ b/textile/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Textile Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:21Z
+ 2024-12-01T01:39:35Z
Daily Trending of Textile in GitHub
\ No newline at end of file
diff --git a/textile/monthly/index.xml b/textile/monthly/index.xml
new file mode 100644
index 00000000000..0dcb10202f3
--- /dev/null
+++ b/textile/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Textile Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:48Z
+ Monthly Trending of Textile in GitHub
+
+
\ No newline at end of file
diff --git a/textile/weekly/index.xml b/textile/weekly/index.xml
new file mode 100644
index 00000000000..729f124a667
--- /dev/null
+++ b/textile/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Textile Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:30Z
+ Weekly Trending of Textile in GitHub
+
+
\ No newline at end of file
diff --git a/textmate-properties/daily/index.xml b/textmate-properties/daily/index.xml
index 75ef92b45c2..b71043e2bf6 100644
--- a/textmate-properties/daily/index.xml
+++ b/textmate-properties/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TextMate Properties Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:22Z
+ 2024-12-01T01:39:35Z
Daily Trending of TextMate Properties in GitHub
\ No newline at end of file
diff --git a/textmate-properties/monthly/index.xml b/textmate-properties/monthly/index.xml
new file mode 100644
index 00000000000..4345b998eed
--- /dev/null
+++ b/textmate-properties/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TextMate Properties Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:48Z
+ Monthly Trending of TextMate Properties in GitHub
+
+
\ No newline at end of file
diff --git a/textmate-properties/weekly/index.xml b/textmate-properties/weekly/index.xml
new file mode 100644
index 00000000000..1d0fa4cdf17
--- /dev/null
+++ b/textmate-properties/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TextMate Properties Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:29Z
+ Weekly Trending of TextMate Properties in GitHub
+
+
\ No newline at end of file
diff --git a/thrift/daily/index.xml b/thrift/daily/index.xml
index 9d4434644aa..978220036b2 100644
--- a/thrift/daily/index.xml
+++ b/thrift/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Thrift Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:22Z
+ 2024-12-01T01:39:36Z
Daily Trending of Thrift in GitHub
\ No newline at end of file
diff --git a/thrift/monthly/index.xml b/thrift/monthly/index.xml
new file mode 100644
index 00000000000..cda0d56042e
--- /dev/null
+++ b/thrift/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Thrift Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:49Z
+ Monthly Trending of Thrift in GitHub
+
+
\ No newline at end of file
diff --git a/thrift/weekly/index.xml b/thrift/weekly/index.xml
new file mode 100644
index 00000000000..c04423705dc
--- /dev/null
+++ b/thrift/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Thrift Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:30Z
+ Weekly Trending of Thrift in GitHub
+
+
\ No newline at end of file
diff --git a/ti-program/daily/index.xml b/ti-program/daily/index.xml
index f3e8d7c27b7..40ca8602359 100644
--- a/ti-program/daily/index.xml
+++ b/ti-program/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TI Program Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:24Z
+ 2024-12-01T01:39:37Z
Daily Trending of TI Program in GitHub
\ No newline at end of file
diff --git a/ti-program/monthly/index.xml b/ti-program/monthly/index.xml
new file mode 100644
index 00000000000..b9d33a6df4d
--- /dev/null
+++ b/ti-program/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TI Program Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:51Z
+ Monthly Trending of TI Program in GitHub
+
+
\ No newline at end of file
diff --git a/ti-program/weekly/index.xml b/ti-program/weekly/index.xml
new file mode 100644
index 00000000000..95903ac64a6
--- /dev/null
+++ b/ti-program/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TI Program Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:31Z
+ Weekly Trending of TI Program in GitHub
+
+
\ No newline at end of file
diff --git a/tla/daily/index.xml b/tla/daily/index.xml
index 9cb58990bd6..e2d66c91aa5 100644
--- a/tla/daily/index.xml
+++ b/tla/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TLA Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:23Z
+ 2024-12-01T01:39:36Z
Daily Trending of TLA in GitHub
\ No newline at end of file
diff --git a/tla/monthly/index.xml b/tla/monthly/index.xml
new file mode 100644
index 00000000000..756c3e10815
--- /dev/null
+++ b/tla/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TLA Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:50Z
+ Monthly Trending of TLA in GitHub
+
+
\ No newline at end of file
diff --git a/tla/weekly/index.xml b/tla/weekly/index.xml
new file mode 100644
index 00000000000..741aab10c24
--- /dev/null
+++ b/tla/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TLA Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:31Z
+ Weekly Trending of TLA in GitHub
+
+
\ No newline at end of file
diff --git a/toml/daily/index.xml b/toml/daily/index.xml
index 8761dd3d5fe..5ec23b49378 100644
--- a/toml/daily/index.xml
+++ b/toml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TOML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:25Z
+ 2024-12-01T01:39:38Z
Daily Trending of TOML in GitHub
\ No newline at end of file
diff --git a/toml/monthly/index.xml b/toml/monthly/index.xml
new file mode 100644
index 00000000000..cdc3b326e0c
--- /dev/null
+++ b/toml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TOML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:52Z
+ Monthly Trending of TOML in GitHub
+
+
\ No newline at end of file
diff --git a/toml/weekly/index.xml b/toml/weekly/index.xml
new file mode 100644
index 00000000000..e27357360c4
--- /dev/null
+++ b/toml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TOML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:33Z
+ Weekly Trending of TOML in GitHub
+
+
\ No newline at end of file
diff --git a/tsql/daily/index.xml b/tsql/daily/index.xml
index 0ab8ec3bf2e..02b6f6e2ecb 100644
--- a/tsql/daily/index.xml
+++ b/tsql/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TSQL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:26Z
+ 2024-12-01T01:39:39Z
Daily Trending of TSQL in GitHub
\ No newline at end of file
diff --git a/tsql/monthly/index.xml b/tsql/monthly/index.xml
new file mode 100644
index 00000000000..42a1d9b9455
--- /dev/null
+++ b/tsql/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSQL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:52Z
+ Monthly Trending of TSQL in GitHub
+
+
\ No newline at end of file
diff --git a/tsql/weekly/index.xml b/tsql/weekly/index.xml
new file mode 100644
index 00000000000..e86f071f113
--- /dev/null
+++ b/tsql/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSQL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:33Z
+ Weekly Trending of TSQL in GitHub
+
+
\ No newline at end of file
diff --git a/tsv/daily/index.xml b/tsv/daily/index.xml
index b9254e538c3..62b18f86b00 100644
--- a/tsv/daily/index.xml
+++ b/tsv/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TSV Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:26Z
+ 2024-12-01T01:39:38Z
Daily Trending of TSV in GitHub
\ No newline at end of file
diff --git a/tsv/monthly/index.xml b/tsv/monthly/index.xml
new file mode 100644
index 00000000000..3a7775d70b5
--- /dev/null
+++ b/tsv/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSV Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:51Z
+ Monthly Trending of TSV in GitHub
+
+
\ No newline at end of file
diff --git a/tsv/weekly/index.xml b/tsv/weekly/index.xml
new file mode 100644
index 00000000000..cc5dc8d8f23
--- /dev/null
+++ b/tsv/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSV Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:34Z
+ Weekly Trending of TSV in GitHub
+
+
\ No newline at end of file
diff --git a/tsx/daily/index.xml b/tsx/daily/index.xml
index a527d59da7c..70464a28614 100644
--- a/tsx/daily/index.xml
+++ b/tsx/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TSX Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:25Z
+ 2024-12-01T01:39:38Z
Daily Trending of TSX in GitHub
\ No newline at end of file
diff --git a/tsx/monthly/index.xml b/tsx/monthly/index.xml
new file mode 100644
index 00000000000..814e411cac3
--- /dev/null
+++ b/tsx/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSX Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:52Z
+ Monthly Trending of TSX in GitHub
+
+
\ No newline at end of file
diff --git a/tsx/weekly/index.xml b/tsx/weekly/index.xml
new file mode 100644
index 00000000000..180dfaa60f5
--- /dev/null
+++ b/tsx/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TSX Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:33Z
+ Weekly Trending of TSX in GitHub
+
+
\ No newline at end of file
diff --git a/turing/daily/index.xml b/turing/daily/index.xml
index b1f18d4bd02..497e59dd1dc 100644
--- a/turing/daily/index.xml
+++ b/turing/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Turing Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:27Z
+ 2024-12-01T01:39:41Z
Daily Trending of Turing in GitHub
\ No newline at end of file
diff --git a/turing/monthly/index.xml b/turing/monthly/index.xml
new file mode 100644
index 00000000000..ae37aaec475
--- /dev/null
+++ b/turing/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Turing Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:53Z
+ Monthly Trending of Turing in GitHub
+
+
\ No newline at end of file
diff --git a/turing/weekly/index.xml b/turing/weekly/index.xml
new file mode 100644
index 00000000000..d33fe2acaea
--- /dev/null
+++ b/turing/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Turing Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:34Z
+ Weekly Trending of Turing in GitHub
+
+
\ No newline at end of file
diff --git a/turtle/daily/index.xml b/turtle/daily/index.xml
index 1ef3ff06584..315f6473c1d 100644
--- a/turtle/daily/index.xml
+++ b/turtle/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Turtle Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:28Z
+ 2024-12-01T01:39:40Z
Daily Trending of Turtle in GitHub
\ No newline at end of file
diff --git a/turtle/monthly/index.xml b/turtle/monthly/index.xml
new file mode 100644
index 00000000000..4cef8600dde
--- /dev/null
+++ b/turtle/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Turtle Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:54Z
+ Monthly Trending of Turtle in GitHub
+
+
\ No newline at end of file
diff --git a/turtle/weekly/index.xml b/turtle/weekly/index.xml
new file mode 100644
index 00000000000..a10c67ea729
--- /dev/null
+++ b/turtle/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Turtle Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:35Z
+ Weekly Trending of Turtle in GitHub
+
+
\ No newline at end of file
diff --git a/twig/daily/index.xml b/twig/daily/index.xml
index 12cc4f9fcbe..5355a6b94b0 100644
--- a/twig/daily/index.xml
+++ b/twig/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Twig Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:28Z
+ 2024-12-01T01:39:40Z
Daily Trending of Twig in GitHub
\ No newline at end of file
diff --git a/twig/monthly/index.xml b/twig/monthly/index.xml
new file mode 100644
index 00000000000..818e08de798
--- /dev/null
+++ b/twig/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Twig Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:54Z
+ Monthly Trending of Twig in GitHub
+
+
\ No newline at end of file
diff --git a/twig/weekly/index.xml b/twig/weekly/index.xml
new file mode 100644
index 00000000000..bb264149ce1
--- /dev/null
+++ b/twig/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Twig Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:35Z
+ Weekly Trending of Twig in GitHub
+
+
\ No newline at end of file
diff --git a/txl/daily/index.xml b/txl/daily/index.xml
index fae778d76fb..9e4cbfcd5b9 100644
--- a/txl/daily/index.xml
+++ b/txl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub TXL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:27Z
+ 2024-12-01T01:39:40Z
Daily Trending of TXL in GitHub
\ No newline at end of file
diff --git a/txl/monthly/index.xml b/txl/monthly/index.xml
new file mode 100644
index 00000000000..56cdc22a657
--- /dev/null
+++ b/txl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TXL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:53Z
+ Monthly Trending of TXL in GitHub
+
+
\ No newline at end of file
diff --git a/txl/weekly/index.xml b/txl/weekly/index.xml
new file mode 100644
index 00000000000..e3acfb1d819
--- /dev/null
+++ b/txl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub TXL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:35Z
+ Weekly Trending of TXL in GitHub
+
+
\ No newline at end of file
diff --git a/type-language/daily/index.xml b/type-language/daily/index.xml
index f399b3065b7..096aa09c68f 100644
--- a/type-language/daily/index.xml
+++ b/type-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Type Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:29Z
+ 2024-12-01T01:39:41Z
Daily Trending of Type Language in GitHub
\ No newline at end of file
diff --git a/type-language/monthly/index.xml b/type-language/monthly/index.xml
new file mode 100644
index 00000000000..502724b3fd3
--- /dev/null
+++ b/type-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Type Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:55Z
+ Monthly Trending of Type Language in GitHub
+
+
\ No newline at end of file
diff --git a/type-language/weekly/index.xml b/type-language/weekly/index.xml
new file mode 100644
index 00000000000..aa0c2c4d388
--- /dev/null
+++ b/type-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Type Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:36Z
+ Weekly Trending of Type Language in GitHub
+
+
\ No newline at end of file
diff --git a/typescript/daily/index.xml b/typescript/daily/index.xml
index f7739109205..971d7e7ed4c 100644
--- a/typescript/daily/index.xml
+++ b/typescript/daily/index.xml
@@ -1,28 +1,14 @@
GitHub TypeScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:31Z
+ 2024-12-01T01:39:43Z
Daily Trending of TypeScript in GitHub
- TanStack/virtual
- 2024-11-30T01:36:31Z
- tag:github.com,2024-11-30:/TanStack/virtual
-
- <p>🤖 Headless UI for Virtualizing Large Element Lists in JS/TS, React, Solid, Vue and Svelte</p><hr><p><img src="https://github.com/tanstack/virtual/raw/main/media/header.png" alt="React Virtual Header"></p>
<p>Headless UI for virtualizing scrollable elements in TS/JS and React</p>
<a href="https://twitter.com/intent/tweet?button_hashtag=TanStack" target="\_parent"> <img alt="#TanStack" src="https://img.shields.io/twitter/url?color=%2308a0e9&label=%23TanStack&style=social&url=https%3A%2F%2Ftwitter.com%2Fintent%2Ftweet%3Fbutton_hashtag%3DTanStack"> </a>
<a href="https://github.com/TanStack/virtual/actions/workflows/ci.yml"> <img src="https://github.com/tanstack/virtual/actions/workflows/ci.yml/badge.svg?sanitize=true"> </a>
<a href="https://npmjs.com/package/@tanstack/virtual-core" target="\_parent"> <img alt="" src="https://img.shields.io/npm/dm/@tanstack/virtual-core.svg?sanitize=true"> </a>
<a href="https://bundlephobia.com/result?p=@tanstack/virtual@latest" target="\_parent"> <img alt="" src="https://badgen.net/bundlephobia/minzip/@tanstack/virtual@latest"> </a>
<a href="https://raw.githubusercontent.com/TanStack/virtual/main/#badge"> <img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?sanitize=true"> </a>
<a href="https://github.com/tanstack/virtual/discussions"> <img alt="Join the discussion on Github" src="https://img.shields.io/badge/Github%20Discussions%20%26%20Support-Chat%20now!-blue"> </a>
<a href="https://github.com/tanstack/virtual" target="\_parent"> <img alt="" src="https://img.shields.io/github/stars/tanstack/virtual.svg?style=social&label=Star"> </a>
<a href="https://twitter.com/tannerlinsley" target="\_parent"> <img alt="" src="https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow"> </a>
<br>
<br>
<p>Enjoy this library? Try the entire <a href="https://tanstack.com">TanStack</a>! <a href="https://github.com/TanStack/react-query">React Query</a>, <a href="https://github.com/TanStack/table">TanStack Table</a>, <a href="https://github.com/TanStack/react-charts">React Charts</a></p>
<h2>Visit <a href="https://tanstack.com/virtual">tanstack.com/virtual</a> for docs, guides, API and more!</h2>
<h2>Quick Features</h2>
<ul>
<li>Row, Column, and Grid virtualization</li>
<li>One single <strong>headless</strong> function</li>
<li>Fixed, variable and dynamic measurement modes</li>
<li>Imperative scrollTo control for offset, indices and alignment</li>
<li>Custom scrolling function support (eg. smooth scroll)</li>
</ul>
<!-- Use the Force, Luke! -->
-
-
- Comfy-Org/desktop
- 2024-11-30T01:36:31Z
- tag:github.com,2024-11-30:/Comfy-Org/desktop
-
- <p>The desktop app for ComfyUI.</p><hr><h1>ComfyUI Desktop (beta)</h1>
<p><a href="https://codecov.io/github/Comfy-Org/electron"><img src="https://codecov.io/github/Comfy-Org/electron/graph/badge.svg?token=S64WJWD2ZX" alt="codecov"></a> <img src="https://img.shields.io/badge/beta-blue.svg?sanitize=true" alt="Beta"></p>
<h3>Currently Supported Platforms</h3>
<ul>
<li>Windows (NVIDIA)</li>
<li>macOS (Apple silicon)</li>
</ul>
<h1>Overview</h1>
<p>This desktop app is a packaged way to use <a href="https://github.com/comfyanonymous/ComfyUI">ComfyUI</a> and comes bundled with a few things:</p>
<ul>
<li>Stable version of ComfyUI from <a href="https://github.com/comfyanonymous/ComfyUI/releases">releases</a></li>
<li><a href="https://github.com/Comfy-Org/ComfyUI_frontend">ComfyUI_frontend</a></li>
<li><a href="https://github.com/ltdrdata/ComfyUI-Manager">ComfyUI-Manager</a></li>
<li><a href="https://github.com/astral-sh/uv">uv</a></li>
</ul>
<p>On startup, it will install all the necessary python dependencies with uv and start the ComfyUI server. The app will automatically update with stable releases of ComfyUI, ComfyUI-Manager, and the uv executable as well as some desktop specific features.</p>
<p>Users please read the <a href="https://comfyorg.notion.site/">guide</a>. Developers, read on.</p>
<h2>Installed Files</h2>
<h3>Electron</h3>
<p>The desktop application comes bundled with:</p>
<ul>
<li>ComfyUI source code</li>
<li>ComfyUI-Manager</li>
<li>Electron, Chromium binaries, and node modules</li>
</ul>
<p><strong>Windows</strong></p>
<p>We use the <a href="https://www.electron.build/nsis.html">NSIS installer</a> for Windows and it will install files in these locations:</p>
<p>Bundled Resources: <code>%APPDATA%\Local\Programs\comfyui-electron</code></p>
<p><img src="https://github.com/user-attachments/assets/0e1d4a9a-7b7e-4536-ad4b-9e6123873706" alt="screenshot of resources directory"></p>
<p>User files are stored here: <code>%APPDATA%\ComfyUI</code></p>
<p>Automatic Updates: <code>%APPDATA%\Local\comfyui-electron-updater</code></p>
<p><strong>macOS</strong></p>
<p>The macOS application is distributed as a <a href="https://www.electron.build/dmg">DMG</a> and will install files in:</p>
<p><code>~/Library/Application Support/ComfyUI</code></p>
<p>The application will be dragged into <code>/Applications</code></p>
<p><strong>Linux</strong></p>
<p><code>~/.config/ComfyUI</code></p>
<h3>ComfyUI</h3>
<p>ComfyUI will also write files to disk as you use it. You will also be asked to select a location to store ComfyUI files like models, inputs, outputs, custom_nodes and saved workflows.</p>
<p>An <code>extra_model_config.yaml</code> is created to tell ComfyUI where to look for these files. You can edit this file to do things like add additional model files to the search path.</p>
<p>On Windows: <code>%APPDATA%\ComfyUI\extra_model_config.yaml</code></p>
<p>On macOS: <code>~/Library/Application Support/ComfyUI/extra_model_config.yaml</code></p>
<p>On Linux: <code>~/.config/ComfyUI/extra_model_config.yaml</code></p>
<h3>Logs</h3>
<p>We use electron-log to log everything. Electron main process logs are in <code>main.log</code>, and ComfyUI server logs are in <code>comfyui_<date>.log</code>.</p>
<pre><code>on Linux: ~/.config/{app name}/logs
on macOS: ~/Library/Logs/{app name}
on Windows: %AppData%\{app name}\logs
</code></pre>
<h1>Development</h1>
<h2>Setup Python</h2>
<p>Make sure you have python 3.12+ installed. It is recommended to setup a virtual environment.</p>
<p>Linux/MacOS:</p>
<pre><code class="language-bash">python -m venv venv
source venv/bin/activate
</code></pre>
<p>Windows:</p>
<pre><code class="language-powershell">py -3.12 -m venv venv
.\venv\Scripts\Activate.ps1
</code></pre>
<h2>Windows</h2>
<h3>Visual Studio</h3>
<p>Visual studio 2019 or later with the Desktop C++ workload is required for <code>node-gyp</code>. See the <code>node-gyp</code> <a href="https://github.com/nodejs/node-gyp#on-windows">windows installation notes</a>. Also requires the <code>spectre-mitigated</code> libraries, found in the individual components section of the VS installer.</p>
<p>Confirmed working:</p>
<ul>
<li>Visual Studio Community 2022 - 17.12.1</li>
<li>Desktop development with C++ workload</li>
<li>MSVC v143 x64 spectre-mitigated libraries (Latest / v14.42-17.12)
<ul>
<li>Open the Visual Studio Installer</li>
<li>Click "Modify" on your Visual Studio 2022 Community installation</li>
<li>Go to the "Individual Components" tab</li>
<li>Search for "Spectre"</li>
<li>Check the boxes for the Spectre-mitigated libraries that match your project's architecture (x86 and/or x64)</li>
<li><img src="https://github.com/user-attachments/assets/0829db3d-84b7-48e8-9d13-c72c35169a05" alt="image"></li>
</ul> </li>
</ul>
<p>Look for "MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs" If you're using other toolsets, you may need their corresponding Spectre-mitigated libraries as well</p>
<h2>NPM Dependencies</h2>
<h3>Node</h3>
<p>We recommend using <a href="https://github.com/nvm-sh/nvm">nvm</a> to manage node versions. This project uses node v20.x.</p>
<h4>Windows</h4>
<p>Microsoft recommends <a href="https://github.com/coreybutler/nvm-windows">nvm-windows</a> on their <a href="https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows#install-nvm-windows-nodejs-and-npm">Node.js on Windows page</a>.</p>
<pre><code class="language-ps1">nvm install 20
nvm use 20
</code></pre>
<h3>Yarn</h3>
<p>This project uses <code>yarn</code> as its package manager. If you do not already have a <code>yarn</code> binary available on your PATH, run:</p>
<pre><code class="language-bash"># corepack is a set of utilities included with all recent distributions of node
corepack enable
yarn set version v4.5.0 # Look at the packageManager key in package.json for the exact version.
</code></pre>
<p>This will install a usable <code>yarn</code> binary. Then, in the root directory of this repo (ie adjacent to the top-level package.json file), run:</p>
<pre><code class="language-bash">yarn install
</code></pre>
<h2>ComfyUI Assets</h2>
<p>Before you can start the electron application, you need to download the ComfyUI source code and other things that are usually bundled with the application. We use <a href="https://github.com/Comfy-Org/comfy-cli">comfy-cli</a> to install everything.</p>
<h3>Install comfy-cli</h3>
<p>With the python environment activated, install comfy-cli:</p>
<pre><code class="language-bash">pip install -U comfy-cli
</code></pre>
<h3>ComfyUI and other dependencies</h3>
<p>First, initialize the application resources by running <code>make:assets:<gpu></code>:</p>
<pre><code class="language-bash"># populate the assets/ dir (Installs a fresh ComfyUI instance under assets/)
yarn make:assets:[amd|cpu|nvidia|macos]
</code></pre>
<p>This command will install ComfyUI under <code>assets</code>, as well ComfyUI-Manager, and the frontend <a href="https://github.com/Comfy-Org/DesktopSettingsExtension">extension</a> responsible for electron settings menu. The exact versions of each package is defined in <code>package.json</code>.</p>
<p>Second, you need to install <code>uv</code>. This will be bundled with the distributable, but we also need it locally.</p>
<pre><code class="language-bash">yarn download:uv
</code></pre>
<p>You can then run <code>start</code> to build/launch the code and a live buildserver that will automatically rebuild the code on any changes:</p>
<pre><code class="language-bash">deactivate # Deactivate your existing python env to avoid influencing the
yarn start
</code></pre>
<p>You can also build the package and/or distributables using the <code>make</code> command:</p>
<pre><code class="language-bash"># build the platform-dependent package and any distributables
yarn make
# build cross-platform, e.g. windows from linux
yarn make --windows
</code></pre>
<h3>Troubleshooting</h3>
<p>If you get an error similar to:</p>
<pre><code>The module '/electron/node_modules/node-pty/build/Release/pty.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 115. This version of Node.js requires NODE_MODULE_VERSION 125. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).
</code></pre>
<p>You will need to rebuild the node-pty using <a href="https://www.electronjs.org/docs/latest/tutorial/using-native-node-modules">electron-rebuild</a>, for example:</p>
<pre><code>npx electron-rebuild
</code></pre>
<p>or if that fails</p>
<pre><code>yarn install -D @electron/rebuild
rm -rf node_modules
rm yarn.lock
yarn install
electron-rebuild
</code></pre>
<h4>Missing libraries</h4>
<p>You may get errors reporting that the build is unable to find e.g. <code>libnss3.so</code> if <code>electron</code> prerequisites are not included in your distro. Find the correct package for your distro and install.</p>
<p><code>apt</code> example:</p>
<pre><code>apt-get install libnss3
</code></pre>
<h3>Debugger</h3>
<p>There are helpful debug launch scripts for VSCode / Cursor under <code>.vscode/launch.json</code>. It will start the dev server as defined in <code>.vscode/tasks.json</code>. Then attach the debugger.</p>
<p>This can be used simply by pressing <code>F5</code> in VSCode or VSCode derivative.</p>
<p>The launch environment can be customised, e.g. add a <code>"linux"</code> section to source your <code>~/.profile</code> (and other interactive config) when debugging in linux:</p>
<pre><code class="language-json">{
"version": "2.0.0",
"tasks": [
{
"linux": { "options": { "shell": { "args": ["-ci"] } } }
}
]
}
</code></pre>
<h1>Release</h1>
<p>We use Todesktop to build and codesign our distributables. To make a new release:</p>
<ol>
<li>Make a PR with the semantic version. eg. <code>v1.0.1</code></li>
<li>Add the label <code>Release</code> to the PR.</li>
<li>Merge the PR</li>
<li>A build will automatically start and you can view it at <a href="https://app.todesktop.com">https://app.todesktop.com</a></li>
</ol>
<h3>Publish Locally</h3>
<p>Follow the above steps for local development setup first.</p>
<pre><code class="language-bash"># Authentication will be required.
yarn publish
</code></pre>
<h2>Utility scripts</h2>
<p>A number of utility scripts are defined under the "scripts" field of package.json. For example, to clean up the build artifacts you can run:</p>
<pre><code class="language-bash">yarn clean
# Remove files created by yarn make:assets:<gpu>
yarn:clean:assets
# clean:slate also removes node_modules
yarn clean:slate
</code></pre>
<h1>Crash Reports</h1>
<p>At the onboarding step, you can opt-in to send us crash reports, which <strong>only</strong> include stack trace for unhandled exceptions and native crashes. These are really helpful to help us debug issues in lieu of an actual Github bug report. However, you can opt-out and nothing will ever be sent. We use Sentry to send crash reports. Code <a href="https://github.com/Comfy-Org/desktop/raw/main/src/services/sentry.ts">here</a>.</p>
<p>In either case, no personal data, workflows or logs will be sent.</p>
<h1>Download</h1>
<p>Windows (NVIDIA) NSIS x64: <a href="https://download.comfy.org/windows/nsis/x64">Download</a></p>
<p>macOS ARM: <a href="https://download.comfy.org/mac/dmg/arm64">Download</a></p>
-
-
- Clooos/Bubble-Card
- 2024-11-30T01:36:31Z
- tag:github.com,2024-11-30:/Clooos/Bubble-Card
-
- <p>Bubble Card is a minimalist card collection for Home Assistant with a nice pop-up touch.</p><hr><h1>Bubble Card</h1>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/c763bdad-ce71-46b0-aa9e-4ff0017072fe" alt="readme-images-bubble-card"></p>
<p>Bubble Card is a minimalist and customizable card collection for Home Assistant with a nice pop-up touch.</p>
<p><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#"><img src="https://img.shields.io/github/stars/clooos/Bubble-Card" alt="Stars"></a> <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#"><img src="https://img.shields.io/github/last-commit/clooos/Bubble-Card" alt="Last commit"></a> <a href="https://www.youtube.com/@cloooos"><img src="https://img.shields.io/badge/YouTube-My%20channel-red?logo=youtube" alt="YouTube"></a> <a href="https://www.reddit.com/r/BubbleCard/"><img src="https://img.shields.io/badge/Reddit-r/BubbleCard-orange?logo=reddit" alt="Reddit Page"></a> <a href="https://www.reddit.com/user/Clooooos/submitted/"><img src="https://img.shields.io/badge/Reddit-My%20stuff-orange?logo=reddit" alt="Reddit Profile"></a> <a href="https://community.home-assistant.io/t/bubble-card-a-minimalist-card-collection-for-home-assistant-with-a-nice-pop-up-touch/609678"><img src="https://img.shields.io/badge/Home%20Assistant-Community%20Forum-blue?logo=home-assistant" alt="Home Assistant Community Forum"></a> <a href="https://www.buymeacoffee.com/clooos"><img src="https://img.shields.io/badge/Donate-Buy%20me%20a%20beer-yellow?logo=buy-me-a-coffee" alt="Buy me a beer"></a> <a href="https://www.paypal.com/donate/?business=MRVBV9PLT9ZPL&no_recurring=0&item_name=Hi%2C+I%27m+Clooos+the+creator+of+Bubble+Card.+Thank+you+for+supporting+me+and+my+passion.+You+are+awesome%21+%F0%9F%8D%BB&currency_code=EUR"><img src="https://img.shields.io/badge/Donate-PayPal-blue?logo=paypal" alt="PayPal"></a></p>
<br>
<h2>Table of contents</h2>
<p><strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#installation"><code>Installation</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#configuration"><code>Configuration</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#pop-up"><code>Pop-up</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#horizontal-buttons-stack"><code>Horizontal buttons stack</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#button"><code>Button</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#media-player"><code>Media player</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#cover"><code>Cover</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#select"><code>Select</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#separator"><code>Separator</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#empty-column"><code>Empty column</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons"><code>Sub-buttons</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts"><code>Card layouts</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions"><code>Actions</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#styling"><code>Styling</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#templates"><code>Templates</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#custom-components-conflicts"><code>Conflicts</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#help"><code>Help</code></a></strong> <strong><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#donate"><code>Donate</code></a></strong></p>
<br>
<h2>Installation</h2>
<p><strong>Home Assistant lowest supported version:</strong> 2023.9.0</p>
<details>
<summary>Without HACS</summary>
<br>
<ol>
<li>Download these files: <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/dist/bubble-card.js">bubble-card.js</a> and <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/dist/bubble-pop-up-fix.js">bubble-pop-up-fix.js</a></li>
<li>Add these files to your <code><config>/www</code> folder</li>
<li>On your dashboard click on the icon at the right top corner then on <code>Edit dashboard</code></li>
<li>Click again on that icon and then click on <code>Manage resources</code></li>
<li>Click on <code>Add resource</code></li>
<li>Copy and paste this: <code>/local/bubble-card.js?v=1</code></li>
<li>Click on <code>JavaScript Module</code> then <code>Create</code></li>
<li>Go back and refresh your page</li>
<li>You can now click on <code>Add card</code> in the bottom right corner and search for <code>Bubble Card</code></li>
<li>After any update of the file you will have to edit <code>/local/bubble-card.js?v=1</code> and change the version to any higher number</li>
</ol>
<p>If it's not working, just try to clear your browser cache.`</p>
</details>
<details>
<summary>With HACS (Recommended)</summary>
<br>
<p>This method allows you to get updates directly on the HACS main page</p>
<ol>
<li>If HACS is not installed yet, download it following the instructions on <a href="https://hacs.xyz/docs/use/download/download/">https://hacs.xyz/docs/setup/download/</a></li>
<li>Proceed to the HACS initial configuration following the instructions on <a href="https://hacs.xyz/docs/configuration/basic">https://hacs.xyz/docs/configuration/basic</a></li>
<li>On your sidebar go to <code>HACS</code> > <code>Frontend</code></li>
<li>Click on the <code>+</code> button at the bottom right corner</li>
<li>Now search for <code>Bubble Card</code> and then click on the button at the bottom right corner to download it</li>
<li>Go back on your dashboard and click on the icon at the right top corner then on <code>Edit dashboard</code></li>
<li>You can now click on <code>Add card</code> in the bottom right corner and search for <code>Bubble Card</code></li>
</ol>
<p>If it's not working, try to clear your browser cache.</p>
<h4>Videos</h4>
<p>You can also take a look at my YouTube channel for step by step videos.</p>
<p><a href="https://www.youtube.com/@cloooos"><img src="https://img.shields.io/badge/YouTube-My%20channel-red?logo=youtube" alt="YouTube"></a></p>
</details>
<br>
<p><a href="https://my.home-assistant.io/redirect/hacs_repository/?owner=clooos&repository=Bubble-Card&category=frontend"><img src="https://my.home-assistant.io/badges/hacs_repository.svg?sanitize=true" alt="Open Bubble Card on Home Assistant Community Store (HACS)."></a></p>
<br>
<h2>Configuration</h2>
<p>All options can be configured in the Home Assistant editor. But you can find more details and the YAML in the documentation below.</p>
<details>
<p><strong></strong></p>
<summary><strong>Main options (YAML + description)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>type</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td><code>custom:bubble-card</code></td>
<td>Type of the card</td>
</tr>
<tr>
<td><code>card_type</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td><code>button</code>, <code>cover</code>, <code>empty-column</code>, <code>horizontal-buttons-stack</code>, <code>media-player</code>, <code>pop-up</code>, <code>select</code> or <code>separator</code></td>
<td>Type of the Bubble Card, see below</td>
</tr>
<tr>
<td><code>styles</code></td>
<td>object list</td>
<td>Optional</td>
<td>Any CSS stylesheets</td>
<td>Allows you to customize your Bubble Card CSS, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#styling">styling</a></td>
</tr>
</tbody>
</table>
</details>
<br>
<hr>
<br>
<p><a href="https://www.youtube.com/watch?v=0hSQOlBxKKI"><img src="https://github.com/user-attachments/assets/643aa16a-3fc9-4770-8269-62ec01db49b3" alt="Bubble-Card---Youtube-github"></a></p>
<p><strong>Check out this <a href="https://www.youtube.com/watch?v=0hSQOlBxKKI">video</a> to learn about Bubble Card and its capabilities.</strong> My YouTube channel is quite new and focuses on tutorials about Home Assistant and Bubble Card. Don’t hesitate to subscribe to help increase my channel’s visibility. Thank you in advance!</p>
<br>
<hr>
<br>
<h2>Pop-up</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/086bdcc4-62aa-445b-b265-b57c4e38b8a0" alt="readme-pop-up"></p>
<p>This card allows you to convert any vertical stack into a pop-up. Each pop-up is <strong>hidden by default</strong> and can be opened by targeting its link (e.g. <code>'#pop-up-name'</code>), with any card that supports the <code>navigate</code> <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">action</a>, or with the <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#horizontal-buttons-stack">horizontal buttons stack</a> that is included.</p>
<blockquote>
<p>[!IMPORTANT]<br> This card must be placed within a <a href="https://www.home-assistant.io/dashboards/vertical-stack/">vertical stack</a> card at the topmost position to function properly. To avoid misalignment with your view, place vertical stacks/pop-ups after all other dashboard cards. It should be called from the same view to work.</p>
<details>
<summary><b>How to create a pop-up in the editor</b></summary>
<br>
<ol>
<li>To add a pop-up you first need to add a <code>Vertical stack</code> card to your dashboard.</li>
<li>This <code>Vertical stack</code> must be after all your other cards in your view order and before your horizontal buttons stack if you have one. In a section view type it can be placed anywhere.</li>
<li>Now add a <code>Bubble Card</code> with the <code>Pop-up</code> type.</li>
<li>Just fill in the <code>Hash</code> input and the ones you need.</li>
</ol>
<p><strong>You can also watch <a href="https://www.youtube.com/watch?v=7mOV7BfWoFc">this step by step video</a>.</strong></p>
</details>
</blockquote>
<blockquote>
<p>[!TIP]</p>
<h3>Pop-up trigger</h3>
<p>This feature allows you to open a pop-up based on the state of any entity, for example, you can open a "Security" pop-up with a camera when a person is in front of your house. You can also create a toggle helper (input_boolean) and trigger its opening/closing in an automation.</p>
<details>
<summary>Opening a pop-up when a <code>binary_sensor</code> is <code>on</code></summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: pop-up
hash: '#kitchen'
name: Security
icon: mdi:video
trigger_entity: binary_sensor.front_door_motion
trigger_state: 'on'
trigger_close: true
</code></pre>
</details>
<h3>Different ways to close a pop-up</h3>
<p>They are many ways to close a pop-up. For instance, you can swipe from the pop-up header to the bottom, by doing a long swipe inside the pop-up to the bottom, by pressing Escape on desktop, by removing the hash in the URL or by simply pressing the close button.</p>
<h3>Pop-up initialization fix</h3>
<p>If you notice that pop-up content appears upon page load, consider installing this fix as an additional module.</p>
<details>
<summary>Installation</summary>
<br>
<p>You can do this by adding <code>bubble-pop-up-fix.js</code> to your <code>configuration.yaml</code> like so:</p>
<pre><code class="language-yaml">frontend:
extra_module_url:
- /hacsfiles/Bubble-Card/bubble-pop-up-fix.js
</code></pre>
<p>If you didn't install it with HACS, change the path accordingly. Then, clear your browser cache.</p>
<p>For Android Home Assistant Companion App users, you can close the app, then clear the app cache. If it's still not working, you can close and restart the app again.</p>
<p>For iOS Home Assistant Companion App users, you can go to your Home Assistant settings, then navigate to Companion App > Debug > Clear Frontend Cache (or something similar), then refresh the page or restart the app.</p>
<p>For previous users of the <strong>Optimized mode</strong>, you will need to replace your <code>type: custom:bubble-pop-up</code> with this in YAML mode:</p>
<pre><code class="language-yaml">type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
</code></pre>
</details>
</blockquote>
<h3>Pop-up options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>hash</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>Any unique hash (e.g. <code>'#kitchen'</code>) with ' '</td>
<td>This is how you will open your pop-up</td>
</tr>
<tr>
<td><code>auto_close</code></td>
<td>string</td>
<td>Optional</td>
<td>A timeout in milliseconds (e.g. <code>10000</code> for 10s)</td>
<td>Auto close the pop-up after a timeout</td>
</tr>
<tr>
<td><code>close_on_click</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Automatically close the pop-up after any interaction</td>
</tr>
<tr>
<td><code>close_by_clicking_outside</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Close the pop-up by clicking outside of it</td>
</tr>
<tr>
<td><code>width_desktop</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Width on desktop (<code>100%</code> by default on mobile)</td>
</tr>
<tr>
<td><code>margin</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Use this <strong>only</strong> if your pop-up is not well centered on mobile (e.g. <code>13px</code>)</td>
</tr>
<tr>
<td><code>margin_top_mobile</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Top margin on mobile (e.g. <code>-56px</code> if your header is hidden)</td>
</tr>
<tr>
<td><code>margin_top_desktop</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Top margin on desktop (e.g. <code>50vh</code> for a half-sized pop-up or <code>calc(100vh - 400px)</code> for a fixed height of <code>400px</code>)</td>
</tr>
<tr>
<td><code>bg_color</code></td>
<td>string</td>
<td>Optional</td>
<td>Any hex, rgb or rgba value</td>
<td>The background color of your pop-up (e.g. <code>#ffffff</code> for a white background)</td>
</tr>
<tr>
<td><code>bg_opacity</code></td>
<td>string</td>
<td>Optional</td>
<td>Any value from <code>0</code> to <code>100</code></td>
<td>The background opacity of your pop-up (e.g. <code>100</code> for no transparency)</td>
</tr>
<tr>
<td><code>bg_blur</code></td>
<td>string</td>
<td>Optional</td>
<td>Any value from <code>0</code> to <code>100</code></td>
<td>The background blur effect of your pop-up, <strong>this only work if <code>bg_opacity</code> is not set to <code>100</code></strong> (e.g. <code>0</code> for no blur)</td>
</tr>
<tr>
<td><code>shadow_opacity</code></td>
<td>string</td>
<td>Optional</td>
<td>Any value from <code>0</code> to <code>100</code></td>
<td>The shadow opacity of your pop-up (e.g. <code>0</code> to hide it)</td>
</tr>
<tr>
<td><code>hide_backdrop</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Set this to true on the first pop-up of your main dashboard to disable the backdrop on all pop-ups.</td>
</tr>
<tr>
<td><code>background_update</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Update pop-up content in background (not recommended)</td>
</tr>
<tr>
<td><code>trigger_entity</code></td>
<td>string</td>
<td>Optional</td>
<td>Any entity</td>
<td>Open this pop-up based on the state of any entity</td>
</tr>
<tr>
<td><code>trigger_state</code></td>
<td>string</td>
<td>Optional (<strong>Required</strong> if <code>trigger_entity</code> is defined)</td>
<td>Any entity state</td>
<td>Entity state to open the pop-up</td>
</tr>
<tr>
<td><code>trigger_close</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Close the pop-up when <code>trigger_state</code> is different</td>
</tr>
<tr>
<td><code>open_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Trigger an action when the pop-up is opening</td>
</tr>
<tr>
<td><code>close_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Trigger an action when the pop-up is closing</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the header, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>show_header</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show/Hide the pop-up header fully</td>
</tr>
<tr>
<td>You also have access to <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#button">all the button settings</a> for the header of the pop-up.</td>
<td></td>
<td>Optional</td>
<td></td>
<td>If undefined no header will be shown</td>
</tr>
</tbody>
</table>
</details>
<h4>Examples</h4>
<details>
<summary>A pop-up</summary>
<br>
<pre><code class="language-yaml">type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#kitchen'
name: Kitchen
icon: mdi:fridge
entity: light.kitchen
</code></pre>
</details>
<details>
<summary>A button to open the pop-up</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: name
name: Kitchen
icon: mdi:fridge
button_action:
tap_action:
action: navigate
navigation_path: '#kitchen'
</code></pre>
</details>
<details>
<summary>A pop-up with a fixed height</summary>
<br>
<p>Replace <code>400px</code> with the size you need.</p>
<pre><code class="language-yaml">type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#kitchen'
name: Kitchen
icon: mdi:fridge
entity: light.kitchen
margin_top_mobile: calc(100vh - 400px)
margin_top_desktop: calc(100vh - 400px)
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Horizontal buttons stack</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/8fe89ade-c77a-469b-891f-577e0bb2f46b" alt="readme-horizontal-buttons-stack"></p>
<p>This card is a good companion to the pop-up card, allowing you to open the corresponding pop-ups. It also allows you to open any page of your dashboard. In addition, you can add your motion/occupancy sensors so that the order of the buttons adapts according to the room you just entered. This card is scrollable, remains visible, and acts as a footer.</p>
<blockquote>
<p>[!IMPORTANT]<br> This card has to be the last one in your view (after every card and pop-up). It can't be inside any stack.</p>
</blockquote>
<h3>Horizontal buttons stack options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>1_link</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>The pop-up hash (e.g. <code>'#kitchen'</code>) with ' ' or any link</td>
<td>A link to open</td>
</tr>
<tr>
<td><code>1_name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your button</td>
</tr>
<tr>
<td><code>1_icon</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your button</td>
</tr>
<tr>
<td><code>1_entity</code></td>
<td>string</td>
<td>Optional</td>
<td>Any light or light group</td>
<td>Display the color of that light in background</td>
</tr>
<tr>
<td><code>1_pir_sensor</code></td>
<td>string</td>
<td>Optional</td>
<td>Any binary sensor</td>
<td>At least one pir sensor or more for <code>auto_order</code>, in fact it also works with any entity type, for example you can add light groups and the order will change based on the last changed states.</td>
</tr>
<tr>
<td><code>auto_order</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Change the order of the buttons according to the <code>_pir_sensor</code> last changed time, <strong>it needs to be <code>false</code> if you don't have any <code>_pir_sensor</code> in your code</strong></td>
</tr>
<tr>
<td><code>margin</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Use this <strong>only</strong> if your <code>horizontal-buttons-stack</code> is not well centered on mobile (e.g. <code>13px</code>)</td>
</tr>
<tr>
<td><code>width_desktop</code></td>
<td>string</td>
<td>Optional</td>
<td>Any CSS value</td>
<td>Width on desktop (<code>100%</code> by default on mobile)</td>
</tr>
<tr>
<td><code>is_sidebar_hidden</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Fix the horizontal buttons stack position if the sidebar is hidden on the desktop (only if you have made a modification to hide it yourself)</td>
</tr>
<tr>
<td><code>rise_animation</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Set this to <code>false</code> to disable the animation that activates once the page has loaded</td>
</tr>
<tr>
<td><code>highlight_current_view</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Highlight current hash / view with a smooth animation</td>
</tr>
<tr>
<td><code>hide_gradient</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Set this to <code>false</code> to hide the gradient</td>
</tr>
</tbody>
</table>
<blockquote>
<p>[!IMPORTANT]<br> The variables starting with a number define your buttons, just change this number to add more buttons (see example below).</p>
</blockquote>
</details>
<h4>Example</h4>
<details>
<summary>An horizontal buttons stack that reorganize itself based on occupancy sensors</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: horizontal-buttons-stack
auto_order: true
1_name: Living room
1_icon: mdi:sofa
1_link: '#living-room'
1_entity: light.living_room
1_pir_sensor: binary_sensor.living_room_motion
2_name: Kitchen
2_icon: mdi:fridge
2_link: '#kitchen'
2_entity: light.kitchen
2_pir_sensor: binary_sensor.kitchen_motion
3_name: Dining room
3_icon: mdi:silverware-fork-knife
3_link: '#dining-room'
3_entity: light.dining_room
3_pir_sensor: binary_sensor.dining_room_motion
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Button</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/790cbe3c-bdcc-4242-81ac-48e6ca2f1d46" alt="readme-button-without-sub-buttons"></p>
<p>This card allows you to control your entities and can be customized in many ways. To access color / control of an entity, simply tap on the icon.</p>
<blockquote>
<p>[!TIP]</p>
<h3>What are the differences between all the button types?</h3>
<ul>
<li> <p><strong>The button switch</strong> is the default one. By default, it toggles an entity and its background color changes based on the entity’s state or the color of a light.</p> </li>
<li> <p><strong>The button slider</strong> can control the brightness of a light, the volume of a media player, the position of a cover, and it also supports input numbers. Its background color can change based on the color of a light.</p> </li>
<li> <p><strong>The button state</strong> is perfect for displaying information from a sensor or any entity. When you press it, it will show the "More info" panel of the entity. Its background color does not change.</p> </li>
<li> <p><strong>The button name</strong> is the only one that doesn't need an entity and allows you to display a short text, a name or a title. You can also add some actions to it. Its background color does not change.</p> </li>
</ul>
</blockquote>
<h3>Button options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>Any entity</td>
<td>An entity to control</td>
</tr>
<tr>
<td><code>button_type</code></td>
<td>string</td>
<td>Optional</td>
<td><code>switch</code> (default), <code>slider</code>, <code>state</code> or <code>name</code></td>
<td>The behavior of your button</td>
</tr>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your button, if not defined it will display the entity name</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your button, if not defined it will display the entity icon or the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>force_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Give the priority to the icon instead of the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>show_state</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the state of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_name</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the name</td>
</tr>
<tr>
<td><code>show_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the icon</td>
</tr>
<tr>
<td><code>show_last_changed</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show the last changed time of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_attribute</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show an attribute of your <code>entity</code> below its <code>name</code></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>string</td>
<td>Optional (required if <code>show_attribute</code> is set to <code>true</code>)</td>
<td>An attribute from your <code>entity</code></td>
<td>The attribute to show (e.g. <code>brightness</code>)</td>
</tr>
<tr>
<td><code>scrolling_effect</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Allow text to scroll when the content exceeds the size of their container</td>
</tr>
<tr>
<td><code>button_action</code></td>
<td>object</td>
<td>Optional</td>
<td><code>tap_action</code>, <code>double_tap_action</code> or <code>hold_action</code>, see below</td>
<td>Allow to change the default actions on button click. Not available for the <code>slider</code> type.</td>
</tr>
<tr>
<td><code>tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon click, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>double_tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon double click, if undefined, <code>toggle</code> will be used.</td>
</tr>
<tr>
<td><code>hold_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon hold, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the card, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>columns</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code>, <code>2</code>, <code>3</code> or <code>4</code> (default)</td>
<td>Number of columns when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>rows</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code> (default), <code>2</code>, <code>3</code> or <code>4</code></td>
<td>Number of rows when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>sub_button</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons">sub-buttons</a></td>
<td>Add customized buttons fixed to the right</td>
</tr>
</tbody>
</table>
</details>
<h4>Examples</h4>
<details>
<summary>A slider button that can control the brightness of a light</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: slider
entity: light.kitchen_led
name: Kitchen LED
icon: mdi:led-strip-variant
</code></pre>
</details>
<details>
<summary>A button with all the options</summary>
<br>
<pre><code class="language-yaml">entity: light.your_light
button_type: switch
show_icon: true
force_icon: true
show_name: true
show_last_changed: true
show_state: true
show_last_updated: true
show_attribute: true
attribute: brightness
scrolling_effect: true
card_layout: large
button_action:
tap_action:
action: toggle
tap_action:
action: more-info
sub_button:
- entity: light.your_light
icon: ''
show_state: false
show_attribute: true
attribute: brightness
show_icon: false
show_background: false
show_name: false
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Media player</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/c7ee0752-00e3-4edf-8e1c-983fbd29b5f3" alt="readme-media-player"></p>
<p>This card allows you to control a media player. You can tap on the icon to get more control.</p>
<h3>Media player options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>Any media player</td>
<td>The media player to control</td>
</tr>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your media player, if not defined it will display the entity name</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your media player, if not defined it will display the entity icon or the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>force_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Give the priority to the icon instead of the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>show_state</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the state of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_name</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the name</td>
</tr>
<tr>
<td><code>show_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the icon</td>
</tr>
<tr>
<td><code>show_last_changed</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show the last changed time of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_attribute</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show an attribute of your <code>entity</code> below its <code>name</code></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>string</td>
<td>Optional (required if <code>show_attribute</code> is set to <code>true</code>)</td>
<td>An attribute from your <code>entity</code></td>
<td>The attribute to show (e.g. <code>brightness</code>)</td>
</tr>
<tr>
<td><code>scrolling_effect</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Allow text to scroll when the content exceeds the size of their container</td>
</tr>
<tr>
<td><code>tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon click, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>double_tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon double click, if undefined, <code>toggle</code> will be used.</td>
</tr>
<tr>
<td><code>hold_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon hold, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the card, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>columns</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code>, <code>2</code>, <code>3</code> or <code>4</code> (default)</td>
<td>Number of columns when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>rows</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code> (default), <code>2</code>, <code>3</code> or <code>4</code></td>
<td>Number of rows when placed in a <strong>section view</strong></td>
</tr>
<tr>
<td><code>sub_button</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons">sub-buttons</a></td>
<td>Add customized buttons fixed to the right</td>
</tr>
<tr>
<td><code>hide</code></td>
<td>object</td>
<td>Optional</td>
<td>See below</td>
<td>Show or hide buttons</td>
</tr>
</tbody>
</table>
<h4>Hide options</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>play_pause_button</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the play/pause button</td>
</tr>
<tr>
<td><code>volume_button</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the volume button</td>
</tr>
<tr>
<td><code>previous_button</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the previous button</td>
</tr>
<tr>
<td><code>next_button</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the next button</td>
</tr>
<tr>
<td><code>power_button</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the power button</td>
</tr>
</tbody>
</table>
</details>
<h4>Examples</h4>
<details>
<summary>A media player with all the options</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: media-player
name: Media player
entity: media_player.your_media_player
show_state: true
show_last_updated: true
show_attribute: true
attribute: assumed_state
card_layout: large
scrolling_effect: false
show_icon: false
force_icon: true
show_name: false
show_last_changed: true
columns: 2
rows: 1
tap_action:
action: toggle
hide:
play_pause_button: true
volume_button: true
previous_button: true
next_button: true
power_button: true
sub_button:
- entity: media_player.salon_2
icon: mdi:volume-high
name: Volume level
tap_action:
action: more-info
show_name: false
show_state: false
show_last_updated: false
show_attribute: true
show_background: false
attribute: volume_level
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Cover</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/27d1c329-76ab-480b-b424-c79c9e68c788" alt="readme-cover"></p>
<p>This card allows you to control your covers.</p>
<h3>Cover options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>Any cover</td>
<td>A cover to control</td>
</tr>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your cover, if not defined it will display the entity name</td>
</tr>
<tr>
<td><code>force_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Give the priority to the icon instead of the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>show_state</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the state of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_name</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the name</td>
</tr>
<tr>
<td><code>show_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the icon</td>
</tr>
<tr>
<td><code>show_last_changed</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show the last changed time of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_attribute</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show an attribute of your <code>entity</code> below its <code>name</code></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>string</td>
<td>Optional (required if <code>show_attribute</code> is set to <code>true</code>)</td>
<td>An attribute from your <code>entity</code></td>
<td>The attribute to show (e.g. <code>brightness</code>)</td>
</tr>
<tr>
<td><code>scrolling_effect</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Allow text to scroll when the content exceeds the size of their container</td>
</tr>
<tr>
<td><code>icon_open</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your open cover, if not defined it will display the default open cover icon</td>
</tr>
<tr>
<td><code>icon_close</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your closed cover, if not defined it will display the default closed cover icon</td>
</tr>
<tr>
<td><code>icon_up</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your open cover button, if not defined it will display the default open cover icon</td>
</tr>
<tr>
<td><code>icon_down</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your close cover button, if not defined it will display the default close cover icon</td>
</tr>
<tr>
<td><code>open_service</code></td>
<td>string</td>
<td>Optional</td>
<td>Any service or script</td>
<td>A service to open your cover, default to <code>cover.open_cover</code></td>
</tr>
<tr>
<td><code>stop_service</code></td>
<td>string</td>
<td>Optional</td>
<td>Any service or script</td>
<td>A service to stop your cover, default to <code>cover.stop_cover</code></td>
</tr>
<tr>
<td><code>close_service</code></td>
<td>string</td>
<td>Optional</td>
<td>Any service or script</td>
<td>A service to close your cover, default to <code>cover.close_cover</code></td>
</tr>
<tr>
<td><code>tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon click, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>double_tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon double click, if undefined, <code>toggle</code> will be used.</td>
</tr>
<tr>
<td><code>hold_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon hold, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the card, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>columns</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code>, <code>2</code>, <code>3</code> or <code>4</code> (default)</td>
<td>Number of columns when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>rows</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code> (default), <code>2</code>, <code>3</code> or <code>4</code></td>
<td>Number of rows when placed in a <strong>section view</strong></td>
</tr>
<tr>
<td><code>sub_button</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons">sub-buttons</a></td>
<td>Add customized buttons fixed to the right</td>
</tr>
</tbody>
</table>
</details>
<h4>Example</h4>
<details>
<summary>A card that can control a roller shade</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: cover
entity: cover.kitchen
name: Kitchen
icon_open: mdi:roller-shade
icon_close: mdi:roller-shade-closed
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Select</h2>
<p><img src="https://github.com/user-attachments/assets/f1220aaf-da5a-4ec0-b74e-31905264ae0a" alt="readme-select-card"></p>
<p>This card allows you to add a dropdown menu for your <code>input_select</code> / <code>select</code> entities. This card also supports the sub-buttons and all the common Bubble Card features.</p>
<blockquote>
<p>[!TIP] You can also have select sub-buttons if you want, this feature is available in all the cards that support the sub-buttons.</p>
</blockquote>
<h3>Select options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>string</td>
<td><strong>Required</strong></td>
<td>Any entity</td>
<td>An entity to control</td>
</tr>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your select, if not defined it will display the entity name</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your select, if not defined it will display the entity icon or the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>force_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Give the priority to the icon instead of the <code>entity-picture</code></td>
</tr>
<tr>
<td><code>show_state</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the state of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_name</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the name</td>
</tr>
<tr>
<td><code>show_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the icon</td>
</tr>
<tr>
<td><code>show_last_changed</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show the last changed time of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_attribute</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show an attribute of your <code>entity</code> below its <code>name</code></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>string</td>
<td>Optional (required if <code>show_attribute</code> is set to <code>true</code>)</td>
<td>An attribute from your <code>entity</code></td>
<td>The attribute to show (e.g. <code>brightness</code>)</td>
</tr>
<tr>
<td><code>scrolling_effect</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Allow text to scroll when the content exceeds the size of their container</td>
</tr>
<tr>
<td><code>tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon click, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>double_tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon double click, if undefined, <code>toggle</code> will be used.</td>
</tr>
<tr>
<td><code>hold_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on icon hold, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the card, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>columns</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code>, <code>2</code>, <code>3</code> or <code>4</code> (default)</td>
<td>Number of columns when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>rows</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code> (default), <code>2</code>, <code>3</code> or <code>4</code></td>
<td>Number of rows when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>sub_button</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons">sub-buttons</a></td>
<td>Add customized buttons fixed to the right</td>
</tr>
</tbody>
</table>
</details>
<h4>Examples</h4>
<details>
<summary>A select card with a list of scenes</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: select
name: Scene
entity: input_select.scenes
icon: mdi:brightness-4
show_state: true
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Separator</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/7e416a34-b95e-4a03-a200-4b3aa04f560d" alt="readme-separator"></p>
<p>This card is a simple separator for dividing your pop-up into categories / sections. e.g. Lights, Devices, Covers, Settings, Automations...</p>
<h3>Separator options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + descriptions)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional but recommended</td>
<td>Any string</td>
<td>A name for your separator</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>string</td>
<td>Optional but recommended</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your separator</td>
</tr>
<tr>
<td><code>card_layout</code></td>
<td>string</td>
<td>Optional</td>
<td><code>normal</code> (default), <code>large</code>, <code>large-2-rows</code></td>
<td>Styling layout of the card, see <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#card-layouts">card layouts</a></td>
</tr>
<tr>
<td><code>columns</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code>, <code>2</code>, <code>3</code> or <code>4</code> (default)</td>
<td>Number of columns when placed in a <strong>section view</strong> (e.g. <code>2</code> is 2/4)</td>
</tr>
<tr>
<td><code>rows</code></td>
<td>string</td>
<td>Optional</td>
<td><code>1</code> (default), <code>2</code>, <code>3</code> or <code>4</code></td>
<td>Number of rows when placed in a <strong>section view</strong></td>
</tr>
<tr>
<td><code>sub_button</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#sub-buttons">sub-buttons</a></td>
<td>Add customized buttons fixed to the right</td>
</tr>
</tbody>
</table>
</details>
<h4>Example</h4>
<details>
<summary>A separator/divider for a "Covers" section</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: separator
name: Covers
icon: mdi:window-shutter
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Empty column</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/a97fa8df-8360-4613-8bb7-e8a269cb1913" alt="readme-empty-column"></p>
<p>This card is here to fill an empty column. This is useful if you have a <code>horizontal-stack</code> in your pop-up with only one card. Take a look at the bottom right corner of this screenshot to (not) see it.</p>
<h3>Empty column options</h3>
<p>This card has no options and doesn’t support <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#styling">styling</a>, though it does support layout options for HA sections.</p>
<h4>Example</h4>
<details>
<summary>An empty column in an horizontal stack</summary>
<br>
<pre><code class="language-yaml">type: horizontal-stack
cards:
- type: custom:bubble-card
card_type: button
...
- type: custom:bubble-card
card_type: empty-column
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Sub-buttons</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/c7bfda91-943e-42f3-a963-4847e57c6b97" alt="readme-button"></p>
<p>In every card that supports that option, you can add sub-buttons to customize your cards even more. You can, for exemple, create a button that can control a vacuum, a weather card, or almost anything that you can come up with. These sub-buttons support the tap actions and most of the button options.</p>
<h3>Sub-buttons options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + description)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Requirement</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>entity</code></td>
<td>string</td>
<td>Optional</td>
<td>Any entity</td>
<td>An entity to control</td>
</tr>
<tr>
<td><code>name</code></td>
<td>string</td>
<td>Optional</td>
<td>Any string</td>
<td>A name for your sub-button, if not defined it will display the entity name</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>string</td>
<td>Optional</td>
<td>Any <code>mdi:</code> icon</td>
<td>An icon for your sub-button, if not defined it will display the entity icon</td>
</tr>
<tr>
<td><code>show_background</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show a background for your sub-button, it will change its color based on your entity state</td>
</tr>
<tr>
<td><code>show_state</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the state of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_name</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show or hide the name</td>
</tr>
<tr>
<td><code>show_icon</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> (default) or <code>false</code></td>
<td>Show or hide the icon</td>
</tr>
<tr>
<td><code>show_last_changed</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show the last changed time of your <code>entity</code></td>
</tr>
<tr>
<td><code>show_attribute</code></td>
<td>boolean</td>
<td>Optional</td>
<td><code>true</code> or <code>false</code> (default)</td>
<td>Show an attribute of your <code>entity</code> below its <code>name</code></td>
</tr>
<tr>
<td><code>attribute</code></td>
<td>string</td>
<td>Optional (required if <code>show_attribute</code> is set to <code>true</code>)</td>
<td>An attribute from your <code>entity</code></td>
<td>The attribute to show (e.g. <code>brightness</code>)</td>
</tr>
<tr>
<td><code>tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on sub-button click, if undefined, <code>more-info</code> will be used.</td>
</tr>
<tr>
<td><code>double_tap_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on sub-button double click, if undefined, <code>toggle</code> will be used.</td>
</tr>
<tr>
<td><code>hold_action</code></td>
<td>object</td>
<td>Optional</td>
<td>See <a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#tap-double-tap-and-hold-actions">actions</a></td>
<td>Define the type of action on sub-button hold, if undefined, <code>more-info</code> will be used.</td>
</tr>
</tbody>
</table>
</details>
<h4>Examples</h4>
<details>
<summary>A button with some sub-buttons to make a vacuum card (like on the screenshot)</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: switch
name: Vacuum
entity: vacuum.downstairs
icon: mdi:robot-vacuum
show_state: true
show_last_changed: true
tap_action:
action: more-info
button_action:
tap_action:
action: more-info
sub_button:
- name: Battery
icon: mdi:battery
show_name: false
show_icon: true
show_background: false
show_attribute: true
attribute: battery_level
- name: Return to dock
icon: mdi:home
show_background: false
tap_action:
action: call-service
service: vacuum.return_to_base
target:
entity_id: vacuum.downstairs
- name: Pause
icon: mdi:pause
show_background: false
tap_action:
action: call-service
service: vacuum.pause
target:
entity_id: vacuum.downstairs
- name: Start
icon: mdi:play
tap_action:
action: call-service
service: vacuum.start
target:
entity_id: vacuum.downstairs
styles: >-
.bubble-button-card-container {
/* Change the background color when the vacuum get an error (optional), more details in the styles template section */
background: ${state === 'error' ? 'rgb(200, 80, 40)' : ''} !important;
}
/* Change the first sub-button battery icon based on the battery_icon attribute, more details in the styles template section */
${subButtonIcon[0].setAttribute("icon", hass.states['vacuum.downstairs'].attributes.battery_icon)}
</code></pre>
</details>
<details>
<summary>A button slider with a sub-button that shows the brightness and one that toggle the light (like on the screenshot)</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: slider
name: Kitchen
entity: light.kitchen
icon: mdi:fridge-outline
show_last_updated: true
sub_button:
- name: Brightness
icon: mdi:fridge-outline
show_icon: false
show_background: false
show_attribute: true
attribute: brightness
- name: Toggle button
icon: mdi:lightbulb
tap_action:
action: toggle
</code></pre>
</details>
<details>
<summary>A button that shows the inside and outside temperature with the weather for today and tomorrow (screenshot included)</summary>
<br>
<img width="591" alt="image" src="https://github.com/Clooos/Bubble-Card/assets/36499953/360312de-db08-47bf-9b46-92afeb435edd">
<blockquote>
<p>Bad luck for me it's cloudy all the time but all the icons are changing based on the weather.</p>
</blockquote>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: state
entity: weather.openweathermap
name: Weather
show_state: true
card_layout: large-2-rows
sub_button:
- name: Home temperature
icon: mdi:home-thermometer-outline
entity: sensor.home_temperature
show_state: true
show_icon: true
show_background: false
- name: Outside temperature
entity: sensor.outside_temperature
show_state: true
show_background: false
- name: Today
entity: sensor.home_realfeel_temperature_max_0d
show_name: true
show_state: true
tap_action:
action: more-info
- name: Tomorrow
entity: sensor.home_realfeel_temperature_max_1d
show_name: true
show_state: true
show_background: false
styles: >-
/* Change the third and fourth sub-button icon based on the forecast.condition attribute, more details in the styles template section */
${subButtonIcon[2].setAttribute("icon", getWeatherIcon(hass.states['sensor.weather_forecast_daily'].attributes.forecast[0]?.condition))}
${subButtonIcon[3].setAttribute("icon", getWeatherIcon(hass.states['sensor.weather_forecast_daily'].attributes.forecast[1]?.condition))}
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Card layouts</h2>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/0c049498-969b-4939-959e-fc49fb08d0a1" alt="My-Bubble-Card-dashboard"></p>
<p>Bubble Card fully supports the Home Assistant section view, you can change the card layout to make the card bigger and also change the number of columns or rows the card should occupy in your section view (only on the cards that support that option). These layouts are also supported in all other view types.</p>
<details>
<p><strong></strong></p>
<summary><strong>Available card layouts</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Layout</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>normal</code></td>
<td>The regular layout (not optimized for the section view)</td>
</tr>
<tr>
<td><code>large</code></td>
<td>A larger layout (optimized for the section view)</td>
</tr>
<tr>
<td><code>large-2-rows</code></td>
<td>A larger layout with 2 rows of sub-buttons (optimized for the section view)</td>
</tr>
</tbody>
</table>
</details>
<h4>Example</h4>
<details>
<summary>A large button that shows energy statistics with 2 rows of sub-buttons (screenshot included)</summary>
<br>
<img width="547" alt="image" src="https://github.com/Clooos/Bubble-Card/assets/36499953/faa643d5-5d1e-488d-b4a5-6bedd043c747">
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: state
card_layout: large-2-rows
name: Energy
entity: sensor.current_power_production
icon: mdi:home-lightning-bolt-outline
show_state: true
button_action:
tap_action:
action: navigate
navigation_path: '#energy'
sub_button:
- entity: sensor.electricity_counter
icon: mdi:counter
show_background: false
show_state: true
tap_action:
action: more-info
- entity: sensor.today_s_energy_production
show_state: true
show_background: false
- entity: sensor.average_daily_consumption
show_background: false
show_state: true
- entity: sensor.this_week_production
show_state: true
show_background: false
icon: mdi:calendar-week
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Tap, double tap and hold actions</h2>
<p>You can also use Home Assistant default tap actions, double tap actions and hold actions on the cards that supports this option. For example, this allows you to display the “more info” window by holding a button icon or running a service when a sub-button is pressed.</p>
<h3>Action options</h3>
<details>
<p><strong></strong></p>
<summary><strong>Options (YAML + description)</strong></summary>
<p></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Supported options</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>action</code></td>
<td>string</td>
<td><code>more-info</code>, <code>toggle</code>, <code>call-service</code>, <code>navigate</code>, <code>url</code>, <code>fire-dom-event</code>, <code>none</code></td>
<td>Action to perform</td>
</tr>
<tr>
<td><code>target</code></td>
<td>object</td>
<td></td>
<td>Only works with <code>call-service</code>. Follows the <a href="https://www.home-assistant.io/docs/scripts/service-calls/#targeting-areas-and-devices">home-assistant syntax</a></td>
</tr>
<tr>
<td><code>navigation_path</code></td>
<td>string</td>
<td>Any path of your dashboard</td>
<td>Path to navigate to (e.g. <code>'#kitchen'</code> for opening a pop-up) when action defined as navigate</td>
</tr>
<tr>
<td><code>url_path</code></td>
<td>string</td>
<td>Any link</td>
<td>URL to open on click (e.g. <code>https://www.google.com</code>) when action is <code>url</code></td>
</tr>
<tr>
<td><code>service</code></td>
<td>string</td>
<td>Any service</td>
<td>Service to call (e.g. <code>media_player.media_play_pause</code>) when <code>action</code> defined as <code>call-service</code></td>
</tr>
<tr>
<td><code>data</code> or <code>service_data</code></td>
<td>object</td>
<td>Any service data</td>
<td>Service data to include (e.g. <code>entity_id: media_player.kitchen</code>) when <code>action</code> defined as <code>call-service</code></td>
</tr>
<tr>
<td><code>confirmation</code></td>
<td>object</td>
<td>See <a href="https://www.home-assistant.io/dashboards/actions/#options-for-confirmation">confirmation</a></td>
<td>Display a confirmation pop-up (not a Bubble Card one), overrides the default <code>confirmation</code> object</td>
</tr>
</tbody>
</table>
</details>
<h4>Example</h4>
<details>
<summary>A button to open a pop-up</summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
button_type: name
name: Kitchen
icon: mdi:fridge
button_action:
tap_action:
action: navigate
navigation_path: '#kitchen'
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Styling</h2>
<p>You can add custom styles in the editor or by adding <code>styles: |</code> in YAML <strong>without using card-mod</strong> which allows you to modify the CSS style of all the cards.</p>
<blockquote>
<p>[!TIP]<br> <strong>To understand which style classes can be modified</strong>, you can take a look at the <a href="https://github.com/Clooos/Bubble-Card/tree/main/src/cards"><code>src/cards</code></a> folder in this repository. In each card folder, you will find a file named <code>styles.ts</code>. These files contain all the applied styles.</p>
<p>You can also find a lot of examples on the <a href="https://community.home-assistant.io/t/bubble-card-a-minimalist-card-collection-for-home-assistant-with-a-nice-pop-up-touch/">Home Assistant forum</a> by doing a bit of searching.</p>
<p>The Bubble theme for Home Assistant (like on the screenshots) can be found <a href="https://github.com/Clooos/Bubble">here</a>.</p>
</blockquote>
<blockquote>
<p>[!IMPORTANT]<br> Please note that you will have to add <code>!important;</code> to some CSS styles that are already defined (see examples below).</p>
</blockquote>
<h4>Examples</h4>
<details>
<summary>Changing the font size of any Bubble Card</summary>
<br>
<pre><code class="language-yaml">styles: |
* {
font-size: 16px !important;
}
</code></pre>
</details>
<details>
<summary>Changing the background color of a single button in an horizontal buttons stack</summary>
<br>
<pre><code class="language-yaml">styles: >
/* Selector for the '#kitchen' button */
.kitchen > .color-background {
background-color: blue !important;
}
</code></pre>
</details>
<details>
<summary>Changing the background color of a button</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-button-card-container {
background: rgba(12,120,50,0.5) !important;
}
</code></pre>
<p>To change the color when it's <code>on</code> take a look at the style templates below.</p>
</details>
<details>
<summary>Changing the color of a button slider</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-range-fill {
background: rgba(79, 69, 87, 1) !important;
opacity: 1 !important;
}
</code></pre>
</details>
<details>
<summary>Changing the line color of a separator</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-line {
background: var(--primary-text-color);
opacity: 0.1;
}
</code></pre>
</details>
<details>
<summary>Changing the color of an icon</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-icon {
color: white !important;
}
</code></pre>
<p>For an horizontal buttons stack icon.</p>
<pre><code class="language-yaml">.kitchen > .bubble-icon {
color: grey !important
}
</code></pre>
</details>
<details>
<summary>Changing the background color of an icon container</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-icon-container {
background: rgb(230, 128, 41);
}
</code></pre>
</details>
<details>
<summary>Changing the size of the sub-buttons (perfect for the large layout)</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-sub-button {
height: 48px !important;
min-width: 48px !important;
}
</code></pre>
</details>
<details>
<summary>Changing the background color of the second sub-button</summary>
<br>
<pre><code class="language-yaml">styles: |
.bubble-sub-button-2 {
background-color: blue !important;
}
</code></pre>
</details>
<details>
<summary>Changing the size of an icon</summary>
<br>
<p>For the main icon.</p>
<pre><code class="language-yaml">styles: |
.bubble-icon {
--mdc-icon-size: 26px !important;
}
</code></pre>
<p>For the sub-button icons.</p>
<pre><code class="language-yaml">styles: |
.bubble-sub-button-icon {
--mdc-icon-size: 26px !important;
}
</code></pre>
</details>
<details>
<summary>Using a picture rather than an icon in a sub button</summary>
<br>
<pre><code class="language-yaml">sub_button:
- icon: none
styles: |-
.bubble-sub-button-1 {
background-image: url("/local/pictures/your_picture.jpg");
background-size: cover;
}
</code></pre>
<p>Just upload this picture in a “pictures” folder (or the name you want) in the Home Assistant “www” folder.</p>
</details>
<details>
<summary>Advanced example: Creating an horizontal row of sub-buttons (screenshot included)</summary>
<br>
<img width="556" alt="image" src="https://github.com/Clooos/Bubble-Card/assets/36499953/b9be2bcf-93fc-4b06-8eae-ecac97dfb5e2">
<blockquote>
<p>I really love this one, I use it as a header on my dashboard.</p>
</blockquote>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
card_layout: large
button_type: name
show_icon: false
show_name: false
sub_button:
- name: Mute
icon: mdi:volume-off
tap_action:
action: toggle
service: input_boolean.toggle
entity: input_boolean.silent_mode
- name: Covers
entity: cover.all_group
show_background: false
tap_action:
action: navigate
navigation_path: '#cover'
- name: Shopping list
icon: mdi:cart-outline
show_background: false
tap_action:
action: navigate
navigation_path: '#shopping-list'
- name: Security
icon: mdi:video-outline
show_background: false
tap_action:
action: navigate
navigation_path: '#security'
- name: Settings
icon: mdi:cog
show_background: false
tap_action:
action: navigate
navigation_path: '#configuration'
styles: |
.card-content {
width: 100%;
margin: 0 !important;
}
.bubble-button-card-container {
background: none;
}
.bubble-sub-button {
height: 46px !important;
width: 46px !important;
}
.bubble-sub-button-container {
width: 100%;
justify-content: space-between !important;
}
.bubble-sub-button-icon {
--mdc-icon-size: inherit !important;
}
.bubble-name-container {
margin-right: 0px !important;
}
</code></pre>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/3bf04969-e00d-4755-89df-481e8f7d73b2" alt="Sub-buttons-everywhere"></p>
</details>
<br>
<h3>Templates</h3>
<p><strong>Bubble Card doesn’t support Jinja templates</strong> but advanced users can add templates in JS directly in their custom styles. For example, this allows you to dynamically change an icon, the texts or the colors of an element, to show or hide an element conditionally (like a sub-button), or almost anything based on a state, an attribute and more.</p>
<blockquote>
<p>[!TIP]<br> More information about JS templates <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_operator">here</a>. My advice is to always take a look at your browser console to be sure that everything is working correctly.</p>
</blockquote>
<h4>Available variables and functions</h4>
<details>
<summary>Variables</summary>
<br>
<p>You have access to these variables in most cards:</p>
<ul>
<li> <p><code>state</code> will return the state of your defined <code>entity</code>.</p> </li>
<li> <p><code>entity</code> will return your entity you defined like <code>switch.test</code> in this example.</p> </li>
<li> <p><code>icon</code> can be used like this to change the icon <code>icon.setAttribute("icon", "mdi:lightbulb")</code>.</p> </li>
<li> <p><code>subButtonIcon[0]</code> can be used like this to change the first sub-button icon <code>subButtonIcon[0].setAttribute("icon", "mdi:lightbulb")</code>, <code>[0]</code> is the first sub-button icon, <code>[1]</code> the second...</p> </li>
<li> <p><code>card</code> will return the card element in the DOM.</p> </li>
<li> <p><code>hass</code> is an advanced variable that allows you even more control, for example you can return the state of <code>light.kitchen</code> like this <code>hass.states['light.kitchen'].state</code> or an attribute like this <code>hass.states[entity].attributes.brightness</code>.</p> </li>
<li> <p><code>this</code> will return a lot of usefull informations about your setup and dashboard, only use this if you know what you are doing.</p> </li>
</ul>
</details>
<details>
<summary>Functions (<code>getWeatherIcon</code>)</summary>
<br>
<p>You have access to all the global JS functions, but you have also access to:</p>
<ul>
<li> <p><code>getWeatherIcon</code> can be used to return a weather icon based on a state that return the weather. For example, you can can do this <code>${subButtonIcon[2].setAttribute("icon", getWeatherIcon(hass.states['sensor.weather_forecast_daily'].attributes.forecast[0]?.condition))}</code> to change the third sub-button icon to today's weather icon, <code>.forecast[1]?.condition</code> is for tomorrow...</p> <p>You will have to create a template sensor for that. Here is what you can add in your <code>configuration.yaml</code>:</p> <pre><code class="language-yaml"> - trigger:
- platform: time_pattern
hours: /2
action:
- service: weather.get_forecasts
data:
type: daily
target:
entity_id: weather.home
response_variable: daily
sensor:
- name: Weather Forecast Daily
unique_id: weather_forecast_daily
state: "{{ now().isoformat() }}"
attributes:
forecast: "{{ daily['weather.home'].forecast }}"
</code></pre> </li>
</ul>
</details>
<h4>Examples</h4>
<details>
<summary>Changing the background color of a button that is red when it's <code>off</code> and green when it's <code>on</code></summary>
<br>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: button
entity: switch.test
name: Test
styles: |
.bubble-button-background {
opacity: 1 !important;
background-color: ${state === 'on' ? 'blue' : 'red'} !important;
}
</code></pre>
</details>
<details>
<summary>Changing the background color of a button based on an entity for the horizontal buttons stack</summary>
<br>
<pre><code class="language-yaml">styles: |
.kitchen > .color-background {
background-color: ${hass.states['light.kitchen'].state === 'on' ? 'blue' : 'red'} !important;
}
</code></pre>
</details>
<details>
<summary>Showing/Hiding a sub-button conditionally</summary>
<br>
<p>This one is showing the first sub-button only when my vacuum is stuck.</p>
<pre><code class="language-yaml">styles: |
.bubble-sub-button-1 {
display: ${hass.states['vacuum.downstairs'].state === 'error' ? '' : 'none'} !important;
}
</code></pre>
<p>This one is showing a sub-button when the battery is below 10%. Usefull with a sub-button that shows "Low battery".</p>
<pre><code class="language-yaml">styles: |
.bubble-sub-button-1 {
display: ${hass.states['vacuum.downstairs'].attributes.battery_level <= 10 ? '' : 'none'} !important;
}
</code></pre>
</details>
<details>
<summary>Changing an icon or sub-button icon conditionally</summary>
<br>
<p>This one is changing a button icon only when a vacuum is stuck.</p>
<pre><code class="language-yaml">styles: |
${icon.setAttribute("icon", hass.states['vacuum.downstairs'].state === 'error' ? 'mdi:alert' : 'mdi:robot-vacuum')}
</code></pre>
<p>This one is changing the first sub-button icon only when a vacuum is stuck.</p>
<pre><code class="language-yaml">styles: |
${subButtonIcon[0].setAttribute("icon", hass.states['vacuum.downstairs'].state === 'error' ? 'mdi:alert' : 'mdi:robot-vacuum')}
</code></pre>
</details>
<details>
<summary>Changing an icon or sub-button icon color conditionally</summary>
<br>
<p>This one is changing a button icon color based on its state.</p>
<pre><code class="language-yaml">styles: |
.bubble-icon {
color: ${hass.states['light.your_light'].state === 'on' ? 'green' : 'red'} !important;
}
</code></pre>
<p>This one is changing a sub-button icon color based on its state. <code>.bubble-sub-button-1</code> is the first sub-button, replace <code>1</code> if you want to change another sub-button icon.</p>
<pre><code class="language-yaml">styles: |
.bubble-sub-button-1 > ha-icon {
color: ${hass.states['light.your_light'].state === 'on' ? 'green' : 'red'} !important;
}
</code></pre>
</details>
<details>
<summary>Animating a fan icon conditionally</summary>
<br>
<p>This one is rotating a button icon when a fan is <code>on</code>.</p>
<pre><code class="language-yaml">styles: |-
.bubble-icon {
animation: ${hass.states['fan.you_fan'].state === 'on' ? 'slow-rotate 2s linear infinite' : ''};
}
@keyframes slow-rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</code></pre>
</details>
<details>
<summary>Templating texts (like name or state)</summary>
<br>
<p>This one is changing a button name/state with "It's currently sunny" depending on your weather.</p>
<pre><code class="language-yaml">styles: |
${card.querySelector('.bubble-name').innerText = "It's currently " + hass.states['weather.home'].state}
</code></pre>
<p>If you want to template the state (<code>.bubble-state</code>) don't toggle <code>show_state: true</code> just toggle <code>show_attribute: true</code> without any attribute.</p>
</details>
<details>
<summary>Advanced example: Changing the color of a sub-button when a pop-up is open</summary>
<br>
<pre><code class="language-yaml">styles: |
${window.addEventListener('location-changed', () => {
card.querySelector('.bubble-sub-button-1').style.backgroundColor = this.location.href.includes('#kitchen') ? 'blue' : '';
})}
</code></pre>
</details>
<details>
<summary>Advanced example: Templating a separator name based on a state translated to your language</summary>
<br>
<p>You can use <code>hass.formatEntityState(state)</code> to transtale a state and <code>hass.formatEntityAttributeValue(state, "attribute")</code> to translate an attribute.</p>
<p>This one is changing the name and the icon based on the weather, "Nuageux" means "Cloudy" in French.</p>
<p><img src="https://github.com/Clooos/Bubble-Card/assets/36499953/35ac9d0f-c3b8-4c09-9c15-fe6954011d55" alt="image"></p>
<pre><code class="language-yaml">type: custom:bubble-card
card_type: separator
icon: mdi:weather-cloudy
sub_button:
- entity: sensor.outside_temperature
icon: mdi:thermometer
name: Temperature
show_state: true
show_background: false
styles: >
.bubble-line {
background: white;
opacity: 1;
}
${card.querySelector('.bubble-name').innerText =
hass.formatEntityState(hass.states['weather.maison'])}
${icon.setAttribute("icon",
getWeatherIcon(hass.states['weather.maison'].state))}
</code></pre>
</details>
<br>
<hr>
<br>
<h2>Custom components conflicts</h2>
<p>⚠️ For now there are some features that are not working with:</p>
<ul>
<li>Kiosk mode, but this is fixed in Kiosk mode v6.0.1</li>
</ul>
<br>
<hr>
<br>
<h2>Help</h2>
<p>Feel free to open an issue if something is not working as expected.</p>
<p><a href="https://github.com/Clooos/Bubble-Card/issues"><img src="https://img.shields.io/badge/GitHub-Issues-green?logo=github" alt="GitHub Issues"></a></p>
<p>Got questions or thoughts about Bubble Card? Want to share your dashboards or discoveries? You can go on the Home Assistant forum, on the Bubble Card subreddit or on the GitHub Discussions section.</p>
<p><a href="https://community.home-assistant.io/t/bubble-card-a-minimalist-card-collection-for-home-assistant-with-a-nice-pop-up-touch/609678"><img src="https://img.shields.io/badge/Home%20Assistant-Community%20Forum-blue?logo=home-assistant" alt="Home Assistant Community Forum"></a> <a href="https://www.reddit.com/r/BubbleCard/"><img src="https://img.shields.io/badge/Reddit-r/BubbleCard-orange?logo=reddit" alt="Reddit Page"></a> <a href="https://github.com/Clooos/Bubble-Card/discussions"><img src="https://img.shields.io/badge/GitHub-Discussions-lightgrey?logo=github" alt="GitHub Discussions"></a></p>
<br>
<hr>
<br>
<h2>Donate</h2>
<p>I dedicate most of my spare time to making this project the best it can be. So if you appreciate my work, any donation would be a great way to show your support 🍻</p>
<p><a href="https://www.buymeacoffee.com/clooos"><img src="https://img.shields.io/badge/Donate-Buy%20me%20a%20beer-yellow?logo=buy-me-a-coffee" alt="Buy me a beer"></a> <a href="https://www.paypal.com/donate/?business=MRVBV9PLT9ZPL&no_recurring=0&item_name=Hi%2C+I%27m+Clooos+the+creator+of+Bubble+Card.+Thank+you+for+supporting+me+and+my+passion.+You+are+awesome%21+%F0%9F%8D%BB&currency_code=EUR"><img src="https://img.shields.io/badge/Donate-PayPal-blue?logo=paypal" alt="PayPal"></a></p>
<br>
<p>Thank you everyone for your support, you all are my greatest motivation!</p>
<p align="right"><a href="https://raw.githubusercontent.com/Clooos/Bubble-Card/main/#top"><img src="https://cdn-icons-png.flaticon.com/512/892/892692.png" height="50px"></a></p>
+ JackySoft/marsview
+ 2024-12-01T01:39:43Z
+ tag:github.com,2024-12-01:/JackySoft/marsview
+
+ <p>Marsview 是一款中后台方向的低代码可视化搭建平台,开发者可以在平台上创建项目、页面和组件,支持事件交互、接口调用、数据联动和逻辑编排等,开发者还可通过微服务快速集成到自己的业务系统中。 Marsview is a low code visualization platform for middle and backend direction, supporting event interaction, interface calling, data linkage, and logical orchestration.</p><hr><div align="center">
<p><a href="http://marsview.cc/"><img src="https://marsview.cdn.bcebos.com/mars-logo.png" width="150" alt="marsview logo"></a></p>
<h1>Marsview Low Code Platform</h1>
<p>Make building simpler and development more efficient</p>
<p><a href="http://docs.marsview.com.cn/">Project documentation</a> | <a href="https://github.com/JackySoft/marsview">Open source repository</a> | <a href="https://imgcloud.cdn.bcebos.com/f35323e9a2625a85909cb6f02.png">Communication group</a></p>
</div>
<div align="center">
<p><img src="https://img.shields.io/github/stars/JackySoft/marsview" alt="GitHub Repo stars"></p>
<p><img src="https://img.shields.io/github/package-json/v/JackySoft/marsview" alt="GitHub package.json version"> <img src="https://img.shields.io/github/license/JackySoft/marsview" alt="GitHub License"> <img src="https://img.shields.io/npm/v/amis" alt="version"> <img src="https://img.shields.io/github/languages/top/JackySoft/marsview" alt="language"> <img src="https://img.shields.io/github/last-commit/JackySoft/marsview.svg?sanitize=true" alt="last"></p>
<p>English | <a href="https://raw.githubusercontent.com/JackySoft/marsview/main/README.zh-CN.md">中文</a></p>
</div>
<h2>Intro 🚀</h2>
<p>Marsview is a low code visualization platform for middle and backend development. Developers can create projects, pages, and components on the platform, supporting event interaction, interface calling, data linkage, and logical orchestration. Developers can also quickly integrate them into their own business systems through the microApp front-end framework.</p>
<h2>Online use 🛸</h2>
<ul>
<li>🌍 <a href="https://www.marsview.com.cn/">Marsview</a></li>
</ul>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae37.png" alt="Demo"></td>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae38.png" alt="Demo"></td>
</tr>
<tr>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae39.png" alt="Demo"></td>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae3a.png" alt="Demo"></td>
</tr>
<tr>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae3b.png" alt="Demo"></td>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae3c.png" alt="Demo"></td>
</tr>
<tr>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae3d.png" alt="Demo"></td>
<td><img src="https://imgcloud.cdn.bcebos.com/09d56ca14e47f7880d67bae3e.png" alt="Demo"></td>
</tr>
</tbody>
</table>
<h2>Platform Features 💥</h2>
<ul>
<li><strong>project:</strong> Project configuration (theme color, menu layout, system logo, breadcrumbs...), complete RBAC permission management.</li>
<li><strong>page:</strong> Page creation, page theme, page configuration, component drag and drop, style configuration, event flow configuration, logical orchestration, interface configuration. The page supports integration into traditional projects through microservices, whether you are Vue or React.</li>
<li><strong>permission:</strong> The project and page support developer and visitor permission configuration, and the project also supports RBAC control at the menu and button level.</li>
<li><strong>Custom Components:</strong> When the components provided by the platform cannot meet the requirements, business components can be customized and developed. The platform will compile them online and upload them to the cloud. At the same time, in the editor interface, custom components can be loaded by clicking on them.</li>
<li><strong>interface:</strong> Unified interface management, global interceptors, return structure modifications, etc. Support GET, POST, PUT, DELETE and other request methods, and support dynamic parameter passing through interfaces.</li>
<li><strong>event flow:</strong> High difficulty business logic orchestration can be completed through event flow, such as component linkage, component visibility and concealment, component disabling, custom logic processing, interface calling, route jumping, etc.</li>
<li><strong>environment:</strong> The platform supports three environments, STG, PRE, and PRD. The page can only be accessed on the user side after being published to the corresponding environment.</li>
<li><strong>rollback:</strong> After the platform is released, the page supports one click rollback.</li>
<li><strong>Micro front-end integration:</strong> If you are a traditional Vue project and want to use this platform, you can first build a page on the platform and publish it to the PRD environment, and finally integrate it through microservices.</li>
<li>The backend provides two versions, JAVA and Koa, with MySQL as the database.</li>
</ul>
<h2>Local development 👨💻</h2>
<h3>Frontend</h3>
<pre><code class="language-bash">git clone https://github.com/JackySoft/marsview.git
</code></pre>
<p>Project Description</p>
<table>
<thead>
<tr>
<th>directory</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>packges</td>
<td>Front end project, including 4 sub projects</td>
</tr>
<tr>
<td>packges/admin</td>
<td>Project Access Terminal</td>
</tr>
<tr>
<td>packges/editor</td>
<td>Editor end</td>
</tr>
<tr>
<td>packages/materials</td>
<td>Component materials, for admin use only</td>
</tr>
<tr>
<td>packages/docs</td>
<td>Low code usage documentation</td>
</tr>
</tbody>
</table>
<h3>Backend</h3>
<pre><code class="language-bash">git clone https://github.com/JackySoft/marsview-backend.git
</code></pre>
<p>Project Description</p>
<table>
<thead>
<tr>
<th>directory</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>backend</td>
<td>Backend services, including 2 versions</td>
</tr>
<tr>
<td>backend/config</td>
<td>Project configuration file</td>
</tr>
</tbody>
</table>
<h3>Deploy Documentation</h3>
<p><a href="http://docs.marsview.com.cn/deploy.html">Documentation</a></p>
<h3>Quick start</h3>
<p>Running requires a node environment, it is recommended to have a version of 'node: 18' or higher. Use <code>pnpm</code> as a dependency management tool. If it is not installed, please execute the installation command <code>npm install - g pnpm</code> first.</p>
<ol>
<li>Start the front-end</li>
</ol>
<pre><code class="language-bash">
# Install dependencies (if the installation dependency time is too long, please configure the image source first)
pnpm i
# Launch Editor
pnpm start:editor
</code></pre>
<blockquote>
<p>Note: By default, online interfaces are used. If private deployment is required, please refer to the private deployment documentation.</p>
</blockquote>
<p><a href="http://docs.marsview.com.cn/deploy.html">Documentation</a></p>
<h3>Synchronization Code</h3>
<p>The project is in a high-speed development stage with fast version updates. It is recommended that developers set up upstream remote branches after the fork and clone projects to pull the latest code and synchronize it locally at any time.</p>
<pre><code class="language-bash"># add upstream
git remote add upstream https://github.com/JackySoft/marsview
# Capture the source repository and modify the main branch
git fetch upstream main
# Switch Branch
git checkout main
# Merge remote branches
git merge upstream/main
</code></pre>
<h2>Team Recruitment</h2>
<p>-Passionate about programming and open source, with a strong interest in low code. -Continuous passion and long termism. -After meeting the requirements, they will enter the internal team open source group and share profits in the future.</p>
<h2>Activities 🆕</h2>
<ul>
<li>2024-10-30: Marsview open-source backend service.</li>
<li>2024-09-27: Online email registration service.</li>
<li>2024-08-30: MarsView Published in <a href="https://www.ruanyifeng.com/blog/2024/08/weekly-issue-315.html">Ruan Yifeng Weekly</a></li>
<li>2024-08-27: MarsAI v1.0 is launched, and auxiliary code generation is implemented in custom writing.</li>
<li>2024-08-17: Project <a href="http://docs.marsview.com.cn/">Online Document</a> Publish.</li>
<li>2024-08-13: Open source article ranks first on the hot list of the Gold Mining Forum.</li>
<li>2024-08-10: Project open source
<ul>
<li>Announce project open source, publish open source article: <a href="https://juejin.cn/post/7401009128204894244">My low code platform Marsview is finally open source</a></li>
</ul> </li>
<li>2024-07-16: The project is previewed for the first time on the Gold Mining Forum
<ul>
<li>Release trailer article: <a href="https://juejin.cn/post/7392071348480835595">I spent 8 months creating a high-quality zero code platform called Mars</a></li>
</ul> </li>
</ul>
<h2>Update log 📅</h2>
<p>View <a href="https://github.com/JackySoft/marsview/raw/master/CHANGELOG.md">Update Log</a> Get the latest updates.</p>
<h2>Project communication 🏘️</h2>
<p>If you encounter any technical or commercial authorization issues during use, please feel free to contact me via WeChat:</p>
<img src="https://imgcloud.cdn.bcebos.com/f35323e9a2625a85909cb6f02.png" width="200">
<h2>Participate in donation ✨</h2>
<p><a href="https://afdian.com/a/marsview">Please treat me to a cup of coffee ☕️</a></p>
<p>Thank you to the following brothers for their donation:</p>
<table>
<thead>
<tr>
<th>name</th>
<th>profile picture</th>
</tr>
</thead>
<tbody>
<tr>
<td>钢铁侠</td>
<td><img src="http://docs.marsview.com.cn/sponsor/10.png" width="50"></td>
</tr>
<tr>
<td>物联网方案-肖工</td>
<td><img src="http://docs.marsview.com.cn/sponsor/3.png" width="50"></td>
</tr>
</tbody>
</table>
<h2>🤝 Participate and contribute</h2>
<p>We warmly welcome contributions in various forms. If you are interested in contributing code, you can check out our GitHub <a href="https://github.com/JackySoft/marsview/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc">Issues</a>,Show us your creativity and creativity.</p>
<p>How do you want to become a developer? Welcome to submit <code>PR</code>. Please refer to the <code>PR</code> specification for submission: <a href="https://raw.githubusercontent.com/JackySoft/marsview/main/.github/PULL_REQUEST_TEMPLATE.md">Pull Rquest</a></p>
<a href="https://github.com/JackySoft/marsview/graphs/contributors" target="_blank"> <img src="https://contrib.rocks/image?repo=JackySoft/marsview"> </a>
<h2>Star History 🌟</h2>
<p>If you find this project helpful to you, please consider <a href="https://github.com/JackySoft/marsview">GitHub</a> Give it one ⭐️ ! <a href="https://github.com/JackySoft/marsview/stargazers" target="_blank" style="display: block" align="center">
<picture></picture></a></p>
<a href="https://github.com/JackySoft/marsview/stargazers" target="_blank" style="display: block" align="center"> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=JackySoft/marsview&type=Date&theme=dark"> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=JackySoft/marsview&type=Date"> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=JackySoft/marsview&type=Date"> </a>
<h2>licence 📄</h2>
<p>This project is authorized under the MIT License - for more information, please refer to <a href="https://github.com/JackySoft/marsview/raw/main/LICENSE">LICENSE</a> the document.</p>
\ No newline at end of file
diff --git a/typescript/monthly/index.xml b/typescript/monthly/index.xml
new file mode 100644
index 00000000000..c7a23632bab
--- /dev/null
+++ b/typescript/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub TypeScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:57Z
+ Monthly Trending of TypeScript in GitHub
+
+
+ bluesky-social/social-app
+ 2024-12-01T01:58:57Z
+ tag:github.com,2024-12-01:/bluesky-social/social-app
+
+ <p>The Bluesky Social application for Web, iOS, and Android</p><hr><h1>Bluesky Social App</h1>
<p>Welcome friends! This is the codebase for the Bluesky Social app.</p>
<p>Get the app itself:</p>
<ul>
<li><strong>Web: <a href="https://bsky.app">bsky.app</a></strong></li>
<li><strong>iOS: <a href="https://apps.apple.com/us/app/bluesky-social/id6444370199">App Store</a></strong></li>
<li><strong>Android: <a href="https://play.google.com/store/apps/details?id=xyz.blueskyweb.app">Play Store</a></strong></li>
</ul>
<h2>Development Resources</h2>
<p>This is a <a href="https://reactnative.dev/">React Native</a> application, written in the TypeScript programming language. It builds on the <code>atproto</code> TypeScript packages (like <a href="https://www.npmjs.com/package/@atproto/api"><code>@atproto/api</code></a>), code for which is also open source, but in <a href="https://github.com/bluesky-social/atproto">a different git repository</a>.</p>
<p>There is a small amount of Go language source code (in <code>./bskyweb/</code>), for a web service that returns the React Native Web application.</p>
<p>The <a href="https://raw.githubusercontent.com/bluesky-social/social-app/main/docs/build.md">Build Instructions</a> are a good place to get started with the app itself.</p>
<p>The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't <em>need</em> to understand AT Protocol to work with this application, but it can help. Learn more at:</p>
<ul>
<li><a href="https://atproto.com/guides/overview">Overview and Guides</a></li>
<li><a href="https://github.com/bluesky-social/atproto/discussions">Github Discussions</a> 👈 Great place to ask questions</li>
<li><a href="https://atproto.com/specs/atp">Protocol Specifications</a></li>
<li><a href="https://bsky.social/about/blog/3-6-2022-a-self-authenticating-social-protocol">Blogpost on self-authenticating data structures</a></li>
</ul>
<p>The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is <code>app.bsky.*</code>.</p>
<h2>Contributions</h2>
<blockquote>
<p>While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.</p>
</blockquote>
<p><strong>Rules:</strong></p>
<ul>
<li>We may not respond to your issue or PR.</li>
<li>We may close an issue or PR without much feedback.</li>
<li>We may lock discussions or contributions if our attention is getting DDOSed.</li>
<li>We're not going to provide support for build issues.</li>
</ul>
<p><strong>Guidelines:</strong></p>
<ul>
<li>Check for existing issues before filing a new one please.</li>
<li>Open an issue and give some time for discussion before submitting a PR.</li>
<li>Stay away from PRs like...
<ul>
<li>Changing "Post" to "Skeet."</li>
<li>Refactoring the codebase, e.g., to replace MobX with Redux or something.</li>
<li>Adding entirely new features without prior discussion.</li>
</ul> </li>
</ul>
<p>Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for!</p>
<h2>Forking guidelines</h2>
<p>You have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork.</p>
<p>Please be sure to:</p>
<ul>
<li>Change all branding in the repository and UI to clearly differentiate from Bluesky.</li>
<li>Change any support links (feedback, email, terms of service, etc) to your own systems.</li>
<li>Replace any analytics or error-collection systems with your own so we don't get super confused.</li>
</ul>
<h2>Security disclosures</h2>
<p>If you discover any security issues, please send an email to <a href="mailto:security@bsky.app">security@bsky.app</a>. The email is automatically CCed to the entire team and we'll respond promptly.</p>
<h2>Are you a developer interested in building on atproto?</h2>
<p>Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party integration can be as seamless as first-party through custom feeds, federated services, clients, and more.</p>
<h2>License (MIT)</h2>
<p>See <a href="https://raw.githubusercontent.com/bluesky-social/social-app/main/LICENSE">./LICENSE</a> for the full license.</p>
<h2>P.S.</h2>
<p>We ❤️ you and all of the ways you support us. Thank you for making Bluesky a great place!</p>
+
+
+ getmaxun/maxun
+ 2024-12-01T01:58:57Z
+ tag:github.com,2024-12-01:/getmaxun/maxun
+
+ <p>🔥 Open-source no-code web data extraction platform. Turn websites to APIs and spreadsheets with no-code robots in minutes! [In Beta]</p><hr><h1 align="center">
<div>
<a href="https://maxun-website.vercel.app/"> <img src="https://raw.githubusercontent.com/getmaxun/maxun/master/src/assets/maxunlogo.png" width="50"> <br> Maxun </a>
</div> Open-Source No-Code Web Data Extraction Platform <br> </h1>
<p align="center"> Maxun lets you train a robot in 2 minutes and scrape the web on auto-pilot. Web data extraction doesn't get easier than this! </p>
<p align="center"> <a href="https://maxun-website.vercel.app/"><b>Website</b></a> | <a href="https://discord.gg/5GbPjBUkws"><b>Discord</b></a> | <a href="https://x.com/maxun_io"><b>Twitter</b></a> | <a href="https://docs.google.com/forms/d/e/1FAIpQLSdbD2uhqC4sbg4eLZ9qrFbyrfkXZ2XsI6dQ0USRCQNZNn5pzg/viewform"><b>Join Maxun Cloud</b></a> | <a href="https://www.youtube.com/@MaxunOSS"><b>Watch Tutorials</b></a> <br> <br> <a href="https://trendshift.io/repositories/12113" target="_blank"><img src="https://trendshift.io/api/badge/repositories/12113" alt="getmaxun%2Fmaxun | Trendshift" style="width: 250px; height: 55px; margin-top: 10px;" width="250" height="55"></a> </p>
<p><img src="https://github.com/user-attachments/assets/a61ba670-e56a-4ae1-9681-0b4bd6ba9cdc" alt="maxun_demo"></p>
<img src="https://static.scarf.sh/a.png?x-pxid=c12a77cc-855e-4602-8a0f-614b2d0da56a">
<blockquote>
<p>Note: We are in early stages of development and do not support self hosting yet. You can run Maxun locally.</p>
</blockquote>
<h1>Local Setup</h1>
<h3>Docker Compose</h3>
<pre><code>git clone https://github.com/getmaxun/maxun
docker-compose up -d --build
</code></pre>
<h3>Without Docker</h3>
<ol>
<li>Ensure you have Node.js, PostgreSQL, MinIO and Redis installed on your system.</li>
<li>Run the commands below</li>
</ol>
<pre><code>git clone https://github.com/getmaxun/maxun
# change directory to the project root
cd maxun
# install dependencies
npm install
# change directory to maxun-core to install dependencies
cd maxun-core
npm install
# get back to the root directory
cd ..
# make sure playwright is properly initialized
npx playwright install
npx playwright install-deps
# get back to the root directory
cd ..
# start frontend and backend together
npm run start
</code></pre>
<p>You can access the frontend at <a href="http://localhost:5173/">http://localhost:5173/</a> and backend at <a href="http://localhost:8080/">http://localhost:8080/</a></p>
<h1>Environment Variables</h1>
<ol>
<li>Create a file named <code>.env</code> in the root folder of the project</li>
<li>Example env file can be viewed <a href="https://github.com/getmaxun/maxun/raw/master/ENVEXAMPLE">here</a>.</li>
</ol>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Mandatory</th>
<th>Description</th>
<th>If Not Set</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>BACKEND_URL</code></td>
<td>Yes</td>
<td>URL to run backend on.</td>
<td>Default value: <a href="http://localhost:8080">http://localhost:8080</a></td>
</tr>
<tr>
<td><code>VITE_BACKEND_URL</code></td>
<td>Yes</td>
<td>URL used by frontend to connect to backend</td>
<td>Default value: <a href="http://localhost:8080">http://localhost:8080</a></td>
</tr>
<tr>
<td><code>JWT_SECRET</code></td>
<td>Yes</td>
<td>Secret key used to sign and verify JSON Web Tokens (JWTs) for authentication.</td>
<td>JWT authentication will not work.</td>
</tr>
<tr>
<td><code>DB_NAME</code></td>
<td>Yes</td>
<td>Name of the Postgres database to connect to.</td>
<td>Database connection will fail.</td>
</tr>
<tr>
<td><code>DB_USER</code></td>
<td>Yes</td>
<td>Username for Postgres database authentication.</td>
<td>Database connection will fail.</td>
</tr>
<tr>
<td><code>DB_PASSWORD</code></td>
<td>Yes</td>
<td>Password for Postgres database authentication.</td>
<td>Database connection will fail.</td>
</tr>
<tr>
<td><code>DB_HOST</code></td>
<td>Yes</td>
<td>Host address where the Postgres database server is running.</td>
<td>Database connection will fail.</td>
</tr>
<tr>
<td><code>DB_PORT</code></td>
<td>Yes</td>
<td>Port number used to connect to the Postgres database server.</td>
<td>Database connection will fail.</td>
</tr>
<tr>
<td><code>ENCRYPTION_KEY</code></td>
<td>Yes</td>
<td>Key used for encrypting sensitive data (proxies, passwords).</td>
<td>Encryption functionality will not work.</td>
</tr>
<tr>
<td><code>MINIO_ENDPOINT</code></td>
<td>Yes</td>
<td>Endpoint URL for MinIO, to store Robot Run Screenshots.</td>
<td>Connection to MinIO storage will fail.</td>
</tr>
<tr>
<td><code>MINIO_PORT</code></td>
<td>Yes</td>
<td>Port number for MinIO service.</td>
<td>Connection to MinIO storage will fail.</td>
</tr>
<tr>
<td><code>MINIO_ACCESS_KEY</code></td>
<td>Yes</td>
<td>Access key for authenticating with MinIO.</td>
<td>MinIO authentication will fail.</td>
</tr>
<tr>
<td><code>GOOGLE_CLIENT_ID</code></td>
<td>No</td>
<td>Client ID for Google OAuth, used for Google Sheet integration authentication.</td>
<td>Google login will not work.</td>
</tr>
<tr>
<td><code>GOOGLE_CLIENT_SECRET</code></td>
<td>No</td>
<td>Client Secret for Google OAuth.</td>
<td>Google login will not work.</td>
</tr>
<tr>
<td><code>GOOGLE_REDIRECT_URI</code></td>
<td>No</td>
<td>Redirect URI for handling Google OAuth responses.</td>
<td>Google login will not work.</td>
</tr>
<tr>
<td><code>REDIS_HOST</code></td>
<td>Yes</td>
<td>Host address of the Redis server, used by BullMQ for scheduling robots.</td>
<td>Redis connection will fail.</td>
</tr>
<tr>
<td><code>REDIS_PORT</code></td>
<td>Yes</td>
<td>Port number for the Redis server.</td>
<td>Redis connection will fail.</td>
</tr>
<tr>
<td><code>MAXUN_TELEMETRY</code></td>
<td>No</td>
<td>Disables telemetry to stop sending anonymous usage data. Keeping it enabled helps us understand how the product is used and assess the impact of any new changes. Please keep it enabled.</td>
<td>Telemetry data will not be collected.</td>
</tr>
</tbody>
</table>
<h1>How Does It Work?</h1>
<p>Maxun lets you create custom robots which emulate user actions and extract data. A robot can perform any of the actions: <b>Capture List, Capture Text or Capture Screenshot. Once a robot is created, it will keep extracting data for you without manual intervention</b></p>
<p><img src="https://github.com/user-attachments/assets/53573c98-769e-490d-829e-ada9fac0764f" alt="Screenshot 2024-10-23 222138"></p>
<h2>1. Robot Actions</h2>
<ol>
<li>Capture List: Useful to extract structured and bulk items from the website. Example: Scrape products from Amazon etc.</li>
<li>Capture Text: Useful to extract individual text content from the website.</li>
<li>Capture Screenshot: Get fullpage or visible section screenshots of the website.</li>
</ol>
<h2>2. BYOP</h2>
<p>BYOP (Bring Your Own Proxy) lets you connect external proxies to bypass anti-bot protection. Currently, the proxies are per user. Soon you'll be able to configure proxy per robot.</p>
<h1>Features</h1>
<ul>
<li>✨ Extract Data With No-Code</li>
<li>✨ Handle Pagination & Scrolling</li>
<li>✨ Run Robots On A Specific Schedule</li>
<li>✨ Turn Websites to APIs</li>
<li>✨ Turn Websites to Spreadsheets</li>
<li>✨ Adapt To Website Layout Changes (coming soon)</li>
<li>✨ Extract Behind Login, With Two-Factor Authentication Support (coming soon)</li>
<li>✨ Integrations (currently Google Sheet)</li>
<li>+++ A lot of amazing things soon!</li>
</ul>
<h1>Cloud</h1>
<p>We offer a managed cloud version to run Maxun without having to manage the infrastructure and extract data at scale. Maxun cloud also deals with anti-bot detection, huge proxy network with automatic proxy rotation, and CAPTCHA solving. If this interests you, <a href="https://docs.google.com/forms/d/e/1FAIpQLSdbD2uhqC4sbg4eLZ9qrFbyrfkXZ2XsI6dQ0USRCQNZNn5pzg/viewform">join the cloud waitlist</a> as we launch soon.</p>
<h1>Screenshots</h1>
<p><img src="https://github.com/user-attachments/assets/d7c75fa2-2bbc-47bb-a5f6-0ee6c162f391" alt="Maxun PH Launch (1)-1-1"> <img src="https://github.com/user-attachments/assets/d85a3ec7-8ce8-4daa-89aa-52d9617e227a" alt="Maxun PH Launch (1)-2-1"> <img src="https://github.com/user-attachments/assets/4bd5a0b4-485d-44f4-a487-edd9afc18b11" alt="Maxun PH Launch (1)-3-1"> <img src="https://github.com/user-attachments/assets/78140675-a6b6-49b2-981f-6a3d9a32b0b9" alt="Maxun PH Launch (1)-4-1"> <img src="https://github.com/user-attachments/assets/d9fe8519-c81c-4e45-92f2-b2939bf24192" alt="Maxun PH Launch (1)-5-1"> <img src="https://github.com/user-attachments/assets/c26e9ae3-c3da-4280-826a-c7cdf913fb93" alt="Maxun PH Launch (1)-6-1"> <img src="https://github.com/user-attachments/assets/fd7196f4-a6dc-4c4c-9c76-fdd93fac8247" alt="Maxun PH Launch (1)-7-1"> <img src="https://github.com/user-attachments/assets/16ee4a71-772a-49ae-a0e5-cb0529519bda" alt="Maxun PH Launch (1)-8-1"> <img src="https://github.com/user-attachments/assets/160f46fa-0357-4c1b-ba50-b4fe64453bb7" alt="Maxun PH Launch (1)-9-1"></p>
<h1>Note</h1>
<p>This project is in early stages of development. Your feedback is very important for us - we're actively working to improve the product. <a href="https://forms.gle/E8vRMVB7bUbsSktPA">Drop anonymous feedback here.</a></p>
<h1>License</h1>
<p> This project is licensed under <a href="https://raw.githubusercontent.com/getmaxun/maxun/master/LICENSE">AGPLv3</a>. </p>
<h1>Contributors</h1>
<p>Thank you to the combined efforts of everyone who contributes!</p>
<a href="https://github.com/getmaxun/maxun/graphs/contributors"> <img src="https://contrib.rocks/image?repo=getmaxun/maxun"> </a>
+
+
+ ai16z/eliza
+ 2024-12-01T01:58:57Z
+ tag:github.com,2024-12-01:/ai16z/eliza
+
+ <p>Conversational Agent for Twitter and Discord</p><hr><h1>Eliza 🤖</h1>
<div align="center">
<img src="https://raw.githubusercontent.com/ai16z/eliza/main/docs/static/img/eliza_banner.jpg" alt="Eliza Banner" width="100%">
</div>
<div align="center">
<p>📖 <a href="https://ai16z.github.io/eliza/">Documentation</a> | 🎯 <a href="https://github.com/thejoven/awesome-eliza">Examples</a></p>
</div>
<h2>🌍 README Translations</h2>
<p><a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_CN.md">中文说明</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_JA.md">日本語の説明</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_KOR.md">한국어 설명</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_FR.md">Français</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_PTBR.md">Português</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_TR.md">Türkçe</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_RU.md">Русский</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_ES.md">Español</a> | <a href="https://raw.githubusercontent.com/ai16z/eliza/main/README_IT.md">Italiano</a></p>
<h2>✨ Features</h2>
<ul>
<li>🛠️ Full-featured Discord, Twitter and Telegram connectors</li>
<li>🔗 Support for every model (Llama, Grok, OpenAI, Anthropic, etc.)</li>
<li>👥 Multi-agent and room support</li>
<li>📚 Easily ingest and interact with your documents</li>
<li>💾 Retrievable memory and document store</li>
<li>🚀 Highly extensible - create your own actions and clients</li>
<li>☁️ Supports many models (local Llama, OpenAI, Anthropic, Groq, etc.)</li>
<li>📦 Just works!</li>
</ul>
<h2>🎯 Use Cases</h2>
<ul>
<li>🤖 Chatbots</li>
<li>🕵️ Autonomous Agents</li>
<li>📈 Business Process Handling</li>
<li>🎮 Video Game NPCs</li>
<li>🧠 Trading</li>
</ul>
<h2>🚀 Quick Start</h2>
<h3>Prerequisites</h3>
<ul>
<li><a href="https://www.python.org/downloads/">Python 2.7+</a></li>
<li><a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm">Node.js 23+</a></li>
<li><a href="https://pnpm.io/installation">pnpm</a></li>
</ul>
<blockquote>
<p><strong>Note for Windows Users:</strong> <a href="https://learn.microsoft.com/en-us/windows/wsl/install-manual">WSL 2</a> is required.</p>
</blockquote>
<h3>Use the Starter (Recommended)</h3>
<pre><code class="language-bash">git clone https://github.com/ai16z/eliza-starter.git
cp .env.example .env
pnpm i && pnpm start
</code></pre>
<p>Then read the <a href="https://ai16z.github.io/eliza/">Documentation</a> to learn how to customize your Eliza.</p>
<h3>Manually Start Eliza (Only recommended if you know what you are doing)</h3>
<pre><code class="language-bash"># Clone the repository
git clone https://github.com/ai16z/eliza.git
# Checkout the latest release
# This project iterates fast, so we recommend checking out the latest release
git checkout $(git describe --tags --abbrev=0)
</code></pre>
<h3>Edit the .env file</h3>
<p>Copy .env.example to .env and fill in the appropriate values.</p>
<pre><code>cp .env.example .env
</code></pre>
<p>Note: .env is optional. If your planning to run multiple distinct agents, you can pass secrets through the character JSON</p>
<h3>Automatically Start Eliza</h3>
<p>This will run everything to setup the project and start the bot with the default character.</p>
<pre><code class="language-bash">sh scripts/start.sh
</code></pre>
<h3>Edit the character file</h3>
<ol>
<li> <p>Open <code>agent/src/character.ts</code> to modify the default character. Uncomment and edit.</p> </li>
<li> <p>To load custom characters:</p>
<ul>
<li>Use <code>pnpm start --characters="path/to/your/character.json"</code></li>
<li>Multiple character files can be loaded simultaneously</li>
</ul> </li>
<li> <p>Connect with X (Twitter)</p>
<ul>
<li>change <code>"clients": []</code> to <code>"clients": ["twitter"]</code> in the character file to connect with X</li>
</ul> </li>
</ol>
<h3>Manually Start Eliza</h3>
<pre><code class="language-bash">pnpm i
pnpm build
pnpm start
# The project iterates fast, sometimes you need to clean the project if you are coming back to the project
pnpm clean
</code></pre>
<h4>Additional Requirements</h4>
<p>You may need to install Sharp. If you see an error when starting up, try installing it with the following command:</p>
<pre><code>pnpm install --include=optional sharp
</code></pre>
<h3>Community & contact</h3>
<ul>
<li><a href="https://github.com/ai16z/eliza/issues">GitHub Issues</a>. Best for: bugs you encounter using Eliza, and feature proposals.</li>
<li><a href="https://discord.gg/ai16z">Discord</a>. Best for: sharing your applications and hanging out with the community.</li>
</ul>
<h2>Contributors</h2>
<a href="https://github.com/ai16z/eliza/graphs/contributors"> <img src="https://contrib.rocks/image?repo=ai16z/eliza"> </a>
<h2>Star History</h2>
<p><a href="https://star-history.com/#ai16z/eliza&Date"><img src="https://api.star-history.com/svg?repos=ai16z/eliza&type=Date" alt="Star History Chart"></a></p>
+
+
\ No newline at end of file
diff --git a/typescript/weekly/index.xml b/typescript/weekly/index.xml
new file mode 100644
index 00000000000..a879f939067
--- /dev/null
+++ b/typescript/weekly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub TypeScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:38Z
+ Weekly Trending of TypeScript in GitHub
+
+
+ codestoryai/aide
+ 2024-12-01T01:50:38Z
+ tag:github.com,2024-12-01:/codestoryai/aide
+
+ <p>The open-source AI-native IDE</p><hr><div id="vscodium-logo" align="center">
<img src="https://raw.githubusercontent.com/codestoryai/aide/cs-main/media/logo.svg?sanitize=true" alt="VSCodium Logo" width="200">
<h1>Aide</h1>
</div>
<p><strong>Aide is the Open Source AI-native code editor. It is a fork of VS Code, and integrates tightly with <a href="https://github.com/codestoryai/sidecar">the leading agentic framework</a> on swebench-lite.</strong></p>
<p><img src="https://img.shields.io/github/v/release/codestoryai/binaries?label=version" alt="Latest release"> <img src="https://discord.com/api/guilds/1138070673756004464/widget.png?style=shield" alt="Discord Shield"></p>
<p align="center"> <img src="https://raw.githubusercontent.com/codestoryai/aide/cs-main/media/hero_video.gif" alt="Aide in action"> </p>
<p>Aide combines the powerful features of VS Code with advanced AI capabilities to provide:</p>
<ul>
<li><strong>A combined chat + edit flow</strong> - Brainstorm a problem in chat by referencing files and jump into edits (which can happen across multiple files).</li>
<li><strong>Proactive agents</strong> - AI iterates on linter errors (provided by the Language Server) and pulls in relevant context using go-to-definitions, go-to-references, etc to propose fixes or ask for more context from you.</li>
<li><strong>Inline editing widget</strong> - Similar to the macos spotlight widget, press Ctrl/Cmd+K at any point to give instructions to AI.</li>
<li><strong>Intelligent Code Completion</strong> - Context-aware code suggestions powered by state-of-the-art AI models.</li>
<li><strong>AST navigation</strong> - Quickly navigate files in blocks rather than line-by-line.</li>
</ul>
<p>Aide is designed to be your intelligent coding companion, helping you write better code faster while maintaining full control over your development process.</p>
<h2>Contributing</h2>
<p>There are many ways in which you can participate in this project, for example:</p>
<ul>
<li><a href="https://github.com/codestoryai/aide/issues">Submit bugs and feature requests</a>, and help us verify as they are checked in</li>
<li>Review <a href="https://github.com/codestoryai/aide/pulls">source code changes</a></li>
</ul>
<p>If you are interested in fixing issues and contributing directly to the code base, please see the document <strong><a href="https://github.com/codestoryai/aide/raw/cs-main/HOW_TO_CONTRIBUTE.md">How to Contribute</a></strong>, which covers the following:</p>
<ul>
<li><strong><a href="https://github.com/codestoryai/aide/raw/cs-main/HOW_TO_CONTRIBUTE.md">How to build and run from source</a></strong></li>
<li><a href="https://github.com/codestoryai/aide/raw/cs-main/HOW_TO_CONTRIBUTE.md#debugging">The development workflow, including debugging and running tests</a></li>
<li><a href="https://github.com/codestoryai/aide/wiki/Coding-Guidelines">Coding guidelines</a></li>
<li><a href="https://github.com/codestoryai/aide/raw/cs-main/HOW_TO_CONTRIBUTE.md#pull-requests">Submitting pull requests</a></li>
<li><a href="https://github.com/codestoryai/aide/raw/cs-main/HOW_TO_CONTRIBUTE.md#where-to-contribute">Finding an issue to work on</a></li>
</ul>
<h2>Feedback</h2>
<ul>
<li><a href="https://github.com/codestoryai/aide/issues">File an issue</a></li>
<li><a href="https://raw.githubusercontent.com/codestoryai/aide/cs-main/CONTRIBUTING.md">Request a new feature</a></li>
<li>Upvote <a href="https://github.com/codestoryai/aide/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc">popular feature requests</a></li>
<li>Join our community: <a href="https://discord.gg/mtgrhXM5Xf">Discord</a></li>
</ul>
<h2>Code of Conduct</h2>
<p>This project has adopted the <a href="https://raw.githubusercontent.com/codestoryai/aide/cs-main/CODE_OF_CONDUCT.md">Contributor Covenant Code of Conduct</a>. Please read the Code of Conduct before contributing to this project.</p>
<h2>Acknowledgements</h2>
<p>We would like to acknowledge <a href="https://github.com/sourcegraph/cody">Cody</a> for Open Sourcing and creating the inline completion bit. This is one of those parts of the codebase where we borrowed heavily from Cody's work and we are grateful for that. We added our own necessities on top of this to make it work with the <code>sidecar</code>. This part of the codebase is no longer maintained, we have since moved forward our focus to working on agentic workflows and if you want to revamp this part, please let us know! We believe inline completion UX is ripe for innovation and there are many directions we can take this.</p>
<h2>License</h2>
<p>Copyright (c) 2024 CodeStory AI. All rights reserved. Licensed under the <a href="https://raw.githubusercontent.com/codestoryai/aide/cs-main/LICENSE.md">GNU Affero General Public License v3.0</a>.</p>
+
+
+ remix-run/react-router
+ 2024-12-01T01:50:38Z
+ tag:github.com,2024-12-01:/remix-run/react-router
+
+ <p>Declarative routing for React</p><hr><p><a href="https://www.npmjs.org/package/react-router-dom"><img src="https://img.shields.io/npm/v/react-router-dom.svg?style=flat-square" alt="npm package"></a> <a href="https://github.com/remix-run/react-router/actions/workflows/test.yml"><img src="https://img.shields.io/github/actions/workflow/status/remix-run/react-router/test.yml?branch=dev&style=square" alt="build"></a></p>
<p>React Router is a multi-strategy router for React bridging the gap from React 18 to React 19. You can use it maximally as a React framework or minimally as a library with your own architecture.</p>
<ul>
<li><a href="https://reactrouter.com/start/framework/installation">Getting Started - Framework</a></li>
<li><a href="https://reactrouter.com/start/library/installation">Getting Started - Library</a></li>
<li><a href="https://reactrouter.com/upgrading/v6">Upgrade from v6</a></li>
<li><a href="https://reactrouter.com/upgrading/remix">Upgrade from Remix</a></li>
<li><a href="https://github.com/remix-run/react-router/raw/main/CHANGELOG.md">Changelog</a></li>
</ul>
<h2>Packages</h2>
<ul>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router"><code>react-router</code></a></li>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router-dev"><code>@react-router/dev</code></a></li>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router-node"><code>@react-router/node</code></a></li>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router-cloudflare"><code>@react-router/cloudflare</code></a></li>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router-serve"><code>@react-router/serve</code></a></li>
<li><a href="https://raw.githubusercontent.com/remix-run/react-router/main/packages/react-router-fs-routes"><code>@react-router/fs-routes</code></a></li>
</ul>
<h2>Previous Versions</h2>
<ul>
<li><a href="https://reactrouter.com/v6">v6</a></li>
<li><a href="https://v5.reactrouter.com/">v5</a></li>
</ul>
+
+
+ rckprtr/pumpdotfun-sdk
+ 2024-12-01T01:50:38Z
+ tag:github.com,2024-12-01:/rckprtr/pumpdotfun-sdk
+
+ <p>PumpDotFun SDK</p><hr><h1>PumpFunSDK README</h1>
<h2>Important</h2>
<p>Never click links in this repository leaving github, never click links in Issues, don't run code that others post without reading it, this software is provided "as is," without warranty.</p>
<h2>Overview</h2>
<p>The <code>PumpDotFunSDK</code> is designed to interact with the Pump.fun decentralized application. It provides methods for creating, buying, and selling tokens using the Solana blockchain. The SDK handles the necessary transactions and interactions with the Pump.fun program.</p>
<h2>Installation</h2>
<p><code>npm i pumpdotfun-sdk</code></p>
<h2>Usage Example</h2>
<p>First you need to create a <code>.env</code> file and set your RPC URL like in the <code>.env.example</code></p>
<p>Then you need to fund an account with atleast 0.004 SOL that is generated when running the command below</p>
<p><code>npx ts-node example/basic/index.ts</code></p>
<pre><code class="language-typescript">import dotenv from "dotenv";
import { Connection, Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
import { DEFAULT_DECIMALS, PumpFunSDK } from "pumpdotfun-sdk";
import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
import { AnchorProvider } from "@coral-xyz/anchor";
import {
getOrCreateKeypair,
getSPLBalance,
printSOLBalance,
printSPLBalance,
} from "./util";
dotenv.config();
const KEYS_FOLDER = __dirname + "/.keys";
const SLIPPAGE_BASIS_POINTS = 100n;
const getProvider = () => {
if (!process.env.HELIUS_RPC_URL) {
throw new Error("Please set HELIUS_RPC_URL in .env file");
}
const connection = new Connection(process.env.HELIUS_RPC_URL || "");
const wallet = new NodeWallet(new Keypair());
return new AnchorProvider(connection, wallet, { commitment: "finalized" });
};
const createAndBuyToken = async (sdk, testAccount, mint) => {
const tokenMetadata = {
name: "TST-7",
symbol: "TST-7",
description: "TST-7: This is a test token",
filePath: "example/basic/random.png",
};
const createResults = await sdk.createAndBuy(
testAccount,
mint,
tokenMetadata,
BigInt(0.0001 * LAMPORTS_PER_SOL),
SLIPPAGE_BASIS_POINTS,
{
unitLimit: 250000,
unitPrice: 250000,
}
);
if (createResults.success) {
console.log("Success:", `https://pump.fun/${mint.publicKey.toBase58()}`);
printSPLBalance(sdk.connection, mint.publicKey, testAccount.publicKey);
} else {
console.log("Create and Buy failed");
}
};
const buyTokens = async (sdk, testAccount, mint) => {
const buyResults = await sdk.buy(
testAccount,
mint.publicKey,
BigInt(0.0001 * LAMPORTS_PER_SOL),
SLIPPAGE_BASIS_POINTS,
{
unitLimit: 250000,
unitPrice: 250000,
}
);
if (buyResults.success) {
printSPLBalance(sdk.connection, mint.publicKey, testAccount.publicKey);
console.log("Bonding curve after buy", await sdk.getBondingCurveAccount(mint.publicKey));
} else {
console.log("Buy failed");
}
};
const sellTokens = async (sdk, testAccount, mint) => {
const currentSPLBalance = await getSPLBalance(
sdk.connection,
mint.publicKey,
testAccount.publicKey
);
console.log("currentSPLBalance", currentSPLBalance);
if (currentSPLBalance) {
const sellResults = await sdk.sell(
testAccount,
mint.publicKey,
BigInt(currentSPLBalance * Math.pow(10, DEFAULT_DECIMALS)),
SLIPPAGE_BASIS_POINTS,
{
unitLimit: 250000,
unitPrice: 250000,
}
);
if (sellResults.success) {
await printSOLBalance(sdk.connection, testAccount.publicKey, "Test Account keypair");
printSPLBalance(sdk.connection, mint.publicKey, testAccount.publicKey, "After SPL sell all");
console.log("Bonding curve after sell", await sdk.getBondingCurveAccount(mint.publicKey));
} else {
console.log("Sell failed");
}
}
};
const main = async () => {
try {
const provider = getProvider();
const sdk = new PumpFunSDK(provider);
const connection = provider.connection;
const testAccount = getOrCreateKeypair(KEYS_FOLDER, "test-account");
const mint = getOrCreateKeypair(KEYS_FOLDER, "mint");
await printSOLBalance(connection, testAccount.publicKey, "Test Account keypair");
const globalAccount = await sdk.getGlobalAccount();
console.log(globalAccount);
const currentSolBalance = await connection.getBalance(testAccount.publicKey);
if (currentSolBalance === 0) {
console.log("Please send some SOL to the test-account:", testAccount.publicKey.toBase58());
return;
}
console.log(await sdk.getGlobalAccount());
let bondingCurveAccount = await sdk.getBondingCurveAccount(mint.publicKey);
if (!bondingCurveAccount) {
await createAndBuyToken(sdk, testAccount, mint);
bondingCurveAccount = await sdk.getBondingCurveAccount(mint.publicKey);
}
if (bondingCurveAccount) {
await buyTokens(sdk, testAccount, mint);
await sellTokens(sdk, testAccount, mint);
}
} catch (error) {
console.error("An error occurred:", error);
}
};
main();
</code></pre>
<h3>PumpDotFunSDK Class</h3>
<p>The <code>PumpDotFunSDK</code> class provides methods to interact with the PumpFun protocol. Below are the method signatures and their descriptions.</p>
<h4>createAndBuy</h4>
<pre><code class="language-typescript">async createAndBuy(
creator: Keypair,
mint: Keypair,
createTokenMetadata: CreateTokenMetadata,
buyAmountSol: bigint,
slippageBasisPoints: bigint = 500n,
priorityFees?: PriorityFee,
commitment: Commitment = DEFAULT_COMMITMENT,
finality: Finality = DEFAULT_FINALITY
): Promise<TransactionResult>
</code></pre>
<ul>
<li>Creates a new token and buys it.</li>
<li><strong>Parameters</strong>:
<ul>
<li><code>creator</code>: The keypair of the token creator.</li>
<li><code>mint</code>: The keypair of the mint account.</li>
<li><code>createTokenMetadata</code>: Metadata for the token.</li>
<li><code>buyAmountSol</code>: Amount of SOL to buy.</li>
<li><code>slippageBasisPoints</code>: Slippage in basis points (default: 500).</li>
<li><code>priorityFees</code>: Priority fees (optional).</li>
<li><code>commitment</code>: Commitment level (default: DEFAULT_COMMITMENT).</li>
<li><code>finality</code>: Finality level (default: DEFAULT_FINALITY).</li>
</ul> </li>
<li><strong>Returns</strong>: A promise that resolves to a <code>TransactionResult</code>.</li>
</ul>
<h4>buy</h4>
<pre><code class="language-typescript">async buy(
buyer: Keypair,
mint: PublicKey,
buyAmountSol: bigint,
slippageBasisPoints: bigint = 500n,
priorityFees?: PriorityFee,
commitment: Commitment = DEFAULT_COMMITMENT,
finality: Finality = DEFAULT_FINALITY
): Promise<TransactionResult>
</code></pre>
<ul>
<li>Buys a specified amount of tokens.</li>
<li><strong>Parameters</strong>:
<ul>
<li><code>buyer</code>: The keypair of the buyer.</li>
<li><code>mint</code>: The public key of the mint account.</li>
<li><code>buyAmountSol</code>: Amount of SOL to buy.</li>
<li><code>slippageBasisPoints</code>: Slippage in basis points (default: 500).</li>
<li><code>priorityFees</code>: Priority fees (optional).</li>
<li><code>commitment</code>: Commitment level (default: DEFAULT_COMMITMENT).</li>
<li><code>finality</code>: Finality level (default: DEFAULT_FINALITY).</li>
</ul> </li>
<li><strong>Returns</strong>: A promise that resolves to a <code>TransactionResult</code>.</li>
</ul>
<h4>sell</h4>
<pre><code class="language-typescript">async sell(
seller: Keypair,
mint: PublicKey,
sellTokenAmount: bigint,
slippageBasisPoints: bigint = 500n,
priorityFees?: PriorityFee,
commitment: Commitment = DEFAULT_COMMITMENT,
finality: Finality = DEFAULT_FINALITY
): Promise<TransactionResult>
</code></pre>
<ul>
<li>Sells a specified amount of tokens.</li>
<li><strong>Parameters</strong>:
<ul>
<li><code>seller</code>: The keypair of the seller.</li>
<li><code>mint</code>: The public key of the mint account.</li>
<li><code>sellTokenAmount</code>: Amount of tokens to sell.</li>
<li><code>slippageBasisPoints</code>: Slippage in basis points (default: 500).</li>
<li><code>priorityFees</code>: Priority fees (optional).</li>
<li><code>commitment</code>: Commitment level (default: DEFAULT_COMMITMENT).</li>
<li><code>finality</code>: Finality level (default: DEFAULT_FINALITY).</li>
</ul> </li>
<li><strong>Returns</strong>: A promise that resolves to a <code>TransactionResult</code>.</li>
</ul>
<h4>addEventListener</h4>
<pre><code class="language-typescript">addEventListener<T extends PumpFunEventType>(
eventType: T,
callback: (event: PumpFunEventHandlers[T], slot: number, signature: string) => void
): number
</code></pre>
<ul>
<li>Adds an event listener for the specified event type.</li>
<li><strong>Parameters</strong>:
<ul>
<li><code>eventType</code>: The type of event to listen for.</li>
<li><code>callback</code>: The callback function to execute when the event occurs.</li>
</ul> </li>
<li><strong>Returns</strong>: An identifier for the event listener.</li>
</ul>
<h4>removeEventListener</h4>
<pre><code class="language-typescript">removeEventListener(eventId: number): void
</code></pre>
<ul>
<li>Removes the event listener with the specified identifier.</li>
<li><strong>Parameters</strong>:
<ul>
<li><code>eventId</code>: The identifier of the event listener to remove.</li>
</ul> </li>
</ul>
<h3>Running the Examples</h3>
<h4>Basic Example</h4>
<p>To run the basic example for creating, buying, and selling tokens, use the following command:</p>
<pre><code class="language-bash">npx ts-node example/basic/index.ts
</code></pre>
<h4>Event Subscription Example</h4>
<p>This example demonstrates how to set up event subscriptions using the PumpFun SDK.</p>
<h4>Script: <code>example/events/events.ts</code></h4>
<pre><code class="language-typescript">import dotenv from "dotenv";
import { Connection, Keypair } from "@solana/web3.js";
import { PumpFunSDK } from "pumpdotfun-sdk";
import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
import { AnchorProvider } from "@coral-xyz/anchor";
dotenv.config();
const getProvider = () => {
if (!process.env.HELIUS_RPC_URL) {
throw new Error("Please set HELIUS_RPC_URL in .env file");
}
const connection = new Connection(process.env.HELIUS_RPC_URL || "");
const wallet = new NodeWallet(new Keypair());
return new AnchorProvider(connection, wallet, { commitment: "finalized" });
};
const setupEventListeners = async (sdk) => {
const createEventId = sdk.addEventListener("createEvent", (event, slot, signature) => {
console.log("createEvent", event, slot, signature);
});
console.log("Subscribed to createEvent with ID:", createEventId);
const tradeEventId = sdk.addEventListener("tradeEvent", (event, slot, signature) => {
console.log("tradeEvent", event, slot, signature);
});
console.log("Subscribed to tradeEvent with ID:", tradeEventId);
const completeEventId = sdk.addEventListener("completeEvent", (event, slot, signature) => {
console.log("completeEvent", event, slot, signature);
});
console.log("Subscribed to completeEvent with ID:", completeEventId);
};
const main = async () => {
try {
const provider = getProvider();
const sdk = new PumpFunSDK(provider);
// Set up event listeners
await setupEventListeners(sdk);
} catch (error) {
console.error("An error occurred:", error);
}
};
main();
</code></pre>
<h4>Running the Event Subscription Example</h4>
<p>To run the event subscription example, use the following command:</p>
<pre><code class="language-bash">npx ts-node example/events/events.ts
</code></pre>
<h2>Contributing</h2>
<p>We welcome contributions! Please submit a pull request or open an issue to discuss any changes.</p>
<h2>License</h2>
<p>This project is licensed under the MIT License - see the <a href="https://raw.githubusercontent.com/rckprtr/pumpdotfun-sdk/main/LICENSE">LICENSE</a> file for details.</p>
<p>Here is a sample "Use at Your Own Risk" disclaimer for a GitHub repository:</p>
<hr>
<h2>Disclaimer</h2>
<p>This software is provided "as is," without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.</p>
<p><strong>Use at your own risk.</strong> The authors take no responsibility for any harm or damage caused by the use of this software. Users are responsible for ensuring the suitability and safety of this software for their specific use cases.</p>
<p>By using this software, you acknowledge that you have read, understood, and agree to this disclaimer.</p>
<hr>
<p>Feel free to customize it further to suit the specific context and requirements of your project.</p>
<hr>
<p>By following this README, you should be able to install the PumpDotFun SDK, run the provided examples, and understand how to set up event listeners and perform token operations.</p>
+
+
\ No newline at end of file
diff --git a/unified-parallel-c/daily/index.xml b/unified-parallel-c/daily/index.xml
index 9ea155f5c03..36fa631742b 100644
--- a/unified-parallel-c/daily/index.xml
+++ b/unified-parallel-c/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Unified Parallel C Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:29Z
+ 2024-12-01T01:39:42Z
Daily Trending of Unified Parallel C in GitHub
\ No newline at end of file
diff --git a/unified-parallel-c/monthly/index.xml b/unified-parallel-c/monthly/index.xml
new file mode 100644
index 00000000000..7da480288bc
--- /dev/null
+++ b/unified-parallel-c/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unified Parallel C Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:55Z
+ Monthly Trending of Unified Parallel C in GitHub
+
+
\ No newline at end of file
diff --git a/unified-parallel-c/weekly/index.xml b/unified-parallel-c/weekly/index.xml
new file mode 100644
index 00000000000..874659a16ba
--- /dev/null
+++ b/unified-parallel-c/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unified Parallel C Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:36Z
+ Weekly Trending of Unified Parallel C in GitHub
+
+
\ No newline at end of file
diff --git a/unity3d-asset/daily/index.xml b/unity3d-asset/daily/index.xml
index 20cdf8f600b..bfd47d370be 100644
--- a/unity3d-asset/daily/index.xml
+++ b/unity3d-asset/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Unity3D Asset Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:37Z
+ 2024-12-01T01:39:48Z
Daily Trending of Unity3D Asset in GitHub
\ No newline at end of file
diff --git a/unity3d-asset/monthly/index.xml b/unity3d-asset/monthly/index.xml
new file mode 100644
index 00000000000..6667f39bbc7
--- /dev/null
+++ b/unity3d-asset/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unity3D Asset Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:00Z
+ Monthly Trending of Unity3D Asset in GitHub
+
+
\ No newline at end of file
diff --git a/unity3d-asset/weekly/index.xml b/unity3d-asset/weekly/index.xml
new file mode 100644
index 00000000000..9ddbfb2764b
--- /dev/null
+++ b/unity3d-asset/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unity3D Asset Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:42Z
+ Weekly Trending of Unity3D Asset in GitHub
+
+
\ No newline at end of file
diff --git a/unix-assembly/daily/index.xml b/unix-assembly/daily/index.xml
index acacf5939e5..a419d50e094 100644
--- a/unix-assembly/daily/index.xml
+++ b/unix-assembly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Unix Assembly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:37Z
+ 2024-12-01T01:39:48Z
Daily Trending of Unix Assembly in GitHub
\ No newline at end of file
diff --git a/unix-assembly/monthly/index.xml b/unix-assembly/monthly/index.xml
new file mode 100644
index 00000000000..b85188341a2
--- /dev/null
+++ b/unix-assembly/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unix Assembly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:00Z
+ Monthly Trending of Unix Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/unix-assembly/weekly/index.xml b/unix-assembly/weekly/index.xml
new file mode 100644
index 00000000000..280ff555731
--- /dev/null
+++ b/unix-assembly/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Unix Assembly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:42Z
+ Weekly Trending of Unix Assembly in GitHub
+
+
\ No newline at end of file
diff --git a/unknown/daily/index.xml b/unknown/daily/index.xml
index 886925af0f7..a38ac485d5e 100644
--- a/unknown/daily/index.xml
+++ b/unknown/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Unknown languages Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:28:45Z
+ 2024-12-01T01:29:31Z
Daily Trending of Unknown languages in GitHub
\ No newline at end of file
diff --git a/unknown/monthly/index.xml b/unknown/monthly/index.xml
new file mode 100644
index 00000000000..86d66965862
--- /dev/null
+++ b/unknown/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Unknown languages Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:16Z
+ Monthly Trending of Unknown languages in GitHub
+
+
+ skills/introduction-to-github
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/skills/introduction-to-github
+
+ <p>Get started using GitHub in less than an hour.</p><hr>
+
+
+ ngosang/trackerslist
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/ngosang/trackerslist
+
+ <p>Updated list of public BitTorrent trackers</p><hr>
+
+
+ ml-tooling/best-of-ml-python
+ 2024-12-01T01:51:16Z
+ tag:github.com,2024-12-01:/ml-tooling/best-of-ml-python
+
+ <p>🏆 A ranked list of awesome machine learning Python libraries. Updated weekly.</p><hr>
+
+
\ No newline at end of file
diff --git a/unknown/weekly/index.xml b/unknown/weekly/index.xml
new file mode 100644
index 00000000000..64d70116bcf
--- /dev/null
+++ b/unknown/weekly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Unknown languages Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:40:21Z
+ Weekly Trending of Unknown languages in GitHub
+
+
+ twf-nikhila/Awesome-Black-Friday-Cyber-Monday-deals
+ 2024-12-01T01:40:21Z
+ tag:github.com,2024-12-01:/twf-nikhila/Awesome-Black-Friday-Cyber-Monday-deals
+
+ <p>🟢 2024 Deals Live - Black Friday & Cyber Monday, Christmas & Holidays Deals for Developers, Techies, & Entrepreneurs,</p><hr>
+
+
+ cmliu/WorkerVless2sub
+ 2024-12-01T01:40:21Z
+ tag:github.com,2024-12-01:/cmliu/WorkerVless2sub
+
+ <p>这个是一个将 Cloudflare Workers - VLESS 搭配 自建优选域名 的 订阅生成器</p><hr>
+
+
\ No newline at end of file
diff --git a/uno/daily/index.xml b/uno/daily/index.xml
index 45c203ac8fb..2ecc4a52805 100644
--- a/uno/daily/index.xml
+++ b/uno/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Uno Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:37Z
+ 2024-12-01T01:39:48Z
Daily Trending of Uno in GitHub
\ No newline at end of file
diff --git a/uno/monthly/index.xml b/uno/monthly/index.xml
new file mode 100644
index 00000000000..2826973d12d
--- /dev/null
+++ b/uno/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Uno Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:58:59Z
+ Monthly Trending of Uno in GitHub
+
+
\ No newline at end of file
diff --git a/uno/weekly/index.xml b/uno/weekly/index.xml
new file mode 100644
index 00000000000..03c4404e7d7
--- /dev/null
+++ b/uno/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Uno Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:42Z
+ Weekly Trending of Uno in GitHub
+
+
\ No newline at end of file
diff --git a/unrealscript/daily/index.xml b/unrealscript/daily/index.xml
index 7b104ff2429..76666a77e82 100644
--- a/unrealscript/daily/index.xml
+++ b/unrealscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub UnrealScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:36Z
+ 2024-12-01T01:39:47Z
Daily Trending of UnrealScript in GitHub
\ No newline at end of file
diff --git a/unrealscript/monthly/index.xml b/unrealscript/monthly/index.xml
new file mode 100644
index 00000000000..bcbb71a3577
--- /dev/null
+++ b/unrealscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub UnrealScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:00Z
+ Monthly Trending of UnrealScript in GitHub
+
+
\ No newline at end of file
diff --git a/unrealscript/weekly/index.xml b/unrealscript/weekly/index.xml
new file mode 100644
index 00000000000..56b98c74b9e
--- /dev/null
+++ b/unrealscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub UnrealScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:41Z
+ Weekly Trending of UnrealScript in GitHub
+
+
\ No newline at end of file
diff --git a/urweb/daily/index.xml b/urweb/daily/index.xml
index ca8f1cacbd3..1be03e7e880 100644
--- a/urweb/daily/index.xml
+++ b/urweb/daily/index.xml
@@ -1,7 +1,7 @@
GitHub UrWeb Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:38Z
+ 2024-12-01T01:39:49Z
Daily Trending of UrWeb in GitHub
\ No newline at end of file
diff --git a/urweb/monthly/index.xml b/urweb/monthly/index.xml
new file mode 100644
index 00000000000..97eb4ecb922
--- /dev/null
+++ b/urweb/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub UrWeb Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:01Z
+ Monthly Trending of UrWeb in GitHub
+
+
\ No newline at end of file
diff --git a/urweb/weekly/index.xml b/urweb/weekly/index.xml
new file mode 100644
index 00000000000..3ddd9a13689
--- /dev/null
+++ b/urweb/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub UrWeb Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:43Z
+ Weekly Trending of UrWeb in GitHub
+
+
\ No newline at end of file
diff --git a/v/daily/index.xml b/v/daily/index.xml
index fc8e5b9502f..39f2483aedc 100644
--- a/v/daily/index.xml
+++ b/v/daily/index.xml
@@ -1,7 +1,7 @@
GitHub V Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:39Z
+ 2024-12-01T01:39:50Z
Daily Trending of V in GitHub
\ No newline at end of file
diff --git a/v/monthly/index.xml b/v/monthly/index.xml
new file mode 100644
index 00000000000..8c2effaa51e
--- /dev/null
+++ b/v/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub V Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:02Z
+ Monthly Trending of V in GitHub
+
+
+ vlang/v-analyzer
+ 2024-12-01T01:59:02Z
+ tag:github.com,2024-12-01:/vlang/v-analyzer
+
+ <p>The @vlang language server, for all your editing needs like go-to-definition, code completion, type hints, and more.</p><hr>
+
+
\ No newline at end of file
diff --git a/v/weekly/index.xml b/v/weekly/index.xml
new file mode 100644
index 00000000000..9c5b01e81ea
--- /dev/null
+++ b/v/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub V Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:44Z
+ Weekly Trending of V in GitHub
+
+
\ No newline at end of file
diff --git a/vala/daily/index.xml b/vala/daily/index.xml
index f4138554f5e..5e00d3711a1 100644
--- a/vala/daily/index.xml
+++ b/vala/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Vala Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:38Z
+ 2024-12-01T01:39:50Z
Daily Trending of Vala in GitHub
\ No newline at end of file
diff --git a/vala/monthly/index.xml b/vala/monthly/index.xml
new file mode 100644
index 00000000000..9f6601642f9
--- /dev/null
+++ b/vala/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Vala Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:02Z
+ Monthly Trending of Vala in GitHub
+
+
+ Aylur/astal
+ 2024-12-01T01:59:02Z
+ tag:github.com,2024-12-01:/Aylur/astal
+
+ <p>Building blocks for creating custom desktop shells</p><hr>
+
+
+ calo001/fondo
+ 2024-12-01T01:59:02Z
+ tag:github.com,2024-12-01:/calo001/fondo
+
+ <p>📷 Wallpaper App for Linux</p><hr>
+
+
\ No newline at end of file
diff --git a/vala/weekly/index.xml b/vala/weekly/index.xml
new file mode 100644
index 00000000000..20bb5d743ae
--- /dev/null
+++ b/vala/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Vala Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:44Z
+ Weekly Trending of Vala in GitHub
+
+
+ Aylur/astal
+ 2024-12-01T01:50:44Z
+ tag:github.com,2024-12-01:/Aylur/astal
+
+ <p>Building blocks for creating custom desktop shells</p><hr>
+
+
\ No newline at end of file
diff --git a/valve-data-format/daily/index.xml b/valve-data-format/daily/index.xml
index e86fdc634c8..e7b399c72c2 100644
--- a/valve-data-format/daily/index.xml
+++ b/valve-data-format/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Valve Data Format Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:39Z
+ 2024-12-01T01:39:49Z
Daily Trending of Valve Data Format in GitHub
\ No newline at end of file
diff --git a/valve-data-format/monthly/index.xml b/valve-data-format/monthly/index.xml
new file mode 100644
index 00000000000..09c66a2eeeb
--- /dev/null
+++ b/valve-data-format/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Valve Data Format Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:01Z
+ Monthly Trending of Valve Data Format in GitHub
+
+
\ No newline at end of file
diff --git a/valve-data-format/weekly/index.xml b/valve-data-format/weekly/index.xml
new file mode 100644
index 00000000000..e3c090eabbb
--- /dev/null
+++ b/valve-data-format/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Valve Data Format Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:43Z
+ Weekly Trending of Valve Data Format in GitHub
+
+
\ No newline at end of file
diff --git a/vba/daily/index.xml b/vba/daily/index.xml
index 95c487db55a..edb14592c27 100644
--- a/vba/daily/index.xml
+++ b/vba/daily/index.xml
@@ -1,7 +1,7 @@
GitHub VBA Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:41Z
+ 2024-12-01T01:39:52Z
Daily Trending of VBA in GitHub
\ No newline at end of file
diff --git a/vba/monthly/index.xml b/vba/monthly/index.xml
new file mode 100644
index 00000000000..1244b68f807
--- /dev/null
+++ b/vba/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VBA Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:04Z
+ Monthly Trending of VBA in GitHub
+
+
\ No newline at end of file
diff --git a/vba/weekly/index.xml b/vba/weekly/index.xml
new file mode 100644
index 00000000000..ad8c9a4f0ef
--- /dev/null
+++ b/vba/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VBA Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:45Z
+ Weekly Trending of VBA in GitHub
+
+
\ No newline at end of file
diff --git a/vbscript/daily/index.xml b/vbscript/daily/index.xml
index 88de163fb7f..a5376e73ea1 100644
--- a/vbscript/daily/index.xml
+++ b/vbscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub VBScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:40Z
+ 2024-12-01T01:39:51Z
Daily Trending of VBScript in GitHub
\ No newline at end of file
diff --git a/vbscript/monthly/index.xml b/vbscript/monthly/index.xml
new file mode 100644
index 00000000000..a2b36316c38
--- /dev/null
+++ b/vbscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VBScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:04Z
+ Monthly Trending of VBScript in GitHub
+
+
\ No newline at end of file
diff --git a/vbscript/weekly/index.xml b/vbscript/weekly/index.xml
new file mode 100644
index 00000000000..922dce09772
--- /dev/null
+++ b/vbscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VBScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:46Z
+ Weekly Trending of VBScript in GitHub
+
+
\ No newline at end of file
diff --git a/vcl/daily/index.xml b/vcl/daily/index.xml
index ad6c7929702..208a7e1e323 100644
--- a/vcl/daily/index.xml
+++ b/vcl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub VCL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:40Z
+ 2024-12-01T01:39:51Z
Daily Trending of VCL in GitHub
\ No newline at end of file
diff --git a/vcl/monthly/index.xml b/vcl/monthly/index.xml
new file mode 100644
index 00000000000..b88294f834b
--- /dev/null
+++ b/vcl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VCL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:03Z
+ Monthly Trending of VCL in GitHub
+
+
\ No newline at end of file
diff --git a/vcl/weekly/index.xml b/vcl/weekly/index.xml
new file mode 100644
index 00000000000..120037620da
--- /dev/null
+++ b/vcl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VCL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:45Z
+ Weekly Trending of VCL in GitHub
+
+
\ No newline at end of file
diff --git a/verilog/daily/index.xml b/verilog/daily/index.xml
index d68b9a339a2..23d7286542a 100644
--- a/verilog/daily/index.xml
+++ b/verilog/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Verilog Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:43Z
+ 2024-12-01T01:39:54Z
Daily Trending of Verilog in GitHub
\ No newline at end of file
diff --git a/verilog/monthly/index.xml b/verilog/monthly/index.xml
new file mode 100644
index 00000000000..c6eb58f4150
--- /dev/null
+++ b/verilog/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Verilog Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:06Z
+ Monthly Trending of Verilog in GitHub
+
+
\ No newline at end of file
diff --git a/verilog/weekly/index.xml b/verilog/weekly/index.xml
new file mode 100644
index 00000000000..15cf05c95ad
--- /dev/null
+++ b/verilog/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Verilog Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:47Z
+ Weekly Trending of Verilog in GitHub
+
+
\ No newline at end of file
diff --git a/vhdl/daily/index.xml b/vhdl/daily/index.xml
index ebc58b3f9c2..c47721e8a88 100644
--- a/vhdl/daily/index.xml
+++ b/vhdl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub VHDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:42Z
+ 2024-12-01T01:39:53Z
Daily Trending of VHDL in GitHub
\ No newline at end of file
diff --git a/vhdl/monthly/index.xml b/vhdl/monthly/index.xml
new file mode 100644
index 00000000000..d9130495664
--- /dev/null
+++ b/vhdl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VHDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:06Z
+ Monthly Trending of VHDL in GitHub
+
+
\ No newline at end of file
diff --git a/vhdl/weekly/index.xml b/vhdl/weekly/index.xml
new file mode 100644
index 00000000000..7a638478ed4
--- /dev/null
+++ b/vhdl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub VHDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:48Z
+ Weekly Trending of VHDL in GitHub
+
+
\ No newline at end of file
diff --git a/vim-help-file/daily/index.xml b/vim-help-file/daily/index.xml
index 1054619be5b..4e9b7cfdb23 100644
--- a/vim-help-file/daily/index.xml
+++ b/vim-help-file/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Vim Help File Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:41Z
+ 2024-12-01T01:39:53Z
Daily Trending of Vim Help File in GitHub
\ No newline at end of file
diff --git a/vim-help-file/monthly/index.xml b/vim-help-file/monthly/index.xml
new file mode 100644
index 00000000000..0bd8d4eddae
--- /dev/null
+++ b/vim-help-file/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vim Help File Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:05Z
+ Monthly Trending of Vim Help File in GitHub
+
+
\ No newline at end of file
diff --git a/vim-help-file/weekly/index.xml b/vim-help-file/weekly/index.xml
new file mode 100644
index 00000000000..1f7170512df
--- /dev/null
+++ b/vim-help-file/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vim Help File Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:47Z
+ Weekly Trending of Vim Help File in GitHub
+
+
\ No newline at end of file
diff --git a/vim-script/daily/index.xml b/vim-script/daily/index.xml
index 128a837462d..44b417f1a42 100644
--- a/vim-script/daily/index.xml
+++ b/vim-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Vim Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:45Z
+ 2024-12-01T01:39:56Z
Daily Trending of Vim Script in GitHub
\ No newline at end of file
diff --git a/vim-script/monthly/index.xml b/vim-script/monthly/index.xml
new file mode 100644
index 00000000000..ed75103aa93
--- /dev/null
+++ b/vim-script/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Vim Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:08Z
+ Monthly Trending of Vim Script in GitHub
+
+
+ kaarmu/typst.vim
+ 2024-12-01T01:59:08Z
+ tag:github.com,2024-12-01:/kaarmu/typst.vim
+
+ <p>Vim plugin for Typst</p><hr>
+
+
+ rhysd/committia.vim
+ 2024-12-01T01:59:08Z
+ tag:github.com,2024-12-01:/rhysd/committia.vim
+
+ <p>A Vim plugin for more pleasant editing on commit messages</p><hr>
+
+
+ alvan/vim-closetag
+ 2024-12-01T01:59:08Z
+ tag:github.com,2024-12-01:/alvan/vim-closetag
+
+ <p>Auto close (X)HTML tags</p><hr>
+
+
\ No newline at end of file
diff --git a/vim-script/weekly/index.xml b/vim-script/weekly/index.xml
new file mode 100644
index 00000000000..540bc426871
--- /dev/null
+++ b/vim-script/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Vim Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:50Z
+ Weekly Trending of Vim Script in GitHub
+
+
+ tpope/vim-endwise
+ 2024-12-01T01:50:50Z
+ tag:github.com,2024-12-01:/tpope/vim-endwise
+
+ <p>endwise.vim: Wisely add</p><hr>
+
+
\ No newline at end of file
diff --git a/vim-snippet/daily/index.xml b/vim-snippet/daily/index.xml
index 99f4ca1d672..6dad01cc004 100644
--- a/vim-snippet/daily/index.xml
+++ b/vim-snippet/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Vim Snippet Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:44Z
+ 2024-12-01T01:39:55Z
Daily Trending of Vim Snippet in GitHub
\ No newline at end of file
diff --git a/vim-snippet/monthly/index.xml b/vim-snippet/monthly/index.xml
new file mode 100644
index 00000000000..ba02d425690
--- /dev/null
+++ b/vim-snippet/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vim Snippet Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:07Z
+ Monthly Trending of Vim Snippet in GitHub
+
+
\ No newline at end of file
diff --git a/vim-snippet/weekly/index.xml b/vim-snippet/weekly/index.xml
new file mode 100644
index 00000000000..349a4c8d1a8
--- /dev/null
+++ b/vim-snippet/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vim Snippet Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:48Z
+ Weekly Trending of Vim Snippet in GitHub
+
+
\ No newline at end of file
diff --git a/visual-basic-.net/daily/index.xml b/visual-basic-.net/daily/index.xml
index 918c13c0fdd..4ba287f856a 100644
--- a/visual-basic-.net/daily/index.xml
+++ b/visual-basic-.net/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Visual Basic .NET Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:43Z
+ 2024-12-01T01:39:54Z
Daily Trending of Visual Basic .NET in GitHub
\ No newline at end of file
diff --git a/visual-basic-.net/monthly/index.xml b/visual-basic-.net/monthly/index.xml
new file mode 100644
index 00000000000..121fd18899e
--- /dev/null
+++ b/visual-basic-.net/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Visual Basic .NET Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:08Z
+ Monthly Trending of Visual Basic .NET in GitHub
+
+
\ No newline at end of file
diff --git a/visual-basic-.net/weekly/index.xml b/visual-basic-.net/weekly/index.xml
new file mode 100644
index 00000000000..0385b0a4f95
--- /dev/null
+++ b/visual-basic-.net/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Visual Basic .NET Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:49Z
+ Weekly Trending of Visual Basic .NET in GitHub
+
+
\ No newline at end of file
diff --git a/volt/daily/index.xml b/volt/daily/index.xml
index a03703013f3..33785e86fe5 100644
--- a/volt/daily/index.xml
+++ b/volt/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Volt Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:46Z
+ 2024-12-01T01:39:57Z
Daily Trending of Volt in GitHub
\ No newline at end of file
diff --git a/volt/monthly/index.xml b/volt/monthly/index.xml
new file mode 100644
index 00000000000..85e5aaf11e9
--- /dev/null
+++ b/volt/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Volt Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:09Z
+ Monthly Trending of Volt in GitHub
+
+
\ No newline at end of file
diff --git a/volt/weekly/index.xml b/volt/weekly/index.xml
new file mode 100644
index 00000000000..ad07516368e
--- /dev/null
+++ b/volt/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Volt Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:50Z
+ Weekly Trending of Volt in GitHub
+
+
\ No newline at end of file
diff --git a/vue/daily/index.xml b/vue/daily/index.xml
index 351e7c87e59..3e62306789b 100644
--- a/vue/daily/index.xml
+++ b/vue/daily/index.xml
@@ -1,7 +1,14 @@
GitHub Vue Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:48Z
+ 2024-12-01T01:39:58Z
Daily Trending of Vue in GitHub
+
+ Bronya0/Kafka-King
+ 2024-12-01T01:39:58Z
+ tag:github.com,2024-12-01:/Bronya0/Kafka-King
+
+ <p>A modern and practical kafka GUI client | 一个现代、实用的kafka本地客户端</p><hr>
+
\ No newline at end of file
diff --git a/vue/monthly/index.xml b/vue/monthly/index.xml
new file mode 100644
index 00000000000..22e10a71066
--- /dev/null
+++ b/vue/monthly/index.xml
@@ -0,0 +1,28 @@
+
+ GitHub Vue Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:10Z
+ Monthly Trending of Vue in GitHub
+
+
+ ccbikai/Sink
+ 2024-12-01T01:59:10Z
+ tag:github.com,2024-12-01:/ccbikai/Sink
+
+ <p>⚡ A Simple / Speedy / Secure Link Shortener with Analytics, 100% run on Cloudflare.</p><hr>
+
+
+ donaldzou/WGDashboard
+ 2024-12-01T01:59:10Z
+ tag:github.com,2024-12-01:/donaldzou/WGDashboard
+
+ <p>Simple dashboard for WireGuard VPN written in Python & Vue.js</p><hr>
+
+
+ unilei/aipan-netdisk-search
+ 2024-12-01T01:59:10Z
+ tag:github.com,2024-12-01:/unilei/aipan-netdisk-search
+
+ <p>本项目乃是基于 Vue 与 Nuxt.js 技术打造的网盘搜索项目,持续开源并保持维护更新。其旨在让人人皆可拥有属于自己的网盘搜索网站。强烈建议自行部署,向所有参与者致敬!Salute to all!</p><hr>
+
+
\ No newline at end of file
diff --git a/vue/weekly/index.xml b/vue/weekly/index.xml
new file mode 100644
index 00000000000..9b3e9fce20c
--- /dev/null
+++ b/vue/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Vue Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:52Z
+ Weekly Trending of Vue in GitHub
+
+
+ luckjiawei/frpc-desktop
+ 2024-12-01T01:50:52Z
+ tag:github.com,2024-12-01:/luckjiawei/frpc-desktop
+
+ <p>frp跨平台桌面客户端,可视化配置,轻松实现内网穿透! 支持所有frp版本</p><hr>
+
+
\ No newline at end of file
diff --git a/vyper/daily/index.xml b/vyper/daily/index.xml
index 9d1726f214e..d0b0b025705 100644
--- a/vyper/daily/index.xml
+++ b/vyper/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Vyper Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:46Z
+ 2024-12-01T01:39:57Z
Daily Trending of Vyper in GitHub
\ No newline at end of file
diff --git a/vyper/monthly/index.xml b/vyper/monthly/index.xml
new file mode 100644
index 00000000000..70614cd3192
--- /dev/null
+++ b/vyper/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vyper Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:10Z
+ Monthly Trending of Vyper in GitHub
+
+
\ No newline at end of file
diff --git a/vyper/weekly/index.xml b/vyper/weekly/index.xml
new file mode 100644
index 00000000000..9dac50c774b
--- /dev/null
+++ b/vyper/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Vyper Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:51Z
+ Weekly Trending of Vyper in GitHub
+
+
\ No newline at end of file
diff --git a/wavefront-material/daily/index.xml b/wavefront-material/daily/index.xml
index f10cff6d255..c65f9b411d2 100644
--- a/wavefront-material/daily/index.xml
+++ b/wavefront-material/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Wavefront Material Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:47Z
+ 2024-12-01T01:39:57Z
Daily Trending of Wavefront Material in GitHub
\ No newline at end of file
diff --git a/wavefront-material/monthly/index.xml b/wavefront-material/monthly/index.xml
new file mode 100644
index 00000000000..6b3d7223f24
--- /dev/null
+++ b/wavefront-material/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wavefront Material Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:09Z
+ Monthly Trending of Wavefront Material in GitHub
+
+
\ No newline at end of file
diff --git a/wavefront-material/weekly/index.xml b/wavefront-material/weekly/index.xml
new file mode 100644
index 00000000000..e2373a4b349
--- /dev/null
+++ b/wavefront-material/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wavefront Material Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:51Z
+ Weekly Trending of Wavefront Material in GitHub
+
+
\ No newline at end of file
diff --git a/wavefront-object/daily/index.xml b/wavefront-object/daily/index.xml
index a25f7f6a417..5715585b893 100644
--- a/wavefront-object/daily/index.xml
+++ b/wavefront-object/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Wavefront Object Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:49Z
+ 2024-12-01T01:39:59Z
Daily Trending of Wavefront Object in GitHub
\ No newline at end of file
diff --git a/wavefront-object/monthly/index.xml b/wavefront-object/monthly/index.xml
new file mode 100644
index 00000000000..01881433024
--- /dev/null
+++ b/wavefront-object/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wavefront Object Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:12Z
+ Monthly Trending of Wavefront Object in GitHub
+
+
\ No newline at end of file
diff --git a/wavefront-object/weekly/index.xml b/wavefront-object/weekly/index.xml
new file mode 100644
index 00000000000..2d80fadc8f3
--- /dev/null
+++ b/wavefront-object/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wavefront Object Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:53Z
+ Weekly Trending of Wavefront Object in GitHub
+
+
\ No newline at end of file
diff --git a/wdl/daily/index.xml b/wdl/daily/index.xml
index b2f956b1cfd..56626e179de 100644
--- a/wdl/daily/index.xml
+++ b/wdl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub WDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:49Z
+ 2024-12-01T01:39:59Z
Daily Trending of WDL in GitHub
\ No newline at end of file
diff --git a/wdl/monthly/index.xml b/wdl/monthly/index.xml
new file mode 100644
index 00000000000..ff619d91623
--- /dev/null
+++ b/wdl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:11Z
+ Monthly Trending of WDL in GitHub
+
+
\ No newline at end of file
diff --git a/wdl/weekly/index.xml b/wdl/weekly/index.xml
new file mode 100644
index 00000000000..32068c8773b
--- /dev/null
+++ b/wdl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:53Z
+ Weekly Trending of WDL in GitHub
+
+
\ No newline at end of file
diff --git a/web-ontology-language/daily/index.xml b/web-ontology-language/daily/index.xml
index 0601cc3fa43..9acd4fed07d 100644
--- a/web-ontology-language/daily/index.xml
+++ b/web-ontology-language/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Web Ontology Language Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:48Z
+ 2024-12-01T01:39:59Z
Daily Trending of Web Ontology Language in GitHub
\ No newline at end of file
diff --git a/web-ontology-language/monthly/index.xml b/web-ontology-language/monthly/index.xml
new file mode 100644
index 00000000000..9589b8ef044
--- /dev/null
+++ b/web-ontology-language/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Web Ontology Language Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:11Z
+ Monthly Trending of Web Ontology Language in GitHub
+
+
\ No newline at end of file
diff --git a/web-ontology-language/weekly/index.xml b/web-ontology-language/weekly/index.xml
new file mode 100644
index 00000000000..4ceeb34a039
--- /dev/null
+++ b/web-ontology-language/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Web Ontology Language Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:54Z
+ Weekly Trending of Web Ontology Language in GitHub
+
+
\ No newline at end of file
diff --git a/webassembly/daily/index.xml b/webassembly/daily/index.xml
index 784d8213bc2..014df2bb9f3 100644
--- a/webassembly/daily/index.xml
+++ b/webassembly/daily/index.xml
@@ -1,7 +1,7 @@
GitHub WebAssembly Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:49Z
+ 2024-12-01T01:40:00Z
Daily Trending of WebAssembly in GitHub
\ No newline at end of file
diff --git a/webassembly/monthly/index.xml b/webassembly/monthly/index.xml
new file mode 100644
index 00000000000..addf5ed9596
--- /dev/null
+++ b/webassembly/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebAssembly Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:12Z
+ Monthly Trending of WebAssembly in GitHub
+
+
\ No newline at end of file
diff --git a/webassembly/weekly/index.xml b/webassembly/weekly/index.xml
new file mode 100644
index 00000000000..48a6aafe7fc
--- /dev/null
+++ b/webassembly/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebAssembly Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:54Z
+ Weekly Trending of WebAssembly in GitHub
+
+
\ No newline at end of file
diff --git a/webidl/daily/index.xml b/webidl/daily/index.xml
index 1a5d6c81296..d633b05eae6 100644
--- a/webidl/daily/index.xml
+++ b/webidl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub WebIDL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:50Z
+ 2024-12-01T01:40:01Z
Daily Trending of WebIDL in GitHub
\ No newline at end of file
diff --git a/webidl/monthly/index.xml b/webidl/monthly/index.xml
new file mode 100644
index 00000000000..0b3dffeff04
--- /dev/null
+++ b/webidl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebIDL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:13Z
+ Monthly Trending of WebIDL in GitHub
+
+
\ No newline at end of file
diff --git a/webidl/weekly/index.xml b/webidl/weekly/index.xml
new file mode 100644
index 00000000000..e6574907763
--- /dev/null
+++ b/webidl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebIDL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:55Z
+ Weekly Trending of WebIDL in GitHub
+
+
\ No newline at end of file
diff --git a/webvtt/daily/index.xml b/webvtt/daily/index.xml
index 7374169c9e6..ee8fbb7cc2b 100644
--- a/webvtt/daily/index.xml
+++ b/webvtt/daily/index.xml
@@ -1,7 +1,7 @@
GitHub WebVTT Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:51Z
+ 2024-12-01T01:40:01Z
Daily Trending of WebVTT in GitHub
\ No newline at end of file
diff --git a/webvtt/monthly/index.xml b/webvtt/monthly/index.xml
new file mode 100644
index 00000000000..95dd0f5a865
--- /dev/null
+++ b/webvtt/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebVTT Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:13Z
+ Monthly Trending of WebVTT in GitHub
+
+
\ No newline at end of file
diff --git a/webvtt/weekly/index.xml b/webvtt/weekly/index.xml
new file mode 100644
index 00000000000..231e518eb26
--- /dev/null
+++ b/webvtt/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub WebVTT Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:55Z
+ Weekly Trending of WebVTT in GitHub
+
+
\ No newline at end of file
diff --git a/wget-config/daily/index.xml b/wget-config/daily/index.xml
index 776babba678..ceb1d95c8b9 100644
--- a/wget-config/daily/index.xml
+++ b/wget-config/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Wget Config Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:50Z
+ 2024-12-01T01:40:02Z
Daily Trending of Wget Config in GitHub
\ No newline at end of file
diff --git a/wget-config/monthly/index.xml b/wget-config/monthly/index.xml
new file mode 100644
index 00000000000..f331a59e941
--- /dev/null
+++ b/wget-config/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wget Config Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:13Z
+ Monthly Trending of Wget Config in GitHub
+
+
\ No newline at end of file
diff --git a/wget-config/weekly/index.xml b/wget-config/weekly/index.xml
new file mode 100644
index 00000000000..cb1c0c6af1c
--- /dev/null
+++ b/wget-config/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wget Config Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:56Z
+ Weekly Trending of Wget Config in GitHub
+
+
\ No newline at end of file
diff --git a/wikitext/daily/index.xml b/wikitext/daily/index.xml
index 2390a6f29a3..b7d1fc7464a 100644
--- a/wikitext/daily/index.xml
+++ b/wikitext/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Wikitext Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:33:09Z
+ 2024-12-01T01:36:25Z
Daily Trending of Wikitext in GitHub
\ No newline at end of file
diff --git a/wikitext/monthly/index.xml b/wikitext/monthly/index.xml
new file mode 100644
index 00000000000..cb92fe780b3
--- /dev/null
+++ b/wikitext/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wikitext Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:55:51Z
+ Monthly Trending of Wikitext in GitHub
+
+
\ No newline at end of file
diff --git a/wikitext/weekly/index.xml b/wikitext/weekly/index.xml
new file mode 100644
index 00000000000..deff810b2bd
--- /dev/null
+++ b/wikitext/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wikitext Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:47:07Z
+ Weekly Trending of Wikitext in GitHub
+
+
\ No newline at end of file
diff --git a/windows-registry-entries/daily/index.xml b/windows-registry-entries/daily/index.xml
index f586b6f8f6e..5db5ac01dc1 100644
--- a/windows-registry-entries/daily/index.xml
+++ b/windows-registry-entries/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Windows Registry Entries Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:52Z
+ 2024-12-01T01:40:03Z
Daily Trending of Windows Registry Entries in GitHub
\ No newline at end of file
diff --git a/windows-registry-entries/monthly/index.xml b/windows-registry-entries/monthly/index.xml
new file mode 100644
index 00000000000..1be13c06c5c
--- /dev/null
+++ b/windows-registry-entries/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Windows Registry Entries Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:15Z
+ Monthly Trending of Windows Registry Entries in GitHub
+
+
\ No newline at end of file
diff --git a/windows-registry-entries/weekly/index.xml b/windows-registry-entries/weekly/index.xml
new file mode 100644
index 00000000000..b350dae9aba
--- /dev/null
+++ b/windows-registry-entries/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Windows Registry Entries Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:56Z
+ Weekly Trending of Windows Registry Entries in GitHub
+
+
\ No newline at end of file
diff --git a/wisp/daily/index.xml b/wisp/daily/index.xml
index a1c4f5f32b1..01dd4badabd 100644
--- a/wisp/daily/index.xml
+++ b/wisp/daily/index.xml
@@ -1,7 +1,7 @@
GitHub wisp Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:54Z
+ 2024-12-01T01:40:04Z
Daily Trending of wisp in GitHub
\ No newline at end of file
diff --git a/wisp/monthly/index.xml b/wisp/monthly/index.xml
new file mode 100644
index 00000000000..d0d478be9b2
--- /dev/null
+++ b/wisp/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub wisp Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:16Z
+ Monthly Trending of wisp in GitHub
+
+
\ No newline at end of file
diff --git a/wisp/weekly/index.xml b/wisp/weekly/index.xml
new file mode 100644
index 00000000000..d885efefe1e
--- /dev/null
+++ b/wisp/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub wisp Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:59Z
+ Weekly Trending of wisp in GitHub
+
+
\ No newline at end of file
diff --git a/witcher-script/daily/index.xml b/witcher-script/daily/index.xml
index acfad0892c9..28b5f937a4f 100644
--- a/witcher-script/daily/index.xml
+++ b/witcher-script/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Witcher Script Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:53Z
+ 2024-12-01T01:40:04Z
Daily Trending of Witcher Script in GitHub
\ No newline at end of file
diff --git a/witcher-script/monthly/index.xml b/witcher-script/monthly/index.xml
new file mode 100644
index 00000000000..15dd07138d1
--- /dev/null
+++ b/witcher-script/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Witcher Script Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:16Z
+ Monthly Trending of Witcher Script in GitHub
+
+
\ No newline at end of file
diff --git a/witcher-script/weekly/index.xml b/witcher-script/weekly/index.xml
new file mode 100644
index 00000000000..7b58db119b3
--- /dev/null
+++ b/witcher-script/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Witcher Script Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:58Z
+ Weekly Trending of Witcher Script in GitHub
+
+
\ No newline at end of file
diff --git a/wollok/daily/index.xml b/wollok/daily/index.xml
index 2b6ddf41c3e..84c5a414f2d 100644
--- a/wollok/daily/index.xml
+++ b/wollok/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Wollok Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:54Z
+ 2024-12-01T01:40:04Z
Daily Trending of Wollok in GitHub
\ No newline at end of file
diff --git a/wollok/monthly/index.xml b/wollok/monthly/index.xml
new file mode 100644
index 00000000000..2ed724c2af6
--- /dev/null
+++ b/wollok/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wollok Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:17Z
+ Monthly Trending of Wollok in GitHub
+
+
\ No newline at end of file
diff --git a/wollok/weekly/index.xml b/wollok/weekly/index.xml
new file mode 100644
index 00000000000..9a28207a656
--- /dev/null
+++ b/wollok/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Wollok Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:59Z
+ Weekly Trending of Wollok in GitHub
+
+
\ No newline at end of file
diff --git a/world-of-warcraft-addon-data/daily/index.xml b/world-of-warcraft-addon-data/daily/index.xml
index a93f65b21a8..45935c7aae4 100644
--- a/world-of-warcraft-addon-data/daily/index.xml
+++ b/world-of-warcraft-addon-data/daily/index.xml
@@ -1,7 +1,7 @@
GitHub World of Warcraft Addon Data Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:53Z
+ 2024-12-01T01:40:05Z
Daily Trending of World of Warcraft Addon Data in GitHub
\ No newline at end of file
diff --git a/world-of-warcraft-addon-data/monthly/index.xml b/world-of-warcraft-addon-data/monthly/index.xml
new file mode 100644
index 00000000000..92e7b980f7a
--- /dev/null
+++ b/world-of-warcraft-addon-data/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub World of Warcraft Addon Data Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:17Z
+ Monthly Trending of World of Warcraft Addon Data in GitHub
+
+
\ No newline at end of file
diff --git a/world-of-warcraft-addon-data/weekly/index.xml b/world-of-warcraft-addon-data/weekly/index.xml
new file mode 100644
index 00000000000..4cded43d16f
--- /dev/null
+++ b/world-of-warcraft-addon-data/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub World of Warcraft Addon Data Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:50:58Z
+ Weekly Trending of World of Warcraft Addon Data in GitHub
+
+
\ No newline at end of file
diff --git a/x-bitmap/daily/index.xml b/x-bitmap/daily/index.xml
index 8b5e01c972c..8b0dbd75bdf 100644
--- a/x-bitmap/daily/index.xml
+++ b/x-bitmap/daily/index.xml
@@ -1,7 +1,7 @@
GitHub X BitMap Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:55Z
+ 2024-12-01T01:40:06Z
Daily Trending of X BitMap in GitHub
\ No newline at end of file
diff --git a/x-bitmap/monthly/index.xml b/x-bitmap/monthly/index.xml
new file mode 100644
index 00000000000..78d836e163a
--- /dev/null
+++ b/x-bitmap/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X BitMap Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:18Z
+ Monthly Trending of X BitMap in GitHub
+
+
\ No newline at end of file
diff --git a/x-bitmap/weekly/index.xml b/x-bitmap/weekly/index.xml
new file mode 100644
index 00000000000..be80eb3ae8f
--- /dev/null
+++ b/x-bitmap/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X BitMap Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:00Z
+ Weekly Trending of X BitMap in GitHub
+
+
\ No newline at end of file
diff --git a/x-font-directory-index/daily/index.xml b/x-font-directory-index/daily/index.xml
index 0fd9aa4ebaa..6a475717bd2 100644
--- a/x-font-directory-index/daily/index.xml
+++ b/x-font-directory-index/daily/index.xml
@@ -1,7 +1,7 @@
GitHub X Font Directory Index Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:55Z
+ 2024-12-01T01:40:06Z
Daily Trending of X Font Directory Index in GitHub
\ No newline at end of file
diff --git a/x-font-directory-index/monthly/index.xml b/x-font-directory-index/monthly/index.xml
new file mode 100644
index 00000000000..c100af4b317
--- /dev/null
+++ b/x-font-directory-index/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X Font Directory Index Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:18Z
+ Monthly Trending of X Font Directory Index in GitHub
+
+
\ No newline at end of file
diff --git a/x-font-directory-index/weekly/index.xml b/x-font-directory-index/weekly/index.xml
new file mode 100644
index 00000000000..7334ca89d72
--- /dev/null
+++ b/x-font-directory-index/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X Font Directory Index Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:00Z
+ Weekly Trending of X Font Directory Index in GitHub
+
+
\ No newline at end of file
diff --git a/x-pixmap/daily/index.xml b/x-pixmap/daily/index.xml
index 05d9fe0ce68..e7a775e8fa7 100644
--- a/x-pixmap/daily/index.xml
+++ b/x-pixmap/daily/index.xml
@@ -1,7 +1,7 @@
GitHub X PixMap Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:55Z
+ 2024-12-01T01:40:05Z
Daily Trending of X PixMap in GitHub
\ No newline at end of file
diff --git a/x-pixmap/monthly/index.xml b/x-pixmap/monthly/index.xml
new file mode 100644
index 00000000000..c1f3a23b70f
--- /dev/null
+++ b/x-pixmap/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X PixMap Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:18Z
+ Monthly Trending of X PixMap in GitHub
+
+
\ No newline at end of file
diff --git a/x-pixmap/weekly/index.xml b/x-pixmap/weekly/index.xml
new file mode 100644
index 00000000000..1c402ee6abf
--- /dev/null
+++ b/x-pixmap/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X PixMap Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:00Z
+ Weekly Trending of X PixMap in GitHub
+
+
\ No newline at end of file
diff --git a/x10/daily/index.xml b/x10/daily/index.xml
index db85df64aed..bb0a9bc2a49 100644
--- a/x10/daily/index.xml
+++ b/x10/daily/index.xml
@@ -1,7 +1,7 @@
GitHub X10 Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:56Z
+ 2024-12-01T01:40:07Z
Daily Trending of X10 in GitHub
\ No newline at end of file
diff --git a/x10/monthly/index.xml b/x10/monthly/index.xml
new file mode 100644
index 00000000000..31709d2c0c3
--- /dev/null
+++ b/x10/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X10 Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:19Z
+ Monthly Trending of X10 in GitHub
+
+
\ No newline at end of file
diff --git a/x10/weekly/index.xml b/x10/weekly/index.xml
new file mode 100644
index 00000000000..43bd80c72c5
--- /dev/null
+++ b/x10/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub X10 Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:02Z
+ Weekly Trending of X10 in GitHub
+
+
\ No newline at end of file
diff --git a/xbase/daily/index.xml b/xbase/daily/index.xml
index 91b8942fd58..12146894f3a 100644
--- a/xbase/daily/index.xml
+++ b/xbase/daily/index.xml
@@ -1,7 +1,7 @@
GitHub xBase Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:57Z
+ 2024-12-01T01:40:07Z
Daily Trending of xBase in GitHub
\ No newline at end of file
diff --git a/xbase/monthly/index.xml b/xbase/monthly/index.xml
new file mode 100644
index 00000000000..387997236ae
--- /dev/null
+++ b/xbase/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub xBase Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:20Z
+ Monthly Trending of xBase in GitHub
+
+
\ No newline at end of file
diff --git a/xbase/weekly/index.xml b/xbase/weekly/index.xml
new file mode 100644
index 00000000000..60ac5edbf57
--- /dev/null
+++ b/xbase/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub xBase Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:01Z
+ Weekly Trending of xBase in GitHub
+
+
\ No newline at end of file
diff --git a/xc/daily/index.xml b/xc/daily/index.xml
index cea3b923433..c81030c0b80 100644
--- a/xc/daily/index.xml
+++ b/xc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XC Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:57Z
+ 2024-12-01T01:40:08Z
Daily Trending of XC in GitHub
\ No newline at end of file
diff --git a/xc/monthly/index.xml b/xc/monthly/index.xml
new file mode 100644
index 00000000000..4b2bebe34e6
--- /dev/null
+++ b/xc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XC Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:20Z
+ Monthly Trending of XC in GitHub
+
+
\ No newline at end of file
diff --git a/xc/weekly/index.xml b/xc/weekly/index.xml
new file mode 100644
index 00000000000..9d95ff5c676
--- /dev/null
+++ b/xc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XC Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:02Z
+ Weekly Trending of XC in GitHub
+
+
\ No newline at end of file
diff --git a/xcompose/daily/index.xml b/xcompose/daily/index.xml
index 65cad018509..2c37906635e 100644
--- a/xcompose/daily/index.xml
+++ b/xcompose/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XCompose Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:57Z
+ 2024-12-01T01:40:08Z
Daily Trending of XCompose in GitHub
\ No newline at end of file
diff --git a/xcompose/monthly/index.xml b/xcompose/monthly/index.xml
new file mode 100644
index 00000000000..28fbee2fba3
--- /dev/null
+++ b/xcompose/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XCompose Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:20Z
+ Monthly Trending of XCompose in GitHub
+
+
\ No newline at end of file
diff --git a/xcompose/weekly/index.xml b/xcompose/weekly/index.xml
new file mode 100644
index 00000000000..b2115741046
--- /dev/null
+++ b/xcompose/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XCompose Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:02Z
+ Weekly Trending of XCompose in GitHub
+
+
\ No newline at end of file
diff --git a/xml-property-list/daily/index.xml b/xml-property-list/daily/index.xml
index 674e94237f9..7aa7a468d13 100644
--- a/xml-property-list/daily/index.xml
+++ b/xml-property-list/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XML Property List Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:58Z
+ 2024-12-01T01:40:09Z
Daily Trending of XML Property List in GitHub
\ No newline at end of file
diff --git a/xml-property-list/monthly/index.xml b/xml-property-list/monthly/index.xml
new file mode 100644
index 00000000000..dbfecde890d
--- /dev/null
+++ b/xml-property-list/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XML Property List Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:21Z
+ Monthly Trending of XML Property List in GitHub
+
+
\ No newline at end of file
diff --git a/xml-property-list/weekly/index.xml b/xml-property-list/weekly/index.xml
new file mode 100644
index 00000000000..ff1c0c3a143
--- /dev/null
+++ b/xml-property-list/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XML Property List Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:03Z
+ Weekly Trending of XML Property List in GitHub
+
+
\ No newline at end of file
diff --git a/xml/daily/index.xml b/xml/daily/index.xml
index d7953361b97..3e9383b103d 100644
--- a/xml/daily/index.xml
+++ b/xml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:59Z
+ 2024-12-01T01:40:10Z
Daily Trending of XML in GitHub
\ No newline at end of file
diff --git a/xml/monthly/index.xml b/xml/monthly/index.xml
new file mode 100644
index 00000000000..19df891511f
--- /dev/null
+++ b/xml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:22Z
+ Monthly Trending of XML in GitHub
+
+
\ No newline at end of file
diff --git a/xml/weekly/index.xml b/xml/weekly/index.xml
new file mode 100644
index 00000000000..cb52c0470b8
--- /dev/null
+++ b/xml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:04Z
+ Weekly Trending of XML in GitHub
+
+
\ No newline at end of file
diff --git a/xojo/daily/index.xml b/xojo/daily/index.xml
index 7c356bee76b..10f44ef8a9c 100644
--- a/xojo/daily/index.xml
+++ b/xojo/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Xojo Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:59Z
+ 2024-12-01T01:40:09Z
Daily Trending of Xojo in GitHub
\ No newline at end of file
diff --git a/xojo/monthly/index.xml b/xojo/monthly/index.xml
new file mode 100644
index 00000000000..0b65b0ff9de
--- /dev/null
+++ b/xojo/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xojo Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:22Z
+ Monthly Trending of Xojo in GitHub
+
+
\ No newline at end of file
diff --git a/xojo/weekly/index.xml b/xojo/weekly/index.xml
new file mode 100644
index 00000000000..9045e8be7cc
--- /dev/null
+++ b/xojo/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xojo Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:03Z
+ Weekly Trending of Xojo in GitHub
+
+
\ No newline at end of file
diff --git a/xonsh/daily/index.xml b/xonsh/daily/index.xml
index 24e3091a1bc..13bf94b6662 100644
--- a/xonsh/daily/index.xml
+++ b/xonsh/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Xonsh Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:36:59Z
+ 2024-12-01T01:40:09Z
Daily Trending of Xonsh in GitHub
\ No newline at end of file
diff --git a/xonsh/monthly/index.xml b/xonsh/monthly/index.xml
new file mode 100644
index 00000000000..f65545ea184
--- /dev/null
+++ b/xonsh/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xonsh Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:21Z
+ Monthly Trending of Xonsh in GitHub
+
+
\ No newline at end of file
diff --git a/xonsh/weekly/index.xml b/xonsh/weekly/index.xml
new file mode 100644
index 00000000000..e1813ac3bc2
--- /dev/null
+++ b/xonsh/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xonsh Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:04Z
+ Weekly Trending of Xonsh in GitHub
+
+
\ No newline at end of file
diff --git a/xpages/daily/index.xml b/xpages/daily/index.xml
index 3d0ea590424..c50e5b1351a 100644
--- a/xpages/daily/index.xml
+++ b/xpages/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XPages Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:01Z
+ 2024-12-01T01:40:11Z
Daily Trending of XPages in GitHub
\ No newline at end of file
diff --git a/xpages/monthly/index.xml b/xpages/monthly/index.xml
new file mode 100644
index 00000000000..d08a4e09359
--- /dev/null
+++ b/xpages/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XPages Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:24Z
+ Monthly Trending of XPages in GitHub
+
+
\ No newline at end of file
diff --git a/xpages/weekly/index.xml b/xpages/weekly/index.xml
new file mode 100644
index 00000000000..fdcfe4f8f1b
--- /dev/null
+++ b/xpages/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XPages Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:06Z
+ Weekly Trending of XPages in GitHub
+
+
\ No newline at end of file
diff --git a/xproc/daily/index.xml b/xproc/daily/index.xml
index 19eac2f64f3..c67b9994e09 100644
--- a/xproc/daily/index.xml
+++ b/xproc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XProc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:00Z
+ 2024-12-01T01:40:11Z
Daily Trending of XProc in GitHub
\ No newline at end of file
diff --git a/xproc/monthly/index.xml b/xproc/monthly/index.xml
new file mode 100644
index 00000000000..090b2e40855
--- /dev/null
+++ b/xproc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XProc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:24Z
+ Monthly Trending of XProc in GitHub
+
+
\ No newline at end of file
diff --git a/xproc/weekly/index.xml b/xproc/weekly/index.xml
new file mode 100644
index 00000000000..0539ca77aba
--- /dev/null
+++ b/xproc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XProc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:06Z
+ Weekly Trending of XProc in GitHub
+
+
\ No newline at end of file
diff --git a/xquery/daily/index.xml b/xquery/daily/index.xml
index 55e5277b704..4b406382ffa 100644
--- a/xquery/daily/index.xml
+++ b/xquery/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XQuery Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:00Z
+ 2024-12-01T01:40:11Z
Daily Trending of XQuery in GitHub
\ No newline at end of file
diff --git a/xquery/monthly/index.xml b/xquery/monthly/index.xml
new file mode 100644
index 00000000000..c133d8e7361
--- /dev/null
+++ b/xquery/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XQuery Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:23Z
+ Monthly Trending of XQuery in GitHub
+
+
\ No newline at end of file
diff --git a/xquery/weekly/index.xml b/xquery/weekly/index.xml
new file mode 100644
index 00000000000..7f34d2a7153
--- /dev/null
+++ b/xquery/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XQuery Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:05Z
+ Weekly Trending of XQuery in GitHub
+
+
\ No newline at end of file
diff --git a/xs/daily/index.xml b/xs/daily/index.xml
index e645200ad46..7e24fa23e5f 100644
--- a/xs/daily/index.xml
+++ b/xs/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XS Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:01Z
+ 2024-12-01T01:40:12Z
Daily Trending of XS in GitHub
\ No newline at end of file
diff --git a/xs/monthly/index.xml b/xs/monthly/index.xml
new file mode 100644
index 00000000000..34a265d37cb
--- /dev/null
+++ b/xs/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XS Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:24Z
+ Monthly Trending of XS in GitHub
+
+
\ No newline at end of file
diff --git a/xs/weekly/index.xml b/xs/weekly/index.xml
new file mode 100644
index 00000000000..6235fd586df
--- /dev/null
+++ b/xs/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XS Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:06Z
+ Weekly Trending of XS in GitHub
+
+
\ No newline at end of file
diff --git a/xslt/daily/index.xml b/xslt/daily/index.xml
index 990514f9c2b..fab438028b5 100644
--- a/xslt/daily/index.xml
+++ b/xslt/daily/index.xml
@@ -1,7 +1,7 @@
GitHub XSLT Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:03Z
+ 2024-12-01T01:40:14Z
Daily Trending of XSLT in GitHub
\ No newline at end of file
diff --git a/xslt/monthly/index.xml b/xslt/monthly/index.xml
new file mode 100644
index 00000000000..61d850c4d49
--- /dev/null
+++ b/xslt/monthly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub XSLT Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:26Z
+ Monthly Trending of XSLT in GitHub
+
+
+ itplr-kosit/xrechnung-visualization
+ 2024-12-01T01:59:26Z
+ tag:github.com,2024-12-01:/itplr-kosit/xrechnung-visualization
+
+ <p>XSL transformators for web and pdf rendering of German CIUS XRechnung or EN16931-1:2017 [MIRROR OF GitLab]</p><hr><h1>XRechnung Visualization Transformators</h1>
<p>XSL transformators for web rendering of German CIUS XRechnung or EN16931-1:2017.</p>
<p>The source documents have to be in either UBL Invoice/CreditNote XML and CII XML and have to be conforming to German CIUS XRechnung or EN16931-1:2017.</p>
<p>The transformations have to happen in two steps:</p>
<ol>
<li>Either UBL Invoice/CreditNote XML or CII XML have to be transformed to an intermediate XML which has to be valid to a proprietary simple <a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/src/xsd/xrechnung-semantic-model.xsd">XML Schema</a></li>
<li>Then you can use either
<ul>
<li><a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/src/xsl/xrechnung-html.xsl">xrechnung-html.xsl</a> to render an HTML document or</li>
<li><a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/src/xsl/xr-pdf.xsl">xr-pdf.xsl</a> to render an PDF document</li>
</ul> </li>
</ol>
<p>See our <a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/doc/architecture.md">architecture documentation</a> (in German) for a general overview. Here you can find more details on <a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/doc/usage.md">configuration and usage options</a></p>
<p>You can find an example use of these transformations in the <a href="https://raw.githubusercontent.com/itplr-kosit/xrechnung-visualization/master/build.xml">ant build script</a>. It also includes some technical tests.</p>
<h2>Notes</h2>
<p>The visualization component is part of the technical components that have been published as a bundle together with the XRechnung standard since version 1.2.0.</p>
<p>These components are not software solutions but merely represent optional building blocks in 3rd party software. You are free to use them. The standard XRechnung DOES NOT oblige the use of these components. However, we always publish the components in accordance with the resp. version of XRechnung specification. As such, our components themselves are implementations which claim to be conformant to the standard.</p>
<p>Please also note that only the structured, machine-readable format (XML) is considered the original invoice that must be archived in accordance with legal requirements. Visualizations generated from an XRechnung are NOT valid instances of XRechnung. They aim to improve readability by the human eye and are NOT meant to serve as formats for long-term archiving.</p>
<p>This GitHub repository is only a mirror of our <a href="https://projekte.kosit.org/xrechnung/xrechnung-visualization">GitLab project repository</a>.</p>
<p>For questions please contact <a href="https://xeinkauf.de/kontakt/#support">KoSIT</a>.</p>
+
+
\ No newline at end of file
diff --git a/xslt/weekly/index.xml b/xslt/weekly/index.xml
new file mode 100644
index 00000000000..0326b84306a
--- /dev/null
+++ b/xslt/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub XSLT Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:08Z
+ Weekly Trending of XSLT in GitHub
+
+
\ No newline at end of file
diff --git a/xtend/daily/index.xml b/xtend/daily/index.xml
index 9c7ec9a1bfe..07b04cca133 100644
--- a/xtend/daily/index.xml
+++ b/xtend/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Xtend Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:02Z
+ 2024-12-01T01:40:12Z
Daily Trending of Xtend in GitHub
\ No newline at end of file
diff --git a/xtend/monthly/index.xml b/xtend/monthly/index.xml
new file mode 100644
index 00000000000..f47b0898cee
--- /dev/null
+++ b/xtend/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xtend Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:25Z
+ Monthly Trending of Xtend in GitHub
+
+
\ No newline at end of file
diff --git a/xtend/weekly/index.xml b/xtend/weekly/index.xml
new file mode 100644
index 00000000000..e526eb3706c
--- /dev/null
+++ b/xtend/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Xtend Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:07Z
+ Weekly Trending of Xtend in GitHub
+
+
\ No newline at end of file
diff --git a/yacc/daily/index.xml b/yacc/daily/index.xml
index 8e8781c6912..e47ea285543 100644
--- a/yacc/daily/index.xml
+++ b/yacc/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Yacc Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:02Z
+ 2024-12-01T01:40:13Z
Daily Trending of Yacc in GitHub
\ No newline at end of file
diff --git a/yacc/monthly/index.xml b/yacc/monthly/index.xml
new file mode 100644
index 00000000000..9bcb140c8e6
--- /dev/null
+++ b/yacc/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Yacc Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:25Z
+ Monthly Trending of Yacc in GitHub
+
+
\ No newline at end of file
diff --git a/yacc/weekly/index.xml b/yacc/weekly/index.xml
new file mode 100644
index 00000000000..2f799374563
--- /dev/null
+++ b/yacc/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Yacc Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:07Z
+ Weekly Trending of Yacc in GitHub
+
+
\ No newline at end of file
diff --git a/yaml/daily/index.xml b/yaml/daily/index.xml
index 4863432ab37..cb8fb30b2d8 100644
--- a/yaml/daily/index.xml
+++ b/yaml/daily/index.xml
@@ -1,7 +1,7 @@
GitHub YAML Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:03Z
+ 2024-12-01T01:40:14Z
Daily Trending of YAML in GitHub
\ No newline at end of file
diff --git a/yaml/monthly/index.xml b/yaml/monthly/index.xml
new file mode 100644
index 00000000000..f2993ec35a3
--- /dev/null
+++ b/yaml/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YAML Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:26Z
+ Monthly Trending of YAML in GitHub
+
+
\ No newline at end of file
diff --git a/yaml/weekly/index.xml b/yaml/weekly/index.xml
new file mode 100644
index 00000000000..e19c29803f0
--- /dev/null
+++ b/yaml/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YAML Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:08Z
+ Weekly Trending of YAML in GitHub
+
+
\ No newline at end of file
diff --git a/yang/daily/index.xml b/yang/daily/index.xml
index 7201662625d..fe0729e922e 100644
--- a/yang/daily/index.xml
+++ b/yang/daily/index.xml
@@ -1,7 +1,7 @@
GitHub YANG Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:04Z
+ 2024-12-01T01:40:15Z
Daily Trending of YANG in GitHub
\ No newline at end of file
diff --git a/yang/monthly/index.xml b/yang/monthly/index.xml
new file mode 100644
index 00000000000..31ea2e1e9c2
--- /dev/null
+++ b/yang/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YANG Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:27Z
+ Monthly Trending of YANG in GitHub
+
+
\ No newline at end of file
diff --git a/yang/weekly/index.xml b/yang/weekly/index.xml
new file mode 100644
index 00000000000..8e9b35dad03
--- /dev/null
+++ b/yang/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YANG Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:10Z
+ Weekly Trending of YANG in GitHub
+
+
\ No newline at end of file
diff --git a/yara/daily/index.xml b/yara/daily/index.xml
index a07ff3bbc04..f29138be29f 100644
--- a/yara/daily/index.xml
+++ b/yara/daily/index.xml
@@ -1,7 +1,7 @@
GitHub YARA Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:05Z
+ 2024-12-01T01:40:16Z
Daily Trending of YARA in GitHub
\ No newline at end of file
diff --git a/yara/monthly/index.xml b/yara/monthly/index.xml
new file mode 100644
index 00000000000..33891c6e025
--- /dev/null
+++ b/yara/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YARA Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:28Z
+ Monthly Trending of YARA in GitHub
+
+
\ No newline at end of file
diff --git a/yara/weekly/index.xml b/yara/weekly/index.xml
new file mode 100644
index 00000000000..056eb4e8a3a
--- /dev/null
+++ b/yara/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YARA Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:10Z
+ Weekly Trending of YARA in GitHub
+
+
\ No newline at end of file
diff --git a/yasnippet/daily/index.xml b/yasnippet/daily/index.xml
index a51d9c4b8f3..b43c75adea0 100644
--- a/yasnippet/daily/index.xml
+++ b/yasnippet/daily/index.xml
@@ -1,7 +1,7 @@
GitHub YASnippet Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:05Z
+ 2024-12-01T01:40:15Z
Daily Trending of YASnippet in GitHub
\ No newline at end of file
diff --git a/yasnippet/monthly/index.xml b/yasnippet/monthly/index.xml
new file mode 100644
index 00000000000..86fec414a62
--- /dev/null
+++ b/yasnippet/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YASnippet Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:28Z
+ Monthly Trending of YASnippet in GitHub
+
+
\ No newline at end of file
diff --git a/yasnippet/weekly/index.xml b/yasnippet/weekly/index.xml
new file mode 100644
index 00000000000..253e351dc0d
--- /dev/null
+++ b/yasnippet/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub YASnippet Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:09Z
+ Weekly Trending of YASnippet in GitHub
+
+
\ No newline at end of file
diff --git a/zap/daily/index.xml b/zap/daily/index.xml
index 7a8343f0ec3..182618d9a54 100644
--- a/zap/daily/index.xml
+++ b/zap/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ZAP Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:07Z
+ 2024-12-01T01:40:16Z
Daily Trending of ZAP in GitHub
\ No newline at end of file
diff --git a/zap/monthly/index.xml b/zap/monthly/index.xml
new file mode 100644
index 00000000000..285021dee1e
--- /dev/null
+++ b/zap/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZAP Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:30Z
+ Monthly Trending of ZAP in GitHub
+
+
\ No newline at end of file
diff --git a/zap/weekly/index.xml b/zap/weekly/index.xml
new file mode 100644
index 00000000000..80687e0ceff
--- /dev/null
+++ b/zap/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZAP Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:12Z
+ Weekly Trending of ZAP in GitHub
+
+
\ No newline at end of file
diff --git a/zeek/daily/index.xml b/zeek/daily/index.xml
index a09129235df..fe1b94a3d49 100644
--- a/zeek/daily/index.xml
+++ b/zeek/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Zeek Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:29:20Z
+ 2024-12-01T01:30:11Z
Daily Trending of Zeek in GitHub
\ No newline at end of file
diff --git a/zeek/monthly/index.xml b/zeek/monthly/index.xml
new file mode 100644
index 00000000000..4ef7645a69b
--- /dev/null
+++ b/zeek/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zeek Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:51Z
+ Monthly Trending of Zeek in GitHub
+
+
\ No newline at end of file
diff --git a/zeek/weekly/index.xml b/zeek/weekly/index.xml
new file mode 100644
index 00000000000..9b9ed970fe1
--- /dev/null
+++ b/zeek/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zeek Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:41:00Z
+ Weekly Trending of Zeek in GitHub
+
+
\ No newline at end of file
diff --git a/zenscript/daily/index.xml b/zenscript/daily/index.xml
index b03040bf33b..5827d199faa 100644
--- a/zenscript/daily/index.xml
+++ b/zenscript/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ZenScript Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:06Z
+ 2024-12-01T01:40:17Z
Daily Trending of ZenScript in GitHub
\ No newline at end of file
diff --git a/zenscript/monthly/index.xml b/zenscript/monthly/index.xml
new file mode 100644
index 00000000000..9d7b8a3a18e
--- /dev/null
+++ b/zenscript/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZenScript Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:29Z
+ Monthly Trending of ZenScript in GitHub
+
+
\ No newline at end of file
diff --git a/zenscript/weekly/index.xml b/zenscript/weekly/index.xml
new file mode 100644
index 00000000000..cc8283242c4
--- /dev/null
+++ b/zenscript/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZenScript Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:11Z
+ Weekly Trending of ZenScript in GitHub
+
+
\ No newline at end of file
diff --git a/zephir/daily/index.xml b/zephir/daily/index.xml
index 3880e6ea105..91a7d084275 100644
--- a/zephir/daily/index.xml
+++ b/zephir/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Zephir Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:06Z
+ 2024-12-01T01:40:16Z
Daily Trending of Zephir in GitHub
\ No newline at end of file
diff --git a/zephir/monthly/index.xml b/zephir/monthly/index.xml
new file mode 100644
index 00000000000..7121881bf5f
--- /dev/null
+++ b/zephir/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zephir Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:29Z
+ Monthly Trending of Zephir in GitHub
+
+
\ No newline at end of file
diff --git a/zephir/weekly/index.xml b/zephir/weekly/index.xml
new file mode 100644
index 00000000000..215e478ec9e
--- /dev/null
+++ b/zephir/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zephir Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:11Z
+ Weekly Trending of Zephir in GitHub
+
+
\ No newline at end of file
diff --git a/zig/daily/index.xml b/zig/daily/index.xml
index 46caad2dd0a..32410fef8f6 100644
--- a/zig/daily/index.xml
+++ b/zig/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Zig Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:07Z
+ 2024-12-01T01:40:17Z
Daily Trending of Zig in GitHub
\ No newline at end of file
diff --git a/zig/monthly/index.xml b/zig/monthly/index.xml
new file mode 100644
index 00000000000..7e96480fecf
--- /dev/null
+++ b/zig/monthly/index.xml
@@ -0,0 +1,21 @@
+
+ GitHub Zig Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:30Z
+ Monthly Trending of Zig in GitHub
+
+
+ blackboardsh/electrobun
+ 2024-12-01T01:59:30Z
+ tag:github.com,2024-12-01:/blackboardsh/electrobun
+
+ <p>Build ultra fast, tiny, and cross-platform desktop apps with Typescript.</p><hr>
+
+
+ neurocyte/flow
+ 2024-12-01T01:59:30Z
+ tag:github.com,2024-12-01:/neurocyte/flow
+
+ <p>Flow Control: a programmer's text editor</p><hr>
+
+
\ No newline at end of file
diff --git a/zig/weekly/index.xml b/zig/weekly/index.xml
new file mode 100644
index 00000000000..8a2c3ed220f
--- /dev/null
+++ b/zig/weekly/index.xml
@@ -0,0 +1,14 @@
+
+ GitHub Zig Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:12Z
+ Weekly Trending of Zig in GitHub
+
+
+ blackboardsh/electrobun
+ 2024-12-01T01:51:12Z
+ tag:github.com,2024-12-01:/blackboardsh/electrobun
+
+ <p>Build ultra fast, tiny, and cross-platform desktop apps with Typescript.</p><hr>
+
+
\ No newline at end of file
diff --git a/zil/daily/index.xml b/zil/daily/index.xml
index 8f7cbeca77f..6c9d5b30bd4 100644
--- a/zil/daily/index.xml
+++ b/zil/daily/index.xml
@@ -1,7 +1,7 @@
GitHub ZIL Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:08Z
+ 2024-12-01T01:40:18Z
Daily Trending of ZIL in GitHub
\ No newline at end of file
diff --git a/zil/monthly/index.xml b/zil/monthly/index.xml
new file mode 100644
index 00000000000..e7bd68e273f
--- /dev/null
+++ b/zil/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZIL Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:31Z
+ Monthly Trending of ZIL in GitHub
+
+
\ No newline at end of file
diff --git a/zil/weekly/index.xml b/zil/weekly/index.xml
new file mode 100644
index 00000000000..86367e0846d
--- /dev/null
+++ b/zil/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub ZIL Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:13Z
+ Weekly Trending of ZIL in GitHub
+
+
\ No newline at end of file
diff --git a/zimpl/daily/index.xml b/zimpl/daily/index.xml
index 8e28cc3edb8..4915dbcfc08 100644
--- a/zimpl/daily/index.xml
+++ b/zimpl/daily/index.xml
@@ -1,7 +1,7 @@
GitHub Zimpl Daily Trending
http://mshibanami.github.io/GitHubTrendingRSS
- 2024-11-30T01:37:08Z
+ 2024-12-01T01:40:18Z
Daily Trending of Zimpl in GitHub
\ No newline at end of file
diff --git a/zimpl/monthly/index.xml b/zimpl/monthly/index.xml
new file mode 100644
index 00000000000..6cc1ea39529
--- /dev/null
+++ b/zimpl/monthly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zimpl Monthly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:59:31Z
+ Monthly Trending of Zimpl in GitHub
+
+
\ No newline at end of file
diff --git a/zimpl/weekly/index.xml b/zimpl/weekly/index.xml
new file mode 100644
index 00000000000..1f84bff537e
--- /dev/null
+++ b/zimpl/weekly/index.xml
@@ -0,0 +1,7 @@
+
+ GitHub Zimpl Weekly Trending
+ http://mshibanami.github.io/GitHubTrendingRSS
+ 2024-12-01T01:51:13Z
+ Weekly Trending of Zimpl in GitHub
+
+
\ No newline at end of file