diff options
| author | Paul Buetow <paul@buetow.org> | 2025-12-26 00:42:07 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-12-26 00:42:07 +0200 |
| commit | ca810b0bfc23818f828c9ba7b7fb07dbee1cbccd (patch) | |
| tree | c91b5dad03234d3242ce19234058a236464f9112 | |
| parent | b2b9dd008cf1c2fdb8147f19cee4adf0ce8bb153 (diff) | |
Update content for html
| -rw-r--r-- | about/resources.html | 210 | ||||
| -rw-r--r-- | about/showcase.html | 396 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 858 | ||||
| -rw-r--r-- | gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html | 11 | ||||
| -rw-r--r-- | gemfeed/atom.xml | 13 | ||||
| -rw-r--r-- | index.html | 2 | ||||
| -rw-r--r-- | uptime-stats.html | 28 |
7 files changed, 428 insertions, 1090 deletions
diff --git a/about/resources.html b/about/resources.html index 7c33d56d..9437264d 100644 --- a/about/resources.html +++ b/about/resources.html @@ -50,54 +50,54 @@ <span>In random order:</span><br /> <br /> <ul> -<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> -<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> -<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> -<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> +<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> +<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> <li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li> -<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li> -<li>Raku Recipes; J.J. Merelo; Apress</li> -<li>Java ist auch eine Insel; Christian Ullenboom; </li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> <li>DNS and BIND; Cricket Liu; O'Reilly</li> -<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> -<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> -<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> -<li>Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook</li> -<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> -<li>Ultimate Go Notebook; Bill Kennedy</li> -<li>The Docker Book; James Turnbull; Kindle</li> -<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> -<li>Leanring eBPF; Liz Rice; O'Reilly</li> <li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li> -<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> -<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li> -<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> -<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> -<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> -<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> <li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li> -<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> -<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> -<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> +<li>Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook</li> +<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> <li>Funktionale Programmierung; Peter Pepper; Springer</li> +<li>Leanring eBPF; Liz Rice; O'Reilly</li> +<li>Ultimate Go Notebook; Bill Kennedy</li> +<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li> +<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li> +<li>Raku Fundamentals; Moritz Lenz; Apress</li> <li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li> -<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly</li> -<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> -<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li> -<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> +<li>Java ist auch eine Insel; Christian Ullenboom; </li> +<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> +<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> <li>Effective awk programming; Arnold Robbins; O'Reilly</li> -<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> -<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li> <li>Data Science at the Command Line; Jeroen Janssens; O'Reilly</li> -<li>C++ Programming Language; Bjarne Stroustrup;</li> -<li>Raku Fundamentals; Moritz Lenz; Apress</li> +<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly</li> +<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li> +<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li> +<li>Developing Games in Java; David Brackeen and others...; New Riders</li> +<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li> +<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> +<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li> +<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> <li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li> -<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly</li> +<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook</li> <li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly</li> -<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li> -<li>Developing Games in Java; David Brackeen and others...; New Riders</li> +<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li> +<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li> +<li>Raku Recipes; J.J. Merelo; Apress</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> <li>Modern Perl; Chromatic ; Onyx Neon Press</li> -<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li> +<li>C++ Programming Language; Bjarne Stroustrup;</li> +<li>The Docker Book; James Turnbull; Kindle</li> +<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li> </ul><br /> <h2 style='display: inline' id='technical-references'>Technical references</h2><br /> <br /> @@ -105,57 +105,57 @@ <br /> <ul> <li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li> -<li>Relayd and Httpd Mastery; Michael W Lucas</li> -<li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> <li>Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly</li> -<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> +<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> <li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> <li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li> -<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li> +<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> +<li>Relayd and Httpd Mastery; Michael W Lucas</li> +<li>Implementing Service Level Objectives; Alex Hidalgo; O'Reilly</li> </ul><br /> <h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br /> <br /> <span>In random order:</span><br /> <br /> <ul> -<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> -<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> -<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> -<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> -<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> -<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> -<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> -<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> +<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> <li>Ultralearning; Scott Young; Thorsons</li> -<li>Deep Work; Cal Newport; Piatkus</li> -<li>Getting Things Done; David Allen</li> -<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> <li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> -<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li> -<li>The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook</li> +<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> <li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li> -<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> -<li>Slow Productivity; Cal Newport; Penguin Random House</li> -<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> -<li>Soft Skills; John Sommez; Manning Publications</li> -<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> -<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> <li>Ultralearning; Anna Laurent; Self-published via Amazon</li> -<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> -<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> -<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> +<li>Getting Things Done; David Allen</li> +<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> +<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> +<li>Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly</li> <li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li> -<li>The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li> -<li>Atomic Habits; James Clear; Random House Business</li> +<li>Slow Productivity; Cal Newport; Penguin Random House</li> +<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> +<li>Deep Work; Cal Newport; Piatkus</li> <li>Eat That Frog; Brian Tracy</li> -<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK</li> -<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li> +<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li> +<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li> +<li>Atomic Habits; James Clear; Random House Business</li> +<li>The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook </li> +<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li> <li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> -<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li> -<li>The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook</li> -<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> +<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> +<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> +<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li> +<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li> <li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li> -<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> +<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li> +<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li> +<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> +<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> +<li>The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook</li> +<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li> +<li>Soft Skills; John Sommez; Manning Publications</li> +<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li> +<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> </ul><br /> <a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br /> <br /> @@ -164,31 +164,31 @@ <span>Some of these were in-person with exams; others were online learning lectures only. In random order:</span><br /> <br /> <ul> -<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> +<li>Functional programming lecture; Remote University of Hagen</li> +<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</li> +<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li> +<li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> <li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> -<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> -<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> -<li>Protocol buffers; O'Reilly Online</li> <li>Apache Tomcat Best Practises; 3-day on-site training</li> +<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> +<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li> <li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li> -<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li> -<li>Functional programming lecture; Remote University of Hagen</li> -<li>Scripting Vim; Damian Conway; O'Reilly Online</li> +<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> +<li>Protocol buffers; O'Reilly Online</li> +<li>AWS Immersion Day; Amazon; 1-day interactive online training </li> <li>MySQL Deep Dive Workshop; 2-day on-site training</li> -<li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> -<li>Developing IaC with Terraform (with Live Lessons); O'Reilly Online</li> +<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li> <li>The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online</li> -<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li> -<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> </ul><br /> <h2 style='display: inline' id='technical-guides'>Technical guides</h2><br /> <br /> <span>These are not whole books, but guides (smaller or larger) which I found very useful. in random order:</span><br /> <br /> <ul> -<li>Raku Guide at https://raku.guide </li> -<li>How CPUs work at https://cpu.land</li> <li>Advanced Bash-Scripting Guide </li> +<li>How CPUs work at https://cpu.land</li> +<li>Raku Guide at https://raku.guide </li> </ul><br /> <h2 style='display: inline' id='podcasts'>Podcasts</h2><br /> <br /> @@ -197,51 +197,51 @@ <span>In random order:</span><br /> <br /> <ul> +<li>Fallthrough [Golang]</li> +<li>Deep Questions with Cal Newport</li> +<li>The Pragmatic Engineer Podcast</li> +<li>Fork Around And Find Out</li> <li>Pratical AI</li> <li>Modern Mentor</li> -<li>Fork Around And Find Out</li> -<li>The Changelog Podcast(s)</li> +<li>Cup o' Go [Golang]</li> <li>BSD Now [BSD]</li> +<li>Wednesday Wisdom</li> <li>Backend Banter</li> -<li>Deep Questions with Cal Newport</li> <li>Dev Interrupted</li> -<li>Fallthrough [Golang]</li> -<li>Hidden Brain</li> -<li>Wednesday Wisdom</li> -<li>Cup o' Go [Golang]</li> <li>The ProdCast (Google SRE Podcast)</li> +<li>Hidden Brain</li> +<li>The Changelog Podcast(s)</li> <li>Maintainable</li> -<li>The Pragmatic Engineer Podcast</li> </ul><br /> <h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br /> <br /> <span>I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.</span><br /> <br /> <ul> -<li>CRE: Chaosradio Express [german]</li> -<li>Modern Mentor</li> <li>Go Time (predecessor of fallthrough)</li> -<li>FLOSS weekly</li> +<li>CRE: Chaosradio Express [german]</li> <li>Java Pub House</li> +<li>Modern Mentor</li> <li>Ship It (predecessor of Fork Around And Find Out)</li> +<li>FLOSS weekly</li> </ul><br /> <h2 style='display: inline' id='newsletters-i-like'>Newsletters I like</h2><br /> <br /> <span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br /> <br /> <ul> -<li>Register Spill</li> -<li>The Valuable Dev</li> -<li>The Imperfectionist</li> -<li>Monospace Mentor</li> -<li>Changelog News</li> -<li>byteSizeGo</li> <li>Applied Go Weekly Newsletter</li> <li>Andreas Brandhorst Newsletter (Sci-Fi author)</li> -<li>Golang Weekly</li> <li>The Pragmatic Engineer</li> -<li>Ruby Weekly</li> +<li>Monospace Mentor</li> +<li>Golang Weekly</li> +<li>Changelog News</li> <li>VK Newsletter</li> +<li>Ruby Weekly</li> +<li>byteSizeGo</li> +<li>The Valuable Dev</li> +<li>Register Spill</li> +<li>The Imperfectionist</li> </ul><br /> <h2 style='display: inline' id='magazines-i-liked'>Magazines I like(d)</h2><br /> <br /> @@ -249,9 +249,9 @@ <br /> <ul> <li>LWN (online only)</li> -<li>Linux User</li> -<li>Linux Magazine</li> <li>freeX (not published anymore)</li> +<li>Linux Magazine</li> +<li>Linux User</li> </ul><br /> <h1 style='display: inline' id='formal-education'>Formal education</h1><br /> <br /> diff --git a/about/showcase.html b/about/showcase.html index e0eb7e54..83500d00 100644 --- a/about/showcase.html +++ b/about/showcase.html @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='project-showcase'>Project Showcase</h1><br /> <br /> -<span>Generated on: 2025-11-16</span><br /> +<span>Generated on: 2025-12-24</span><br /> <br /> <span>This page showcases my side projects, providing an overview of what each project does, its technical implementation, and key metrics. Each project summary includes information about the programming languages used, development activity, and licensing. The projects are ordered by recent activity, with the most actively maintained projects listed first.</span><br /> <br /> @@ -24,6 +24,8 @@ <li>⇢ <a href='#overall-statistics'>Overall Statistics</a></li> <li>⇢ <a href='#projects'>Projects</a></li> <li>⇢ ⇢ <a href='#conf'>conf</a></li> +<li>⇢ ⇢ <a href='#perc'>perc</a></li> +<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> <li>⇢ ⇢ <a href='#yoga'>yoga</a></li> <li>⇢ ⇢ <a href='#hexai'>hexai</a></li> <li>⇢ ⇢ <a href='#foostats'>foostats</a></li> @@ -44,14 +46,13 @@ <li>⇢ ⇢ <a href='#docker-radicale-server'>docker-radicale-server</a></li> <li>⇢ ⇢ <a href='#terraform'>terraform</a></li> <li>⇢ ⇢ <a href='#gorum'>gorum</a></li> +<li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li> <li>⇢ ⇢ <a href='#randomjournalpage'>randomjournalpage</a></li> <li>⇢ ⇢ <a href='#geheim'>geheim</a></li> <li>⇢ ⇢ <a href='#sway-autorotate'>sway-autorotate</a></li> <li>⇢ ⇢ <a href='#photoalbum'>photoalbum</a></li> -<li>⇢ ⇢ <a href='#foozone'>foo.zone</a></li> <li>⇢ ⇢ <a href='#algorithms'>algorithms</a></li> <li>⇢ ⇢ <a href='#perl-c-fibonacci'>perl-c-fibonacci</a></li> -<li>⇢ ⇢ <a href='#guprecords'>guprecords</a></li> <li>⇢ ⇢ <a href='#ioriot'>ioriot</a></li> <li>⇢ ⇢ <a href='#staticfarm-apache-handlers'>staticfarm-apache-handlers</a></li> <li>⇢ ⇢ <a href='#dyndns'>dyndns</a></li> @@ -67,15 +68,15 @@ <li>⇢ ⇢ <a href='#netdiff'>netdiff</a></li> <li>⇢ ⇢ <a href='#pwgrep'>pwgrep</a></li> <li>⇢ ⇢ <a href='#japi'>japi</a></li> -<li>⇢ ⇢ <a href='#loadbars'>loadbars</a></li> <li>⇢ ⇢ <a href='#perl-poetry'>perl-poetry</a></li> <li>⇢ ⇢ <a href='#ipv6test'>ipv6test</a></li> <li>⇢ ⇢ <a href='#cpuinfo'>cpuinfo</a></li> +<li>⇢ ⇢ <a href='#loadbars'>loadbars</a></li> <li>⇢ ⇢ <a href='#perldaemon'>perldaemon</a></li> <li>⇢ ⇢ <a href='#awksite'>awksite</a></li> <li>⇢ ⇢ <a href='#jsmstrade'>jsmstrade</a></li> -<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li> <li>⇢ ⇢ <a href='#ychat'>ychat</a></li> +<li>⇢ ⇢ <a href='#netcalendar'>netcalendar</a></li> <li>⇢ ⇢ <a href='#hsbot'>hsbot</a></li> <li>⇢ ⇢ <a href='#vs-sim'>vs-sim</a></li> <li>⇢ ⇢ <a href='#fype'>fype</a></li> @@ -83,28 +84,28 @@ <h2 style='display: inline' id='overall-statistics'>Overall Statistics</h2><br /> <br /> <ul> -<li>📦 Total Projects: 56</li> -<li>📊 Total Commits: 11,370</li> -<li>📈 Total Lines of Code: 287,019</li> -<li>📄 Total Lines of Documentation: 25,503</li> -<li>💻 Languages: Go (29.8%), Java (19.7%), C++ (13.0%), C/C++ (7.2%), C (6.7%), Perl (6.2%), Shell (5.3%), HTML (5.0%), Config (1.6%), Ruby (1.0%), HCL (1.0%), Make (0.7%), YAML (0.6%), Python (0.6%), CSS (0.5%), Raku (0.3%), JSON (0.3%), XML (0.2%), Haskell (0.2%), TOML (0.1%)</li> -<li>📚 Documentation: Text (43.5%), Markdown (43.1%), LaTeX (13.4%)</li> -<li>🎵 Vibe-Coded Projects: 5 out of 56 (8.9%)</li> -<li>🤖 AI-Assisted Projects (including vibe-coded): 9 out of 56 (16.1% AI-assisted, 83.9% human-only)</li> -<li>🚀 Release Status: 37 released, 19 experimental (66.1% with releases, 33.9% experimental)</li> +<li>📦 Total Projects: 57</li> +<li>📊 Total Commits: 11,486</li> +<li>📈 Total Lines of Code: 291,461</li> +<li>📄 Total Lines of Documentation: 23,249</li> +<li>💻 Languages: Go (29.6%), HTML (17.3%), Java (13.9%), C (6.6%), C++ (6.1%), Perl (5.7%), XML (5.7%), Shell (4.3%), C/C++ (4.2%), Config (1.3%), Ruby (1.0%), YAML (1.0%), HCL (0.9%), Python (0.6%), Make (0.5%), CSS (0.5%), Raku (0.3%), JSON (0.3%), Haskell (0.2%), TOML (0.1%)</li> +<li>📚 Documentation: Markdown (50.6%), Text (46.9%), LaTeX (2.4%)</li> +<li>🎵 Vibe-Coded Projects: 6 out of 57 (10.5%)</li> +<li>🤖 AI-Assisted Projects (including vibe-coded): 11 out of 57 (19.3% AI-assisted, 80.7% human-only)</li> +<li>🚀 Release Status: 38 released, 19 experimental (66.7% with releases, 33.3% experimental)</li> </ul><br /> <h2 style='display: inline' id='projects'>Projects</h2><br /> <br /> <h3 style='display: inline' id='conf'>conf</h3><br /> <br /> <ul> -<li>💻 Languages: Perl (30.4%), YAML (25.2%), Shell (22.8%), Config (5.4%), CSS (5.2%), TOML (4.7%), Ruby (4.0%), Lua (1.1%), Docker (0.6%), JSON (0.5%)</li> -<li>📚 Documentation: Markdown (69.8%), Text (30.2%)</li> -<li>📊 Commits: 1045</li> -<li>📈 Lines of Code: 6284</li> -<li>📄 Lines of Documentation: 632</li> -<li>📅 Development Period: 2021-12-28 to 2025-11-15</li> -<li>🔥 Recent Activity: 20.0 days (avg. age of last 42 commits)</li> +<li>💻 Languages: YAML (34.5%), Perl (26.3%), Shell (20.1%), Config (4.6%), CSS (4.5%), TOML (4.0%), Ruby (3.5%), Lua (1.0%), Docker (0.5%), JSON (0.5%), HTML (0.3%)</li> +<li>📚 Documentation: Markdown (77.4%), Text (22.6%)</li> +<li>📊 Commits: 1079</li> +<li>📈 Lines of Code: 7266</li> +<li>📄 Lines of Documentation: 846</li> +<li>📅 Development Period: 2021-12-28 to 2025-12-22</li> +<li>🔥 Recent Activity: 25.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -118,6 +119,52 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='perc'>perc</h3><br /> +<br /> +<ul> +<li>💻 Languages: Go (100.0%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 7</li> +<li>📈 Lines of Code: 452</li> +<li>📄 Lines of Documentation: 80</li> +<li>📅 Development Period: 2025-11-25 to 2025-11-25</li> +<li>🔥 Recent Activity: 29.0 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: v0.1.0 (2025-11-25)</li> +<li>🎵 Vibe-Coded: This project has been vibe coded</li> +</ul><br /> +<br /> +<span>**perc** is a command-line percentage calculator written in Go that handles the three common percentage calculation scenarios: finding X% of Y (e.g., "20% of 150"), determining what percentage one number is of another (e.g., "30 is what % of 150"), and finding the whole when given a part and percentage (e.g., "30 is 20% of what"). It accepts natural language-style input and shows step-by-step calculation breakdowns alongside results.</span><br /> +<br /> +<span>The tool is built as a simple Go CLI application with a standard project layout (<span class='inlinecode'>cmd/perc</span> for the binary, <span class='inlinecode'>internal/</span> for implementation details) and uses Mage as its build system. It's installable via <span class='inlinecode'>go install</span> and designed for quick mental-math verification or scripting scenarios where percentage calculations are needed.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/perc'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/perc'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> +<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> +<br /> +<ul> +<li>💻 Languages: HTML (69.4%), XML (29.9%), Shell (0.4%), CSS (0.2%), Go (0.1%)</li> +<li>📚 Documentation: Text (86.9%), Markdown (13.1%)</li> +<li>📊 Commits: 3282</li> +<li>📈 Lines of Code: 53188</li> +<li>📄 Lines of Documentation: 175</li> +<li>📅 Development Period: 2021-04-29 to 2025-12-24</li> +<li>🔥 Recent Activity: 43.3 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🧪 Status: Experimental (no releases yet)</li> +<li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> +</ul><br /> +<br /> +<span>foo.zone: source code repository.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='yoga'>yoga</h3><br /> <br /> <ul> @@ -127,7 +174,7 @@ <li>📈 Lines of Code: 3408</li> <li>📄 Lines of Documentation: 82</li> <li>📅 Development Period: 2025-10-01 to 2025-10-24</li> -<li>🔥 Recent Activity: 40.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 78.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.3.0 (2025-10-24)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -153,7 +200,7 @@ <li>📈 Lines of Code: 28331</li> <li>📄 Lines of Documentation: 562</li> <li>📅 Development Period: 2025-08-01 to 2025-11-03</li> -<li>🔥 Recent Activity: 52.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 90.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.15.3 (2025-11-03)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -179,7 +226,7 @@ <li>📈 Lines of Code: 1902</li> <li>📄 Lines of Documentation: 423</li> <li>📅 Development Period: 2023-01-02 to 2025-11-01</li> -<li>🔥 Recent Activity: 86.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 124.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v0.2.0 (2025-10-21)</li> </ul><br /> @@ -202,7 +249,7 @@ <li>📈 Lines of Code: 991</li> <li>📄 Lines of Documentation: 50</li> <li>📅 Development Period: 2025-06-25 to 2025-11-08</li> -<li>🔥 Recent Activity: 104.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 143.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.3.0 (2025-11-08)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -226,7 +273,7 @@ <li>📈 Lines of Code: 10152</li> <li>📄 Lines of Documentation: 2431</li> <li>📅 Development Period: 2025-06-23 to 2025-10-31</li> -<li>🔥 Recent Activity: 105.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 143.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.10.1 (2025-10-31)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -250,7 +297,7 @@ <li>📈 Lines of Code: 12003</li> <li>📄 Lines of Documentation: 361</li> <li>📅 Development Period: 2025-07-14 to 2025-08-02</li> -<li>🔥 Recent Activity: 117.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 155.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🏷️ Latest Release: v0.7.5 (2025-08-02)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -278,7 +325,7 @@ <li>📈 Lines of Code: 6168</li> <li>📄 Lines of Documentation: 164</li> <li>📅 Development Period: 2025-06-19 to 2025-11-02</li> -<li>🔥 Recent Activity: 137.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 175.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: BSD-2-Clause</li> <li>🏷️ Latest Release: v0.9.3 (2025-10-05)</li> <li>🎵 Vibe-Coded: This project has been vibe coded</li> @@ -306,7 +353,7 @@ <li>📈 Lines of Code: 13072</li> <li>📄 Lines of Documentation: 680</li> <li>📅 Development Period: 2024-01-18 to 2025-10-09</li> -<li>🔥 Recent Activity: 155.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 193.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -330,13 +377,13 @@ <ul> <li>💻 Languages: Go (99.8%), JSON (0.2%)</li> <li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 394</li> +<li>📊 Commits: 396</li> <li>📈 Lines of Code: 4102</li> <li>📄 Lines of Documentation: 357</li> -<li>📅 Development Period: 2024-05-04 to 2025-09-24</li> -<li>🔥 Recent Activity: 178.9 days (avg. age of last 42 commits)</li> +<li>📅 Development Period: 2024-05-04 to 2025-11-30</li> +<li>🔥 Recent Activity: 203.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> -<li>🏷️ Latest Release: v1.2.0 (2025-09-24)</li> +<li>🏷️ Latest Release: v1.2.1 (2025-11-30)</li> </ul><br /> <br /> <a href='showcase/gos/image-1.png'><img alt='gos screenshot' title='gos screenshot' src='showcase/gos/image-1.png' /></a><br /> @@ -361,7 +408,7 @@ <li>📈 Lines of Code: 20091</li> <li>📄 Lines of Documentation: 5674</li> <li>📅 Development Period: 2020-01-09 to 2025-06-20</li> -<li>🔥 Recent Activity: 182.5 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 220.8 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: v4.3.3 (2024-08-23)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -389,7 +436,7 @@ <li>📈 Lines of Code: 396</li> <li>📄 Lines of Documentation: 24</li> <li>📅 Development Period: 2025-04-18 to 2025-05-11</li> -<li>🔥 Recent Activity: 201.8 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 240.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2025-05-11)</li> </ul><br /> @@ -412,7 +459,7 @@ <li>📈 Lines of Code: 25762</li> <li>📄 Lines of Documentation: 3101</li> <li>📅 Development Period: 2008-05-15 to 2025-06-27</li> -<li>🔥 Recent Activity: 215.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 253.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> <li>🤖 AI-Assisted: This project was partially created with the help of generative AI</li> @@ -438,7 +485,7 @@ <li>📈 Lines of Code: 33</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2025-04-03 to 2025-04-03</li> -<li>🔥 Recent Activity: 227.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 266.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -457,11 +504,11 @@ <ul> <li>💻 Languages: Ruby (99.8%), TOML (0.2%)</li> <li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 76</li> -<li>📈 Lines of Code: 1373</li> -<li>📄 Lines of Documentation: 48</li> -<li>📅 Development Period: 2024-12-05 to 2025-02-28</li> -<li>🔥 Recent Activity: 268.4 days (avg. age of last 42 commits)</li> +<li>📊 Commits: 78</li> +<li>📈 Lines of Code: 1377</li> +<li>📄 Lines of Documentation: 113</li> +<li>📅 Development Period: 2024-12-05 to 2025-11-26</li> +<li>🔥 Recent Activity: 299.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -480,11 +527,11 @@ <ul> <li>💻 Languages: Shell (68.3%), CSS (28.4%), Config (1.9%), HTML (1.3%)</li> <li>📚 Documentation: Text (76.1%), Markdown (23.9%)</li> -<li>📊 Commits: 468</li> +<li>📊 Commits: 470</li> <li>📈 Lines of Code: 2285</li> <li>📄 Lines of Documentation: 1180</li> -<li>📅 Development Period: 2021-05-21 to 2025-11-06</li> -<li>🔥 Recent Activity: 293.0 days (avg. age of last 42 commits)</li> +<li>📅 Development Period: 2021-05-21 to 2025-12-07</li> +<li>🔥 Recent Activity: 309.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-3.0</li> <li>🏷️ Latest Release: 3.0.0 (2024-10-01)</li> </ul><br /> @@ -501,13 +548,13 @@ <h3 style='display: inline' id='gogios'>gogios</h3><br /> <br /> <ul> -<li>💻 Languages: Go (96.6%), JSON (1.9%), YAML (1.4%)</li> +<li>💻 Languages: Go (96.7%), JSON (1.9%), YAML (1.4%)</li> <li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 83</li> -<li>📈 Lines of Code: 1246</li> +<li>📊 Commits: 84</li> +<li>📈 Lines of Code: 1263</li> <li>📄 Lines of Documentation: 211</li> -<li>📅 Development Period: 2023-04-17 to 2025-10-28</li> -<li>🔥 Recent Activity: 514.1 days (avg. age of last 42 commits)</li> +<li>📅 Development Period: 2023-04-17 to 2025-11-22</li> +<li>🔥 Recent Activity: 530.1 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.2.1 (2025-10-27)</li> </ul><br /> @@ -532,7 +579,7 @@ <li>📈 Lines of Code: 1133</li> <li>📄 Lines of Documentation: 78</li> <li>📅 Development Period: 2024-01-20 to 2025-09-13</li> -<li>🔥 Recent Activity: 534.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 572.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🏷️ Latest Release: v0.0.4 (2025-09-13)</li> </ul><br /> @@ -559,7 +606,7 @@ <li>📈 Lines of Code: 40</li> <li>📄 Lines of Documentation: 3</li> <li>📅 Development Period: 2023-12-31 to 2025-08-11</li> -<li>🔥 Recent Activity: 568.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 606.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -582,7 +629,7 @@ <li>📈 Lines of Code: 2851</li> <li>📄 Lines of Documentation: 52</li> <li>📅 Development Period: 2023-08-27 to 2025-08-08</li> -<li>🔥 Recent Activity: 604.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 642.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: MIT</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -605,7 +652,7 @@ <li>📈 Lines of Code: 1525</li> <li>📄 Lines of Documentation: 15</li> <li>📅 Development Period: 2023-04-17 to 2023-11-19</li> -<li>🔥 Recent Activity: 831.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 869.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -620,6 +667,29 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='guprecords'>guprecords</h3><br /> +<br /> +<ul> +<li>💻 Languages: Raku (100.0%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> +<li>📊 Commits: 95</li> +<li>📈 Lines of Code: 312</li> +<li>📄 Lines of Documentation: 416</li> +<li>📅 Development Period: 2013-03-22 to 2025-05-18</li> +<li>🔥 Recent Activity: 919.5 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: v1.0.0 (2023-04-29)</li> +</ul><br /> +<br /> +<span><span class='inlinecode'>guprecords</span> is a Raku-based command-line tool that aggregates uptime statistics from multiple hosts running <span class='inlinecode'>uptimed</span> into comprehensive global reports. It solves the problem of tracking and comparing system reliability across an entire infrastructure by collecting raw uptime records from individual machines (typically stored in a central git repository) and generating ranked leaderboards based on various metrics like total uptime, boot counts, downtime, lifespan, and a composite score. Users can generate reports across different categorizations (individual hosts, kernel versions, kernel families, or OS names) with output in multiple formats (plaintext, Markdown, or Gemtext).</span><br /> +<br /> +<span>The implementation uses an object-oriented architecture with specialized classes: <span class='inlinecode'>Aggregator</span> processes raw uptimed records files, <span class='inlinecode'>Aggregate</span> and its subclasses (<span class='inlinecode'>HostAggregate</span>) model the aggregated data, and <span class='inlinecode'>Reporter</span> with <span class='inlinecode'>HostReporter</span> handle report generation using the <span class='inlinecode'>OutputHelper</span> role for formatting. The tool is designed for sysadmins managing multiple Unix-like systems (Linux, BSD, macOS) who want to track long-term stability trends, compare kernel performance, or simply maintain a "hall of fame" for their most reliable servers.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/guprecords'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/guprecords'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='randomjournalpage'>randomjournalpage</h3><br /> <br /> <ul> @@ -629,7 +699,7 @@ <li>📈 Lines of Code: 51</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2022-06-02 to 2024-04-20</li> -<li>🔥 Recent Activity: 895.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 934.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -653,7 +723,7 @@ <li>📈 Lines of Code: 822</li> <li>📄 Lines of Documentation: 106</li> <li>📅 Development Period: 2018-05-26 to 2025-11-01</li> -<li>🔥 Recent Activity: 1107.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1145.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.3.1 (2025-11-01)</li> </ul><br /> @@ -676,7 +746,7 @@ <li>📈 Lines of Code: 41</li> <li>📄 Lines of Documentation: 17</li> <li>📅 Development Period: 2020-01-30 to 2025-04-30</li> -<li>🔥 Recent Activity: 1189.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1227.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-3.0</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -699,7 +769,7 @@ <li>📈 Lines of Code: 342</li> <li>📄 Lines of Documentation: 39</li> <li>📅 Development Period: 2011-11-19 to 2022-04-02</li> -<li>🔥 Recent Activity: 1409.0 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 1447.3 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.5.0 (2022-02-21)</li> </ul><br /> @@ -714,37 +784,16 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='foozone'>foo.zone</h3><br /> -<br /> -<ul> -<li>📚 Documentation: Markdown (100.0%)</li> -<li>📊 Commits: 3214</li> -<li>📈 Lines of Code: 0</li> -<li>📄 Lines of Documentation: 23</li> -<li>📅 Development Period: 2021-05-21 to 2022-04-02</li> -<li>🔥 Recent Activity: 1575.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🧪 Status: Experimental (no releases yet)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span>foo.zone: source code repository.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/foo.zone'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/foo.zone'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='algorithms'>algorithms</h3><br /> <br /> <ul> <li>💻 Languages: Go (99.2%), Make (0.8%)</li> -<li>📚 Documentation: Text (90.3%), Markdown (9.7%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> <li>📊 Commits: 82</li> -<li>📈 Lines of Code: 1682</li> -<li>📄 Lines of Documentation: 185</li> -<li>📅 Development Period: 2020-07-12 to 2023-04-02</li> -<li>🔥 Recent Activity: 1696.5 days (avg. age of last 42 commits)</li> +<li>📈 Lines of Code: 1728</li> +<li>📄 Lines of Documentation: 18</li> +<li>📅 Development Period: 2020-07-12 to 2023-04-09</li> +<li>🔥 Recent Activity: 1598.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -768,7 +817,7 @@ <li>📈 Lines of Code: 51</li> <li>📄 Lines of Documentation: 69</li> <li>📅 Development Period: 2014-03-24 to 2022-04-23</li> -<li>🔥 Recent Activity: 2041.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 2079.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -781,28 +830,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='guprecords'>guprecords</h3><br /> -<br /> -<ul> -<li>💻 Languages: Raku (100.0%)</li> -<li>📊 Commits: 95</li> -<li>📈 Lines of Code: 195</li> -<li>📅 Development Period: 2013-03-22 to 2023-03-09</li> -<li>🔥 Recent Activity: 2256.2 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: v1.0.0 (2023-04-29)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span><span class='inlinecode'>guprecords</span> is a Raku-based command-line tool that aggregates uptime statistics from multiple hosts running <span class='inlinecode'>uptimed</span> into comprehensive global reports. It solves the problem of tracking and comparing system reliability across an entire infrastructure by collecting raw uptime records from individual machines (typically stored in a central git repository) and generating ranked leaderboards based on various metrics like total uptime, boot counts, downtime, lifespan, and a composite score. Users can generate reports across different categorizations (individual hosts, kernel versions, kernel families, or OS names) with output in multiple formats (plaintext, Markdown, or Gemtext).</span><br /> -<br /> -<span>The implementation uses an object-oriented architecture with specialized classes: <span class='inlinecode'>Aggregator</span> processes raw uptimed records files, <span class='inlinecode'>Aggregate</span> and its subclasses (<span class='inlinecode'>HostAggregate</span>) model the aggregated data, and <span class='inlinecode'>Reporter</span> with <span class='inlinecode'>HostReporter</span> handle report generation using the <span class='inlinecode'>OutputHelper</span> role for formatting. The tool is designed for sysadmins managing multiple Unix-like systems (Linux, BSD, macOS) who want to track long-term stability trends, compare kernel performance, or simply maintain a "hall of fame" for their most reliable servers.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/guprecords'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/guprecords'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='ioriot'>ioriot</h3><br /> <br /> <ul> @@ -812,7 +839,7 @@ <li>📈 Lines of Code: 12420</li> <li>📄 Lines of Documentation: 610</li> <li>📅 Development Period: 2018-03-01 to 2020-01-22</li> -<li>🔥 Recent Activity: 2582.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 2620.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0.5.1 (2019-01-04)</li> </ul><br /> @@ -838,7 +865,7 @@ <li>📈 Lines of Code: 919</li> <li>📄 Lines of Documentation: 12</li> <li>📅 Development Period: 2015-01-02 to 2021-11-04</li> -<li>🔥 Recent Activity: 3091.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3129.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.1.3 (2015-01-02)</li> </ul><br /> @@ -862,7 +889,7 @@ <li>📈 Lines of Code: 18</li> <li>📄 Lines of Documentation: 49</li> <li>📅 Development Period: 2014-03-24 to 2021-11-05</li> -<li>🔥 Recent Activity: 3327.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3365.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -886,7 +913,7 @@ <li>📈 Lines of Code: 5360</li> <li>📄 Lines of Documentation: 789</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3593.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3632.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.1 (2015-01-02)</li> </ul><br /> @@ -910,7 +937,7 @@ <li>📈 Lines of Code: 273</li> <li>📄 Lines of Documentation: 32</li> <li>📅 Development Period: 2015-09-29 to 2021-11-05</li> -<li>🔥 Recent Activity: 3598.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3636.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Apache-2.0</li> <li>🏷️ Latest Release: 0 (2015-10-26)</li> </ul><br /> @@ -934,7 +961,7 @@ <li>📈 Lines of Code: 1839</li> <li>📄 Lines of Documentation: 412</li> <li>📅 Development Period: 2015-01-02 to 2021-11-05</li> -<li>🔥 Recent Activity: 3677.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3716.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2015-01-02)</li> </ul><br /> @@ -958,7 +985,7 @@ <li>📈 Lines of Code: 499</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2015-05-24 to 2021-11-03</li> -<li>🔥 Recent Activity: 3688.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3726.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1 (2015-06-01)</li> </ul><br /> @@ -980,7 +1007,7 @@ <li>📊 Commits: 670</li> <li>📈 Lines of Code: 1675</li> <li>📅 Development Period: 2011-03-06 to 2018-12-22</li> -<li>🔥 Recent Activity: 3744.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3782.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.0.0 (2018-12-22)</li> </ul><br /> @@ -1004,7 +1031,7 @@ <li>📈 Lines of Code: 88</li> <li>📄 Lines of Documentation: 148</li> <li>📅 Development Period: 2015-06-18 to 2015-12-05</li> -<li>🔥 Recent Activity: 3792.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 3830.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1030,7 +1057,7 @@ <li>📈 Lines of Code: 1681</li> <li>📄 Lines of Documentation: 539</li> <li>📅 Development Period: 2014-03-10 to 2021-11-03</li> -<li>🔥 Recent Activity: 4070.2 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4108.5 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-11-17)</li> </ul><br /> @@ -1054,7 +1081,7 @@ <li>📈 Lines of Code: 65</li> <li>📄 Lines of Documentation: 228</li> <li>📅 Development Period: 2013-03-22 to 2021-11-04</li> -<li>🔥 Recent Activity: 4124.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4162.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.0.0.0 (2013-03-22)</li> </ul><br /> @@ -1078,7 +1105,7 @@ <li>📈 Lines of Code: 136</li> <li>📄 Lines of Documentation: 96</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4137.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4175.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.2.0 (2014-07-05)</li> </ul><br /> @@ -1102,7 +1129,7 @@ <li>📈 Lines of Code: 134</li> <li>📄 Lines of Documentation: 106</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4145.1 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4183.4 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.1.5 (2014-06-22)</li> </ul><br /> @@ -1126,7 +1153,7 @@ <li>📈 Lines of Code: 493</li> <li>📄 Lines of Documentation: 26</li> <li>📅 Development Period: 2009-09-27 to 2021-11-02</li> -<li>🔥 Recent Activity: 4188.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4226.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.9.3 (2014-06-14)</li> </ul><br /> @@ -1150,7 +1177,7 @@ <li>📈 Lines of Code: 286</li> <li>📄 Lines of Documentation: 144</li> <li>📅 Development Period: 2013-03-22 to 2021-11-05</li> -<li>🔥 Recent Activity: 4193.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4231.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 0.4.3 (2014-06-16)</li> </ul><br /> @@ -1165,28 +1192,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='loadbars'>loadbars</h3><br /> -<br /> -<ul> -<li>💻 Languages: Perl (97.4%), Make (2.6%)</li> -<li>📚 Documentation: Text (100.0%)</li> -<li>📊 Commits: 527</li> -<li>📈 Lines of Code: 1828</li> -<li>📄 Lines of Documentation: 200</li> -<li>📅 Development Period: 2010-11-05 to 2021-11-03</li> -<li>🔥 Recent Activity: 4213.7 days (avg. age of last 42 commits)</li> -<li>⚖️ License: No license found</li> -<li>🏷️ Latest Release: 0.7.5 (2014-06-22)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span>loadbars: source code repository.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/loadbars'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/loadbars'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='perl-poetry'>perl-poetry</h3><br /> <br /> <ul> @@ -1196,7 +1201,7 @@ <li>📈 Lines of Code: 191</li> <li>📄 Lines of Documentation: 8</li> <li>📅 Development Period: 2014-03-24 to 2014-03-24</li> -<li>🔥 Recent Activity: 4254.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4293.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1218,7 +1223,7 @@ <li>📊 Commits: 7</li> <li>📈 Lines of Code: 80</li> <li>📅 Development Period: 2011-07-09 to 2015-01-13</li> -<li>🔥 Recent Activity: 4334.7 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4373.0 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1242,7 +1247,7 @@ <li>📈 Lines of Code: 124</li> <li>📄 Lines of Documentation: 75</li> <li>📅 Development Period: 2010-11-05 to 2021-11-05</li> -<li>🔥 Recent Activity: 4375.4 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4413.7 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: 1.0.2 (2014-06-22)</li> </ul><br /> @@ -1257,6 +1262,28 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='loadbars'>loadbars</h3><br /> +<br /> +<ul> +<li>💻 Languages: Perl (97.4%), Make (2.6%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 527</li> +<li>📈 Lines of Code: 1828</li> +<li>📄 Lines of Documentation: 100</li> +<li>📅 Development Period: 2010-11-05 to 2015-05-23</li> +<li>🔥 Recent Activity: 4443.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> +<li>🏷️ Latest Release: 0.7.5 (2014-06-22)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>loadbars: source code repository.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/loadbars'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/loadbars'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='perldaemon'>perldaemon</h3><br /> <br /> <ul> @@ -1264,7 +1291,7 @@ <li>📊 Commits: 110</li> <li>📈 Lines of Code: 614</li> <li>📅 Development Period: 2011-02-05 to 2022-04-21</li> -<li>🔥 Recent Activity: 4454.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4493.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v1.4 (2022-04-29)</li> </ul><br /> @@ -1288,7 +1315,7 @@ <li>📈 Lines of Code: 122</li> <li>📄 Lines of Documentation: 10</li> <li>📅 Development Period: 2011-01-27 to 2014-06-22</li> -<li>🔥 Recent Activity: 4785.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4824.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v0.2 (2011-01-27)</li> </ul><br /> @@ -1312,7 +1339,7 @@ <li>📈 Lines of Code: 720</li> <li>📄 Lines of Documentation: 6</li> <li>📅 Development Period: 2008-06-21 to 2021-11-03</li> -<li>🔥 Recent Activity: 4848.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 4886.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🏷️ Latest Release: v0.3 (2009-02-08)</li> </ul><br /> @@ -1329,6 +1356,30 @@ <br /> <span>---</span><br /> <br /> +<h3 style='display: inline' id='ychat'>ychat</h3><br /> +<br /> +<ul> +<li>💻 Languages: C++ (52.1%), C/C++ (21.3%), Shell (20.1%), HTML (2.5%), Config (2.1%), Perl (1.5%), Make (0.3%)</li> +<li>📚 Documentation: Text (100.0%)</li> +<li>📊 Commits: 67</li> +<li>📈 Lines of Code: 33823</li> +<li>📄 Lines of Documentation: 109</li> +<li>📅 Development Period: 2008-05-15 to 2014-07-01</li> +<li>🔥 Recent Activity: 5441.8 days (avg. age of last 42 commits)</li> +<li>⚖️ License: GPL-2.0</li> +<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> +</ul><br /> +<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> +<br /> +<span>yChat is a high-performance, web-based chat server written in C++ that allows users to connect through standard web browsers without requiring special client software. It functions as a standalone HTTP server on a customizable port (default 2000), eliminating the need for Apache or other web servers, and uses only HTML, CSS, and JavaScript on the client side. The project was developed under the GNU GPL and designed for portability across POSIX-compliant systems including Linux, FreeBSD, and other UNIX variants.</span><br /> +<br /> +<span>The architecture emphasizes speed and scalability through several key design choices: multi-threaded POSIX implementation with thread pooling to efficiently handle concurrent users, hash maps for O(1) data lookups, and a smart garbage collection system that caches inactive user and room objects for quick reuse. It features MySQL database support for registered users, a modular plugin system through dynamically loadable modules, HTML template-based customization, XML configuration, and an ncurses-based administration interface with CLI support. The codebase can also be converted to yhttpd, a standalone web server subset. Performance benchmarks show it handling over 1000 requests/second while using minimal CPU resources, with the system supporting comprehensive logging, multi-language support, and Apache-compatible log formats.</span><br /> +<br /> +<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> +<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> +<br /> +<span>---</span><br /> +<br /> <h3 style='display: inline' id='netcalendar'>netcalendar</h3><br /> <br /> <ul> @@ -1338,7 +1389,7 @@ <li>📈 Lines of Code: 17380</li> <li>📄 Lines of Documentation: 947</li> <li>📅 Development Period: 2009-02-07 to 2021-05-01</li> -<li>🔥 Recent Activity: 5479.3 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5517.6 days (avg. age of last 42 commits)</li> <li>⚖️ License: GPL-2.0</li> <li>🏷️ Latest Release: v0.1 (2009-02-08)</li> </ul><br /> @@ -1357,30 +1408,6 @@ <br /> <span>---</span><br /> <br /> -<h3 style='display: inline' id='ychat'>ychat</h3><br /> -<br /> -<ul> -<li>💻 Languages: C++ (54.9%), C/C++ (23.0%), Shell (13.8%), Perl (2.5%), HTML (2.5%), Config (2.3%), Make (0.8%), CSS (0.2%)</li> -<li>📚 Documentation: Text (100.0%)</li> -<li>📊 Commits: 67</li> -<li>📈 Lines of Code: 67884</li> -<li>📄 Lines of Documentation: 127</li> -<li>📅 Development Period: 2008-05-15 to 2014-06-30</li> -<li>🔥 Recent Activity: 5499.6 days (avg. age of last 42 commits)</li> -<li>⚖️ License: GPL-2.0</li> -<li>🏷️ Latest Release: yhttpd-0.7.2 (2013-04-06)</li> -</ul><br /> -<span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> -<br /> -<span>yChat is a high-performance, web-based chat server written in C++ that allows users to connect through standard web browsers without requiring special client software. It functions as a standalone HTTP server on a customizable port (default 2000), eliminating the need for Apache or other web servers, and uses only HTML, CSS, and JavaScript on the client side. The project was developed under the GNU GPL and designed for portability across POSIX-compliant systems including Linux, FreeBSD, and other UNIX variants.</span><br /> -<br /> -<span>The architecture emphasizes speed and scalability through several key design choices: multi-threaded POSIX implementation with thread pooling to efficiently handle concurrent users, hash maps for O(1) data lookups, and a smart garbage collection system that caches inactive user and room objects for quick reuse. It features MySQL database support for registered users, a modular plugin system through dynamically loadable modules, HTML template-based customization, XML configuration, and an ncurses-based administration interface with CLI support. The codebase can also be converted to yhttpd, a standalone web server subset. Performance benchmarks show it handling over 1000 requests/second while using minimal CPU resources, with the system supporting comprehensive logging, multi-language support, and Apache-compatible log formats.</span><br /> -<br /> -<a class='textlink' href='https://codeberg.org/snonux/ychat'>View on Codeberg</a><br /> -<a class='textlink' href='https://github.com/snonux/ychat'>View on GitHub</a><br /> -<br /> -<span>---</span><br /> -<br /> <h3 style='display: inline' id='hsbot'>hsbot</h3><br /> <br /> <ul> @@ -1388,7 +1415,7 @@ <li>📊 Commits: 80</li> <li>📈 Lines of Code: 601</li> <li>📅 Development Period: 2009-11-22 to 2011-10-17</li> -<li>🔥 Recent Activity: 5574.9 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5613.2 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> @@ -1406,20 +1433,17 @@ <h3 style='display: inline' id='vs-sim'>vs-sim</h3><br /> <br /> <ul> -<li>💻 Languages: Java (98.8%), Shell (0.7%), XML (0.4%)</li> -<li>📚 Documentation: LaTeX (98.4%), Text (1.4%), Markdown (0.2%)</li> +<li>📚 Documentation: Markdown (100.0%)</li> <li>📊 Commits: 411</li> -<li>📈 Lines of Code: 16303</li> -<li>📄 Lines of Documentation: 2903</li> -<li>📅 Development Period: 2008-05-15 to 2021-05-01</li> -<li>🔥 Recent Activity: 5871.4 days (avg. age of last 42 commits)</li> -<li>⚖️ License: Custom License</li> +<li>📈 Lines of Code: 0</li> +<li>📄 Lines of Documentation: 7</li> +<li>📅 Development Period: 2008-05-15 to 2015-05-23</li> +<li>🔥 Recent Activity: 5974.2 days (avg. age of last 42 commits)</li> +<li>⚖️ License: No license found</li> <li>🏷️ Latest Release: v1.0 (2008-08-24)</li> </ul><br /> <span>⚠️ **Notice**: This project appears to be finished, obsolete, or no longer maintained. Last meaningful activity was over 2 years ago. Use at your own risk.</span><br /> <br /> -<a href='showcase/vs-sim/image-1.jpg'><img alt='vs-sim screenshot' title='vs-sim screenshot' src='showcase/vs-sim/image-1.jpg' /></a><br /> -<br /> <span>VS-Sim is a Java-based open source simulator for distributed systems, designed to help students and researchers visualize and understand distributed computing concepts. Based on the roadmap, it appears to support simulating various distributed systems protocols including Lamport and vector clocks for logical time management, and potentially distributed file systems like NFS and AFS. The simulator features event-based simulation, logging capabilities, and a plugin architecture.</span><br /> <br /> <span>The project appears to be currently inactive, with the repository containing minimal source code at present. It was originally developed as part of academic work (referenced as "diplomarbeit.pdf" in the roadmap), likely for teaching distributed systems concepts through interactive simulation and protocol visualization.</span><br /> @@ -1438,7 +1462,7 @@ <li>📈 Lines of Code: 8954</li> <li>📄 Lines of Documentation: 1432</li> <li>📅 Development Period: 2008-05-15 to 2014-06-30</li> -<li>🔥 Recent Activity: 5961.6 days (avg. age of last 42 commits)</li> +<li>🔥 Recent Activity: 5999.9 days (avg. age of last 42 commits)</li> <li>⚖️ License: Custom License</li> <li>🧪 Status: Experimental (no releases yet)</li> </ul><br /> diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index 77c8c2e0..77d93af2 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -32,7 +32,7 @@ <link rel="preload" href="https://github.githubassets.com/assets/mona-sans-14595085164a.woff2" as="font" type="font/woff2" crossorigin> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-8e973f836952.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-34b642d57214.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-4bce7af39e21.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-ad512d3e2f3b.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-8e973f836952.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-34b642d57214.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-54be93e666a7.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-8ae7edf5489c.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-84d50df427c0.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-a80873375146.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-4bce7af39e21.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-ad512d3e2f3b.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-d152d6cd6879.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-fa4060c1a9da.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-d7bad0fb00bb.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-4a0107c0f60c.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-045e6b6ac094.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-5de537db5e79.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-dac525bbd821.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-56ccf4057897.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-784387e86ac0.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-79bd5fd84a86.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-dac525bbd821.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-56ccf4057897.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0e24752a7d2b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-412af2517363.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-6186e83663dc.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-9d33c7aea2e7.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-784387e86ac0.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-79bd5fd84a86.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-75db11311555.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-f2c1045899a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-f46d293c6ff3.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-e4b5684db29d.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-72c58078e707.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-956cb5dfcb85.css" /> <style type="text/css"> :root { @@ -44,45 +44,46 @@ } </style> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-15839d47b75d.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-a5c85403da8c.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-abde950b7df1.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-490b3f68bf33.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-c37d781e2da5.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-8bf3328b2828.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-df4c2156a48b.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-f7230554fa20.css" /> - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_status_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_enable_snapshot_keyword","actions_image_version_event","alternate_user_config_repo","api_insights_show_missing_data_banner","attestations_filtering","attestations_sorting","client_version_header","codespaces_prebuild_region_target_update","contentful_lp_footnotes","copilot_agent_cli_public_preview","copilot_agent_task_list_v2","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_api_draft_issues_with_dependencies","copilot_api_github_draft_update_issue_skill","copilot_chat_agents_empty_state","copilot_chat_attach_multiple_images","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_raycast_logo","copilot_file_block_ref_matching","copilot_free_to_paid_telem","copilot_ftp_hyperspace_upgrade_prompt","copilot_ftp_settings_upgrade","copilot_ftp_upgrade_to_pro_from_models","copilot_ftp_your_copilot_settings","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_insights_column_chart_axis_legibility_fix","copilot_insights_public_preview","copilot_insights_usage_export_ndjson","copilot_no_floating_button","copilot_org_policy_page_focus_mode","copilot_security_alert_assignee_options","copilot_share_active_subthread","copilot_spaces_as_attachments","copilot_spaces_ga","copilot_spark_empty_state","copilot_spark_loading_webgl","copilot_spark_progressive_error_handling","copilot_spark_use_billing_headers","copilot_stable_conversation_view","copilot_swe_agent_progress_commands","copilot_swe_agent_use_subagents","copilot_workbench_agent_seed_tool","copilot_workbench_agent_user_edit_awareness","copilot_workbench_cache","copilot_workbench_preview_analytics","copilot_workbench_use_single_prompt","deployment_record_api","direct_to_salesforce","disable_dashboard_universe_2025_private_preview","dotcom_chat_client_side_skills","failbot_report_error_react_apps_on_page","fetch_graphql_improved_error_serialization","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","global_search_multi_orgs","hpc_improve_dom_insertion_observer","hyperspace_2025_logged_out_batch_1","hyperspace_nudges_universe25","hyperspace_nudges_universe25_post_event","initial_per_page_pagination_updates","inp_reduced_threshold","insert_before_patch","issue_fields_report_usage","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_blur_item_picker_on_close","issues_react_bots_timeline_pagination","issues_react_prohibit_title_fallback","issues_react_remove_placeholders","issues_report_sidebar_interactions","issues_sticky_sidebar","item_picker_issue_type_tsq_migration","item_picker_label_tsq_migration","item_picker_search_cancellation","kb_convert_to_space","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","mcp_registry_install","memex_default_issue_create_repository","memex_grouped_by_edit_route","memex_mwl_filter_field_delimiter","mission_control_use_body_html","new_traffic_page_banner","open_agent_session_in_vscode_stable","pinned_issue_fields","primer_react_segmented_control_tooltip","projects_assignee_max_limit","react_fetch_graphql_ignore_expected_errors","record_sso_banner_metrics","remove_child_patch","repos_insights_remove_new_url","ruleset_deletion_confirmation","sample_network_conn_type","scheduled_reminders_updated_limits","site_features_copilot_universe","site_homepage_collaborate_video","site_homepage_contentful","site_homepage_eyebrow_banner","site_homepage_universe_animations","site_msbuild_webgl_hero","spark_fix_rename","spark_force_push_after_checkout","spark_improve_image_upload","spark_kv_encocoded_keys","spark_show_data_access_on_publish","spark_sync_repository_after_iteration","viewscreen_sandbox","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-1a011967750c.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-c0d7e050063d.js" defer="defer"></script> + <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_status_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_enable_snapshot_keyword","actions_image_version_event","allow_react_navs_in_turbo","alternate_user_config_repo","api_insights_show_missing_data_banner","arianotify_comprehensive_migration","arianotify_partial_migration","client_version_header","codespaces_prebuild_region_target_update","coding_agent_model_selection","contentful_lp_footnotes","copilot_agent_cli_public_preview","copilot_agent_sessions_alive_updates","copilot_agent_task_list_v2","copilot_agent_tasks_btn_code_nav","copilot_agent_tasks_btn_code_view","copilot_agent_tasks_btn_code_view_lines","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_api_draft_issue_reference_with_project_id","copilot_api_github_draft_update_issue_skill","copilot_chat_agents_empty_state","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_raycast_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_generate_thread_name_async","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_org_policy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_security_alert_assignee_options","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_public_access_to_user_owned_spaces","copilot_spaces_read_access_to_user_owned_spaces","copilot_spaces_report_abuse","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_spark_loading_webgl","copilot_stable_conversation_view","copilot_swe_agent_progress_commands","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","dashboard_universe_2025_feedback_dialog","direct_to_salesforce","dom_node_counts","dotcom_chat_client_side_skills","enterprise_ai_controls","failbot_report_error_react_apps_on_page","fetch_graphql_improved_error_serialization","flex_cta_groups_mvp","global_nav_react_edit_status_dialog","global_nav_react_feature_preview","global_nav_react_teams_settings_page","global_nav_react_top_repos_api_caching","hyperspace_2025_logged_out_batch_1","hyperspace_nudges_universe25_post_event","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_client_side_caching_analytics","issues_react_prohibit_title_fallback","issues_report_sidebar_interactions","lifecycle_label_name_updates","link_contact_sales_swp_marketo","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_grouped_by_edit_route","memex_mwl_filter_field_delimiter","mission_control_use_body_html","new_traffic_page_banner","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","projects_assignee_max_limit","react_compiler_diff_lines","react_compiler_markdown_editor","react_custom_partial_router","react_fetch_graphql_ignore_expected_errors","render_user_display_name","repos_insights_remove_new_url","ruleset_deletion_confirmation","sample_network_conn_type","scheduled_reminders_updated_limits","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","site_homepage_contentful","site_homepage_eyebrow_banner","site_homepage_universe_animations","site_msbuild_webgl_hero","spark_prompt_secret_scanning","swe_agent_member_requests","viewscreen_sandbox","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"}</script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/high-contrast-cookie-ff2c933fbe48.js"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-3af251156791.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/913-ca2305638c53.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/6488-de87864e6818.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-6bd9f830d320.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/11683-aa3d1ebe6648.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-b3d48626cc6e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/69676-3e4d0020216a.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/43784-4652ae97a661.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/4712-809eac2badf7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/4712-6fc930a63a4b.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/81028-5b8c5e07a4fa.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/74911-6a311b93ee8e.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/91853-b5d2e5602241.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/91853-2ed22fb46437.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/78143-31968346cf4c.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/52430-c46e2de36eb2.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-5b3e77949adb.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-dcdab6fcfcb8.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/52430-2f44a4a36933.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-4877027ad5a6.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-43ee3b8e95b7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-760965ba27bb.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/react-core-c947eff3bbc1.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/28546-ee41c9313871.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/17688-a9e16fb5ed13.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/2869-a4ba8f17edb3.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/70191-5122bf27bf3e.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7332-9a7cba14a8ba.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/3200-a7d4487d8022.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/95964-b27baff007f7.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/89708-adb89ad4eedf.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/51519-dc0d4e14166a.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7534-44b89d9287f7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7332-5ea4ccf72018.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/3561-5983d983527e.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/24077-adc459723b71.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/51519-d3c416bc1076.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/67310-41f6def2eebb.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/96384-750ef5263abe.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/19718-676a65610616.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-72c6ef216daa.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/48011-5b6f71a93de7.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-eb21f5b0029d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-212bb3cfecca.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/48011-1f20a5c80dd7.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-54f7f2032e0d.js" defer="defer"></script> <title>Page not found · GitHub · GitHub</title> @@ -92,13 +93,13 @@ <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient> <meta name="route-controller" content="blob" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> - <meta name="fetch-nonce" content="v2:bb232dc1-3f10-0ebb-052b-aafba9b1f13d"> + <meta name="fetch-nonce" content="v2:53002de7-8159-738f-a268-62e725da93dd"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="AB6C:3AE3C8:B142D:8ED54:6919DEDA" data-pjax-transient="true"/><meta name="html-safe-nonce" content="fd352624324617d18655b2cbb7b052cb2c0ca05d68942eb2383912a140648791" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQjZDOjNBRTNDODpCMTQyRDo4RUQ1NDo2OTE5REVEQSIsInZpc2l0b3JfaWQiOiI4MjY3MDA4Mzk4MDUyNjc5Mzg2IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="4f4a36e3b91e537f2d27be1322ea52d04170eeb69dc75aed188ca331ee5a4456" data-pjax-transient="true"/> + <meta name="request-id" content="82B8:2FBA83:1C386DA6:155EB3EA:694C5E6C" data-pjax-transient="true"/><meta name="html-safe-nonce" content="75e5c2b54e9dd0c4851fd4b13f13370577452287164b90554828438c0892d052" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MkI4OjJGQkE4MzoxQzM4NkRBNjoxNTVFQjNFQTo2OTRDNUU2QyIsInZpc2l0b3JfaWQiOiIxNTg1ODU5NDQ1Mzc1MzkzMzg4IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="d8403dcabeb363e6a7edb2498e5ecf961c70355876fd02033502b5a0dd27729b" data-pjax-transient="true"/> @@ -174,14 +175,14 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="5b4914921197b3702f1fb352e19c44a5f207b8a04a7db2fdfe0fb288ffea30d4" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="10ca8ba70b291150fcf7f70d2f1c411db71f5fe1180cc91c2f2ef6657e3b8f5d" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="21a43568025709b66240454fc92d4f09335a96863f8ab1c46b4a07f6a5b67102" data-turbo-track="reload"> - <meta http-equiv="x-pjax-css-version" content="64aa48ca69ddc4d1267863e96c8a5c11e0cb33842931f16e1441b54a84bcc1ad" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="a5c4545150b46df9e5c9779d08059514e8f37741d422b687916e43f97a161da7" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="03da391a01750e54015d0ebd9e7e968879f966ef76d8a697be72ccbc12abac55" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="83fbc49cee16d089c40391f34ad346279ae4daf3ec07304c5cc12251ad1eb65f" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/site-7908d55f3275.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/site-a2f470d940d8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/error-3bfb6168c7d5.css" /> <meta name="is_logged_out_page" content="true"> <meta name="octolytics-page-type" content="marketing"> @@ -195,13 +196,14 @@ <meta name="turbo-body-classes" content="logged-out env-production page-responsive min-height-full d-flex flex-column"> + <meta name="disable-turbo" content="false"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="22a3c54b60e2433cd9de7a5b3dced0c6838d93c7"> + <meta name="release" content="f811bedde49bf9a51b22dde975de536adefc6099"> <meta name="ui-target" content="full"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> @@ -217,7 +219,8 @@ </head> <body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;" > - <div data-turbo-body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;"> + <div data-turbo-body class="logged-out env-production page-responsive min-height-full d-flex flex-column" style="word-wrap: break-word;" > + <div id="__primerPortalRoot__" role="region" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div> @@ -229,14 +232,14 @@ <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47239ec6cbe68138fe4c.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.29aaeaafa90f007c6f61.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" - data-react-profiling="false" + data-react-profiling="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> @@ -252,9 +255,17 @@ -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/21481-a66c6eab7bbf.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/43862-5c4df3ba1119.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/85110-f7be2f54525a.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-8cc3729f6e8d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-36ef208f2f57.js" defer="defer"></script> + +<style> + /* Override primer focus outline color for marketing header dropdown links for better contrast */ + [data-color-mode="light"] .HeaderMenu-dropdown-link:focus-visible, + [data-color-mode="light"] .HeaderMenu-trailing-link a:focus-visible { + outline-color: var(--color-accent-fg); + } +</style> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> @@ -294,13 +305,13 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-69160ffe-4431-481a-b8db-27d709f5b98b" aria-labelledby="tooltip-710f4eef-2e0b-4960-a6d2-069776df4448" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-d36f294a-ad11-4995-b594-b0b5839a3584" aria-labelledby="tooltip-50d12c16-c592-4884-97aa-55df2a7e4ca9" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-710f4eef-2e0b-4960-a6d2-069776df4448" for="icon-button-69160ffe-4431-481a-b8db-27d709f5b98b" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-50d12c16-c592-4884-97aa-55df2a7e4ca9" for="icon-button-d36f294a-ad11-4995-b594-b0b5839a3584" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47239ec6cbe68138fe4c.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.753d458774a2f782559b.module.css" /> <react-partial @@ -325,742 +336,27 @@ <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> - <nav class="HeaderMenu-nav" aria-label="Global"> - <ul class="d-lg-flex list-style-none"> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> - Platform - <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> - <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> -</svg> - </button> - - <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 dropdown-menu-wide"> - <div class="d-lg-flex dropdown-menu-wide"> - <div class="HeaderMenu-column px-lg-4"> - <div class=""> - - <ul class="list-style-none f5" > - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"platform","tag":"link","label":"github_copilot_link_platform_navbar"}" href="https://github.com/features/copilot"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> - <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - GitHub Copilot - - </div> - - Write better code with AI - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"github_spark","context":"platform","tag":"link","label":"github_spark_link_platform_navbar"}" href="https://github.com/features/spark"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-sparkle-fill color-fg-subtle mr-3"> - <path d="M11.296 1.924c.24-.656 1.168-.656 1.408 0l.717 1.958a11.25 11.25 0 0 0 6.697 6.697l1.958.717c.657.24.657 1.168 0 1.408l-1.958.717a11.25 11.25 0 0 0-6.697 6.697l-.717 1.958c-.24.657-1.168.657-1.408 0l-.717-1.958a11.25 11.25 0 0 0-6.697-6.697l-1.958-.717c-.656-.24-.656-1.168 0-1.408l1.958-.717a11.25 11.25 0 0 0 6.697-6.697l.717-1.958Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - GitHub Spark - - <span class="HeaderMenu-label"> - New - </span> - </div> - - Build and deploy intelligent apps - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"github_models","context":"platform","tag":"link","label":"github_models_link_platform_navbar"}" href="https://github.com/features/models"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-ai-model color-fg-subtle mr-3"> - <path d="M19.375 8.5a3.25 3.25 0 1 1-3.163 4h-3a3.252 3.252 0 0 1-4.443 2.509L7.214 17.76a3.25 3.25 0 1 1-1.342-.674l1.672-2.957A3.238 3.238 0 0 1 6.75 12c0-.907.371-1.727.97-2.316L6.117 6.846A3.253 3.253 0 0 1 1.875 3.75a3.25 3.25 0 1 1 5.526 2.32l1.603 2.836A3.25 3.25 0 0 1 13.093 11h3.119a3.252 3.252 0 0 1 3.163-2.5ZM10 10.25a1.75 1.75 0 1 0-.001 3.499A1.75 1.75 0 0 0 10 10.25ZM5.125 2a1.75 1.75 0 1 0 0 3.5 1.75 1.75 0 0 0 0-3.5Zm12.5 9.75a1.75 1.75 0 1 0 3.5 0 1.75 1.75 0 0 0-3.5 0Zm-14.25 8.5a1.75 1.75 0 1 0 3.501-.001 1.75 1.75 0 0 0-3.501.001Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - GitHub Models - - <span class="HeaderMenu-label"> - New - </span> - </div> - - Manage and compare prompts - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"github_advanced_security","context":"platform","tag":"link","label":"github_advanced_security_link_platform_navbar"}" href="https://github.com/security/advanced-security"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> - <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - GitHub Advanced Security - - </div> - - Find and fix vulnerabilities - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"actions","context":"platform","tag":"link","label":"actions_link_platform_navbar"}" href="https://github.com/features/actions"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> - <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Actions - - </div> - - Automate any workflow - </div> - - -</a></li> - - </ul> - </div> - </div> - <div class="HeaderMenu-column px-lg-4 pb-3 pb-lg-0 border-lg-right"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <ul class="list-style-none f5" > - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"platform","tag":"link","label":"codespaces_link_platform_navbar"}" href="https://github.com/features/codespaces"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> - <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Codespaces - - </div> - - Instant dev environments - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"platform","tag":"link","label":"issues_link_platform_navbar"}" href="https://github.com/features/issues"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> - <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Issues - - </div> - - Plan and track work - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"platform","tag":"link","label":"code_review_link_platform_navbar"}" href="https://github.com/features/code-review"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> - <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Code Review - - </div> - - Manage code changes - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"platform","tag":"link","label":"discussions_link_platform_navbar"}" href="https://github.com/features/discussions"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> - <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Discussions - - </div> - - Collaborate outside of code - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"platform","tag":"link","label":"code_search_link_platform_navbar"}" href="https://github.com/features/code-search"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> - <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Code Search - - </div> - - Find more, search less - </div> - - -</a></li> - - </ul> - </div> - </div> - <div class="HeaderMenu-column px-lg-4"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 mb-3 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="platform-explore-heading">Explore</span> - - <ul class="list-style-none f5" aria-labelledby="platform-explore-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"why_github","context":"platform","tag":"link","label":"why_github_link_platform_navbar"}" href="https://github.com/why-github"> - Why GitHub - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"platform","tag":"link","label":"documentation_link_platform_navbar"}" href="https://docs.github.com"> - Documentation - - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> - <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> -</svg> -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"platform","tag":"link","label":"github_skills_link_platform_navbar"}" href="https://skills.github.com"> - GitHub Skills - - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> - <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> -</svg> -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"platform","tag":"link","label":"blog_link_platform_navbar"}" href="https://github.blog"> - Blog - - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> - <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> -</svg> -</a></li> - - </ul> - </div> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="platform-integrations-heading">Integrations</span> - - <ul class="list-style-none f5" aria-labelledby="platform-integrations-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"github_marketplace","context":"platform","tag":"link","label":"github_marketplace_link_platform_navbar"}" href="https://github.com/marketplace"> - GitHub Marketplace - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"mcp_registry","context":"platform","tag":"link","label":"mcp_registry_link_platform_navbar"}" href="https://github.com/mcp"> - MCP Registry - - -</a></li> - - </ul> - </div> - </div> - </div> - - <div class="HeaderMenu-trailing-link rounded-bottom-2 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> - <a data-analytics-event="{"location":"navbar","action":"view_all_features","context":"platform","tag":"link","label":"view_all_features_link_platform_navbar"}" href="https://github.com/features"> - View all features - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> - <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> -</svg> -</a> </div> - </div> -</li> - - - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> - Solutions - <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> - <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> -</svg> - </button> - - <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 dropdown-menu-wide"> - <div class="d-lg-flex dropdown-menu-wide"> - <div class="HeaderMenu-column px-lg-4 pb-3 pb-lg-0 border-lg-right"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> - - <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> - Enterprises - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> - Small and medium teams - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> - Startups - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"nonprofits","context":"solutions","tag":"link","label":"nonprofits_link_solutions_navbar"}" href="/solutions/industry/nonprofits"> - Nonprofits - - -</a></li> - - </ul> - </div> - </div> - <div class="HeaderMenu-column px-lg-4 pb-3 pb-lg-0 border-lg-right"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> - - <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"app_modernization","context":"solutions","tag":"link","label":"app_modernization_link_solutions_navbar"}" href="/solutions/use-case/app-modernization"> - App Modernization - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> - DevSecOps - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> - DevOps - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> - CI/CD - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> - View all use cases - - -</a></li> - - </ul> - </div> - </div> - <div class="HeaderMenu-column px-lg-4"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> - - <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> - Healthcare - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> - Financial services - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> - Manufacturing - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> - Government - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> - View all industries - - -</a></li> - - </ul> - </div> - </div> - </div> - - <div class="HeaderMenu-trailing-link rounded-bottom-2 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> - <a data-analytics-event="{"location":"navbar","action":"view_all_solutions","context":"solutions","tag":"link","label":"view_all_solutions_link_solutions_navbar"}" href="/solutions"> - View all solutions - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> - <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> -</svg> -</a> </div> - </div> -</li> - - - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> - Resources - <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> - <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> -</svg> - </button> - - <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 dropdown-menu-wide"> - <div class="d-lg-flex dropdown-menu-wide"> - <div class="HeaderMenu-column px-lg-4 pb-3 pb-lg-0 border-lg-right"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 pb-3"> - - <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> - - <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles?topic=ai"> - AI - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles?topic=devops"> - DevOps - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles?topic=security"> - Security - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles?topic=software-development"> - Software Development - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> - View all - - -</a></li> - - </ul> - </div> - </div> - <div class="HeaderMenu-column px-lg-4"> - <div class="border-bottom border-lg-bottom-0 pb-lg-0 border-bottom-0"> - - <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> - - <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> - Learning Pathways - - <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> - <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> -</svg> -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"events_amp_webinars","context":"resources","tag":"link","label":"events_amp_webinars_link_resources_navbar"}" href="https://github.com/resources/events"> - Events & Webinars - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ebooks_amp_whitepapers","context":"resources","tag":"link","label":"ebooks_amp_whitepapers_link_resources_navbar"}" href="https://github.com/resources/whitepapers"> - Ebooks & Whitepapers - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> - Customer Stories - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://github.com/partners"> - Partners - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"executive_insights","context":"resources","tag":"link","label":"executive_insights_link_resources_navbar"}" href="https://github.com/solutions/executive-insights"> - Executive Insights - - -</a></li> - - </ul> - </div> - </div> - </div> - - </div> -</li> - - - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> - Open Source - <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> - <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> -</svg> - </button> - - <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4"> - <div class="d-lg-flex dropdown-menu-wide"> - <div class="HeaderMenu-column px-lg-4"> - <div class="border-bottom mb-3 mb-lg-3 pb-3"> - - <ul class="list-style-none f5" > - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> - - <div> - <div class="color-fg-default h4"> - GitHub Sponsors - - </div> - - Fund open source developers - </div> - - -</a></li> - - </ul> - </div> - <div class="border-bottom mb-3 mb-lg-3 pb-3"> - - <ul class="list-style-none f5" > - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> - - <div> - <div class="color-fg-default h4"> - The ReadME Project - - </div> - - GitHub community articles - </div> - - -</a></li> - - </ul> - </div> - <div class="border-bottom border-bottom-0"> - - <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> - - <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> - Topics - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> - Trending - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> - Collections - - -</a></li> - - </ul> - </div> - </div> - </div> - - </div> -</li> - - - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> - Enterprise - <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> - <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> -</svg> - </button> - - <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4"> - <div class="d-lg-flex dropdown-menu-wide"> - <div class="HeaderMenu-column px-lg-4"> - <div class="border-bottom mb-3 mb-lg-3 pb-3"> - - <ul class="list-style-none f5" > - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> - <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Enterprise platform - - </div> - - AI-powered developer platform - </div> - - -</a></li> - - </ul> - </div> - <div class="border-bottom border-bottom-0"> - - <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> - - <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"github_advanced_security","context":"enterprise","tag":"link","label":"github_advanced_security_link_enterprise_navbar"}" href="https://github.com/security/advanced-security"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> - <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - GitHub Advanced Security - - </div> - - Enterprise-grade security features - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description mb-lg-3" data-analytics-event="{"location":"navbar","action":"copilot_for_business","context":"enterprise","tag":"link","label":"copilot_for_business_link_enterprise_navbar"}" href="/features/copilot/copilot-business"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> - <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Copilot for business - - </div> - - Enterprise-grade AI features - </div> - - -</a></li> - - <li> - <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> - <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> - <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> -</svg> - <div> - <div class="color-fg-default h4"> - Premium Support - - </div> - - Enterprise-grade 24/7 support - </div> - - -</a></li> - - </ul> - </div> - </div> - </div> - - </div> -</li> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47239ec6cbe68138fe4c.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/marketing-navigation.8284bdfe1ee4804a58c1.module.css" /> +<react-partial + partial-name="marketing-navigation" + data-ssr="true" + data-attempted-ssr="true" + data-react-profiling="false" +> + + <script type="application/json" data-target="react-partial.embeddedData">{"props":{"should_use_dotcom_links":true}}</script> + <div data-target="react-partial.reactRoot"><nav class="MarketingNavigation-module__nav--jA9Zq" aria-label="Global"><ul class="MarketingNavigation-module__list--r_vr2"><li><div class="NavDropdown-module__container--bmXM2 js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button--Hq9UR js-details-target" aria-expanded="false">Platform<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon--SR0Ke" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></button><div class="NavDropdown-module__dropdown--Ig57Y"><ul class="NavDropdown-module__list--RwSSK"><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">AI CODE CREATION</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/features/copilot" data-analytics-event="{"action":"github_copilot","tag":"link","context":"platform","location":"navbar","label":"github_copilot_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Copilot</span><span class="NavLink-module__subtitle--qC15H">Write better code with AI</span></div></a></li><li><a href="https://github.com/features/spark" data-analytics-event="{"action":"github_spark","tag":"link","context":"platform","location":"navbar","label":"github_spark_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-sparkle-fill NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M11.296 1.924c.24-.656 1.168-.656 1.408 0l.717 1.958a11.25 11.25 0 0 0 6.697 6.697l1.958.717c.657.24.657 1.168 0 1.408l-1.958.717a11.25 11.25 0 0 0-6.697 6.697l-.717 1.958c-.24.657-1.168.657-1.408 0l-.717-1.958a11.25 11.25 0 0 0-6.697-6.697l-1.958-.717c-.656-.24-.656-1.168 0-1.408l1.958-.717a11.25 11.25 0 0 0 6.697-6.697l.717-1.958Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Spark</span><span class="NavLink-module__subtitle--qC15H">Build and deploy intelligent apps</span></div></a></li><li><a href="https://github.com/features/models" data-analytics-event="{"action":"github_models","tag":"link","context":"platform","location":"navbar","label":"github_models_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-ai-model NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M19.375 8.5a3.25 3.25 0 1 1-3.163 4h-3a3.252 3.252 0 0 1-4.443 2.509L7.214 17.76a3.25 3.25 0 1 1-1.342-.674l1.672-2.957A3.238 3.238 0 0 1 6.75 12c0-.907.371-1.727.97-2.316L6.117 6.846A3.253 3.253 0 0 1 1.875 3.75a3.25 3.25 0 1 1 5.526 2.32l1.603 2.836A3.25 3.25 0 0 1 13.093 11h3.119a3.252 3.252 0 0 1 3.163-2.5ZM10 10.25a1.75 1.75 0 1 0-.001 3.499A1.75 1.75 0 0 0 10 10.25ZM5.125 2a1.75 1.75 0 1 0 0 3.5 1.75 1.75 0 0 0 0-3.5Zm12.5 9.75a1.75 1.75 0 1 0 3.5 0 1.75 1.75 0 0 0-3.5 0Zm-14.25 8.5a1.75 1.75 0 1 0 3.501-.001 1.75 1.75 0 0 0-3.501.001Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Models</span><span class="NavLink-module__subtitle--qC15H">Manage and compare prompts</span></div></a></li><li><a href="https://github.com/mcp" data-analytics-event="{"action":"mcp_registry","tag":"link","context":"platform","location":"navbar","label":"mcp_registry_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.795 1.694a4.287 4.287 0 0 1 6.061 0 4.28 4.28 0 0 1 1.181 3.819 4.282 4.282 0 0 1 3.819 1.181 4.287 4.287 0 0 1 0 6.061l-6.793 6.793a.249.249 0 0 0 0 .353l2.617 2.618a.75.75 0 1 1-1.061 1.061l-2.617-2.618a1.75 1.75 0 0 1 0-2.475l6.793-6.793a2.785 2.785 0 1 0-3.939-3.939l-5.9 5.9a.734.734 0 0 1-.249.165.749.749 0 0 1-.812-1.225l5.9-5.901a2.785 2.785 0 1 0-3.939-3.939L2.931 10.68A.75.75 0 1 1 1.87 9.619l7.925-7.925Z"></path><path d="M12.42 4.069a.752.752 0 0 1 1.061 0 .752.752 0 0 1 0 1.061L7.33 11.28a2.788 2.788 0 0 0 0 3.94 2.788 2.788 0 0 0 3.94 0l6.15-6.151a.752.752 0 0 1 1.061 0 .752.752 0 0 1 0 1.061l-6.151 6.15a4.285 4.285 0 1 1-6.06-6.06l6.15-6.151Z"></path></svg><span class="NavLink-module__title--xw3ok">MCP Registry<sup class="NavLink-module__label--MrIhm">New</sup></span><span class="NavLink-module__subtitle--qC15H">Integrate external tools</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/features/actions" data-analytics-event="{"action":"actions","tag":"link","context":"platform","location":"navbar","label":"actions_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path></svg><span class="NavLink-module__title--xw3ok">Actions</span><span class="NavLink-module__subtitle--qC15H">Automate any workflow</span></div></a></li><li><a href="https://github.com/features/codespaces" data-analytics-event="{"action":"codespaces","tag":"link","context":"platform","location":"navbar","label":"codespaces_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg><span class="NavLink-module__title--xw3ok">Codespaces</span><span class="NavLink-module__subtitle--qC15H">Instant dev environments</span></div></a></li><li><a href="https://github.com/features/issues" data-analytics-event="{"action":"issues","tag":"link","context":"platform","location":"navbar","label":"issues_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path></svg><span class="NavLink-module__title--xw3ok">Issues</span><span class="NavLink-module__subtitle--qC15H">Plan and track work</span></div></a></li><li><a href="https://github.com/features/code-review" data-analytics-event="{"action":"code_review","tag":"link","context":"platform","location":"navbar","label":"code_review_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15.22 4.97a.75.75 0 0 1 1.06 0l6.5 6.5a.75.75 0 0 1 0 1.06l-6.5 6.5a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L21.19 12l-5.97-5.97a.75.75 0 0 1 0-1.06Zm-6.44 0a.75.75 0 0 1 0 1.06L2.81 12l5.97 5.97a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-6.5-6.5a.75.75 0 0 1 0-1.06l6.5-6.5a.75.75 0 0 1 1.06 0Z"></path></svg><span class="NavLink-module__title--xw3ok">Code Review</span><span class="NavLink-module__subtitle--qC15H">Manage code changes</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">APPLICATION SECURITY</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/security/advanced-security" data-analytics-event="{"action":"github_advanced_security","tag":"link","context":"platform","location":"navbar","label":"github_advanced_security_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Advanced Security</span><span class="NavLink-module__subtitle--qC15H">Find and fix vulnerabilities</span></div></a></li><li><a href="https://github.com/security/advanced-security/code-security" data-analytics-event="{"action":"code_security","tag":"link","context":"platform","location":"navbar","label":"code_security_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path></svg><span class="NavLink-module__title--xw3ok">Code security</span><span class="NavLink-module__subtitle--qC15H">Secure your code as you build</span></div></a></li><li><a href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{"action":"secret_protection","tag":"link","context":"platform","location":"navbar","label":"secret_protection_link_platform_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6 9V7.25C6 3.845 8.503 1 12 1s6 2.845 6 6.25V9h.5a2.5 2.5 0 0 1 2.5 2.5v8a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 19.5v-8A2.5 2.5 0 0 1 5.5 9Zm-1.5 2.5v8a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1h-13a1 1 0 0 0-1 1Zm3-4.25V9h9V7.25c0-2.67-1.922-4.75-4.5-4.75-2.578 0-4.5 2.08-4.5 4.75Z"></path></svg><span class="NavLink-module__title--xw3ok">Secret protection</span><span class="NavLink-module__subtitle--qC15H">Stop leaks before they start</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n NavGroup-module__hasSeparator--AJeNz"><span class="NavGroup-module__title--TdKyz">EXPLORE</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/why-github" data-analytics-event="{"action":"why_github","tag":"link","context":"platform","location":"navbar","label":"why_github_link_platform_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Why GitHub</span></a></li><li><a href="https://docs.github.com" data-analytics-event="{"action":"documentation","tag":"link","context":"platform","location":"navbar","label":"documentation_link_platform_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://github.blog" data-analytics-event="{"action":"blog","tag":"link","context":"platform","location":"navbar","label":"blog_link_platform_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Blog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://github.blog/changelog" data-analytics-event="{"action":"changelog","tag":"link","context":"platform","location":"navbar","label":"changelog_link_platform_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Changelog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://github.com/marketplace" data-analytics-event="{"action":"marketplace","tag":"link","context":"platform","location":"navbar","label":"marketplace_link_platform_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer--MNB5T"><a href="https://github.com/features" data-analytics-event="{"action":"view_all_features","tag":"link","context":"platform","location":"navbar","label":"view_all_features_link_platform_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">View all features</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon--g6Lip" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container--bmXM2 js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button--Hq9UR js-details-target" aria-expanded="false">Solutions<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon--SR0Ke" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></button><div class="NavDropdown-module__dropdown--Ig57Y"><ul class="NavDropdown-module__list--RwSSK"><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">BY COMPANY SIZE</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/enterprise" data-analytics-event="{"action":"enterprises","tag":"link","context":"solutions","location":"navbar","label":"enterprises_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Enterprises</span></a></li><li><a href="https://github.com/team" data-analytics-event="{"action":"small_and_medium_teams","tag":"link","context":"solutions","location":"navbar","label":"small_and_medium_teams_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Small and medium teams</span></a></li><li><a href="https://github.com/enterprise/startups" data-analytics-event="{"action":"startups","tag":"link","context":"solutions","location":"navbar","label":"startups_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Startups</span></a></li><li><a href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{"action":"nonprofits","tag":"link","context":"solutions","location":"navbar","label":"nonprofits_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">BY USE CASE</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{"action":"app_modernization","tag":"link","context":"solutions","location":"navbar","label":"app_modernization_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">App Modernization</span></a></li><li><a href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{"action":"devsecops","tag":"link","context":"solutions","location":"navbar","label":"devsecops_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">DevSecOps</span></a></li><li><a href="https://github.com/solutions/use-case/devops" data-analytics-event="{"action":"devops","tag":"link","context":"solutions","location":"navbar","label":"devops_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">DevOps</span></a></li><li><a href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{"action":"ci/cd","tag":"link","context":"solutions","location":"navbar","label":"ci/cd_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">CI/CD</span></a></li><li><a href="https://github.com/solutions/use-case" data-analytics-event="{"action":"view_all_use_cases","tag":"link","context":"solutions","location":"navbar","label":"view_all_use_cases_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">View all use cases</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon--g6Lip" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">BY INDUSTRY</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/solutions/industry/healthcare" data-analytics-event="{"action":"healthcare","tag":"link","context":"solutions","location":"navbar","label":"healthcare_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Healthcare</span></a></li><li><a href="https://github.com/solutions/industry/financial-services" data-analytics-event="{"action":"financial_services","tag":"link","context":"solutions","location":"navbar","label":"financial_services_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Financial services</span></a></li><li><a href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{"action":"manufacturing","tag":"link","context":"solutions","location":"navbar","label":"manufacturing_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Manufacturing</span></a></li><li><a href="https://github.com/solutions/industry/government" data-analytics-event="{"action":"government","tag":"link","context":"solutions","location":"navbar","label":"government_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Government</span></a></li><li><a href="https://github.com/solutions/industry" data-analytics-event="{"action":"view_all_industries","tag":"link","context":"solutions","location":"navbar","label":"view_all_industries_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">View all industries</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon--g6Lip" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer--MNB5T"><a href="https://github.com/solutions" data-analytics-event="{"action":"view_all_solutions","tag":"link","context":"solutions","location":"navbar","label":"view_all_solutions_link_solutions_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">View all solutions</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon--g6Lip" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container--bmXM2 js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button--Hq9UR js-details-target" aria-expanded="false">Resources<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon--SR0Ke" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></button><div class="NavDropdown-module__dropdown--Ig57Y"><ul class="NavDropdown-module__list--RwSSK"><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/resources/articles?topic=ai" data-analytics-event="{"action":"ai","tag":"link","context":"resources","location":"navbar","label":"ai_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">AI</span></a></li><li><a href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{"action":"software_development","tag":"link","context":"resources","location":"navbar","label":"software_development_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Software Development</span></a></li><li><a href="https://github.com/resources/articles?topic=devops" data-analytics-event="{"action":"devops","tag":"link","context":"resources","location":"navbar","label":"devops_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">DevOps</span></a></li><li><a href="https://github.com/resources/articles?topic=security" data-analytics-event="{"action":"security","tag":"link","context":"resources","location":"navbar","label":"security_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Security</span></a></li><li><a href="https://github.com/resources/articles" data-analytics-event="{"action":"view_all_topics","tag":"link","context":"resources","location":"navbar","label":"view_all_topics_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">View all topics</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon--g6Lip" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">EXPLORE BY TYPE</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/customer-stories" data-analytics-event="{"action":"customer_stories","tag":"link","context":"resources","location":"navbar","label":"customer_stories_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Customer stories</span></a></li><li><a href="https://github.com/resources/events" data-analytics-event="{"action":"events__webinars","tag":"link","context":"resources","location":"navbar","label":"events__webinars_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Events & webinars</span></a></li><li><a href="https://github.com/resources/whitepapers" data-analytics-event="{"action":"ebooks__reports","tag":"link","context":"resources","location":"navbar","label":"ebooks__reports_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Ebooks & reports</span></a></li><li><a href="https://github.com/solutions/executive-insights" data-analytics-event="{"action":"business_insights","tag":"link","context":"resources","location":"navbar","label":"business_insights_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Business insights</span></a></li><li><a href="https://skills.github.com" data-analytics-event="{"action":"github_skills","tag":"link","context":"resources","location":"navbar","label":"github_skills_link_resources_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">GitHub Skills</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">SUPPORT & SERVICES</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://docs.github.com" data-analytics-event="{"action":"documentation","tag":"link","context":"resources","location":"navbar","label":"documentation_link_resources_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://support.github.com" data-analytics-event="{"action":"customer_support","tag":"link","context":"resources","location":"navbar","label":"customer_support_link_resources_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Customer support</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://github.com/orgs/community/discussions" data-analytics-event="{"action":"community_forum","tag":"link","context":"resources","location":"navbar","label":"community_forum_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Community forum</span></a></li><li><a href="https://github.com/trust-center" data-analytics-event="{"action":"trust_center","tag":"link","context":"resources","location":"navbar","label":"trust_center_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Trust center</span></a></li><li><a href="https://github.com/partners" data-analytics-event="{"action":"partners","tag":"link","context":"resources","location":"navbar","label":"partners_link_resources_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Partners</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container--bmXM2 js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button--Hq9UR js-details-target" aria-expanded="false">Open Source<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon--SR0Ke" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></button><div class="NavDropdown-module__dropdown--Ig57Y"><ul class="NavDropdown-module__list--RwSSK"><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">COMMUNITY</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/sponsors" data-analytics-event="{"action":"github_sponsors","tag":"link","context":"open_source","location":"navbar","label":"github_sponsors_link_open_source_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M16.004 1.25C18.311 1.25 20 3.128 20 5.75c0 2.292-1.23 4.464-3.295 6.485-.481.47-.98.909-1.482 1.31l.265 1.32 1.375 7.5a.75.75 0 0 1-.982.844l-3.512-1.207a.75.75 0 0 0-.488 0L8.37 23.209a.75.75 0 0 1-.982-.844l1.378-7.512.261-1.309c-.5-.4-1-.838-1.481-1.31C5.479 10.215 4.25 8.043 4.25 5.75c0-2.622 1.689-4.5 3.996-4.5 1.55 0 2.947.752 3.832 1.967l.047.067.047-.067a4.726 4.726 0 0 1 3.612-1.962l.22-.005ZM13.89 14.531c-.418.285-.828.542-1.218.77l-.18.103a.75.75 0 0 1-.734 0l-.071-.04-.46-.272c-.282-.173-.573-.36-.868-.562l-.121.605-1.145 6.239 2.3-.79a2.248 2.248 0 0 1 1.284-.054l.18.053 2.299.79-1.141-6.226-.125-.616ZM16.004 2.75c-1.464 0-2.731.983-3.159 2.459-.209.721-1.231.721-1.44 0-.428-1.476-1.695-2.459-3.16-2.459-1.44 0-2.495 1.173-2.495 3 0 1.811 1.039 3.647 2.844 5.412a19.624 19.624 0 0 0 3.734 2.84l-.019-.011-.184-.111.147-.088a19.81 19.81 0 0 0 3.015-2.278l.37-.352C17.46 9.397 18.5 7.561 18.5 5.75c0-1.827-1.055-3-2.496-3Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Sponsors</span><span class="NavLink-module__subtitle--qC15H">Fund open source developers</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">PROGRAMS</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://securitylab.github.com" data-analytics-event="{"action":"security_lab","tag":"link","context":"open_source","location":"navbar","label":"security_lab_link_open_source_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Security Lab</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://maintainers.github.com" data-analytics-event="{"action":"maintainer_community","tag":"link","context":"open_source","location":"navbar","label":"maintainer_community_link_open_source_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Maintainer Community</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a href="https://github.com/accelerator" data-analytics-event="{"action":"accelerator","tag":"link","context":"open_source","location":"navbar","label":"accelerator_link_open_source_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Accelerator</span></a></li><li><a href="https://archiveprogram.github.com" data-analytics-event="{"action":"archive_program","tag":"link","context":"open_source","location":"navbar","label":"archive_program_link_open_source_navbar"}" class="NavLink-module__link--n48VB" target="_blank" rel="noreferrer"><span class="NavLink-module__title--xw3ok">Archive Program</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon--JurQ9" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">REPOSITORIES</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/topics" data-analytics-event="{"action":"topics","tag":"link","context":"open_source","location":"navbar","label":"topics_link_open_source_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Topics</span></a></li><li><a href="https://github.com/trending" data-analytics-event="{"action":"trending","tag":"link","context":"open_source","location":"navbar","label":"trending_link_open_source_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Trending</span></a></li><li><a href="https://github.com/collections" data-analytics-event="{"action":"collections","tag":"link","context":"open_source","location":"navbar","label":"collections_link_open_source_navbar"}" class="NavLink-module__link--n48VB"><span class="NavLink-module__title--xw3ok">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container--bmXM2 js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button--Hq9UR js-details-target" aria-expanded="false">Enterprise<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon--SR0Ke" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path></svg></button><div class="NavDropdown-module__dropdown--Ig57Y"><ul class="NavDropdown-module__list--RwSSK"><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/enterprise" data-analytics-event="{"action":"enterprise_platform","tag":"link","context":"enterprise","location":"navbar","label":"enterprise_platform_link_enterprise_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path></svg><span class="NavLink-module__title--xw3ok">Enterprise platform</span><span class="NavLink-module__subtitle--qC15H">AI-powered developer platform</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group--T925n"><span class="NavGroup-module__title--TdKyz">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list--M8eGv"><li><a href="https://github.com/security/advanced-security" data-analytics-event="{"action":"github_advanced_security","tag":"link","context":"enterprise","location":"navbar","label":"github_advanced_security_link_enterprise_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path></svg><span class="NavLink-module__title--xw3ok">GitHub Advanced Security</span><span class="NavLink-module__subtitle--qC15H">Enterprise-grade security features</span></div></a></li><li><a href="https://github.com/features/copilot/copilot-business" data-analytics-event="{"action":"copilot_for_business","tag":"link","context":"enterprise","location":"navbar","label":"copilot_for_business_link_enterprise_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path></svg><span class="NavLink-module__title--xw3ok">Copilot for Business</span><span class="NavLink-module__subtitle--qC15H">Enterprise-grade AI features</span></div></a></li><li><a href="https://github.com/premium-support" data-analytics-event="{"action":"premium_support","tag":"link","context":"enterprise","location":"navbar","label":"premium_support_link_enterprise_navbar"}" class="NavLink-module__link--n48VB"><div class="NavLink-module__text--SdWkb"><svg aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon--h0sw7" viewBox="0 0 24 24" width="24" height="24" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path></svg><span class="NavLink-module__title--xw3ok">Premium Support</span><span class="NavLink-module__subtitle--qC15H">Enterprise-grade 24/7 support</span></div></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{"action":"pricing","tag":"link","context":"pricing","location":"navbar","label":"pricing_link_pricing_navbar"}" class="NavLink-module__link--n48VB MarketingNavigation-module__navLink--U9Uuk"><span class="NavLink-module__title--xw3ok">Pricing</span></a></li></ul></nav><script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> +</react-partial> - <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> - <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"platform","context":"global","tag":"link","label":"platform_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> -</li> - </ul> - </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="SWFWPA3pETroz3T9J4em4Rb3cXLe15Xxn5A6Bstn3jsRjtDUHUiBIVHHNWqb0MM5lHzM6J2BK9C7zMsnWhGODQ" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> +<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="zd8pugfMXCs9CcF624q_fjTyE2ZnaIHEgnlE-OZZ7y3QWCmBCnTrHP3Ut0dOZu1i1Gkgam38mH8ylmVXN7d53Q" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="" data-current-org="" data-current-owner="" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" @@ -1124,7 +420,7 @@ ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> - <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-325fac4a-ee7f-4f0a-823e-44060bef3257" data-target="query-builder.input" data-action=" + <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-f5d5c4d2-a670-461c-aa14-3aa6c02abac2" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -1362,7 +658,7 @@ tabindex="-1" ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-325fac4a-ee7f-4f0a-823e-44060bef3257" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-f5d5c4d2-a670-461c-aa14-3aa6c02abac2" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> @@ -1403,7 +699,7 @@ </div> <scrollable-region data-labelled-by="feedback-dialog-title"> - <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="FNP3v92uI/gFjF9ympJKL/vHXCiidd2IyeEMqTOhCGGax+hNz7zsrOt67dm4pH6EnA867OBsNsvOQKYUIGidGA==" /> + <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="cOptsU1+M0XRUQEzMH+0Ilge7z445Nn1nTNY0Zzps1YyXKl41xBbDk6Wg0kDpdZqjWNADZ1HTmBuVRQrpHVSRA==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> @@ -1441,7 +737,7 @@ <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> - <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="35Amt5WiN1Qjoeo4zF5nkTSEDINwFw6sSQaLuLZOW7Vaov9DR/ahNKa7ouOe1pnaRyu911Lk1+/RXMMl9flr5Q==" /> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="mUzubcljs5guzNcae6hLZw/YeLCUlpT+8xBN4ft4eo1PVTacjkKkDmFrAM/63KEiUL/bTXA2V2zPrsiLFd1Gig==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -1459,7 +755,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="ehmlQCvuzNS5R/Ycc8rZwJsppFkDNZYcJS82/5wYg9SuRX5+CV1FdA75PsrtyvX5T66GDmLipIUaewSvP4Lj/Q==" /> + <input type="hidden" data-csrf="true" value="hbpyygSlveBVnKRGSIeeWoC3R5Hd94C1HOB4s3Fm0tyHqU2ReF/x05ECli6jkop81HHpL5/AgxiXNMKYHaI8jQ==" /> </auto-check> </div> @@ -1514,7 +810,7 @@ <h4 data-view-component="true" class="color-fg-default mb-2"> Sign in to GitHub </h4> -<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="ohxdd7CiAzKEBsLH2G+aofIna5lSNwD+79z4EYhgBoMErSLqCQxMfJGwCfnQTzVjtkSPQpGKsjWysoD7yN1Qig==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> +<!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/session" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="e1zcqK10AAUYwgpa3NdO1Whgla024IYsXT4NpwNERn8iiaNuD+1f0aTbK3wZtAexNIAn7X6WyXdM9uCLzBdHNQ==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -1536,9 +832,9 @@ <input type="hidden" name="allow_signup" id="allow_signup" autocomplete="off" class="form-control" /> <input type="hidden" name="client_id" id="client_id" autocomplete="off" class="form-control" /> <input type="hidden" name="integration" id="integration" autocomplete="off" class="form-control" /> -<input class="form-control" type="text" name="required_field_8a0c" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1763303130489" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="c5ae33b801b3edaaa79e89907595a5031a5cd9fa9bfb0d55577ac58a569c1031" /> +<input class="form-control" type="text" name="required_field_7935" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1766612588947" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="0183603a8a1b271b720f4cc557b9af96193b43f136b028ec5bc99f4d3f9d90fc" /> <input type="submit" name="commit" value="Sign in" class="btn btn-primary btn-block js-sign-in-button" data-disable-with="Signing in…" data-signin-label="Sign in" data-sso-label="Sign in with your identity provider" development="false" disable-emu-sso="false" /> @@ -1565,13 +861,13 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-e1f09dc8-82a4-49ac-981a-9c52aa29c2f2" aria-labelledby="tooltip-c553ac69-f6d2-4897-9bd9-44b722efc6f5" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> + <button data-target="react-partial-anchor.anchor" id="icon-button-6b2b5524-38d5-4a08-8b9c-ca68b8b46ee6" aria-labelledby="tooltip-923d9bd5-ac16-4353-a1a2-3aae5f1797cc" type="button" disabled="disabled" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium AppHeader-button HeaderMenu-link border cursor-wait"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sliders Button-visual"> <path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path> </svg> -</button><tool-tip id="tooltip-c553ac69-f6d2-4897-9bd9-44b722efc6f5" for="icon-button-e1f09dc8-82a4-49ac-981a-9c52aa29c2f2" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> +</button><tool-tip id="tooltip-923d9bd5-ac16-4353-a1a2-3aae5f1797cc" for="icon-button-6b2b5524-38d5-4a08-8b9c-ca68b8b46ee6" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Appearance settings</tool-tip> <template data-target="react-partial-anchor.template"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.2ed7297523f7a189873b.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.47239ec6cbe68138fe4c.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.753d458774a2f782559b.module.css" /> <react-partial @@ -1606,10 +902,10 @@ <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> - <button id="icon-button-0dceafc0-1e4c-47f9-90a6-2038a03d7c45" aria-labelledby="tooltip-a5bd6334-f9cd-4f5d-bf5a-e5a0cded4731" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> + <button id="icon-button-bc8014c8-0ee7-4638-bbf8-b5522b0f6e3b" aria-labelledby="tooltip-3f977ad5-11bf-4e32-b694-b3672bd98346" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> -</button><tool-tip id="tooltip-a5bd6334-f9cd-4f5d-bf5a-e5a0cded4731" for="icon-button-0dceafc0-1e4c-47f9-90a6-2038a03d7c45" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> +</button><tool-tip id="tooltip-3f977ad5-11bf-4e32-b694-b3672bd98346" for="icon-button-bc8014c8-0ee7-4638-bbf8-b5522b0f6e3b" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> diff --git a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html index 6591ab80..cad77deb 100644 --- a/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html +++ b/gemfeed/2025-10-02-f3s-kubernetes-with-freebsd-part-7.html @@ -128,7 +128,10 @@ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> <pre>[root@r0 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> - sh -s - server --cluster-init --tls-san=r0.wg0.wan.buetow.org + sh -s - server --cluster-init \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \ + --tls-san=r0.wg0.wan.buetow.org [INFO] Finding release <b><u><font color="#000000">for</font></u></b> channel stable [INFO] Using v1.<font color="#000000">32.6</font>+k3s1 as release . @@ -137,6 +140,8 @@ http://www.gnu.org/software/src-highlite --> [INFO] systemd: Starting k3s </pre> <br /> +<span>Note: The <span class='inlinecode'>--node-ip</span> and <span class='inlinecode'>--advertise-address</span> flags are important to ensure that the embedded etcd cluster communicates over the WireGuard interface (192.168.2.x) rather than the LAN interface (192.168.1.x). This ensures that all control plane traffic is encrypted via WireGuard.</span><br /> +<br /> <h3 style='display: inline' id='adding-the-remaining-nodes-to-the-cluster'>Adding the remaining nodes to the cluster</h3><br /> <br /> <span>Then I ran on the other two nodes <span class='inlinecode'>r1</span> and <span class='inlinecode'>r2</span>:</span><br /> @@ -147,10 +152,14 @@ http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> <pre>[root@r1 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \ --tls-san=r1.wg0.wan.buetow.org [root@r2 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \ --tls-san=r2.wg0.wan.buetow.org . . diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index b24e19bd..efe79606 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2025-12-24T10:50:53+02:00</updated> + <updated>2025-12-26T00:40:44+02:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="https://foo.zone/gemfeed/atom.xml" rel="self" /> @@ -2659,7 +2659,10 @@ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> <pre>[root@r0 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> - sh -s - server --cluster-init --tls-san=r0.wg0.wan.buetow.org + sh -s - server --cluster-init \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.120</font> \ + --tls-san=r0.wg0.wan.buetow.org [INFO] Finding release <b><u><font color="#000000">for</font></u></b> channel stable [INFO] Using v1.<font color="#000000">32.6</font>+k3s1 as release . @@ -2668,6 +2671,8 @@ http://www.gnu.org/software/src-highlite --> [INFO] systemd: Starting k3s </pre> <br /> +<span>Note: The <span class='inlinecode'>--node-ip</span> and <span class='inlinecode'>--advertise-address</span> flags are important to ensure that the embedded etcd cluster communicates over the WireGuard interface (192.168.2.x) rather than the LAN interface (192.168.1.x). This ensures that all control plane traffic is encrypted via WireGuard.</span><br /> +<br /> <h3 style='display: inline' id='adding-the-remaining-nodes-to-the-cluster'>Adding the remaining nodes to the cluster</h3><br /> <br /> <span>Then I ran on the other two nodes <span class='inlinecode'>r1</span> and <span class='inlinecode'>r2</span>:</span><br /> @@ -2678,10 +2683,14 @@ http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> <pre>[root@r1 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.121</font> \ --tls-san=r1.wg0.wan.buetow.org [root@r2 ~]<i><font color="silver"># curl -sfL https://get.k3s.io | K3S_TOKEN=$(cat ~/.k3s_token) \</font></i> sh -s - server --server https://r<font color="#000000">0</font>.wg0.wan.buetow.org:<font color="#000000">6443</font> \ + --node-ip=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \ + --advertise-address=<font color="#000000">192.168</font>.<font color="#000000">2.122</font> \ --tls-san=r2.wg0.wan.buetow.org . . @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='hello'>Hello!</h1><br /> <br /> -<span class='quote'>This site was generated at 2025-12-24T10:50:53+02:00 by <span class='inlinecode'>Gemtexter</span></span><br /> +<span class='quote'>This site was generated at 2025-12-26T00:40:44+02:00 by <span class='inlinecode'>Gemtexter</span></span><br /> <br /> <span>Welcome to the foo.zone!</span><br /> <br /> diff --git a/uptime-stats.html b/uptime-stats.html index c45e7af1..c90d7439 100644 --- a/uptime-stats.html +++ b/uptime-stats.html @@ -13,7 +13,7 @@ </p> <h1 style='display: inline' id='my-machine-uptime-stats'>My machine uptime stats</h1><br /> <br /> -<span class='quote'>This site was last updated at 2025-12-24T10:50:53+02:00</span><br /> +<span class='quote'>This site was last updated at 2025-12-26T00:40:43+02:00</span><br /> <br /> <span>The following stats were collected via <span class='inlinecode'>uptimed</span> on all of my personal computers over many years and the output was generated by <span class='inlinecode'>guprecords</span>, the global uptime records stats analyser of mine.</span><br /> <br /> @@ -35,7 +35,7 @@ | Pos | Host | Boots | Last Kernel | +-----+----------------+-------+-------------------------------+ | 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 | -| 2. | *earth | 217 | Linux 6.17.12-300.fc43.x86_64 | +| 2. | *earth | 218 | Linux 6.17.12-300.fc43.x86_64 | | 3. | mars | 207 | Linux 3.2.0-4-amd64 | | 4. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 | | 5. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 | @@ -66,7 +66,7 @@ | Pos | Host | Uptime | Last Kernel | +-----+----------------+-----------------------------+-----------------------------------+ | 1. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | -| 2. | *earth | 3 years, 11 months, 30 days | Linux 6.17.12-300.fc43.x86_64 | +| 2. | *earth | 3 years, 12 months, 3 days | Linux 6.17.12-300.fc43.x86_64 | | 3. | *blowfish | 3 years, 10 months, 2 days | OpenBSD 7.7 | | 4. | sun | 3 years, 9 months, 26 days | FreeBSD 10.3-RELEASE-p24 | | 5. | uranus | 3 years, 9 months, 5 days | NetBSD 10.1 | @@ -97,8 +97,8 @@ | Pos | Host | Score | Last Kernel | +-----+----------------+-------+-----------------------------------+ | 1. | uranus | 340 | NetBSD 10.1 | -| 2. | *earth | 275 | Linux 6.17.12-300.fc43.x86_64 | -| 3. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 | +| 2. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 | +| 3. | *earth | 275 | Linux 6.17.12-300.fc43.x86_64 | | 4. | *blowfish | 243 | OpenBSD 7.7 | | 5. | sun | 238 | FreeBSD 10.3-RELEASE-p24 | | 6. | uugrn | 211 | FreeBSD 11.2-RELEASE-p4 | @@ -162,7 +162,7 @@ | 2. | dionysus | 8 years, 6 months, 17 days | FreeBSD 13.0-RELEASE-p11 | | 3. | alphacentauri | 6 years, 9 months, 13 days | FreeBSD 11.4-RELEASE-p7 | | 4. | *makemake | 4 years, 10 months, 16 days | Linux 6.9.9-200.fc40.x86_64 | -| 5. | *earth | 4 years, 5 months, 29 days | Linux 6.17.12-300.fc43.x86_64 | +| 5. | *earth | 4 years, 6 months, 1 days | Linux 6.17.12-300.fc43.x86_64 | | 6. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | | 7. | *blowfish | 3 years, 10 months, 3 days | OpenBSD 7.7 | | 8. | sun | 3 years, 10 months, 2 days | FreeBSD 10.3-RELEASE-p24 | @@ -192,7 +192,7 @@ | 1. | FreeBSD 10... | 551 | | 2. | Linux 3... | 550 | | 3. | *FreeBSD 14... | 215 | -| 4. | *Linux 6... | 202 | +| 4. | *Linux 6... | 203 | | 5. | Linux 5... | 162 | | 6. | Linux 4... | 161 | | 7. | FreeBSD 11... | 153 | @@ -207,8 +207,8 @@ | 16. | Darwin 15... | 15 | | 17. | Darwin 22... | 12 | | 18. | Darwin 18... | 11 | -| 19. | FreeBSD 6... | 10 | -| 20. | OpenBSD 4... | 10 | +| 19. | OpenBSD 4... | 10 | +| 20. | FreeBSD 7... | 10 | +-----+----------------+-------+ </pre> <br /> @@ -224,7 +224,7 @@ | 2. | *OpenBSD 7... | 7 years, 6 months, 29 days | | 3. | FreeBSD 10... | 5 years, 9 months, 9 days | | 4. | Linux 5... | 4 years, 10 months, 21 days | -| 5. | *Linux 6... | 3 years, 2 months, 28 days | +| 5. | *Linux 6... | 3 years, 3 months, 3 days | | 6. | Linux 4... | 2 years, 7 months, 22 days | | 7. | FreeBSD 11... | 2 years, 4 months, 28 days | | 8. | *FreeBSD 14... | 2 years, 3 months, 24 days | @@ -255,7 +255,7 @@ | 2. | *OpenBSD 7... | 484 | | 3. | FreeBSD 10... | 406 | | 4. | Linux 5... | 317 | -| 5. | *Linux 6... | 219 | +| 5. | *Linux 6... | 220 | | 6. | Linux 4... | 175 | | 7. | *FreeBSD 14... | 161 | | 8. | FreeBSD 11... | 159 | @@ -282,7 +282,7 @@ +-----+------------+-------+ | Pos | KernelName | Boots | +-----+------------+-------+ -| 1. | *Linux | 1097 | +| 1. | *Linux | 1098 | | 2. | *FreeBSD | 1080 | | 3. | *Darwin | 155 | | 4. | *OpenBSD | 109 | @@ -298,7 +298,7 @@ +-----+------------+-----------------------------+ | Pos | KernelName | Uptime | +-----+------------+-----------------------------+ -| 1. | *Linux | 28 years, 3 months, 23 days | +| 1. | *Linux | 28 years, 3 months, 26 days | | 2. | *FreeBSD | 12 years, 2 months, 24 days | | 3. | *OpenBSD | 8 years, 2 months, 7 days | | 4. | *Darwin | 5 years, 2 months, 22 days | @@ -314,7 +314,7 @@ +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1878 | +| 1. | *Linux | 1879 | | 2. | *FreeBSD | 862 | | 3. | *OpenBSD | 523 | | 4. | *Darwin | 340 | |
