diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-03 09:08:57 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-03 09:08:57 +0200 |
| commit | 1a82c33c62235eb4f6197bcdc5a71c6660237fdb (patch) | |
| tree | 078777a81a2b198e29137bd19f524fc20bb6f429 | |
| parent | 8290c418c11a1ee71c970840f96cddb726875b6d (diff) | |
Update content for md
| -rw-r--r-- | about/resources.md | 198 | ||||
| -rw-r--r-- | about/showcase.md | 623 | ||||
| -rw-r--r-- | about/showcase/debroid/image-1.png | 230 | ||||
| -rw-r--r-- | about/showcase/rcm/image-1.png | bin | 0 -> 106324 bytes | |||
| -rw-r--r-- | gemfeed/2022-02-04-computer-operating-systems-i-use.md | 9 | ||||
| -rw-r--r-- | gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md | 4 |
6 files changed, 547 insertions, 517 deletions
diff --git a/about/resources.md b/about/resources.md index e570786d..45d714f3 100644 --- a/about/resources.md +++ b/about/resources.md @@ -36,109 +36,109 @@ You won't find any links on this site because, over time, the links will break. In random order: +* Effective awk programming; Arnold Robbins; O'Reilly * The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton -* DNS and BIND; Cricket Liu; O'Reilly -* Perl New Features; Joshua McAdams, brian d foy; Perl School -* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible * Effective Java; Joshua Bloch; Addison-Wesley Professional -* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible -* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly -* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf -* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly -* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers -* Effective awk programming; Arnold Robbins; O'Reilly * Pro Puppet; James Turnbull, Jeffrey McCune; Apress -* C++ Programming Language; Bjarne Stroustrup; -* 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 -* Leanring eBPF; Liz Rice; O'Reilly * Site Reliability Engineering; How Google runs production systems; O'Reilly +* Perl New Features; Joshua McAdams, brian d foy; Perl School +* Funktionale Programmierung; Peter Pepper; Springer +* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf +* Raku Fundamentals; Moritz Lenz; Apress +* Systemprogrammierung in Go; Frank Müller; dpunkt +* DNS and BIND; Cricket Liu; O'Reilly +* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly * 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly -* The Docker Book; James Turnbull; Kindle -* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications +* C++ Programming Language; Bjarne Stroustrup; +* Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook +* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly +* Raku Recipes; J.J. Merelo; Apress +* 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly * Ultimate Go Notebook; Bill Kennedy -* Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook +* Polished Ruby Programming; Jeremy Evans; Packt Publishing +* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly +* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers +* DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible +* Data Science at the Command Line; Jeroen Janssens; O'Reilly +* Terraform Cookbook; Mikael Krief; Packt Publishing +* The Pragmatic Programmer; David Thomas; Addison-Wesley * Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications -* Systemprogrammierung in Go; Frank Müller; dpunkt +* Seeking SRE: Conversations About Running Production Systems at Scale; David N. Blank-Edelman; eBook * Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly -* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly -* Funktionale Programmierung; Peter Pepper; Springer -* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional -* The Pragmatic Programmer; David Thomas; Addison-Wesley * Modern Perl; Chromatic ; Onyx Neon Press -* Data Science at the Command Line; Jeroen Janssens; O'Reilly -* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* Java ist auch eine Insel; Christian Ullenboom; +* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly * Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press -* Raku Fundamentals; Moritz Lenz; Apress +* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt +* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* The Docker Book; James Turnbull; Kindle +* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson * Concurrency in Go; Katherine Cox-Buday; O'Reilly -* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner -* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible -* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly +* Leanring eBPF; Liz Rice; O'Reilly * Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers -* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt -* Raku Recipes; J.J. Merelo; Apress -* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook -* Chaos Engineering - System Resiliency in Practice; Casey Rosenthal and Nora Jones; eBook -* Polished Ruby Programming; Jeremy Evans; Packt Publishing +* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications * Developing Games in Java; David Brackeen and others...; New Riders -* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson -* Terraform Cookbook; Mikael Krief; Packt Publishing -* Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly -* Java ist auch eine Insel; Christian Ullenboom; +* Higher Order Perl; Mark Dominus; Morgan Kaufmann +* 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 +* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook ## Technical references I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order: -* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly -* The Linux Programming Interface; Michael Kerrisk; No Starch Press -* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly * Go: Design Patterns for Real-World Projects; Mat Ryer; Packt -* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly -* Relayd and Httpd Mastery; Michael W Lucas * BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley +* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly * Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley +* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly +* Implementing Service Level Objectives; Alex Hidalgo; O'Reilly +* The Linux Programming Interface; Michael Kerrisk; No Starch Press +* Relayd and Httpd Mastery; Michael W Lucas ## Self-development and soft-skills books In random order: -* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) -* Ultralearning; Anna Laurent; Self-published via Amazon -* Influence without Authority; A. Cohen, D. Bradford; Wiley -* 101 Essays that change the way you think; Brianna Wiest; Audiobook -* So Good They Can't Ignore You; Cal Newport; Business Plus -* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly -* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) -* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* Eat That Frog; Brian Tracy * Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne -* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK -* The Power of Now; Eckhard Tolle; Yellow Kite * 97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook -* The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook -* Meditation for Mortals, Oliver Burkeman, Audiobook -* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion * Getting Things Done; David Allen -* The Joy of Missing Out; Christina Crook; New Society Publishers -* The Bullet Journal Method; Ryder Carroll; Fourth Estate -* Atomic Habits; James Clear; Random House Business +* Deep Work; Cal Newport; Piatkus +* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly +* Influence without Authority; A. Cohen, D. Bradford; Wiley +* So Good They Can't Ignore You; Cal Newport; Business Plus +* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing +* The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK +* The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook * Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook -* Digital Minimalism; Cal Newport; Portofolio Penguin * Soft Skills; John Sommez; Manning Publications +* Atomic Habits; James Clear; Random House Business +* Solve for Happy; Mo Gawdat (RE-READ 1ST TIME) +* Ultralearning; Anna Laurent; Self-published via Amazon * The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd -* Deep Work; Cal Newport; Piatkus -* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business * The Good Enough Job; Simone Stolzoff; Ebury Edge -* Psycho-Cybernetics; Maxwell Maltz; Perigee Books -* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook -* The Courage to Be Disliked; Ichiro Kishimi and Fumitake Koga; Audiobook -* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press -* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing -* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook * Slow Productivity; Cal Newport; Penguin Random House * Eat That Frog!; Brian Tracy; Hodder Paperbacks -* Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook +* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* The Bullet Journal Method; Ryder Carroll; Fourth Estate +* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook +* 101 Essays that change the way you think; Brianna Wiest; Audiobook +* The Joy of Missing Out; Christina Crook; New Society Publishers +* The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME) +* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion +* Meditation for Mortals, Oliver Burkeman, Audiobook +* The Power of Now; Eckhard Tolle; Yellow Kite * Ultralearning; Scott Young; Thorsons -* Eat That Frog; Brian Tracy +* Digital Minimalism; Cal Newport; Portofolio Penguin +* Psycho-Cybernetics; Maxwell Maltz; Perigee Books +* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business +* Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* The Software Engineer's Guidebook: Navigating senior, tech lead, and staff engineer positions at tech companies and startups; Gergely Orosz; Audiobook * Stop starting, start finishing; Arne Roock; Lean-Kanban University [Here are notes of mine for some of the books](../notes/index.md) @@ -147,29 +147,29 @@ In random order: Some of these were in-person with exams; others were online learning lectures only. In random order: -* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. +* AWS Immersion Day; Amazon; 1-day interactive online training * Apache Tomcat Best Practises; 3-day on-site training -* Protocol buffers; O'Reilly Online -* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon +* Structure and Interpretation of Computer Programs; Harold Abelson and more...; * Ultimate Go Programming; Bill Kennedy; O'Reilly Online -* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online -* MySQL Deep Dive Workshop; 2-day on-site training +* Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon * Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training +* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online +* Developing IaC with Terraform (with Live Lessons); O'Reilly Online * The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online -* 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) +* Protocol buffers; O'Reilly Online +* MySQL Deep Dive Workshop; 2-day on-site training * Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online -* Structure and Interpretation of Computer Programs; Harold Abelson and more...; -* Functional programming lecture; Remote University of Hagen -* AWS Immersion Day; Amazon; 1-day interactive online training +* 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) * Scripting Vim; Damian Conway; O'Reilly Online -* Developing IaC with Terraform (with Live Lessons); O'Reilly Online +* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. +* Functional programming lecture; Remote University of Hagen ## Technical guides These are not whole books, but guides (smaller or larger) which I found very useful. in random order: -* Raku Guide at https://raku.guide * How CPUs work at https://cpu.land +* Raku Guide at https://raku.guide * Advanced Bash-Scripting Guide ## Podcasts @@ -178,58 +178,58 @@ These are not whole books, but guides (smaller or larger) which I found very use In random order: -* Deep Questions with Cal Newport -* The Changelog Podcast(s) -* Hidden Brain -* Cup o' Go [Golang] -* Dev Interrupted * Backend Banter +* Dev Interrupted +* The ProdCast (Google SRE Podcast) +* Deep Questions with Cal Newport +* Pratical AI +* Fallthrough [Golang] +* Fork Around And Find Out * Modern Mentor +* Hidden Brain +* The Changelog Podcast(s) * Maintainable -* Fallthrough [Golang] -* BSD Now [BSD] -* Pratical AI * Wednesday Wisdom +* Cup o' Go [Golang] +* BSD Now [BSD] * The Pragmatic Engineer Podcast -* Fork Around And Find Out -* The ProdCast (Google SRE Podcast) ### Podcasts I liked 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. -* Java Pub House -* Go Time (predecessor of fallthrough) * Modern Mentor -* CRE: Chaosradio Express [german] * Ship It (predecessor of Fork Around And Find Out) +* Java Pub House +* CRE: Chaosradio Express [german] +* Go Time (predecessor of fallthrough) * FLOSS weekly ## Newsletters I like This is a mix of tech and non-tech newsletters I am subscribed to. In random order: -* The Pragmatic Engineer -* Changelog News * Golang Weekly +* The Imperfectionist * Ruby Weekly * VK Newsletter -* The Imperfectionist -* Andreas Brandhorst Newsletter (Sci-Fi author) +* Register Spill +* Changelog News * byteSizeGo -* Applied Go Weekly Newsletter * The Valuable Dev -* Register Spill +* The Pragmatic Engineer +* Applied Go Weekly Newsletter * Monospace Mentor +* Andreas Brandhorst Newsletter (Sci-Fi author) ## Magazines I like(d) This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order: -* freeX (not published anymore) -* Linux Magazine * Linux User * LWN (online only) +* Linux Magazine +* freeX (not published anymore) ## YouTube channels diff --git a/about/showcase.md b/about/showcase.md index a9ba0e1d..6f6641e0 100644 --- a/about/showcase.md +++ b/about/showcase.md @@ -1,6 +1,6 @@ # Project Showcase -Generated on: 2026-02-22 +Generated on: 2026-03-02 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 ranked by score, which combines project size and recent activity. @@ -9,90 +9,92 @@ This page showcases my side projects, providing an overview of what each project * [⇢ Project Showcase](#project-showcase) * [⇢ ⇢ Overall Statistics](#overall-statistics) * [⇢ ⇢ Projects](#projects) -* [⇢ ⇢ ⇢ 1. ior](#1-ior) -* [⇢ ⇢ ⇢ 2. dotfiles](#2-dotfiles) -* [⇢ ⇢ ⇢ 3. hexai](#3-hexai) -* [⇢ ⇢ ⇢ 4. epimetheus](#4-epimetheus) -* [⇢ ⇢ ⇢ 5. conf](#5-conf) -* [⇢ ⇢ ⇢ 6. foo.zone](#6-foozone) -* [⇢ ⇢ ⇢ 7. scifi](#7-scifi) -* [⇢ ⇢ ⇢ 8. log4jbench](#8-log4jbench) -* [⇢ ⇢ ⇢ 9. gogios](#9-gogios) -* [⇢ ⇢ ⇢ 10. yoga](#10-yoga) -* [⇢ ⇢ ⇢ 11. perc](#11-perc) -* [⇢ ⇢ ⇢ 12. totalrecall](#12-totalrecall) -* [⇢ ⇢ ⇢ 13. gitsyncer](#13-gitsyncer) -* [⇢ ⇢ ⇢ 14. tasksamurai](#14-tasksamurai) -* [⇢ ⇢ ⇢ 15. foostats](#15-foostats) -* [⇢ ⇢ ⇢ 16. timr](#16-timr) -* [⇢ ⇢ ⇢ 17. gos](#17-gos) -* [⇢ ⇢ ⇢ 18. dtail](#18-dtail) -* [⇢ ⇢ ⇢ 19. ds-sim](#19-ds-sim) -* [⇢ ⇢ ⇢ 20. wireguardmeshgenerator](#20-wireguardmeshgenerator) -* [⇢ ⇢ ⇢ 21. gemtexter](#21-gemtexter) -* [⇢ ⇢ ⇢ 22. rcm](#22-rcm) -* [⇢ ⇢ ⇢ 23. terraform](#23-terraform) -* [⇢ ⇢ ⇢ 24. quicklogger](#24-quicklogger) -* [⇢ ⇢ ⇢ 25. sillybench](#25-sillybench) -* [⇢ ⇢ ⇢ 26. goprecords](#26-goprecords) -* [⇢ ⇢ ⇢ 27. gorum](#27-gorum) -* [⇢ ⇢ ⇢ 28. guprecords](#28-guprecords) -* [⇢ ⇢ ⇢ 29. geheim](#29-geheim) -* [⇢ ⇢ ⇢ 30. docker-radicale-server](#30-docker-radicale-server) -* [⇢ ⇢ ⇢ 31. algorithms](#31-algorithms) -* [⇢ ⇢ ⇢ 32. randomjournalpage](#32-randomjournalpage) -* [⇢ ⇢ ⇢ 33. photoalbum](#33-photoalbum) -* [⇢ ⇢ ⇢ 34. ioriot](#34-ioriot) -* [⇢ ⇢ ⇢ 35. ipv6test](#35-ipv6test) -* [⇢ ⇢ ⇢ 36. sway-autorotate](#36-sway-autorotate) -* [⇢ ⇢ ⇢ 37. mon](#37-mon) -* [⇢ ⇢ ⇢ 38. staticfarm-apache-handlers](#38-staticfarm-apache-handlers) -* [⇢ ⇢ ⇢ 39. pingdomfetch](#39-pingdomfetch) -* [⇢ ⇢ ⇢ 40. xerl](#40-xerl) -* [⇢ ⇢ ⇢ 41. ychat](#41-ychat) -* [⇢ ⇢ ⇢ 42. fapi](#42-fapi) -* [⇢ ⇢ ⇢ 43. perl-c-fibonacci](#43-perl-c-fibonacci) -* [⇢ ⇢ ⇢ 44. netcalendar](#44-netcalendar) -* [⇢ ⇢ ⇢ 45. loadbars](#45-loadbars) -* [⇢ ⇢ ⇢ 46. gotop](#46-gotop) -* [⇢ ⇢ ⇢ 47. rubyfy](#47-rubyfy) -* [⇢ ⇢ ⇢ 48. fype](#48-fype) -* [⇢ ⇢ ⇢ 49. pwgrep](#49-pwgrep) -* [⇢ ⇢ ⇢ 50. perldaemon](#50-perldaemon) -* [⇢ ⇢ ⇢ 51. jsmstrade](#51-jsmstrade) -* [⇢ ⇢ ⇢ 52. japi](#52-japi) -* [⇢ ⇢ ⇢ 53. perl-poetry](#53-perl-poetry) -* [⇢ ⇢ ⇢ 54. muttdelay](#54-muttdelay) -* [⇢ ⇢ ⇢ 55. netdiff](#55-netdiff) -* [⇢ ⇢ ⇢ 56. debroid](#56-debroid) -* [⇢ ⇢ ⇢ 57. hsbot](#57-hsbot) -* [⇢ ⇢ ⇢ 58. cpuinfo](#58-cpuinfo) -* [⇢ ⇢ ⇢ 59. template](#59-template) -* [⇢ ⇢ ⇢ 60. awksite](#60-awksite) -* [⇢ ⇢ ⇢ 61. dyndns](#61-dyndns) -* [⇢ ⇢ ⇢ 62. vs-sim](#62-vs-sim) +* [⇢ ⇢ ⇢ 1. ior [#1(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#1-ior-1now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 2. hexai [#2(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#2-hexai-2now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 3. dotfiles [#3(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#3-dotfiles-3now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 4. epimetheus [#4(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#4-epimetheus-4now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 5. conf [#5(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#5-conf-5now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 6. foo.zone [#6(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#6-foozone-6now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 7. foostore [#7(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#7-foostore-7now-na1w-na2w-na3w-na4w) +* [⇢ foostore](#foostore) +* [⇢ ⇢ ⇢ 8. scifi [#8(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#8-scifi-8now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 9. log4jbench [#9(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#9-log4jbench-9now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 10. rcm [#10(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#10-rcm-10now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 11. gogios [#11(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#11-gogios-11now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 12. yoga [#12(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#12-yoga-12now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 13. perc [#13(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#13-perc-13now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 14. totalrecall [#14(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#14-totalrecall-14now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 15. gitsyncer [#15(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#15-gitsyncer-15now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 16. tasksamurai [#16(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#16-tasksamurai-16now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 17. foostats [#17(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#17-foostats-17now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 18. gos [#18(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#18-gos-18now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 19. timr [#19(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#19-timr-19now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 20. dtail [#20(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#20-dtail-20now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 21. ds-sim [#21(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#21-ds-sim-21now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 22. gemtexter [#22(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#22-gemtexter-22now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 23. wireguardmeshgenerator [#23(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#23-wireguardmeshgenerator-23now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 24. goprecords [#24(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#24-goprecords-24now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 25. quicklogger [#25(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#25-quicklogger-25now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 26. terraform [#26(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#26-terraform-26now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 27. sillybench [#27(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#27-sillybench-27now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 28. gorum [#28(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#28-gorum-28now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 29. guprecords [#29(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#29-guprecords-29now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 30. geheim [#30(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#30-geheim-30now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 31. docker-radicale-server [#31(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#31-docker-radicale-server-31now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 32. algorithms [#32(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#32-algorithms-32now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 33. randomjournalpage [#33(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#33-randomjournalpage-33now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 34. photoalbum [#34(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#34-photoalbum-34now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 35. ioriot [#35(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#35-ioriot-35now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 36. ipv6test [#36(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#36-ipv6test-36now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 37. fype [#37(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#37-fype-37now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 38. sway-autorotate [#38(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#38-sway-autorotate-38now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 39. mon [#39(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#39-mon-39now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 40. staticfarm-apache-handlers [#40(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#40-staticfarm-apache-handlers-40now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 41. pingdomfetch [#41(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#41-pingdomfetch-41now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 42. xerl [#42(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#42-xerl-42now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 43. ychat [#43(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#43-ychat-43now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 44. fapi [#44(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#44-fapi-44now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 45. perl-c-fibonacci [#45(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#45-perl-c-fibonacci-45now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 46. netcalendar [#46(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#46-netcalendar-46now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 47. loadbars [#47(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#47-loadbars-47now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 48. gotop [#48(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#48-gotop-48now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 49. rubyfy [#49(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#49-rubyfy-49now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 50. pwgrep [#50(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#50-pwgrep-50now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 51. perldaemon [#51(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#51-perldaemon-51now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 52. jsmstrade [#52(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#52-jsmstrade-52now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 53. japi [#53(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#53-japi-53now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 54. perl-poetry [#54(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#54-perl-poetry-54now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 55. muttdelay [#55(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#55-muttdelay-55now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 56. netdiff [#56(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#56-netdiff-56now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 57. debroid [#57(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#57-debroid-57now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 58. hsbot [#58(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#58-hsbot-58now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 59. cpuinfo [#59(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#59-cpuinfo-59now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 60. template [#60(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#60-template-60now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 61. awksite [#61(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#61-awksite-61now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 62. dyndns [#62(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#62-dyndns-62now-na1w-na2w-na3w-na4w) +* [⇢ ⇢ ⇢ 63. vs-sim [#63(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)]](#63-vs-sim-63now-na1w-na2w-na3w-na4w) ## Overall Statistics -* 📦 Total Projects: 62 -* 📊 Total Commits: 12,631 -* 📈 Total Lines of Code: 317,099 -* 📄 Total Lines of Documentation: 40,325 -* 💻 Languages: Go (37.7%), Java (12.9%), C++ (8.0%), C (6.1%), XML (6.1%), Shell (5.8%), Perl (5.5%), C/C++ (5.1%), YAML (5.0%), HTML (1.9%), Config (1.2%), Ruby (0.9%), HCL (0.9%), Python (0.6%), CSS (0.6%), Make (0.5%), JSON (0.4%), Haskell (0.2%), JavaScript (0.2%), Raku (0.1%), TOML (0.1%) -* 📚 Documentation: Markdown (71.4%), Text (27.2%), LaTeX (1.4%) -* 🚀 Release Status: 39 released, 23 experimental (62.9% with releases, 37.1% experimental) +* 📦 Total Projects: 63 +* 📊 Total Commits: 13,058 +* 📈 Total Lines of Code: 344,311 +* 📄 Total Lines of Documentation: 43,164 +* 💻 Languages: Go (42.7%), Java (11.9%), C++ (7.4%), C (5.6%), XML (5.6%), Shell (5.5%), Perl (5.0%), YAML (4.6%), C/C++ (4.5%), HTML (1.7%), Config (1.1%), Ruby (0.9%), HCL (0.8%), Python (0.6%), CSS (0.5%), Make (0.5%), JSON (0.4%), Haskell (0.2%), JavaScript (0.1%), Raku (0.1%) +* 📚 Documentation: Markdown (71.1%), Text (27.6%), LaTeX (1.3%) +* 🚀 Release Status: 41 released, 22 experimental (65.1% with releases, 34.9% experimental) ## Projects -### 1. ior +### 1. ior [#1(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] -* 💻 Languages: Go (73.1%), C (26.3%), C/C++ (0.6%) -* 📚 Documentation: Markdown (80.3%), Text (19.7%) -* 📊 Commits: 384 -* 📈 Lines of Code: 21785 -* 📄 Lines of Documentation: 2428 -* 📅 Development Period: 2024-01-18 to 2026-02-21 -* 🏆 Score: 2219.6 (combines code size and activity) +* 💻 Languages: Go (85.6%), C (14.1%), C/C++ (0.3%) +* 📚 Documentation: Markdown (80.0%), Text (20.0%) +* 📊 Commits: 563 +* 📈 Lines of Code: 41775 +* 📄 Lines of Documentation: 2409 +* 📅 Development Period: 2024-01-18 to 2026-03-02 +* 🏆 Score: 1544.8 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -110,53 +112,53 @@ The tool is implemented in Go and C, leveraging libbpfgo for BPF interaction. It --- -### 2. dotfiles +### 2. hexai [#2(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] -* 💻 Languages: Shell (58.9%), CSS (11.0%), Config (10.2%), TOML (10.1%), Ruby (8.4%), JSON (1.1%), INI (0.2%) +* 💻 Languages: Go (100.0%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 783 -* 📈 Lines of Code: 2961 -* 📄 Lines of Documentation: 949 -* 📅 Development Period: 2023-07-30 to 2026-02-22 -* 🏆 Score: 427.7 (combines code size and activity) +* 📊 Commits: 373 +* 📈 Lines of Code: 31057 +* 📄 Lines of Documentation: 4089 +* 📅 Development Period: 2025-08-01 to 2026-03-02 +* 🏆 Score: 725.1 (combines code size and activity) * ⚖️ License: No license found -* 🧪 Status: Experimental (no releases yet) +* 🏷️ Latest Release: v0.21.0 (2026-02-12) -This is a personal dotfiles management project that uses [Rex](https://www.rexify.org/) (a Perl-based infrastructure automation framework) to declaratively install and synchronize configuration files across local machines and remote servers. The `Rexfile` defines individual tasks for each config area — shell (bash, zsh, fish), editor (Helix), terminal (Ghostty, tmux), window manager (Sway/Waybar), SSH, scripts, Pipewire audio, AI prompt links, and more — plus OS-specific package installation tasks for Fedora, FreeBSD, and Termux. A top-level `home` task runs all `home_*` tasks at once for a full install. +[](showcase/hexai/image-1.png) -The architecture is straightforward: config files live in subdirectories mirroring their purpose, and helper functions (`ensure_file`, `ensure_dir`) copy or symlink them into the appropriate `$HOME` locations with correct permissions. It supports both a public repo (this one) and a private companion repo for sensitive configs like calendar data, keeping secrets separate while sharing the same deployment mechanism. +Hexai is a Go-based AI integration tool designed primarily for the Helix editor that provides LSP (Language Server Protocol) powered AI features. It offers code auto-completion, AI-driven code actions, in-editor chat with LLMs, and a standalone CLI tool for direct LLM interaction. A standout feature is its ability to query multiple AI providers (OpenAI, OpenRouter, GitHub Copilot, Ollama) in parallel, allowing developers to compare responses side-by-side. It has enhanced capabilities for Go code understanding, such as generating unit tests from functions, while supporting other programming languages as well. -[View on Codeberg](https://codeberg.org/snonux/dotfiles) -[View on GitHub](https://github.com/snonux/dotfiles) +The project is implemented as an LSP server written in Go, with a TUI component built using Bubble Tea for the tmux-based code action runner (`hexai-tmux-action`). This architecture allows it to integrate seamlessly into LSP-compatible editors, with special focus on Helix + tmux workflows. The custom prompt feature lets developers use their preferred editor to craft prompts, making it flexible for various development workflows. + +[View on Codeberg](https://codeberg.org/snonux/hexai) +[View on GitHub](https://github.com/snonux/hexai) --- -### 3. hexai +### 3. dotfiles [#3(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] -* 💻 Languages: Go (100.0%) +* 💻 Languages: Shell (65.8%), CSS (11.2%), Config (10.4%), TOML (10.3%), JSON (1.1%), Ruby (1.0%), INI (0.2%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 343 -* 📈 Lines of Code: 29895 -* 📄 Lines of Documentation: 5508 -* 📅 Development Period: 2025-08-01 to 2026-02-22 -* 🏆 Score: 341.8 (combines code size and activity) +* 📊 Commits: 815 +* 📈 Lines of Code: 2918 +* 📄 Lines of Documentation: 2971 +* 📅 Development Period: 2023-07-30 to 2026-03-02 +* 🏆 Score: 513.4 (combines code size and activity) * ⚖️ License: No license found -* 🏷️ Latest Release: v0.21.0 (2026-02-12) - +* 🧪 Status: Experimental (no releases yet) -[](showcase/hexai/image-1.png) -Hexai is a Go-based AI integration tool designed primarily for the Helix editor that provides LSP (Language Server Protocol) powered AI features. It offers code auto-completion, AI-driven code actions, in-editor chat with LLMs, and a standalone CLI tool for direct LLM interaction. A standout feature is its ability to query multiple AI providers (OpenAI, OpenRouter, GitHub Copilot, Ollama) in parallel, allowing developers to compare responses side-by-side. It has enhanced capabilities for Go code understanding, such as generating unit tests from functions, while supporting other programming languages as well. +This is a personal dotfiles management project that uses [Rex](https://www.rexify.org/) (a Perl-based infrastructure automation framework) to declaratively install and synchronize configuration files across local machines and remote servers. The `Rexfile` defines individual tasks for each config area — shell (bash, zsh, fish), editor (Helix), terminal (Ghostty, tmux), window manager (Sway/Waybar), SSH, scripts, Pipewire audio, AI prompt links, and more — plus OS-specific package installation tasks for Fedora, FreeBSD, and Termux. A top-level `home` task runs all `home_*` tasks at once for a full install. -The project is implemented as an LSP server written in Go, with a TUI component built using Bubble Tea for the tmux-based code action runner (`hexai-tmux-action`). This architecture allows it to integrate seamlessly into LSP-compatible editors, with special focus on Helix + tmux workflows. The custom prompt feature lets developers use their preferred editor to craft prompts, making it flexible for various development workflows. +The architecture is straightforward: config files live in subdirectories mirroring their purpose, and helper functions (`ensure_file`, `ensure_dir`) copy or symlink them into the appropriate `$HOME` locations with correct permissions. It supports both a public repo (this one) and a private companion repo for sensitive configs like calendar data, keeping secrets separate while sharing the same deployment mechanism. -[View on Codeberg](https://codeberg.org/snonux/hexai) -[View on GitHub](https://github.com/snonux/hexai) +[View on Codeberg](https://codeberg.org/snonux/dotfiles) +[View on GitHub](https://github.com/snonux/dotfiles) --- -### 4. epimetheus +### 4. epimetheus [#4(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (85.2%), Shell (14.8%) * 📚 Documentation: Markdown (100.0%) @@ -164,7 +166,7 @@ The project is implemented as an LSP server written in Go, with a TUI component * 📈 Lines of Code: 5199 * 📄 Lines of Documentation: 1734 * 📅 Development Period: 2026-02-07 to 2026-02-14 -* 🏆 Score: 284.8 (combines code size and activity) +* 🏆 Score: 175.2 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -180,7 +182,7 @@ The architecture routes current data (<5 min old) through Pushgateway where Prom --- -### 5. conf +### 5. conf [#5(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: YAML (80.7%), Perl (9.9%), Shell (6.0%), Python (2.3%), Docker (0.7%), Config (0.2%), HTML (0.1%) * 📚 Documentation: Markdown (97.1%), Text (2.9%) @@ -188,7 +190,7 @@ The architecture routes current data (<5 min old) through Pushgateway where Prom * 📈 Lines of Code: 19132 * 📄 Lines of Documentation: 6572 * 📅 Development Period: 2021-12-28 to 2026-02-15 -* 🏆 Score: 261.6 (combines code size and activity) +* 🏆 Score: 174.6 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -202,7 +204,7 @@ The project is organized into distinct subdirectories: `dotfiles/` contains shel --- -### 6. foo.zone +### 6. foo.zone [#6(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: XML (98.7%), Shell (1.0%), Go (0.3%) * 📚 Documentation: Text (86.2%), Markdown (13.8%) @@ -210,7 +212,7 @@ The project is organized into distinct subdirectories: `dotfiles/` contains shel * 📈 Lines of Code: 18702 * 📄 Lines of Documentation: 174 * 📅 Development Period: 2021-04-29 to 2026-02-07 -* 🏆 Score: 203.4 (combines code size and activity) +* 🏆 Score: 146.5 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -222,7 +224,27 @@ foo.zone: source code repository. --- -### 7. scifi +### 7. foostore [#7(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] + +* 💻 Languages: Go (98.3%), Shell (1.7%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 108 +* 📈 Lines of Code: 6345 +* 📄 Lines of Documentation: 248 +* 📅 Development Period: 2018-05-26 to 2026-03-02 +* 🏆 Score: 124.3 (combines code size and activity) +* ⚖️ License: No license found +* 🏷️ Latest Release: v0.5.3 (2026-03-02) + + +# foostore + +[View on Codeberg](https://codeberg.org/snonux/foostore) +[View on GitHub](https://github.com/snonux/foostore) + +--- + +### 8. scifi [#8(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: JSON (35.9%), CSS (30.6%), JavaScript (29.6%), HTML (3.8%) * 📚 Documentation: Markdown (100.0%) @@ -230,7 +252,7 @@ foo.zone: source code repository. * 📈 Lines of Code: 1664 * 📄 Lines of Documentation: 853 * 📅 Development Period: 2026-01-25 to 2026-01-27 -* 🏆 Score: 112.3 (combines code size and activity) +* 🏆 Score: 87.4 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -244,7 +266,7 @@ The architecture keeps content separate from presentation: book metadata lives i --- -### 8. log4jbench +### 9. log4jbench [#9(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Java (78.9%), XML (21.1%) * 📚 Documentation: Markdown (100.0%) @@ -252,7 +274,7 @@ The architecture keeps content separate from presentation: book metadata lives i * 📈 Lines of Code: 774 * 📄 Lines of Documentation: 119 * 📅 Development Period: 2026-01-09 to 2026-01-09 -* 🏆 Score: 64.6 (combines code size and activity) +* 🏆 Score: 54.6 (combines code size and activity) * ⚖️ License: MIT * 🧪 Status: Experimental (no releases yet) @@ -266,7 +288,31 @@ The implementation uses a fat JAR built with Maven, requiring Java 17+. It's des --- -### 9. gogios +### 10. rcm [#10(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] + +* 💻 Languages: Ruby (99.6%), TOML (0.4%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 109 +* 📈 Lines of Code: 1719 +* 📄 Lines of Documentation: 778 +* 📅 Development Period: 2024-12-05 to 2026-03-02 +* 🏆 Score: 35.3 (combines code size and activity) +* ⚖️ License: Custom License +* 🏷️ Latest Release: v0.1.1 (2026-03-01) + + +[](showcase/rcm/image-1.png) + +**rcm** is a lightweight Ruby-based configuration management system designed for personal infrastructure automation following the KISS (Keep It Simple, Stupid) principle. It provides a declarative DSL for managing system configuration tasks like file creation, templating, and conditional execution based on hostname or other criteria. The system is useful for automating repetitive configuration tasks across multiple machines, similar to tools like Puppet or Chef but with a minimalist approach tailored for personal use cases. + +The implementation centers around a DSL module that provides keywords like `file`, `given`, and `notify` for defining configuration resources. It supports features like ERB templating, conditional execution, resource dependencies (via `requires`), and directory management. Configuration data can be loaded from TOML files, and tasks are defined as Rake tasks that invoke the configuration DSL. The architecture uses a resource scheduling system that tracks declared objects, prevents duplicates, and evaluates them in order while respecting dependencies and conditions. + +[View on Codeberg](https://codeberg.org/snonux/rcm) +[View on GitHub](https://github.com/snonux/rcm) + +--- + +### 11. gogios [#11(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (98.9%), JSON (0.6%), YAML (0.5%) * 📚 Documentation: Markdown (94.9%), Text (5.1%) @@ -274,7 +320,7 @@ The implementation uses a fat JAR built with Maven, requiring Java 17+. It's des * 📈 Lines of Code: 3875 * 📄 Lines of Documentation: 394 * 📅 Development Period: 2023-04-17 to 2026-02-16 -* 🏆 Score: 35.0 (combines code size and activity) +* 🏆 Score: 32.4 (combines code size and activity) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.4.1 (2026-02-16) @@ -290,7 +336,7 @@ The architecture is straightforward: JSON configuration defines checks (plugin p --- -### 10. yoga +### 12. yoga [#12(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (66.1%), HTML (33.9%) * 📚 Documentation: Markdown (100.0%) @@ -298,7 +344,7 @@ The architecture is straightforward: JSON configuration defines checks (plugin p * 📈 Lines of Code: 5921 * 📄 Lines of Documentation: 83 * 📅 Development Period: 2025-10-01 to 2026-01-28 -* 🏆 Score: 30.7 (combines code size and activity) +* 🏆 Score: 28.8 (combines code size and activity) * ⚖️ License: No license found * 🏷️ Latest Release: v0.4.0 (2026-01-28) @@ -314,7 +360,7 @@ The implementation follows clean Go architecture with domain logic organized und --- -### 11. perc +### 13. perc [#13(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (100.0%) * 📚 Documentation: Markdown (100.0%) @@ -322,7 +368,7 @@ The implementation follows clean Go architecture with domain logic organized und * 📈 Lines of Code: 452 * 📄 Lines of Documentation: 80 * 📅 Development Period: 2025-11-25 to 2025-11-25 -* 🏆 Score: 29.6 (combines code size and activity) +* 🏆 Score: 27.1 (combines code size and activity) * ⚖️ License: No license found * 🏷️ Latest Release: v0.1.0 (2025-11-25) @@ -336,7 +382,7 @@ The tool is built as a simple Go CLI application with a standard project layout --- -### 12. totalrecall +### 14. totalrecall [#14(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (99.0%), Shell (0.5%), YAML (0.4%) * 📚 Documentation: Markdown (99.5%), Text (0.5%) @@ -344,7 +390,7 @@ The tool is built as a simple Go CLI application with a standard project layout * 📈 Lines of Code: 13129 * 📄 Lines of Documentation: 377 * 📅 Development Period: 2025-07-14 to 2026-01-21 -* 🏆 Score: 25.9 (combines code size and activity) +* 🏆 Score: 24.7 (combines code size and activity) * ⚖️ License: MIT * 🏷️ Latest Release: v0.8.0 (2026-01-21) @@ -362,7 +408,7 @@ The project offers both a keyboard-driven GUI for interactive use and a CLI for --- -### 13. gitsyncer +### 15. gitsyncer [#15(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (92.6%), Shell (7.0%), JSON (0.4%) * 📚 Documentation: Markdown (100.0%) @@ -370,7 +416,7 @@ The project offers both a keyboard-driven GUI for interactive use and a CLI for * 📈 Lines of Code: 10568 * 📄 Lines of Documentation: 2445 * 📅 Development Period: 2025-06-23 to 2026-02-22 -* 🏆 Score: 22.5 (combines code size and activity) +* 🏆 Score: 21.5 (combines code size and activity) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.12.1 (2026-02-22) @@ -384,7 +430,7 @@ The implementation uses a git remotes approach: it clones from one organization, --- -### 14. tasksamurai +### 16. tasksamurai [#16(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (99.8%), YAML (0.2%) * 📚 Documentation: Markdown (100.0%) @@ -392,7 +438,7 @@ The implementation uses a git remotes approach: it clones from one organization, * 📈 Lines of Code: 6544 * 📄 Lines of Documentation: 254 * 📅 Development Period: 2025-06-19 to 2026-02-04 -* 🏆 Score: 17.8 (combines code size and activity) +* 🏆 Score: 17.1 (combines code size and activity) * ⚖️ License: BSD-2-Clause * 🏷️ Latest Release: v0.11.0 (2026-02-04) @@ -410,7 +456,7 @@ Under the hood, Task Samurai acts as a front-end wrapper that invokes the native --- -### 15. foostats +### 17. foostats [#17(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (100.0%) * 📚 Documentation: Markdown (54.6%), Text (45.4%) @@ -418,7 +464,7 @@ Under the hood, Task Samurai acts as a front-end wrapper that invokes the native * 📈 Lines of Code: 1902 * 📄 Lines of Documentation: 423 * 📅 Development Period: 2023-01-02 to 2025-11-01 -* 🏆 Score: 17.7 (combines code size and activity) +* 🏆 Score: 16.9 (combines code size and activity) * ⚖️ License: Custom License * 🏷️ Latest Release: v0.2.0 (2025-10-21) @@ -432,37 +478,15 @@ The implementation uses a modular Perl architecture with specialized components: --- -### 16. timr - -* 💻 Languages: Go (96.0%), Shell (4.0%) -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 32 -* 📈 Lines of Code: 1538 -* 📄 Lines of Documentation: 99 -* 📅 Development Period: 2025-06-25 to 2026-01-02 -* 🏆 Score: 16.0 (combines code size and activity) -* ⚖️ License: MIT -* 🏷️ Latest Release: v0.3.0 (2026-01-02) - - -`timr` is a minimalist command-line stopwatch timer written in Go that helps developers track time spent on tasks. It provides a persistent timer that saves state to disk, allowing you to start, stop, pause, and resume time tracking across terminal sessions. The tool supports multiple viewing modes including a standard status display (with formatted or raw output in seconds/minutes), a live full-screen view with keyboard controls, and specialized output for shell prompt integration. - -The architecture is straightforward: it's a Go-based CLI application that persists timer state to the filesystem, enabling continuous tracking even when the program isn't actively running. Key features include basic timer controls (start/stop/continue/reset), flexible status reporting formats for automation, and fish shell integration that displays a color-coded timer icon and elapsed time directly in your prompt—making it effortless to keep track of how long you've been working without context switching. - -[View on Codeberg](https://codeberg.org/snonux/timr) -[View on GitHub](https://github.com/snonux/timr) - ---- - -### 17. gos +### 18. gos [#18(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (99.5%), JSON (0.2%), Shell (0.2%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 400 +* 📊 Commits: 402 * 📈 Lines of Code: 4143 * 📄 Lines of Documentation: 477 -* 📅 Development Period: 2024-05-04 to 2026-02-17 -* 🏆 Score: 15.6 (combines code size and activity) +* 📅 Development Period: 2024-05-04 to 2026-02-28 +* 🏆 Score: 16.2 (combines code size and activity) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.2.4 (2026-02-17) @@ -480,15 +504,37 @@ The implementation uses OAuth2 for LinkedIn authentication, stores configuration --- -### 18. dtail +### 19. timr [#19(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] + +* 💻 Languages: Go (96.0%), Shell (4.0%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 32 +* 📈 Lines of Code: 1538 +* 📄 Lines of Documentation: 99 +* 📅 Development Period: 2025-06-25 to 2026-01-02 +* 🏆 Score: 15.4 (combines code size and activity) +* ⚖️ License: MIT +* 🏷️ Latest Release: v0.3.0 (2026-01-02) + + +`timr` is a minimalist command-line stopwatch timer written in Go that helps developers track time spent on tasks. It provides a persistent timer that saves state to disk, allowing you to start, stop, pause, and resume time tracking across terminal sessions. The tool supports multiple viewing modes including a standard status display (with formatted or raw output in seconds/minutes), a live full-screen view with keyboard controls, and specialized output for shell prompt integration. + +The architecture is straightforward: it's a Go-based CLI application that persists timer state to the filesystem, enabling continuous tracking even when the program isn't actively running. Key features include basic timer controls (start/stop/continue/reset), flexible status reporting formats for automation, and fish shell integration that displays a color-coded timer icon and elapsed time directly in your prompt—making it effortless to keep track of how long you've been working without context switching. + +[View on Codeberg](https://codeberg.org/snonux/timr) +[View on GitHub](https://github.com/snonux/timr) + +--- + +### 20. dtail [#20(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (93.9%), JSON (2.8%), C (2.0%), Make (0.5%), C/C++ (0.3%), Config (0.2%), Shell (0.2%), Docker (0.1%) * 📚 Documentation: Text (79.4%), Markdown (20.6%) -* 📊 Commits: 1054 +* 📊 Commits: 1071 * 📈 Lines of Code: 20091 * 📄 Lines of Documentation: 5674 * 📅 Development Period: 2020-01-09 to 2025-06-20 -* 🏆 Score: 15.3 (combines code size and activity) +* 🏆 Score: 14.9 (combines code size and activity) * ⚖️ License: Apache-2.0 * 🏷️ Latest Release: v4.3.3 (2024-08-23) @@ -506,7 +552,7 @@ The architecture follows a client-server model where DTail servers run on target --- -### 19. ds-sim +### 21. ds-sim [#21(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Java (98.9%), Shell (0.6%), CSS (0.5%) * 📚 Documentation: Markdown (98.7%), Text (1.3%) @@ -514,7 +560,7 @@ The architecture follows a client-server model where DTail servers run on target * 📈 Lines of Code: 25762 * 📄 Lines of Documentation: 3101 * 📅 Development Period: 2008-05-15 to 2025-06-27 -* 🏆 Score: 14.0 (combines code size and activity) +* 🏆 Score: 13.7 (combines code size and activity) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -530,7 +576,29 @@ The implementation follows a modular Java architecture with clear separation bet --- -### 20. wireguardmeshgenerator +### 22. gemtexter [#22(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] + +* 💻 Languages: Shell (70.6%), CSS (26.4%), Config (1.8%), HTML (1.2%) +* 📚 Documentation: Text (76.1%), Markdown (23.9%) +* 📊 Commits: 479 +* 📈 Lines of Code: 2471 +* 📄 Lines of Documentation: 1180 +* 📅 Development Period: 2021-05-21 to 2026-03-01 +* 🏆 Score: 12.7 (combines code size and activity) +* ⚖️ License: GPL-3.0 +* 🏷️ Latest Release: 3.0.0 (2024-10-01) + + +Gemtexter is a static site generator and blog engine written in Bash that converts content from Gemini Gemtext format into multiple output formats (HTML, Markdown) simultaneously. It allows you to maintain a single source of truth in Gemtext and automatically generates XHTML Transitional 1.0, Markdown, and Atom feeds, enabling you to publish the same content across Gemini capsules, traditional websites, and platforms like GitHub/Codeberg Pages. The tool handles blog post management automatically—creating a new dated `.gmi` file triggers auto-indexing, feed generation, and cross-format conversion. + +The architecture leverages GNU utilities (sed, grep, date) and optional tools like GNU Source Highlight for syntax highlighting. It includes a templating system that executes embedded Bash code in `.gmi.tpl` files, supports themes for HTML output, and integrates with Git for version control and publishing workflows. Despite being implemented as a complex Bash script, it remains maintainable and serves as an experiment in how far shell scripting can scale for content management tasks. + +[View on Codeberg](https://codeberg.org/snonux/gemtexter) +[View on GitHub](https://github.com/snonux/gemtexter) + +--- + +### 23. wireguardmeshgenerator [#23(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Ruby (65.4%), YAML (34.6%) * 📚 Documentation: Markdown (100.0%) @@ -538,7 +606,7 @@ The implementation follows a modular Java architecture with clear separation bet * 📈 Lines of Code: 563 * 📄 Lines of Documentation: 24 * 📅 Development Period: 2025-04-18 to 2026-01-20 -* 🏆 Score: 9.9 (combines code size and activity) +* 🏆 Score: 9.6 (combines code size and activity) * ⚖️ License: Custom License * 🏷️ Latest Release: v1.0.0 (2025-05-11) @@ -552,51 +620,55 @@ The tool reads host definitions from a YAML file specifying network interfaces ( --- -### 21. gemtexter +### 24. goprecords [#24(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] -* 💻 Languages: Shell (68.2%), CSS (28.5%), Config (1.9%), HTML (1.3%) -* 📚 Documentation: Text (76.1%), Markdown (23.9%) -* 📊 Commits: 472 -* 📈 Lines of Code: 2288 -* 📄 Lines of Documentation: 1180 -* 📅 Development Period: 2021-05-21 to 2025-12-31 -* 🏆 Score: 9.7 (combines code size and activity) -* ⚖️ License: GPL-3.0 -* 🏷️ Latest Release: 3.0.0 (2024-10-01) +* 💻 Languages: Go (100.0%) +* 📚 Documentation: Markdown (100.0%) +* 📊 Commits: 109 +* 📈 Lines of Code: 2723 +* 📄 Lines of Documentation: 489 +* 📅 Development Period: 2013-03-22 to 2026-02-28 +* 🏆 Score: 5.4 (combines code size and activity) +* ⚖️ License: No license found +* 🏷️ Latest Release: v0.2.1 (2026-02-20) -Gemtexter is a static site generator and blog engine written in Bash that converts content from Gemini Gemtext format into multiple output formats (HTML, Markdown) simultaneously. It allows you to maintain a single source of truth in Gemtext and automatically generates XHTML Transitional 1.0, Markdown, and Atom feeds, enabling you to publish the same content across Gemini capsules, traditional websites, and platforms like GitHub/Codeberg Pages. The tool handles blog post management automatically—creating a new dated `.gmi` file triggers auto-indexing, feed generation, and cross-format conversion. +**goprecords** is a Go CLI tool that generates global uptime reports by aggregating `uptimed` record files from multiple hosts. It ranks machines across metrics like total uptime, boot count, downtime, lifespan, and a combined score—organized by host, kernel version, kernel major version, or kernel name. Output is available in plaintext, Markdown, or Gemtext. It can either report directly from a stats directory or import records into SQLite for repeated querying. -The architecture leverages GNU utilities (sed, grep, date) and optional tools like GNU Source Highlight for syntax highlighting. It includes a templating system that executes embedded Bash code in `.gmi.tpl` files, supports themes for HTML output, and integrates with Git for version control and publishing workflows. Despite being implemented as a complex Bash script, it remains maintainable and serves as an experiment in how far shell scripting can scale for content management tasks. +Under the hood, it parses `uptimed`'s simple `uptime:boottime:kernel` record format, groups entries by the chosen category, and computes aggregates. The architecture is straightforward: a `cmd/goprecords` entry point handles CLI flags and subcommands (`import`, `query`, or direct reporting), while `internal/goprecords` contains the core logic for parsing, aggregation, database operations, and report formatting. It uses `modernc.org/sqlite` (a pure-Go SQLite driver) and Mage for build automation. -[View on Codeberg](https://codeberg.org/snonux/gemtexter) -[View on GitHub](https://github.com/snonux/gemtexter) +[View on Codeberg](https://codeberg.org/snonux/goprecords) +[View on GitHub](https://github.com/snonux/goprecords) --- -### 22. rcm +### 25. quicklogger [#25(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] -* 💻 Languages: Ruby (99.8%), TOML (0.2%) +* 💻 Languages: Go (96.4%), XML (1.8%), Shell (1.1%), TOML (0.7%) * 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 78 -* 📈 Lines of Code: 1377 -* 📄 Lines of Documentation: 113 -* 📅 Development Period: 2024-12-05 to 2025-11-26 -* 🏆 Score: 8.7 (combines code size and activity) -* ⚖️ License: Custom License -* 🧪 Status: Experimental (no releases yet) +* 📊 Commits: 36 +* 📈 Lines of Code: 1220 +* 📄 Lines of Documentation: 78 +* 📅 Development Period: 2024-01-20 to 2026-03-01 +* 🏆 Score: 4.9 (combines code size and activity) +* ⚖️ License: MIT +* 🏷️ Latest Release: v0.1.0 (2026-03-01) -**rcm** is a lightweight Ruby-based configuration management system designed for personal infrastructure automation following the KISS (Keep It Simple, Stupid) principle. It provides a declarative DSL for managing system configuration tasks like file creation, templating, and conditional execution based on hostname or other criteria. The system is useful for automating repetitive configuration tasks across multiple machines, similar to tools like Puppet or Chef but with a minimalist approach tailored for personal use cases. +[](showcase/quicklogger/image-1.png) -The implementation centers around a DSL module that provides keywords like `file`, `given`, and `notify` for defining configuration resources. It supports features like ERB templating, conditional execution, resource dependencies (via `requires`), and directory management. Configuration data can be loaded from TOML files, and tasks are defined as Rake tasks that invoke the configuration DSL. The architecture uses a resource scheduling system that tracks declared objects, prevents duplicates, and evaluates them in order while respecting dependencies and conditions. +Quicklogger is a lightweight cross-platform GUI application built in Go using the Fyne framework that enables rapid logging of ideas and notes to plain text files. The app is specifically designed for quick Android capture workflows—when you have an idea, you can immediately open the app, type a message, and save it as a timestamped markdown file. These files are then synced to a home computer via Syncthing, creating a frictionless capture-to-archive pipeline for thoughts and tasks. -[View on Codeberg](https://codeberg.org/snonux/rcm) -[View on GitHub](https://github.com/snonux/rcm) +[](showcase/quicklogger/image-2.png) + +The implementation leverages Go's cross-compilation capabilities and Fyne's UI abstraction to run identically on Android and Linux desktop environments. Build automation is handled through Mage tasks, offering both local Android NDK builds and containerized cross-compilation via fyne-cross with Docker/Podman support. This architecture keeps the codebase minimal while maintaining full portability across mobile and desktop platforms. + +[View on Codeberg](https://codeberg.org/snonux/quicklogger) +[View on GitHub](https://github.com/snonux/quicklogger) --- -### 23. terraform +### 26. terraform [#26(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: HCL (96.6%), Make (1.9%), YAML (1.5%) * 📚 Documentation: Markdown (100.0%) @@ -618,33 +690,7 @@ The infrastructure uses a **modular, layered architecture** with separate Terraf --- -### 24. quicklogger - -* 💻 Languages: Go (96.1%), XML (1.9%), Shell (1.2%), TOML (0.7%) -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 35 -* 📈 Lines of Code: 1133 -* 📄 Lines of Documentation: 78 -* 📅 Development Period: 2024-01-20 to 2025-09-13 -* 🏆 Score: 4.8 (combines code size and activity) -* ⚖️ License: MIT -* 🏷️ Latest Release: v0.0.4 (2025-09-13) - - -[](showcase/quicklogger/image-1.png) - -Quicklogger is a lightweight cross-platform GUI application built in Go using the Fyne framework that enables rapid logging of ideas and notes to plain text files. The app is specifically designed for quick Android capture workflows—when you have an idea, you can immediately open the app, type a message, and save it as a timestamped markdown file. These files are then synced to a home computer via Syncthing, creating a frictionless capture-to-archive pipeline for thoughts and tasks. - -[](showcase/quicklogger/image-2.png) - -The implementation leverages Go's cross-compilation capabilities and Fyne's UI abstraction to run identically on Android and Linux desktop environments. Build automation is handled through Mage tasks, offering both local Android NDK builds and containerized cross-compilation via fyne-cross with Docker/Podman support. This architecture keeps the codebase minimal while maintaining full portability across mobile and desktop platforms. - -[View on Codeberg](https://codeberg.org/snonux/quicklogger) -[View on GitHub](https://github.com/snonux/quicklogger) - ---- - -### 25. sillybench +### 27. sillybench [#27(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (90.9%), Shell (9.1%) * 📚 Documentation: Markdown (100.0%) @@ -652,7 +698,7 @@ The implementation leverages Go's cross-compilation capabilities and Fyne's UI a * 📈 Lines of Code: 33 * 📄 Lines of Documentation: 3 * 📅 Development Period: 2025-04-03 to 2025-04-03 -* 🏆 Score: 4.6 (combines code size and activity) +* 🏆 Score: 4.5 (combines code size and activity) * ⚖️ License: No license found * 🧪 Status: Experimental (no releases yet) @@ -666,29 +712,7 @@ The implementation is intentionally straightforward, using Go's built-in testing --- -### 26. goprecords - -* 💻 Languages: Go (100.0%) -* 📚 Documentation: Markdown (100.0%) -* 📊 Commits: 104 -* 📈 Lines of Code: 2527 -* 📄 Lines of Documentation: 489 -* 📅 Development Period: 2013-03-22 to 2026-02-20 -* 🏆 Score: 4.5 (combines code size and activity) -* ⚖️ License: No license found -* 🏷️ Latest Release: v0.2.1 (2026-02-20) - - -**goprecords** is a Go CLI tool that generates global uptime reports by aggregating `uptimed` record files from multiple hosts. It ranks machines across metrics like total uptime, boot count, downtime, lifespan, and a combined score—organized by host, kernel version, kernel major version, or kernel name. Output is available in plaintext, Markdown, or Gemtext. It can either report directly from a stats directory or import records into SQLite for repeated querying. - -Under the hood, it parses `uptimed`'s simple `uptime:boottime:kernel` record format, groups entries by the chosen category, and computes aggregates. The architecture is straightforward: a `cmd/goprecords` entry point handles CLI flags and subcommands (`import`, `query`, or direct reporting), while `internal/goprecords` contains the core logic for parsing, aggregation, database operations, and report formatting. It uses `modernc.org/sqlite` (a pure-Go SQLite driver) and Mage for build automation. - -[View on Codeberg](https://codeberg.org/snonux/goprecords) -[View on GitHub](https://github.com/snonux/goprecords) - ---- - -### 27. gorum +### 28. gorum [#28(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (91.3%), JSON (6.4%), YAML (2.3%) * 📚 Documentation: Markdown (100.0%) @@ -711,7 +735,7 @@ The architecture consists of client/server components for inter-node communicati --- -### 28. guprecords +### 29. guprecords [#29(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Raku (100.0%) * 📚 Documentation: Markdown (100.0%) @@ -733,7 +757,7 @@ The implementation uses an object-oriented architecture with specialized classes --- -### 29. geheim +### 30. geheim [#30(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Ruby (86.7%), Shell (13.3%) * 📚 Documentation: Markdown (100.0%) @@ -755,7 +779,7 @@ The architecture leverages Git for storage and synchronization across multiple r --- -### 30. docker-radicale-server +### 31. docker-radicale-server [#31(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Make (57.5%), Docker (42.5%) * 📚 Documentation: Markdown (100.0%) @@ -777,7 +801,7 @@ The implementation uses Alpine Linux as the base image for a minimal footprint, --- -### 31. algorithms +### 32. algorithms [#32(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (99.2%), Make (0.8%) * 📚 Documentation: Markdown (100.0%) @@ -785,7 +809,7 @@ The implementation uses Alpine Linux as the base image for a minimal footprint, * 📈 Lines of Code: 1728 * 📄 Lines of Documentation: 18 * 📅 Development Period: 2020-07-12 to 2023-04-09 -* 🏆 Score: 2.0 (combines code size and activity) +* 🏆 Score: 1.9 (combines code size and activity) * ⚖️ License: Custom License * 🧪 Status: Experimental (no releases yet) @@ -800,7 +824,7 @@ The project is implemented in Go 1.19+ with comprehensive unit tests and benchma --- -### 32. randomjournalpage +### 33. randomjournalpage [#33(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (94.1%), Make (5.9%) * 📚 Documentation: Markdown (100.0%) @@ -823,7 +847,7 @@ The implementation is a straightforward bash script using `qpdf` for PDF extract --- -### 33. photoalbum +### 34. photoalbum [#34(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (80.1%), Make (12.3%), Config (7.6%) * 📚 Documentation: Markdown (100.0%) @@ -846,7 +870,7 @@ The architecture is straightforward and Unix-philosophy driven: users configure --- -### 34. ioriot +### 35. ioriot [#35(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: C (55.5%), C/C++ (24.0%), Config (19.6%), Make (1.0%) * 📚 Documentation: Markdown (100.0%) @@ -871,7 +895,7 @@ The key advantage over traditional benchmarking tools is that it reproduces actu --- -### 35. ipv6test +### 36. ipv6test [#36(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (65.8%), Docker (34.2%) * 📚 Documentation: Markdown (100.0%) @@ -893,7 +917,29 @@ The implementation uses a simple CGI script ([index.pl](file:///home/paul/git/gi --- -### 36. sway-autorotate +### 37. fype [#37(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] + +* 💻 Languages: C (77.3%), C/C++ (13.1%), HTML (7.5%), Make (2.1%) +* 📚 Documentation: Text (65.8%), LaTeX (20.5%), Markdown (13.7%) +* 📊 Commits: 120 +* 📈 Lines of Code: 7904 +* 📄 Lines of Documentation: 2774 +* 📅 Development Period: 2008-05-15 to 2026-02-28 +* 🏆 Score: 1.4 (combines code size and activity) +* ⚖️ License: Custom License +* 🧪 Status: Experimental (no releases yet) + + +Fype is a 32-bit scripting language designed as a fun, AWK-inspired alternative with a simpler syntax. It supports variables with automatic type conversion, functions, loops, control structures, and built-in operations for math, I/O, and system calls. A notable feature is its support for "synonyms" (references/aliases to variables and functions), along with both procedures (using the caller's namespace) and functions (with lexical scoping). The language uses a straightforward syntax with single-character comments (#) and statement-based execution terminated by semicolons. + +The implementation uses a simple top-down parser with maximum lookahead of 1, interpreting code simultaneously as it parses, which means syntax errors are only caught at runtime. Written in C and compiled with GCC, it's designed for BSD systems (tested on FreeBSD 7.0) and uses NetBSD Make for building. The project is still unreleased and incomplete, but aims to eventually match AWK's capabilities while potentially adding modern features like function pointers and closures, though explicitly avoiding complexity like OOP, Unicode, or threading. + +[View on Codeberg](https://codeberg.org/snonux/fype) +[View on GitHub](https://github.com/snonux/fype) + +--- + +### 38. sway-autorotate [#38(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (100.0%) * 📚 Documentation: Markdown (100.0%) @@ -901,7 +947,7 @@ The implementation uses a simple CGI script ([index.pl](file:///home/paul/git/gi * 📈 Lines of Code: 41 * 📄 Lines of Documentation: 17 * 📅 Development Period: 2020-01-30 to 2025-04-30 -* 🏆 Score: 1.3 (combines code size and activity) +* 🏆 Score: 1.2 (combines code size and activity) * ⚖️ License: GPL-3.0 * 🧪 Status: Experimental (no releases yet) @@ -915,7 +961,7 @@ The implementation uses a bash script that continuously monitors the `monitor-se --- -### 37. mon +### 39. mon [#39(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (96.5%), Shell (1.8%), Make (1.2%), Config (0.4%) * 📚 Documentation: Text (100.0%) @@ -938,7 +984,7 @@ Implemented in Perl, `mon` features automatic JSON backup before modifications ( --- -### 38. staticfarm-apache-handlers +### 40. staticfarm-apache-handlers [#40(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (96.4%), Make (3.6%) * 📚 Documentation: Text (100.0%) @@ -961,7 +1007,7 @@ Both handlers are implemented as Perl modules using Apache2's mod_perl API, conf --- -### 39. pingdomfetch +### 41. pingdomfetch [#41(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (97.3%), Make (2.7%) * 📚 Documentation: Text (100.0%) @@ -984,7 +1030,7 @@ The tool is implemented around a hierarchical configuration system (`/etc/pingdo --- -### 40. xerl +### 42. xerl [#42(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (98.3%), Config (1.2%), Make (0.5%) * 📊 Commits: 670 @@ -1005,7 +1051,7 @@ The implementation follows strict OO Perl conventions with explicit typing and p --- -### 41. ychat +### 43. ychat [#43(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: C++ (49.9%), C/C++ (22.2%), Shell (20.6%), Perl (2.5%), HTML (1.9%), Config (1.8%), Make (0.9%), CSS (0.2%) * 📚 Documentation: Text (100.0%) @@ -1028,7 +1074,7 @@ The architecture emphasizes speed and scalability through several key design cho --- -### 42. fapi +### 44. fapi [#44(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Python (96.6%), Make (3.1%), Config (0.3%) * 📚 Documentation: Text (98.3%), Markdown (1.7%) @@ -1050,7 +1096,7 @@ The tool is implemented in Python and depends on the bigsuds library (F5's iCont --- -### 43. perl-c-fibonacci +### 45. perl-c-fibonacci [#45(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: C (80.4%), Make (19.6%) * 📚 Documentation: Text (100.0%) @@ -1071,7 +1117,7 @@ perl-c-fibonacci: source code repository. --- -### 44. netcalendar +### 46. netcalendar [#46(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Java (83.0%), HTML (12.9%), XML (3.0%), CSS (0.8%), Make (0.2%) * 📚 Documentation: Text (89.7%), Markdown (10.3%) @@ -1098,11 +1144,11 @@ The key feature is its intelligent color-coded event visualization system that h --- -### 45. loadbars +### 47. loadbars [#47(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (97.4%), Make (2.6%) * 📚 Documentation: Text (100.0%) -* 📊 Commits: 575 +* 📊 Commits: 577 * 📈 Lines of Code: 1828 * 📄 Lines of Documentation: 100 * 📅 Development Period: 2010-11-05 to 2015-05-23 @@ -1119,7 +1165,7 @@ loadbars: source code repository. --- -### 46. gotop +### 48. gotop [#48(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Go (98.0%), Make (2.0%) * 📚 Documentation: Markdown (50.0%), Text (50.0%) @@ -1142,7 +1188,7 @@ The implementation uses a concurrent architecture with goroutines for data colle --- -### 47. rubyfy +### 49. rubyfy [#49(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Ruby (98.5%), JSON (1.5%) * 📚 Documentation: Markdown (100.0%) @@ -1165,30 +1211,7 @@ The tool is implemented as a lightweight Ruby script that prioritizes simplicity --- -### 48. fype - -* 💻 Languages: C (71.2%), C/C++ (20.7%), HTML (6.6%), Make (1.5%) -* 📚 Documentation: Text (60.3%), LaTeX (39.7%) -* 📊 Commits: 107 -* 📈 Lines of Code: 8954 -* 📄 Lines of Documentation: 1432 -* 📅 Development Period: 2008-05-15 to 2014-06-30 -* 🏆 Score: 0.7 (combines code size and activity) -* ⚖️ License: Custom License -* 🧪 Status: Experimental (no releases yet) - -⚠️ **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. - -Fype is a 32-bit scripting language designed as a fun, AWK-inspired alternative with a simpler syntax. It supports variables with automatic type conversion, functions, loops, control structures, and built-in operations for math, I/O, and system calls. A notable feature is its support for "synonyms" (references/aliases to variables and functions), along with both procedures (using the caller's namespace) and functions (with lexical scoping). The language uses a straightforward syntax with single-character comments (#) and statement-based execution terminated by semicolons. - -The implementation uses a simple top-down parser with maximum lookahead of 1, interpreting code simultaneously as it parses, which means syntax errors are only caught at runtime. Written in C and compiled with GCC, it's designed for BSD systems (tested on FreeBSD 7.0) and uses NetBSD Make for building. The project is still unreleased and incomplete, but aims to eventually match AWK's capabilities while potentially adding modern features like function pointers and closures, though explicitly avoiding complexity like OOP, Unicode, or threading. - -[View on Codeberg](https://codeberg.org/snonux/fype) -[View on GitHub](https://github.com/snonux/fype) - ---- - -### 49. pwgrep +### 50. pwgrep [#50(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (85.0%), Make (15.0%) * 📚 Documentation: Text (80.8%), Markdown (19.2%) @@ -1211,7 +1234,7 @@ The architecture is lightweight and Unix-philosophy driven: password databases a --- -### 50. perldaemon +### 51. perldaemon [#51(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (72.3%), Shell (23.8%), Config (3.9%) * 📊 Commits: 110 @@ -1232,7 +1255,7 @@ The implementation centers around an event loop with configurable intervals that --- -### 51. jsmstrade +### 52. jsmstrade [#52(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Java (76.0%), Shell (15.4%), XML (8.6%) * 📚 Documentation: Markdown (100.0%) @@ -1257,7 +1280,7 @@ The implementation is minimalistic, consisting of just three main Java classes ( --- -### 52. japi +### 53. japi [#53(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (78.3%), Make (21.7%) * 📚 Documentation: Text (100.0%) @@ -1280,7 +1303,7 @@ Implemented in Perl using the JIRA::REST CPAN module, japi supports flexible con --- -### 53. perl-poetry +### 54. perl-poetry [#54(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Perl (100.0%) * 📚 Documentation: Markdown (100.0%) @@ -1303,7 +1326,7 @@ This project exemplifies creative coding where Perl keywords and constructs are --- -### 54. muttdelay +### 55. muttdelay [#55(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Make (47.1%), Shell (46.3%), Vim Script (5.9%), Config (0.7%) * 📚 Documentation: Text (100.0%) @@ -1326,7 +1349,7 @@ The architecture uses three components working together: a Vim plugin that provi --- -### 55. netdiff +### 56. netdiff [#56(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (52.2%), Make (46.3%), Config (1.5%) * 📚 Documentation: Text (100.0%) @@ -1349,7 +1372,7 @@ The tool uses a clever client-server architecture where you run the identical co --- -### 56. debroid +### 57. debroid [#57(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (92.0%), Make (8.0%) * 📚 Documentation: Markdown (100.0%) @@ -1374,7 +1397,7 @@ The implementation uses a two-stage debootstrap process: first creating a Debian --- -### 57. hsbot +### 58. hsbot [#58(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Haskell (98.5%), Make (1.5%) * 📊 Commits: 80 @@ -1395,7 +1418,7 @@ The implementation uses a modular design with core components separated into Bas --- -### 58. cpuinfo +### 59. cpuinfo [#59(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (53.2%), Make (46.8%) * 📚 Documentation: Text (100.0%) @@ -1418,7 +1441,7 @@ The implementation is elegantly simple: a single shell script ([src/cpuinfo](fil --- -### 59. template +### 60. template [#60(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Make (89.2%), Shell (10.8%) * 📚 Documentation: Text (100.0%) @@ -1441,7 +1464,7 @@ The implementation uses a **Makefile-based build system** with targets for compi --- -### 60. awksite +### 61. awksite [#61(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: AWK (72.1%), HTML (16.4%), Config (11.5%) * 📚 Documentation: Text (60.0%), Markdown (40.0%) @@ -1464,7 +1487,7 @@ The architecture is remarkably simple: a single AWK script ([index.cgi](file:/// --- -### 61. dyndns +### 62. dyndns [#62(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 💻 Languages: Shell (100.0%) * 📚 Documentation: Text (100.0%) @@ -1487,7 +1510,7 @@ The implementation uses a two-tier security architecture: SSH public key authent --- -### 62. vs-sim +### 63. vs-sim [#63(now) ·n/a(1w) ·n/a(2w) ·n/a(3w) ·n/a(4w)] * 📚 Documentation: Markdown (100.0%) * 📊 Commits: 411 diff --git a/about/showcase/debroid/image-1.png b/about/showcase/debroid/image-1.png index 3a28b1cb..83a79617 100644 --- a/about/showcase/debroid/image-1.png +++ b/about/showcase/debroid/image-1.png @@ -45,21 +45,21 @@ </style> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-26e89bb5a0c37ae9.css" /> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-71a44d5be3f782c5.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-bcf0a93b19072a86.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-95af332f763e4560.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-8ecc5798f0584cac.css" /> - <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_status_checks_ruleset","action_yml_language_service","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service","alternate_user_config_repo","api_insights_show_missing_data_banner","arianotify_comprehensive_migration","batch_suggested_changes","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_snippy","copilot_agent_task_list_v2","copilot_agent_task_submit_with_modifier","copilot_agent_tasks_btn_repo","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","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_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_use_task_name","copilot_org_policy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","enterprise_ai_controls","failbot_report_error_react_apps_on_page","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_defer_hot_cache_preheating","issues_react_deferred_list_data","issues_react_hot_cache","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_display_button_config_menu","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_brand_next","primer_react_css_has_selector_perf","projects_assignee_max_limit","prs_conversations_react","react_quality_profiling","repos_allow_finder_filters_rollout","repos_relevance_page","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","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-2c87d5c76bc5d1e0.js"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-90e04992d1db2c94.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/19762-203ba93c6a6f3066.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_image_version_event","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","copilot_3p_agent_hovercards","copilot_agent_sessions_alive_updates","copilot_agent_snippy","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_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","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_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_use_task_name","copilot_org_policy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_stable_conversation_view","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_menu_lazy_load","global_nav_react","global_user_menu_lazy_load","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","initial_per_page_pagination_updates","issue_fields_global_search","issue_fields_report_usage","issue_fields_timeline_events","issues_cca_assign_actor_with_agent","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_auto_retry_on_error","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_hot_cache","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","issues_react_safari_scroll_preservation","issues_react_use_turbo_for_cross_repo_navigation","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_grouped_by_edit_route","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","mission_control_retry_on_401","mission_control_use_body_html","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","react_quality_profiling","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","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-9c894bc29dbadce2.js"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-2c68c444bddf228c.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/28839-632d00a964e8dbd5.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/49863-8861e351482cb073.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/64220-5924ae3b3c473575.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-2cd02065315011b3.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/runtime-helpers-7744803ecc19870c.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/64220-1215bd360f02816c.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/environment-39e5b412c63ea4f0.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/runtime-helpers-3cd71e27e349021d.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/2966-25cb8e34b31306a4.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/96232-fb82336d69225835.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/41013-ac21ea90ed8590af.js" defer="defer"></script> @@ -67,10 +67,10 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/24387-6b7f5e596897eded.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/81683-740d112caee5baa9.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/46740-84bdd4782a486b80.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/81751-750bd09cbdd426df.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-6065e846b60ac1a6.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-559588089abef811.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/react-core-ac5286c081aff97d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/81751-d3fe9e061a21f8d3.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-837d26c249ef0f1d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-85d42ad2d057828d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/react-core-dcd512f43fdba85e.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-e74a1db7c21f7e74.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/7053-20b4a6914bbde21f.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/79039-9ce5da88e09eef89.js" defer="defer"></script> @@ -79,16 +79,16 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/26533-6b8040883d16f6ae.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/62249-2895213a788d973c.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/2694-372ce035e93800e0.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/56093-7e45e1dafab59419.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/28360-dc31a60141b9384f.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/65316-c849c86dc66fef72.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/22960-fce2676ce9889137.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/56093-886facf7a5ba3dc9.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/28360-f4444f13a0dc6af9.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/12142-b56dc06030d9574f.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/22960-afcf22802256dab7.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/51683-f6844a8acd415e3b.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/76545-cf3621a1f2f36d8d.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-dfb8b6902db23a9e.js" defer="defer"></script> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.10393900597d030e.module.css" /> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-e50dd1f2cdd55827.js" defer="defer"></script> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.35e5d09cdbc69350.module.css" /> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/38302-277be92deeed3c63.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-d3e65f4852a526e6.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-fc52e59df1c89647.js" defer="defer"></script> <title>Page not found · GitHub · GitHub</title> @@ -98,13 +98,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:fffee6a3-e93a-7c15-e5d1-eda7b6aff1ab"> + <meta name="fetch-nonce" content="v2:d2a25cd0-8996-2258-f4e7-80d86797e8ea"> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> - <meta name="request-id" content="DFCA:164DFC:17582338:127EF5DB:699B1DF8" data-pjax-transient="true"/><meta name="html-safe-nonce" content="4cb4f4fc207451ffe443a5e6fe94bcde45043512abe08ec46c3e86ec4a747d10" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERkNBOjE2NERGQzoxNzU4MjMzODoxMjdFRjVEQjo2OTlCMURGOCIsInZpc2l0b3JfaWQiOiIyMzI3MTgzOTI2MDkwMjEwODA4IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="11065452a802d0101b6baa1cdf5d97330e18a2e2c3b38491a2b0ed7dcdb4f684" data-pjax-transient="true"/> + <meta name="request-id" content="A55E:11C44B:183CC47:122E83B:69A5DEC4" data-pjax-transient="true"/><meta name="html-safe-nonce" content="079d822d4ee14dc03b1833353758d13e5b68d14ff9eae6d798e27168346cf710" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNTVFOjExQzQ0QjoxODNDQzQ3OjEyMkU4M0I6NjlBNURFQzQiLCJ2aXNpdG9yX2lkIjoiNzQyMzI3ODU0Mzk2MjIzNDU2NCIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="bae4c47945d29a2b8afe0358f2e0b8649399b1c693ec02e523967e16e2b8217c" data-pjax-transient="true"/> @@ -184,10 +184,10 @@ <meta name="expected-hostname" content="github.com"> - <meta http-equiv="x-pjax-version" content="f31462530b9ddd9eb0c1e93df962f2d196fe625a430103c8c698f6c0e0368c56" 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="20414e98442146cd7c7f78b5f030955d6ce4de6d09dfb1ec55df5bf7ece04854" data-turbo-track="reload"> - <meta http-equiv="x-pjax-js-version" content="8ea75b9480dd46be2854159b09221afdadf84a27a926d6b4931f617236ba17d9" data-turbo-track="reload"> + <meta http-equiv="x-pjax-version" content="30f9519069976b80972d8744987ba2c76145523a16787af74c38413ef1597c51" data-turbo-track="reload"> + <meta http-equiv="x-pjax-csp-version" content="568c098497d98702bac1642a2a853732a047a6ced28eabd3e15d50041a890235" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="3a421c5f1445b7e5ad5460dd263b7954b153fa40b048a6fde2f9e012764d6d50" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="bc39e43f78c404ebd23999dad5f5b2caa82e0e1020399b3b441b76794f8ab57b" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> @@ -210,8 +210,8 @@ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> - <meta name="release" content="02ca89815a9cad62d8552002b860a416c0d294bc"> - <meta name="ui-target" content="full"> + <meta name="release" content="78f49584ec24974dbcb83fc70d06dec10890f793"> + <meta name="ui-target" content="canary-2"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> @@ -231,14 +231,14 @@ <div class="position-relative header-wrapper js-header-wrapper "> - <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> + <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <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-css.257816c5781f334a.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.f9d579378b96cc1f.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.23f559bac95ee10c.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" @@ -262,7 +262,7 @@ <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/46752-4c55523fe83d3457.js" defer="defer"></script> <script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/93308-bf887482583069d7.js" defer="defer"></script> -<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-b0aaa2deb5ef1f3d.js" defer="defer"></script> +<script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-ef46f0030f2d06d6.js" defer="defer"></script> <style> /* Override primer focus outline color for marketing header dropdown links for better contrast */ @@ -272,14 +272,14 @@ } </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=auto data-light-theme=light data-dark-theme=dark> +<header class="HeaderMktg header-logged-out js-details-container js-header Details f4 tmp-py-3" role="banner" data-is-top="true" data-color-mode=auto data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> - <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> + <div class="d-flex flex-column flex-lg-row flex-items-center tmp-px-3 tmp-px-md-4 tmp-px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> @@ -290,7 +290,7 @@ </button> </div> - <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" + <a class="tmp-mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> @@ -310,14 +310,14 @@ </a> <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-b2313cd2-e80a-426d-83aa-549edfcbb2fd" aria-labelledby="tooltip-f446e2ac-2723-40a7-8afc-e456762ba538" 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-7977ced8-0e98-4345-a341-f08b965d26f1" aria-labelledby="tooltip-bfe30f71-d48d-416b-9448-c73d7042fb10" 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-f446e2ac-2723-40a7-8afc-e456762ba538" for="icon-button-b2313cd2-e80a-426d-83aa-549edfcbb2fd" 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-bfe30f71-d48d-416b-9448-c73d7042fb10" for="icon-button-7977ced8-0e98-4345-a341-f08b965d26f1" 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-css.257816c5781f334a.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4c324d4a83e5e7e0.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4810edf2ebf35234.module.css" /> <react-partial partial-name="appearance-settings" @@ -341,8 +341,8 @@ <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"> - <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.257816c5781f334a.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/marketing-navigation.11f6a23fa7bf1018.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/marketing-navigation.10d24ff3507f03d8.module.css" /> <react-partial partial-name="marketing-navigation" @@ -352,18 +352,18 @@ > <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__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Platform<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Copilot</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-sparkle-fill NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Spark</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-ai-model NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Models</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" 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__Q7t0p">MCP Registry<sup class="NavLink-module__label__bil7n">New</sup></span><span class="NavLink-module__subtitle__X4gkW">Integrate external tools</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" 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__Q7t0p">Actions</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" 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__Q7t0p">Codespaces</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" 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__Q7t0p">Issues</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" 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__Q7t0p">Code Review</span><span class="NavLink-module__subtitle__X4gkW">Manage code changes</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Advanced Security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" 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__Q7t0p">Code security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" 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__Q7t0p">Secret protection</span><span class="NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="NavGroup-module__title__Wzxz2">EXPLORE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Blog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Changelog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all features</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Solutions<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all use cases</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all industries</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__VgJGL"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all solutions</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Resources<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all topics</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">GitHub Skills</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">SUPPORT & SERVICES</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Customer support</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Partners</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Open Source<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Sponsors</span><span class="NavLink-module__subtitle__X4gkW">Fund open source developers</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Security Lab</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Maintainer Community</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Archive Program</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Enterprise<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" 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__Q7t0p">Enterprise platform</span><span class="NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Advanced Security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" 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__Q7t0p">Copilot for Business</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" 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__Q7t0p">Premium Support</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4 MarketingNavigation-module__navLink__hUomM"><span class="NavLink-module__title__Q7t0p">Pricing</span></a></li></ul></nav><script type="application/json" id="__PRIMER_DATA__R_0___">{"resolvedServerColorMode":"day"}</script></div> + <div data-target="react-partial.reactRoot"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Platform<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Copilot</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-sparkle-fill NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Spark</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-ai-model NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Models</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" 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__Q7t0p">MCP Registry<sup class="NavLink-module__label__bil7n">New</sup></span><span class="NavLink-module__subtitle__X4gkW">Integrate external tools</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" 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__Q7t0p">Actions</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" 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__Q7t0p">Codespaces</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" 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__Q7t0p">Issues</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" 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__Q7t0p">Code Review</span><span class="NavLink-module__subtitle__X4gkW">Manage code changes</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Advanced Security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" 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__Q7t0p">Code security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" 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__Q7t0p">Secret protection</span><span class="NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="NavGroup-module__title__Wzxz2">EXPLORE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Blog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Changelog</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all features</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Solutions<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all use cases</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all industries</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__VgJGL"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all solutions</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Resources<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">View all topics</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">GitHub Skills</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">SUPPORT & SERVICES</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Documentation</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Customer support</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a href="https://github.com/resources" data-analytics-event="{"action":"view_all_resources","tag":"link","context":"resources","location":"navbar","label":"view_all_resources_link_resources_navbar"}" class="NavLink-module__link__EG3d4"><span class="NavLink-module__title__Q7t0p">View all resources</span><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavLink-module__arrowIcon__amekg" 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__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Open Source<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Sponsors</span><span class="NavLink-module__subtitle__X4gkW">Fund open source developers</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Security Lab</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Maintainer Community</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4" target="_blank" rel="noreferrer"><span class="NavLink-module__title__Q7t0p">Archive Program</span><svg aria-hidden="true" focusable="false" class="octicon octicon-link-external NavLink-module__externalIcon__eWIry" 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__W8SqJ"><span class="NavGroup-module__title__Wzxz2">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">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__EG3d4"><span class="NavLink-module__title__Q7t0p">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI js-details-container js-header-menu-item"><button type="button" class="NavDropdown-module__button__PEHWX js-details-target" aria-expanded="false">Enterprise<svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-right NavDropdown-module__buttonIcon__Tkl8_" 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__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" 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__Q7t0p">Enterprise platform</span><span class="NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></div></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="NavGroup-module__title__Wzxz2">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy"><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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" 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__Q7t0p">GitHub Advanced Security</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" 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__Q7t0p">Copilot for Business</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4"><div class="NavLink-module__text__XvpLQ"><svg aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" 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__Q7t0p">Premium Support</span><span class="NavLink-module__subtitle__X4gkW">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__EG3d4 MarketingNavigation-module__navLink__hUomM"><span class="NavLink-module__title__Q7t0p">Pricing</span></a></li></ul></nav><script type="application/json" id="__PRIMER_DATA__R_0___">{"resolvedServerColorMode":"day"}</script></div> </react-partial> - <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"> + <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center tmp-mt-3 tmp-mt-lg-0 text-lg-left tmp-ml-lg-3"> -<qbsearch-input class="search-input" data-scope="owner:buetow" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="r8__dlvfPY92gcGDQG-7MaNYaausZr9KRJ7MhBtej082X7XBpOok8nNDIqAYelf7roGANuF78jkqsD3yzS6Fhw" 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="9tKd8RvaLw_nIW1M3lvHDM4v5NhdygZGNosWqxW-UuF1RwxL9IaRvGSeUJT9bBwhJvHXAOj8j47Bkh9hTfXk0A" 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" + class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center tmp-mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button @@ -425,7 +425,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-1c7dcb4d-b4b1-4ac5-936b-74237917ddf3" 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-23cf886e-6444-4845-ab50-85992e36e9ee" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown @@ -666,7 +666,7 @@ ></ul> </div> - <div class="FormControl-inlineValidation" id="validation-1c7dcb4d-b4b1-4ac5-936b-74237917ddf3" hidden="hidden"> + <div class="FormControl-inlineValidation" id="validation-23cf886e-6444-4845-ab50-85992e36e9ee" 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> @@ -676,7 +676,7 @@ </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> - <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> + <div class="d-flex flex-row color-fg-muted tmp-px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> @@ -707,7 +707,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="lFeMrAyU3TMWKqMyhZFSCKujNtJy+tc6C5YYynzAzSPmBrbtuC2gG6aew1NGJ8l7BphbLoZQvPahR3/aWvarZQ==" /> + <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="8Gmg5olo67W/p4rUGdbQXeLDWgBGOGjo0P1uZHWshUc29lriVes7ORLl2+4bSVIuD8RDdjHSZZ0877iqWm9RdA==" /> <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"> @@ -745,7 +745,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="trl4T40Y6jpv+y23HB7xYjuZ4qcsDlwMGkSP6gytEowDyle1WGegwFhQFDd5BVdCUZVii9+6pxXSutm1c3wSdQ==" /> + <!-- '"` --><!-- </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="YVJZsQ9Qubg6kJUMESQ6oLtTHMh4gTzripgRfuuWX7xbfaKQdJwIf0tKymLxejI3EVJEBWbZ7+pq/A+ALuB9qw==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> @@ -763,7 +763,7 @@ placeholder="github-ruby" required maxlength="50"> - <input type="hidden" data-csrf="true" value="o3QVjgGx31d2TNyQc+ja9vSUdPbzizymhXP7Pw/JTc+ZT5m5+IHlOpQ4fBSp5PcF2mZXMA4VUXy9ehBorIbHKQ==" /> + <input type="hidden" data-csrf="true" value="/+vOT9JGLJXQUUl3zxCHZL5qPuWzFC1ZKVpOCKt//iDfcJX/UoKj0cHUpBeZNxKcSJ6dpmXX3ioQD/t56Xdxxg==" /> </auto-check> </div> @@ -818,7 +818,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="NiESScOmu7qQB/yFYTt/DplpCdFLLQcFn2Y4S+V78RhBGPEkxmNfMoUhXIkx40jeccLkpF1y5ze9+duz3P3+dg==" /> <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="KrvR3HaU1GPw+XeYs7NB2ZvQu0LTjC8JZYIAL42V50Mh4EqFOrd7wesz54PttWBt/AmFNmzavyabwnNIiALczA==" /> <input type="hidden" name="add_account" id="add_account" autocomplete="off" class="form-control" /> <label for="login_field"> Username or email address @@ -840,15 +840,15 @@ <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_8c73" hidden="hidden" /> -<input class="form-control" type="hidden" name="timestamp" value="1771773433036" /> -<input class="form-control" type="hidden" name="timestamp_secret" value="a96a0e2fd4ac35da12fb3b57bf0650b99050f9e5300d70cbcd212be2676fc0b7" /> +<input class="form-control" type="text" name="required_field_446e" hidden="hidden" /> +<input class="form-control" type="hidden" name="timestamp" value="1772478148627" /> +<input class="form-control" type="hidden" name="timestamp_secret" value="7315a35ded42f34f2f95f2ed6f2f98f2669116a83fb465f7b9b5d97ddde07799" /> <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" /> </div> </form> <webauthn-status class="js-webauthn-login-emu-control"> - <div data-target="webauthn-status.partial" class="d-flex flex-justify-between flex-column mt-3 mb-0" hidden> + <div data-target="webauthn-status.partial" class="d-flex flex-justify-between flex-column tmp-mt-3 mb-0" hidden> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fbuetow%2Fdebroid%2Fblob%2Fmaster%2FDeboroid.png" data-analytics-event="{"category":"passkey_404_login","action":"clicked","label":null}" data-view-component="true" class="Button--link Button--medium Button"> <span class="Button-content"> <span class="Button-label">or continue with other methods</span> </span> @@ -869,14 +869,14 @@ <div class="AppHeader-appearanceSettings"> <react-partial-anchor> - <button data-target="react-partial-anchor.anchor" id="icon-button-e503a1ee-832a-4a8c-90a0-36b650aa2549" aria-labelledby="tooltip-84c8c49d-36cb-4c39-9071-c357301d04d7" 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-79b2bcbd-5837-4688-b54b-452d841ee55e" aria-labelledby="tooltip-93a47a41-5208-49aa-8a60-5b4f04a2e420" 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-84c8c49d-36cb-4c39-9071-c357301d04d7" for="icon-button-e503a1ee-832a-4a8c-90a0-36b650aa2549" 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-93a47a41-5208-49aa-8a60-5b4f04a2e420" for="icon-button-79b2bcbd-5837-4688-b54b-452d841ee55e" 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-css.257816c5781f334a.module.css" /> -<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4c324d4a83e5e7e0.module.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.472b5991857bf128.module.css" /> +<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/appearance-settings.4810edf2ebf35234.module.css" /> <react-partial partial-name="appearance-settings" @@ -910,10 +910,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-f2b797a4-d1f8-4f89-8714-4b38c66a033b" aria-labelledby="tooltip-7f55372e-e470-4795-9634-ed49affce0fd" 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-ea26f8d4-2af1-4729-a8e0-9526805b081a" aria-labelledby="tooltip-a8cff073-5f91-4e7d-b436-18118df2d006" 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-7f55372e-e470-4795-9634-ed49affce0fd" for="icon-button-f2b797a4-d1f8-4f89-8714-4b38c66a033b" 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-a8cff073-5f91-4e7d-b436-18118df2d006" for="icon-button-ea26f8d4-2af1-4729-a8e0-9526805b081a" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> @@ -1001,7 +1001,7 @@ </div> </div> -<div class="container-lg mt-5 px-3"> +<div class="container-lg tmp-mt-5 tmp-px-3"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form role="search" data-turbo="false" action="/search" accept-charset="UTF-8" method="get"> <label for="not-found-search" class="d-block text-normal color-fg-muted mb-1 f4">Find code, projects, and people on GitHub:</label> <div class="d-flex flex-items-center"> @@ -1010,7 +1010,7 @@ </button> </div> </form> - <div class="mt-5 color-fg-muted text-center"> + <div class="tmp-mt-5 color-fg-muted text-center"> <a href="https://support.github.com?tags=dotcom-404" class="Link--secondary">Contact Support</a> — <a href="https://githubstatus.com" class="Link--secondary">GitHub Status</a> — <a href="https://twitter.com/githubstatus" class="Link--secondary">@githubstatus</a> @@ -1021,18 +1021,18 @@ </div> - <footer role="contentinfo" class="footer pt-6 position-relative" data-analytics-visible="{"category":"Footer","action":"visible","label":"text: Marketing footer"}" > + <footer role="contentinfo" class="footer tmp-pt-6 position-relative" data-analytics-visible="{"category":"Footer","action":"visible","label":"text: Marketing footer"}" > <h2 class="sr-only">Site-wide Links</h2> <div class="container-xl p-responsive"> - <div class="d-flex flex-wrap py-5 mb-5"> - <section class="col-12 col-lg-4 mb-5 pr-lg-4"> + <div class="d-flex flex-wrap tmp-py-5 tmp-mb-5"> + <section class="col-12 col-lg-4 tmp-mb-5 tmp-pr-lg-4"> <a href="/" data-analytics-event="{"category":"Footer","action":"go to home","label":"text:home"}" class="color-fg-default d-inline-block" aria-label="Go to GitHub homepage"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 367.4 90" class="footer-logo-mktg d-block" height="30"><g fill="currentColor"><path d="m46.1 0c-25.5 0-46.1 20.6-46.1 46.1 0 20.4 13.2 37.7 31.5 43.8 2.3.4 3.2-1 3.2-2.2 0-1.1-.1-4.7-.1-8.6-11.6 2.1-14.6-2.8-15.5-5.4-.5-1.3-2.8-5.4-4.7-6.5-1.6-.9-3.9-3-.1-3.1 3.6-.1 6.2 3.3 7.1 4.7 4.2 7 10.8 5 13.4 3.8.4-3 1.6-5 2.9-6.2-10.3-1.2-21-5.1-21-22.8 0-5 1.8-9.2 4.7-12.4-.5-1.2-2.1-5.9.5-12.2 0 0 3.9-1.2 12.7 4.7 3.7-1 7.6-1.6 11.5-1.6s7.8.5 11.5 1.6c8.8-6 12.7-4.7 12.7-4.7 2.5 6.3.9 11.1.5 12.2 2.9 3.2 4.7 7.3 4.7 12.4 0 17.7-10.8 21.6-21.1 22.8 1.7 1.4 3.1 4.2 3.1 8.5 0 6.2-.1 11.1-.1 12.7 0 1.2.9 2.7 3.2 2.2 18.2-6.1 31.4-23.4 31.4-43.8.3-25.4-20.4-46-45.9-46z"></path><path d="m221.6 67.1h-.1zm0 0c-.5 0-1.8.3-3.2.3-4.4 0-5.9-2-5.9-4.6v-17.5h8.9c.5 0 .9-.4.9-1.1v-9.5c0-.5-.4-.9-.9-.9h-8.9v-11.7c0-.4-.3-.7-.8-.7h-12c-.5 0-.8.3-.8.7v12.1s-6.1 1.5-6.5 1.6-.7.5-.7.9v7.6c0 .6.4 1.1.9 1.1h6.2v18.3c0 13.6 9.5 15 16 15 3 0 6.5-.9 7.1-1.2.3-.1.5-.5.5-.9v-8.4c.1-.6-.3-1-.8-1.1zm132.2-12.2c0-10.1-4.1-11.4-8.4-11-3.3.2-6 1.9-6 1.9v19.6s2.7 1.9 6.8 2c5.8.2 7.6-1.9 7.6-12.5zm13.6-.9c0 19.1-6.2 24.6-17 24.6-9.1 0-14.1-4.6-14.1-4.6s-.2 2.6-.5 2.9c-.2.3-.4.4-.8.4h-8.3c-.6 0-1.1-.4-1.1-.9l.1-62c0-.5.4-.9.9-.9h11.9c.5 0 .9.4.9.9l-.1 20.9s4.6-3 11.3-3h.1c6.8-0 16.7 2.5 16.7 21.7zm-48.7-20.2h-11.7c-.6 0-.9.4-.9 1.1v30.3s-3.1 2.2-7.3 2.2-5.4-1.9-5.4-6.1v-26.5c0-.5-.4-.9-.9-.9h-11.9c-.5 0-.9.4-.9.9v28.5c0 12.3 6.9 15.3 16.3 15.3 7.8 0 14.1-4.3 14.1-4.3s.3 2.2.4 2.5.5.5.9.5h7.5c.6 0 .9-.4.9-.9l.1-41.7c-.1-.4-.6-.9-1.2-.9zm-132.2 0h-11.9c-.5 0-.9.5-.9 1.1v40.9c0 1.1.7 1.5 1.7 1.5h10.7c1.1 0 1.4-.5 1.4-1.5v-41.1c0-.5-.5-.9-1-.9zm-5.8-18.9c-4.3 0-7.7 3.4-7.7 7.7s3.4 7.7 7.7 7.7c4.2 0 7.6-3.4 7.6-7.7s-3.4-7.7-7.6-7.7zm92-1.4h-11.8c-.5 0-.9.4-.9.9v22.8h-18.5v-22.7c0-.5-.4-.9-.9-.9h-11.9c-.5 0-.9.4-.9.9v62c0 .5.5.9.9.9h11.9c.5 0 .9-.4.9-.9v-26.6h18.5l-.1 26.5c0 .5.4.9.9.9h11.9c.5 0 .9-.4.9-.9v-62c0-.4-.4-.9-.9-.9zm-105.3 27.5v32c0 .2-.1.6-.3.7 0 0-7 5-18.5 5-13.9 0-30.3-4.4-30.3-33 0-28.7 14.4-34.6 28.4-34.5 12.2 0 17.1 2.7 17.8 3.2.2.3.3.5.3.8l-2.3 9.9c0 .5-.5 1.1-1.1.9-2-.6-5-1.8-12.1-1.8-8.2 0-17 2.3-17 20.8s8.4 20.6 14.4 20.6c5.1 0 7-.6 7-.6v-12.8h-8.2c-.6 0-1.1-.4-1.1-.9v-10.3c0-.5.4-.9 1.1-.9h20.9c.6-.1 1 .4 1 .9z"></path></g></svg> </a> - <h3 class="h5 mt-4 mb-0" id="subscribe-to-newsletter">Subscribe to our developer newsletter</h3> - <p class="f5 color-fg-muted mb-3">Get tips, technical guides, and best practices. Twice a month.</p> - <a class="btn-mktg mb-4 btn-muted-mktg" data-analytics-event="{"category":"Subscribe","action":"click to Subscribe","label":"ref_cta:Subscribe;"}" href="https://github.com/newsletter"> + <h3 class="h5 tmp-mt-4 mb-0" id="subscribe-to-newsletter">Subscribe to our developer newsletter</h3> + <p class="f5 color-fg-muted tmp-mb-3">Get tips, technical guides, and best practices. Twice a month.</p> + <a class="btn-mktg tmp-mb-4 btn-muted-mktg" data-analytics-event="{"category":"Subscribe","action":"click to Subscribe","label":"ref_cta:Subscribe;"}" href="https://github.com/newsletter"> Subscribe @@ -1040,148 +1040,148 @@ </section> - <nav class="col-6 col-sm-3 col-lg-2 mb-6 mb-md-2 pr-3 pr-lg-0 pl-lg-4" aria-labelledby="footer-title-product"> - <h3 class="h5 mb-3 text-mono color-fg-muted text-normal" id="footer-title-product"> + <nav class="col-6 col-sm-3 col-lg-2 tmp-mb-6 tmp-mb-md-2 tmp-pr-3 tmp-pr-lg-0 tmp-pl-lg-4" aria-labelledby="footer-title-product"> + <h3 class="h5 tmp-mb-3 text-mono color-fg-muted text-normal" id="footer-title-product"> Platform </h3> <ul class="list-style-none color-fg-muted f5"> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"features","context":"platform","tag":"link","label":"features_link_platform_footer"}" href="/features">Features</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"enterprise","context":"platform","tag":"link","label":"enterprise_link_platform_footer"}" href="/enterprise">Enterprise</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"copilot","context":"platform","tag":"link","label":"copilot_link_platform_footer"}" href="/features/copilot">Copilot</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"ai","context":"platform","tag":"link","label":"ai_link_platform_footer"}" href="/features/ai">AI</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"security","context":"platform","tag":"link","label":"security_link_platform_footer"}" href="/security">Security</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"pricing","context":"platform","tag":"link","label":"pricing_link_platform_footer"}" href="/pricing">Pricing</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"team","context":"platform","tag":"link","label":"team_link_platform_footer"}" href="/team">Team</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"resources","context":"platform","tag":"link","label":"resources_link_platform_footer"}" href="https://resources.github.com">Resources</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"roadmap","context":"platform","tag":"link","label":"roadmap_link_platform_footer"}" href="https://github.com/github/roadmap">Roadmap</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"compare","context":"platform","tag":"link","label":"compare_link_platform_footer"}" href="/resources/articles/devops-tools-comparison">Compare GitHub</a> </li> </ul> </nav> - <nav class="col-6 col-sm-3 col-lg-2 mb-6 mb-md-2 pr-3 pr-md-0 pl-md-4" aria-labelledby="footer-title-platform"> - <h3 class="h5 mb-3 text-mono color-fg-muted text-normal" id="footer-title-platform"> + <nav class="col-6 col-sm-3 col-lg-2 tmp-mb-6 tmp-mb-md-2 tmp-pr-3 tmp-pr-md-0 tmp-pl-md-4" aria-labelledby="footer-title-platform"> + <h3 class="h5 tmp-mb-3 text-mono color-fg-muted text-normal" id="footer-title-platform"> Ecosystem </h3> <ul class="list-style-none f5"> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"dev-api","context":"ecosystem","tag":"link","label":"dev-api_link_ecosystem_footer"}" href="https://docs.github.com/get-started/exploring-integrations/about-building-integrations">Developer API</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"partners","context":"ecosystem","tag":"link","label":"partners_link_ecosystem_footer"}" href="https://partner.github.com">Partners</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"edu","context":"ecosystem","tag":"link","label":"edu_link_ecosystem_footer"}" href="https://github.com/edu">Education</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"cli","context":"ecosystem","tag":"link","label":"cli_link_ecosystem_footer"}" href="https://cli.github.com">GitHub CLI</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"desktop","context":"ecosystem","tag":"link","label":"desktop_link_ecosystem_footer"}" href="https://desktop.github.com">GitHub Desktop</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"mobile","context":"ecosystem","tag":"link","label":"mobile_link_ecosystem_footer"}" href="https://github.com/mobile">GitHub Mobile</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"marketplace","context":"ecosystem","tag":"link","label":"marketplace_link_ecosystem_footer"}" href="https://github.com/marketplace">GitHub Marketplace</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"mcp_registry","context":"ecosystem","tag":"link","label":"mcp_registry_link_ecosystem_footer"}" href="https://github.com/mcp">MCP Registry</a> </li> </ul> </nav> - <nav class="col-6 col-sm-3 col-lg-2 mb-6 mb-md-2 pr-3 pr-md-0 pl-md-4" aria-labelledby="footer-title-support"> - <h3 class="h5 mb-3 text-mono color-fg-muted text-normal" id="footer-title-support"> + <nav class="col-6 col-sm-3 col-lg-2 tmp-mb-6 tmp-mb-md-2 tmp-pr-3 tmp-pr-md-0 tmp-pl-md-4" aria-labelledby="footer-title-support"> + <h3 class="h5 tmp-mb-3 text-mono color-fg-muted text-normal" id="footer-title-support"> Support </h3> <ul class="list-style-none f5"> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"docs","context":"support","tag":"link","label":"docs_link_support_footer"}" href="https://docs.github.com">Docs</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"community","context":"support","tag":"link","label":"community_link_support_footer"}" href="https://github.community">Community Forum</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"services","context":"support","tag":"link","label":"services_link_support_footer"}" href="https://services.github.com">Professional Services</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"premium_support","context":"support","tag":"link","label":"premium_support_link_support_footer"}" href="/enterprise/premium-support">Premium Support</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"skills","context":"support","tag":"link","label":"skills_link_support_footer"}" href="https://skills.github.com">Skills</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"status","context":"support","tag":"link","label":"status_link_support_footer"}" href="https://www.githubstatus.com">Status</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"contact_github","context":"support","tag":"link","label":"contact_github_link_support_footer"}" href="https://support.github.com?tags=dotcom-footer">Contact GitHub</a> </li> </ul> </nav> - <nav class="col-6 col-sm-3 col-lg-2 mb-6 mb-md-2 pr-3 pr-md-0 pl-md-4" aria-labelledby="footer-title-company"> - <h3 class="h5 mb-3 text-mono color-fg-muted text-normal" id="footer-title-company"> + <nav class="col-6 col-sm-3 col-lg-2 tmp-mb-6 tmp-mb-md-2 tmp-pr-3 tmp-pr-md-0 tmp-pl-md-4" aria-labelledby="footer-title-company"> + <h3 class="h5 tmp-mb-3 text-mono color-fg-muted text-normal" id="footer-title-company"> Company </h3> <ul class="list-style-none f5"> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"about","context":"company","tag":"link","label":"about_link_company_footer"}" href="https://github.com/about">About</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"why_github","context":"company","tag":"link","label":"why_github_link_company_footer"}" href="https://github.com/why-github">Why GitHub</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"customer_stories","context":"company","tag":"link","label":"customer_stories_link_company_footer"}" href="/customer-stories?type=enterprise">Customer stories</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"blog","context":"company","tag":"link","label":"blog_link_company_footer"}" href="https://github.blog">Blog</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"readme","context":"company","tag":"link","label":"readme_link_company_footer"}" href="/readme">The ReadME Project</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"careers","context":"company","tag":"link","label":"careers_link_company_footer"}" href="https://github.careers">Careers</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"newsroom","context":"company","tag":"link","label":"newsroom_link_company_footer"}" href="/newsroom">Newsroom</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"inclusion","context":"company","tag":"link","label":"inclusion_link_company_footer"}" href="/about/diversity">Inclusion</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"social_impact","context":"company","tag":"link","label":"social_impact_link_company_footer"}" href="https://socialimpact.github.com">Social Impact</a> </li> - <li class="lh-condensed mb-3"> + <li class="lh-condensed tmp-mb-3"> <a class="Link--secondary" data-analytics-event="{"location":"footer","action":"shop","context":"company","tag":"link","label":"shop_link_company_footer"}" href="https://shop.github.com">Shop</a> </li> </ul> @@ -1190,7 +1190,7 @@ </div> <div class="color-bg-subtle"> - <div class="container-xl p-responsive f6 py-4 d-md-flex flex-justify-between flex-items-center gap-3"> + <div class="container-xl p-responsive f6 tmp-py-4 d-md-flex flex-justify-between flex-items-center gap-3"> <nav aria-label="Legal and Resource Links"> <ul class="list-style-none d-flex flex-wrap color-fg-muted gapx-3"> <li> @@ -1243,7 +1243,7 @@ </ul> </nav> - <nav aria-label="GitHub's Social Media Links" class="footer-social mt-3 mt-md-0 d-flex gapx-6 gapy-1 flex-wrap flex-items-center flex-lg-justify-end"> + <nav aria-label="GitHub's Social Media Links" class="footer-social tmp-mt-3 tmp-mt-md-0 d-flex gapx-6 gapy-1 flex-wrap flex-items-center flex-lg-justify-end"> <ul class="list-style-none d-flex flex-items-center lh-condensed-ultra gap-3"> <li> @@ -1411,7 +1411,7 @@ <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> - <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> + <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> diff --git a/about/showcase/rcm/image-1.png b/about/showcase/rcm/image-1.png Binary files differnew file mode 100644 index 00000000..ceadfb81 --- /dev/null +++ b/about/showcase/rcm/image-1.png diff --git a/gemfeed/2022-02-04-computer-operating-systems-i-use.md b/gemfeed/2022-02-04-computer-operating-systems-i-use.md index ea88b859..57ee29d3 100644 --- a/gemfeed/2022-02-04-computer-operating-systems-i-use.md +++ b/gemfeed/2022-02-04-computer-operating-systems-i-use.md @@ -1,6 +1,6 @@ # Computer operating systems I use(d) -> Published at 2022-02-04T09:58:22+00:00; Updated at 2022-02-18 +> Published at 2022-02-04T09:58:22+00:00, last updated Mon 03 Mar 2026 02:14:00 EET 2026 This is a list of Operating Systems I currently use. This list is in no particular order and also will be updated over time. The very first operating system I used was MS-DOS (mainly for games) and the very first Unix like operating system I used was SuSE Linux 5.3. My first smartphone OS was Symbian on a clunky Sony Ericsson device. @@ -39,6 +39,7 @@ This is a list of Operating Systems I currently use. This list is in no particul * [⇢ ⇢ iOS (mobile proprietary)](#ios-mobile-proprietary) * [⇢ ⇢ Other OSes](#other-oses) * [⇢ ⇢ ⇢ InfinyTime (smartwatch)](#infinytime-smartwatch) +* [⇢ ⇢ ⇢ GarminOS (smartwatch)](#garminos-smartwatch) * [⇢ ⇢ ⇢ motionEyeOS](#motioneyeos) * [⇢ ⇢ ⇢ Kobo OS (proprietary)](#kobo-os-proprietary) * [⇢ ⇢ ⇢ Android TV (proprietary)](#android-tv-proprietary) @@ -175,6 +176,12 @@ I use it on my PineTime smartwatch. Other than checking the time and my step cou [https://www.pine64.org/pinetime/](https://www.pine64.org/pinetime/) [https://infinitime.io/](https://infinitime.io/) +### GarminOS (smartwatch) + +I use GarminOS on my Garmin smartwatches. I previously used it on my Garmin Fenix 6 Pro and currently on my Garmin Fenix 7 Pro. It's an excellent smartwatch OS with comprehensive fitness tracking features, outstanding battery life, and tons of functionality. Despite being proprietary, it's the best option for serious sports and health monitoring. + +[https://www.garmin.com/](https://www.garmin.com/) + ### motionEyeOS I usually install an army of RaspberryPi 3's in my house before I travel for a prolonged amount of time. All Pi's are equipped with an camera and have motionEyeOS (Linux based video surveillance system) installed. There's a neat Android app in the F-Droid store which let's me keep an eye on everything. I make the Pi's accessible from the internet via reverse SSH tunnels through one of my frontend servers. diff --git a/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md b/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md index 5c77aa3e..b96bbaa6 100644 --- a/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md +++ b/gemfeed/2026-03-02-rcm-ruby-configuration-management-dsl.md @@ -34,7 +34,7 @@ RCM is a tiny configuration management system written in Ruby. It gives me a sma ## Why I built RCM -I've used (and still use) the usual suspects in configuration management: Puppet, Chef, Ansible, etc. They are powerful, but also come with orchestration layers, agents, inventories, and a lot of moving parts. For my personal machines I wanted something smaller: one Ruby process, one configuration file, a few resource types, and good enough safety features. +I've used (and still use) the usual suspects in configuration management: Puppet, Ansible, etc. They are powerful, but also come with orchestration layers, agents, inventories, and a lot of moving parts. For my personal machines I wanted something smaller: one Ruby process, one configuration file, a few resource types, and good enough safety features. I've always been a fan of Ruby's metaprogramming features, and this project let me explore them in a focused, practical way. @@ -192,7 +192,7 @@ In that space RCM wins: it is small, transparent, and tuned for one person (me!) As of this post I'm tagging and releasing **RCM 0.1.0**. About 99% of the code has been written by me so far, and before AI agents take over more of the boilerplate and wiring work, it felt like a good moment to cut a release and mark this mostly‑human baseline. -Future changes will very likely involve more automated help (including agents like the one you're reading this in), but 0.1.0 is the snapshot of the original, hand‑crafted version of the tool. +Future changes will very likely involve more automated help, but 0.1.0 is the snapshot of the original, hand‑crafted version of the tool. ## What's next |
