{"json_class":"Feedjira::Parser::Atom","@title":"The GitHub Blog","@description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","@url":"https://github.blog/","@links":["https://github.blog/","https://github.blog/all.atom"],"@feed_url":"https://github.blog/all.atom","@icon":"https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32","@entries":[{"json_class":"Feedjira::Parser::AtomEntry","@author":"Abigail Cabunoc Mayes","@title_type":"html","@raw_title":"Welcome to Maintainer Month: Celebrating the people behind the code","@url":"https://github.blog/open-source/maintainers/welcome-to-maintainer-month-celebrating-the-people-behind-the-code/","@links":["https://github.blog/open-source/maintainers/welcome-to-maintainer-month-celebrating-the-people-behind-the-code/"],"@entry_id":"https://github.blog/?p=95708","@updated":{"json_class":"Time","s":1777949813,"n":0},"@published":{"json_class":"Time","s":1777991400,"n":0},"@categories":["Maintainers","Open Source","Maintainer Month","open source"],"@summary":"<p>What maintainers are telling us, what we've shipped, and how to celebrate the people behind open source.</p>\n<p>The post <a href=\"https://github.blog/open-source/maintainers/welcome-to-maintainer-month-celebrating-the-people-behind-the-code/\">Welcome to Maintainer Month: Celebrating the people behind the code</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>At a Maintainer Unconference in Brussels this year, a breakout session had maintainers jotting down thoughts on the future of open source. One sticky note stood out:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>As AI gets better at writing code, human work around code becomes more important and more invisible.</p>\n</blockquote>\n\n\n\n<p>Mentoring new contributors, building trust across a community, making the judgement calls that shape a project&rsquo;s direction: that&rsquo;s the work that turns a repository into a living collaboration. And with the speed of AI, the people doing the work are carrying more than ever. Pull requests merged on GitHub have nearly doubled year over year, and agentic workflows are accelerating the pace even further. As one maintainer put it:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>How much time should I spend on something that you didn&rsquo;t spend any time on?</p>\n</blockquote>\n\n\n\n<p>I&rsquo;ve been part of Maintainer Month for five years now. The conversations I&rsquo;m having with maintainers this year feel different&mdash;there&rsquo;s a weariness, but there&rsquo;s also innovation. Maintainers are converging on standards like agents.md, building trust systems, and designing workflows that put them back in control. In February, Ashley Wolf named the influx of low-quality contributions <a href=\"https://github.blog/open-source/maintainers/welcome-to-the-eternal-september-of-open-source-heres-what-we-plan-to-do-for-maintainers/\">open source&rsquo;s Eternal September</a>. Maintainers told us exactly what they needed. We took notes.</p>\n\n\n\n<p>Six years ago we started Maintainer Month because the people behind open source deserve <strong>better tools</strong>, <strong>real resources</strong>, and <strong>community</strong>. This year, we&rsquo;re going bigger on all three.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-tools-big-releases-for-maintainers-this-month\">Tools: Big releases for maintainers this month</h2>\n\n\n\n<p>Maintainers need better ways to manage who contributes, how, and at what volume. In the Eternal September post, we shared some of the directions we were exploring. Here&rsquo;s where things stand.</p>\n\n\n\n<p><strong>Granular contribution limits:</strong> This one&rsquo;s for every maintainer who&rsquo;s watched their pull request queue turn into a firehose. This gives maintainers the ability to introduce limits on how many pull requests a new or unknown user can make in your project. No more choosing between closing the doors and opening the floodgates. You control how much you let in.</p>\n\n\n\n<p><strong>Pull request archiving</strong> pairs with it. Sweep spam pull requests out of public view. No more emailing support to clean up your repo.</p>\n\n\n\n<p>And there&rsquo;s a brand new <a href=\"https://opensource.guide/accessibility-best-practices-for-your-project/\"><strong>accessibility best practices guide</strong></a> on opensource.guide. Practical steps to make your project usable by everyone.</p>\n\n\n\n<p>And we haven&rsquo;t been waiting around. Since February, we&rsquo;ve also shipped:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.blog/changelog/2026-02-13-new-repository-settings-for-configuring-pull-request-access/\"><strong>Pull request creation controls</strong></a>: restrict pull request creation to collaborators only, or disable pull requests entirely. (Also useful for mirrors, roadmaps, or other repositories where pull requests aren&rsquo;t appropriate.)</li>\n\n\n\n<li><a href=\"https://github.blog/changelog/2026-02-05-pinned-comments-on-github-issues/\"><strong>Pinned comments on issues</strong></a>: pin the most important comment to the top of any issue thread.</li>\n\n\n\n<li><a href=\"https://github.blog/changelog/2026-04-09-new-sort-by-control-added-to-notifications/\"><strong>Sort notifications oldest-first</strong></a>: work through your backlog in order instead of always chasing the latest ping.</li>\n\n\n\n<li><a href=\"https://github.blog/changelog/2026-03-05-hierarchy-view-improvements-and-file-uploads-in-issue-forms/\"><strong>File upload in issue forms</strong></a>: structured issue templates now support file uploads.</li>\n</ul>\n\n\n\n<p>We&rsquo;re building these because maintainers asked for them. Specifically, repeatedly&hellip;and often loudly! We hear you, and we&rsquo;re going to keep shipping. Please keep flagging.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-resources-who-else-is-showing-up\">Resources: Who else is showing up</h2>\n\n\n\n<p>We asked companies and foundations across the ecosystem to show up for Maintainer Month. And they did! <a href=\"https://sentry.io/for/open-source/\"><strong>Sentry</strong></a>, <a href=\"https://openjsf.org/\"><strong>OpenJS Foundation</strong></a>, <a href=\"https://daytona.io/\"><strong>Daytona</strong></a>, and more partners are putting real resources behind maintainers: free tools, compute credits, threat intelligence, conference tickets, and more.</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Open source runs on maintainers, and we&rsquo;re proud to partner with GitHub to celebrate and support them. As the ecosystem scales, maintainers are doing more than ever to keep projects secure and reliable. Maintainer Month is a chance to connect, share knowledge, and remind them they&rsquo;re not doing this alone.</p>\n<cite>Robin Ginn, OpenJS Foundation</cite></blockquote>\n\n\n\n<p>Partners across the ecosystem are offering real resources for maintainers. Here&rsquo;s what&rsquo;s available:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://sentry.io/for/open-source/\"><strong>Sentry:</strong></a> Sentry for Open Source</li>\n\n\n\n<li><a href=\"https://daytona.io/\"><strong>Daytona:</strong></a> $100 in compute credits for maintainers (and up to $10,000 for projects via Startup Grid)</li>\n\n\n\n<li><a href=\"https://mockoon.com/mockoon-cloud-open-source/\"><strong>Mockoon:</strong></a> Free Mockoon Cloud accounts for OSS projects</li>\n\n\n\n<li><a href=\"https://ref.tools/\"><strong>Ref.tools:</strong></a> Free project planning tools for your team</li>\n\n\n\n<li><a href=\"https://arachne.digital/\"><strong>Arachne Digital:</strong></a> Free cyber threat intelligence reporting for OSS projects</li>\n\n\n\n<li><a href=\"https://radix.email/\"><strong>Radix / .Tech:</strong></a> Free 1-year .tech domain for maintainers</li>\n\n\n\n<li><a href=\"https://openjsf.org/\"><strong>OpenJS Foundation:</strong></a> 15% discount on RenderATL tickets (code: OPENJSGITHUB)</li>\n\n\n\n<li><a href=\"https://opensource.org/\"><strong>Open Source Initiative:</strong></a> The <a href=\"https://maintaine.rs/\">maintaine.rs</a> book, free for all maintainers</li>\n\n\n\n<li><a href=\"https://websummit.com/\"><strong>Web Summit:</strong></a> Conference tickets (details coming soon)</li>\n</ul>\n\n\n\n<p>Last year, <a href=\"https://thenewstack.io/how-the-world-is-celebrating-open-source-maintainer-month/\">Sentry celebrated companies that fund open source on a Times Square billboard</a> for Maintainer Month. That&rsquo;s the energy we&rsquo;re looking for.</p>\n\n\n\n<p><strong>Want to join them?</strong> Whether you&rsquo;re a company that depends on open source, a startup, or an educator&mdash;<a href=\"mailto:maintainermonth@github.com\">reach out</a> about the Partner Pack or explore the <a href=\"https://github.com/partners\">GitHub Partner Program</a> for more ways to get involved.</p>\n\n\n\n<p>Maintainers, here&rsquo;s where you can <a href=\"https://maintainermonth.github.com/partner-pack\">claim your <strong>Partner Pack</strong> benefits.</a></p>\n\n\n\n<p>And if you maintain open source tools for science: the new <a href=\"https://os4science.org/funding_opportunity/os4ls/\"><strong>Open Source for Science Fund</strong></a> just launched with $20 million in funding. Grants up to $1 million for projects supporting data-intensive research. Letters of intent open May 11.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"community-you-shouldnt-have-to-do-this-alone\">Community: You shouldn&rsquo;t have to do this alone</h2>\n\n\n\n<p>There are <a href=\"https://maintainermonth.github.com/schedule\">20+ events and streams</a> (and counting!) scheduled throughout Maintainer Month. Here are a few we&rsquo;re excited about:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FOSS United Foundation: <a href=\"https://maintainermonth.github.com/schedule/2026-05-09-maintainers-meetup-delhi-issue-409\"><strong>Maintainers Meetup Delhi</strong></a> (May 9, India). Unconference-style gatherings for maintainers across India.</li>\n\n\n\n<li><a href=\"https://maintainermonth.github.com/schedule/2026-05-13-pycon-us-2026-issue-412\"><strong>PyCon US 2026</strong></a> (May 13&ndash;19, Long Beach). Come find us there!</li>\n\n\n\n<li><a href=\"https://maintainermonth.github.com/schedule\"><strong>Discussion: How should corporations support OSS maintainers?</strong></a> (May 14, virtual). An open discussion on corporate OSS support.</li>\n\n\n\n<li><a href=\"https://maintainermonth.github.com/schedule/2026-05-21-open-source-assistive-technology-hackathon-issue-385\"><strong>Open Source Assistive Technology Hackathon</strong></a> (May 21-22, San Francisco). A two-day hackathon focused on making open source assistive technology more accessible.</li>\n\n\n\n<li><a href=\"https://maintainermonth.github.com/schedule/2026-05-27-maintainer-month-special-jeff-luszcz\"><strong>What Maintainers Need to Know about Open Source Licensing, SBOMs and Security</strong></a> (May 27, virtual). The EU&rsquo;s Cyber Resilience Act is here and it affects open source. Come get the practical rundown.</li>\n</ul>\n\n\n\n<p>We&rsquo;d love to see you there, whether you maintain a project with millions of users or you&rsquo;re just getting started.</p>\n\n\n\n<p><a href=\"https://maintainermonth.github.com/schedule\">Check out the full schedule &gt;</a></p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"part-of-something-bigger\">Part of something bigger</h3>\n\n\n\n<p>One thing we heard over and over from maintainers this year: they want to be <em>&rdquo;part of something bigger and not just being a solo maintainer.&rdquo;</em> If you maintain an open source project and want to connect with others who get it, request to join the <a href=\"https://maintainers.github.com/\">Maintainer Community</a>, a vetted space to share experiences, get support, and have honest conversations. It&rsquo;s where the &ldquo;how are you handling this?&rdquo; sharing of best practices is happening.</p>\n\n\n\n<p>Community members also get access to an <strong>exclusive tier of the Partner Pack,</strong> with deeper discounts, higher credit limits, and offers you won&rsquo;t find in the public pack.</p>\n\n\n\n<p><a href=\"https://maintainers.github.com/\">Request to join &gt;</a></p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"get-involved\">Get involved</h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://github.com/sponsors\"><strong>Sponsor a maintainer</strong></a><strong>.</strong> Financial support is one of the most direct ways to say <em>&ldquo;your work matters.&rdquo;</em></li>\n\n\n\n<li><strong>Host or attend an event.</strong> <a href=\"https://maintainermonth.github.com/schedule\">Browse the schedule</a> or <a href=\"https://github.com/github/maintainermonth/issues/new?assignees=&amp;labels=&amp;template=add-to-calendar.yml&amp;title=EVENT_NAME\">submit your own event</a>.</li>\n\n\n\n<li><strong>Share your story.</strong> Tag <strong>#MaintainerMonth</strong> on social media. Tell people about the project you maintain and what it means to you. The best way to celebrate maintainers is to make their work visible.</li>\n\n\n\n<li><strong>Say thank you.</strong> Find a project you depend on and tell the maintainers you appreciate them. It matters more than you think.</li>\n</ul>\n\n\n\n<p>Open source is changing fast. What hasn&rsquo;t changed is that real people wake up every day and choose to maintain the software the world runs on. They do it because they believe in it, and millions of us depend on that choice.</p>\n\n\n\n<p>This month is for them. Show up, pitch in, say thank you. Let&rsquo;s make it count.</p>\n\n\n\n<p><a href=\"https://maintainermonth.github.com/\">See everything happening this Maintainer Month &gt;</a></p>\n</body></html>\n<p>The post <a href=\"https://github.blog/open-source/maintainers/welcome-to-maintainer-month-celebrating-the-people-behind-the-code/\">Welcome to Maintainer Month: Celebrating the people behind the code</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Lee Reilly","@title_type":"html","@raw_title":"Register now for OpenClaw: After Hours @ GitHub","@url":"https://github.blog/open-source/register-now-for-openclaw-after-hours-github/","@links":["https://github.blog/open-source/register-now-for-openclaw-after-hours-github/"],"@entry_id":"https://github.blog/?p=95662","@updated":{"json_class":"Time","s":1777659905,"n":0},"@published":{"json_class":"Time","s":1777906800,"n":0},"@categories":["AI & ML","Open Source","open source"],"@summary":"<p>OpenClaw builders will gather at GitHub HQ during Microsoft Build 2026 for demos and conversations. Join in person, or watch the livestream on Twitch.</p>\n<p>The post <a href=\"https://github.blog/open-source/register-now-for-openclaw-after-hours-github/\">Register now for OpenClaw: After Hours @ GitHub</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p><a href=\"https://openclaw.ai/\">OpenClaw</a>, one of the fastest-growing open source projects, has already picked up over 350,000 stars and an early community of builders exploring what agentic systems can actually do in practice. </p>\n\n\n\n<p>That&rsquo;s why, on June 3, 2026, we are hosting <a href=\"https://luma.com/OpenClaw-GitHub?tk=vQX2NH\"><strong>OpenClaw: After Hours</strong></a> at GitHub HQ in San Francisco. The event will take place during <a href=\"https://build.microsoft.com/\">Microsoft Build 2026</a>.</p>\n\n\n\n<p>This evening is a chance to bring the OpenClaw community together into the same room.</p>\n\n\n\n<p>We&rsquo;ll kick things off in the early evening with a fireside conversation featuring <a href=\"https://github.com/steipete\">Peter Steinberger</a>, the ClawFather and creator of OpenClaw, followed by a panel with OpenClaw maintainers and ecosystem builders sharing what&rsquo;s working&mdash;and what&rsquo;s not&mdash;when shipping real agentic systems.</p>\n\n\n\n<p>Later in the evening, we&rsquo;ll move into a series of fast-paced lightning talks and close things out with a relaxed happy hour to connect with other builders.</p>\n\n\n\n<p>If you have been following the project or building with it yourself, this is a good chance to meet others, trade notes, and get your claws into what people are actually shipping.</p>\n\n\n\n<p>&#128073; For the full agenda and speaker lineup, please see the <a href=\"https://luma.com/OpenClaw-GitHub?tk=vQX2NH\">registration page</a>.</p>\n\n\n\n<p>&#128205; <strong>GitHub HQ</strong>, 275 Brannan St., San Francisco<br>&#128467; <strong>June 3</strong>, 5:30 p.m. &ndash; 9 p.m.<br>&#128250; <strong>Livestream</strong>: <a href=\"http://twitch.tv/github\">twitch.tv/github</a></p>\n\n\n\n<p>Drinks and snacks will be provided. There will be a lot here to chew on. <a href=\"https://docs.github.com/en/site-policy/github-terms/github-event-code-of-conduct\">No shellfish behavior please</a>. And bring your sharp ideas!</p>\n\n\n\n<iframe src=\"https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3153.3342169779025!2d-122.39378382411614!3d37.78220657198344!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x808580783e915131%3A0x2f8d49e6e86d0285!2s275%20Brannan%20St%2C%20San%20Francisco%2C%20CA%2094107!5e0!3m2!1sen!2sus!4v1777659123436!5m2!1sen!2sus\" width=\"600\" height=\"450\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\"></iframe>\n\n\n\n<p><strong>Spots are limited</strong>, so register early and come ready to share what you are working on.</p>\n\n\n\n<p>&#8252;&#65039; <em>Please note:<strong> </strong>Submitting a registration does not guarantee attendance. We&rsquo;ll follow up to confirm successful registrations.</em></p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https://luma.com/OpenClaw-GitHub?tk=vQX2NH\">Register now</a></div>\n</div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-openclaw\">What is OpenClaw?</h2>\n\n\n\n<p>OpenClaw is an open source framework for building and running agentic systems, focused on giving developers real control over how agents execute tasks in the wild. It provides the core pieces for orchestrating tools, managing state, and handling long running workflows, so you can move beyond prompt demos and ship systems that actually do work. It&rsquo;s also probably convinced more than a few people to buy a Mac Mini just to run &ldquo;one small experiment&rdquo; that somehow turned into a permanent setup.</p>\n\n\n\n<p>Hear more about&nbsp;OpenClaw&nbsp;from the creator himself, Peter Steinberger:&nbsp;</p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\n\t\t<div class=\"mod-vh position-relative\" style=\"height: 0; padding-bottom: calc((9 / 16)*100%);\">\n\t\t\t<iframe loading=\"lazy\" class=\"position-absolute top-0 left-0 width-full height-full\" src=\"https://www.youtube.com/embed/7rzYDM6vMtI?version=3&amp;rel=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;fs=1&amp;hl=en-US&amp;autohide=2&amp;wmode=transparent\" title=\"YouTube video player\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"\" frameborder=\"0\"></iframe>\n\t\t</div>\n</div></figure>\n</body></html>\n<p>The post <a href=\"https://github.blog/open-source/register-now-for-openclaw-after-hours-github/\">Register now for OpenClaw: After Hours @ GitHub</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Kayla Cinnamon","@title_type":"html","@raw_title":"GitHub Copilot CLI for Beginners: Interactive v. non-interactive mode","@url":"https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-interactive-v-non-interactive-mode/","@links":["https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-interactive-v-non-interactive-mode/"],"@entry_id":"https://github.blog/?p=95654","@updated":{"json_class":"Time","s":1777565345,"n":0},"@published":{"json_class":"Time","s":1777565342,"n":0},"@categories":["AI & ML","Generative AI","GitHub Copilot","GitHub Copilot CLI","GitHub Copilot CLI for Beginners"],"@summary":"<p>Learn the difference between CLI interactive v. non-interactive modes.</p>\n<p>The post <a href=\"https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-interactive-v-non-interactive-mode/\">GitHub Copilot CLI for Beginners: Interactive v. non-interactive mode</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>Welcome to GitHub Copilot CLI for Beginners! In this series (available in <a href=\"https://www.youtube.com/playlist?list=PL0lo9MOBetEHvO-spzKBAITkkTqv4RvNl\">video</a> and <a href=\"https://github.blog/tag/github-copilot-cli-for-beginners/\">blog</a> format), we&rsquo;ll give you everything you need to get started using <a href=\"https://github.com/features/copilot/cli?utm_source=blog-cli-beginners-ep2-features-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Copilot CLI</a>, from your first prompt to tips for navigating the command line like a pro!</p>\n\n\n\n<p>In this blog, we&rsquo;ll cover the two main modes of the CLI: interactive and non-interactive. You&rsquo;ll learn the differences between the two modes, how to enter them, and what they&rsquo;re most useful for.</p>\n\n\n\n<p>Let&rsquo;s dive in!</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-github-copilot-cli-interactive-mode\">What is GitHub Copilot CLI interactive mode?</h2>\n\n\n\n<p>Interactive mode is a back-and-forth, chat-like experience. When you launch Copilot CLI with Copilot, you&rsquo;re already in interactive mode&mdash;that&rsquo;s the default. Non-interactive mode is a separate option for when you want a quick, one-off answer without entering a session. (More on non-interactive mode later!)</p>\n\n\n\n<p>In interactive mode, you can ask GitHub Copilot a question, review its response, and then either follow up with questions or another prompt&mdash;all within the same session. This is the mode for those who want to work hands-on with Copilot and iterate as you go.</p>\n\n\n\n<p>Here&rsquo;s how to enter interactive mode:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>From the command line, type <code>copilot</code> and hit <kbd>Enter</kbd>.</li>\n\n\n\n<li>Copilot may ask you to trust this folder, because it needs permission to read and modify files.</li>\n\n\n\n<li>Ask Copilot a question, like &ldquo;How do I run this project locally?&rdquo;</li>\n\n\n\n<li>Copilot will give you instructions, which you can do on your own. But if you want to work collaboratively, you can ask Copilot: &ldquo;Can you run it for me?&rdquo;</li>\n\n\n\n<li>Copilot will analyze your project and then start the server.</li>\n\n\n\n<li>We can review our project, decide what changes we want, and continue working with Copilot, all in the same session.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-github-copilot-cli-non-interactive-mode\">What is GitHub Copilot CLI non-interactive mode?</h2>\n\n\n\n<p>On the other hand, non-interactive mode is designed for speed and simplicity. Instead of having to enter a full session, you pass a single prompt right in the command line and get a response almost immediately, without needing to follow up with Copilot.</p>\n\n\n\n<p>Designed as an in-line experience, this mode is perfect for quick, one-shot prompts like summarizing a repository, generating code snippets, or plugging Copilot into automated workflows, without leaving your shell context. Once you get an answer, you&rsquo;re right back in your terminal flow.</p>\n\n\n\n<p>Here&rsquo;s how to enter non-interactive mode:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start at the regular command line (if you&rsquo;re in Copilot, you&rsquo;ll need to exit).</li>\n\n\n\n<li>Type <code>copilot -p</code> and prompt the agent with something like &ldquo;Quickly summarize what this repository does and the key folders.&rdquo;</li>\n\n\n\n<li>Copilot will sift through your project files to provide an answer. Ta-da! &#10024;</li>\n</ul>\n\n\n\n<p>Together, these two modes help you tackle all kinds of projects efficiently: interactive for explorative, deeper work, and non-interactive for fast, focused results when you already know exactly what you need.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-resume-a-previous-copilot-session\">How to resume a previous Copilot session</h2>\n\n\n\n<p>Sometimes, you may want to pick up right where you left off in a previous Copilot session, while retaining all the context from that conversation.</p>\n\n\n\n<p>If you&rsquo;re in interactive mode, you can type <code>/resume</code> into the command line and Copilot will let you choose a previous session from a list. If you want to launch directly into the previous session picker from non-interactive mode, use <code>copilot --resume</code>.</p>\n\n\n\n<p>It only takes one command to pick back up with Copilot, which is super useful if you already know what session you want to work in.</p>\n\n\n\n<p>Take this with you GitHub Copilot CLI interactive and non-interactive modes are the fastest ways to prompt Copilot directly from your terminal. Having the option to pick between back-and-forth coding and quick prompting means you can work with Copilot, the way you want.</p>\n\n\n\n<p>Keep an eye out for more videos in the GitHub Copilot CLI for Beginners series, where we&rsquo;ll explore:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copilot CLI slash commands</li>\n\n\n\n<li>Using MCP servers with Copilot CLI</li>\n\n\n\n<li>And more!</li>\n</ul>\n\n\n\n<p>Happy coding!</p>\n\n\n\n<div class=\"wp-block-group post-content-cta has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><strong>Looking to try GitHub Copilot CLI?</strong> <a href=\"https://docs.github.com/copilot/concepts/agents/about-copilot-cli?utm_source=blog-cli-beginners-ep2-features-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\" target=\"_blank\" rel=\"noreferrer noopener\">Read the Docs</a> and <a href=\"https://github.com/features/copilot/cli?utm_source=blog-cli-beginners-ep2-features-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\" target=\"_blank\" rel=\"noreferrer noopener\">get started</a> today.</p>\n</div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-more-resources-to-explore\">More resources to explore:</h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://www.youtube.com/playlist?list=PL0lo9MOBetEHvO-spzKBAITkkTqv4RvNl\">GitHub Copilot CLI for Beginners video series</a></li>\n\n\n\n<li><a href=\"https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-getting-started-with-github-copilot-cli/\">GitHub Copilot CLI for Beginners: Getting started with GitHub Copilot CLI</a></li>\n\n\n\n<li><a href=\"https://github.blog/ai-and-ml/github-copilot-cli-101-how-to-use-github-copilot-from-the-command-line/?utm_source=blog-announcement-cli-tutorial&amp;utm_medium=blog&amp;utm_campaign=universe25post\">GitHub Copilot CLI 101: how to use GitHub Copilot from the command line</a></li>\n\n\n\n<li><a href=\"https://docs.github.com/copilot/how-tos/copilot-cli/cli-best-practices?utm_campaign=copilot-brand&amp;utm_medium=sem&amp;utm_source=google&amp;ocid=AIDcmmh2h80ugd_SEM__k_CjwKCAjw-dfOBhAjEiwAq0RwI0TIeyL9bjDmXlY26JKPbDvHGzBcaZUa4LR8u8SJuGbIke6e7U2YXRoCzGQQAvD_BwE_k_cli?utm_source=blog-cli-beginners-ep2-features-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\" target=\"_blank\" rel=\"noreferrer noopener\">Best practices for GitHub Copilot CLI</a></li>\n</ul>\n</body></html>\n<p>The post <a href=\"https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-interactive-v-non-interactive-mode/\">GitHub Copilot CLI for Beginners: Interactive v. non-interactive mode</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Kedasha Kerr","@title_type":"html","@raw_title":"GitHub for Beginners: Getting started with Markdown","@url":"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-markdown/","@links":["https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-markdown/"],"@entry_id":"https://github.blog/?p=95615","@updated":{"json_class":"Time","s":1777326321,"n":0},"@published":{"json_class":"Time","s":1777399200,"n":0},"@categories":["Developer skills","GitHub","GitHub for beginners","Markdown"],"@summary":"<p>Discover how to format and edit your comments and posts using Markdown.</p>\n<p>The post <a href=\"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-markdown/\">GitHub for Beginners: Getting started with Markdown</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>Welcome back to GitHub for Beginners. We&rsquo;ve covered a wide range of topics so far this season, including <a href=\"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-github-issues-and-projects/\">GitHub Issues and Projects</a>, <a href=\"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-github-actions/\">GitHub Actions</a>, <a href=\"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-github-security/\">security,</a> and GitHub Pages. Now we&rsquo;re going to teach you everything you need to know to get started with Markdown, the markup language used across GitHub.</p>\n\n\n\n<p>Once you learn the basics of how to use Markdown, you&rsquo;ll develop an essential skill that will transform how you write READMEs as well as how to format issues, pull requests, and your agent instruction files. By the end of this post, you&rsquo;ll have the knowledge you need to make your projects and contributions easier for others to explore.</p>\n\n\n\n<p>As always, if you prefer to watch the video or want to reference it, we have all of our <a href=\"https://gh.io/gfb\">GitHub for Beginners episodes available on YouTube</a>.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-markdown-and-why-is-it-important\">What is Markdown and why is it important?</h2>\n\n\n\n<p>Markdown is a lightweight language for formatting plain text. You can use Markdown syntax, along with some additional HTML tags, to format your writing on GitHub. You can do this in repository READMEs, issue and pull request descriptions, and comments on issues and pull requests.</p>\n\n\n\n<p>Markdown gives you the ability to create clear, readable documentation. Having a clean README in your project or a well-formatted issue can make a huge difference when someone lands on your content for the first time.</p>\n\n\n\n<p>And one of the best parts is that when you get the syntax down, you&rsquo;ll find yourself using it in almost every project you work on!</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-where-can-i-use-markdown\">Where can I use Markdown?</h2>\n\n\n\n<p>The most common place where you&rsquo;ll encounter Markdown is in your repository&rsquo;s README file. But you&rsquo;ll also find yourself using it in issues, pull requests, discussions, and even wikis. Any time you write or communicate on GitHub, Markdown is behind the scenes, helping your text look clean and consistent.</p>\n\n\n\n<p>Markdown extends beyond GitHub to modern note-taking apps, blog platforms, and documentation tools. It&rsquo;s a widely adopted language used across the technical space, so learning how to use it can benefit you beyond just how you interact with GitHub.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-basic-syntax\">Basic syntax</h2>\n\n\n\n<p>We&rsquo;re going to start with the common features that you&rsquo;ll use the most. While we&rsquo;re going through these, you can try them out to see how they work. The easiest way to do this is by opening a markdown file on your repository.</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to a repository you own on <a href=\"https://github.com/\">github.com</a>.</li>\n\n\n\n<li>Make sure you are on the <strong>Code</strong> tab of your repository.</li>\n\n\n\n<li>Click <strong>Add file</strong> near the top of the window and select <strong>Create new file</strong> from the pull-down menu.</li>\n\n\n\n<li>In the box at the top of the editor, name your file. Make sure the filename ends in <code>.md</code> (e.g., <code>markdownTestFile.md</code>).</li>\n\n\n\n<li>Select the <strong>Edit</strong> button.</li>\n\n\n\n<li>Enter any Markdown syntax into the editor window.</li>\n</ol>\n\n\n\n<p>You can see what the Markdown text you enter will look like by selecting the <strong>Preview</strong> button; there&rsquo;s no need to make a commit unless you want to save your test file. Just select the <strong>Edit</strong> button to go back to editing so you can enter more Markdown text.</p>\n\n\n\n<p>Now that you know how to try it out, let&rsquo;s get started with the syntax. First up are headers. These are your title and section names. You create them by adding pound signs (<code>#</code>), also known as hashtags, in front of your text. One pound sign indicates a header, two will create a subheader, and so on.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code># GitHub for Beginners \n\n \n\n## Basic Markdown syntax \n\n \n\n### Headers </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"# GitHub for Beginners \n\n \n\n## Basic Markdown syntax \n\n \n\n### Headers\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>If you want to emphasize your text, you can use bold and italic fonts. You create these by using either asterisks (<code>*</code>) or underscores (<code>_</code>). Either of these symbols work in the same way, you just have to make sure to pair them up appropriately. A single character makes text italic, a double character makes text bold, and a triple character makes it both bold and italic. You can emphasize characters within a string or multiple strings within a line of text.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>Here is some *italic text* \n\nHere is some **bold text** \n\n___Here is both bold and italic text \n\nOver multiple lines___</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"Here is some *italic text* \n\nHere is some **bold text** \n\n___Here is both bold and italic text \n\nOver multiple lines___\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>Sometimes you may want to quote important text. To do this, add the greater than (<code>&gt;</code>) symbol as the first character in a line of text. If you would like to quote something that spans multiple lines, you need to add the greater than symbol at the start of each individual line.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>&gt; No design skills required. \n\n&gt; \n\n&gt; No overthinking allowed. \n&gt; \n\n&gt; Just ship your work.</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"&gt; No design skills required. \n\n&gt; \n\n&gt; No overthinking allowed. \n&gt; \n\n&gt; Just ship your work.\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-lists\">Lists</h2>\n\n\n\n<p>Now let&rsquo;s get into something a little more involved: lists.</p>\n\n\n\n<p>Lists are a common way to express your steps and procedures in an ordered and unordered manner. To create an ordered list, number each element in the list (i.e. <code>1.</code>, <code>2.</code>, <code>3.</code>, etc.).</p>\n\n\n\n<p>While this can be clear to read, what if you want to add an element between two consecutive numbers? The good news is that you don&rsquo;t need to renumber the entire list. Markdown interpreters allow you to order your items with any number, and they automatically interpret it as an ordered list from first to last.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>1. Click the \"Use this template&rdquo; button at the top of this repo. \n\n1. Name your new repository (e.g., my-portfolio). \n\n1. Clone your new repo and start customizing!</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='1. Click the \"Use this template&rdquo; button at the top of this repo. \n\n1. Name your new repository (e.g., my-portfolio). \n\n1. Clone your new repo and start customizing!' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>For an unordered list, start a line with either a hyphen (<code>-</code>), asterisk (<code>*</code>), or a plus sign (<code>+</code>). Markdown will render any of these characters as the start of an unordered list.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>* Click the \"Use this template&rdquo; button at the top of this repo. \n\n* Name your new repository (e.g., my-portfolio). \n\n* Clone your new repo and start customizing!</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='* Click the \"Use this template&rdquo; button at the top of this repo. \n\n* Name your new repository (e.g., my-portfolio). \n\n* Clone your new repo and start customizing!' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>If you would like to create nested lists, indent four spaces to start a new indented list. You can do this with both ordered and unordered list items.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>1. Click the \"Use this template&rdquo; button. \n\n    - Located at the top of the repo. \n\n    - This will create a new repository using this template. \n\n1. Name your new repository. \n\n    - e.g., my-portfolio \n\n    - This can be created under your personal GitHub account. \n\n1. Clone your new repo and start customizing!</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='1. Click the \"Use this template&rdquo; button. \n\n    - Located at the top of the repo. \n\n    - This will create a new repository using this template. \n\n1. Name your new repository. \n\n    - e.g., my-portfolio \n\n    - This can be created under your personal GitHub account. \n\n1. Clone your new repo and start customizing!' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>When you&rsquo;re done with your list, hit <strong>Enter</strong> twice to go back to plain text.</p>\n\n\n\n<aside data-color-mode=\"light\" data-dark-theme=\"dark\" data-light-theme=\"light_dimmed\" class=\"wp-block-group post-aside--large p-4 p-md-6 is-style-light-dimmed has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-light-dimmed--1\" style=\"border-top-width:4px\">\n<h3 class=\"wp-block-heading h5-mktg gh-aside-title is-typography-preset-h5\" id=\"h-additional-resources\" style=\"margin-top:0\">Additional resources</h3>\n\n\n\n<p>Check out the GitHub docs for <a href=\"https://docs.github.com/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax\">a cheat sheet on formatting Markdown</a>.</p>\n\n\n\n<p>You can also start practicing your Markdown skills today by visiting the <a href=\"https://github.com/skills/communicate-using-markdown\">communicate-using-markdown skills repository</a>. You&rsquo;ll learn how to use Markdown to add lists, images, and links in a GitHub comment or text file.</p>\n</aside>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-code\">Code</h2>\n\n\n\n<p>Sometimes you may want to display a snippet of code in your Markdown as an example. This could be for steps in a procedure or as part of your project&rsquo;s installation process. Many Markdown interpreters render code snippets with formatting and syntax highlighting. You can denote code in Markdown by surrounding it with a backtick (<code>`</code>) character.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>`git clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git` </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"`git clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git`\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>If you have code that spans multiple lines, you can use three backtick characters to create a code block. Any characters between these triple backticks, including spaces and new lines, will render as code.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>```bash \n\n# Clone the repository \n\ngit clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git \n\ncd YOUR_REPO_NAME \n\n \n\n# Install dependencies \n\nnpm install \n\n \n\n# Start the development server \n\nnpm run dev \n\n``` </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"```bash \n\n# Clone the repository \n\ngit clone https://github.com/YOUR_USERNAME/YOUR_REPO_NAME.git \n\ncd YOUR_REPO_NAME \n\n \n\n# Install dependencies \n\nnpm install \n\n \n\n# Start the development server \n\nnpm run dev \n\n```\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-links-and-images\">Links and images</h2>\n\n\n\n<p>Now let&rsquo;s learn how to spice up our Markdown files. We&rsquo;ll start with links. Links allow you to point people to helpful resources, documentation, or other pages in your project. They&rsquo;re written using brackets (<code>[]</code>) and parentheses (<code>()</code>). Place the text you want to display in the brackets, followed immediately by the URL in parentheses, with no space between the two. This keeps your writing clean and easy to follow.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>Open [your local host](http://localhost:3000) to see your portfolio. </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"Open [your local host](http://localhost:3000) to see your portfolio.\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>Images work in almost the same way, but with one small difference: you need to add an exclamation point (<code>!</code>) at the beginning. This is perfect for adding screenshots, diagrams, or even a project logo to your README.</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>![Mona](https://avatars.githubusercontent.com/u/92997159?v=4) </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"![Mona](https://avatars.githubusercontent.com/u/92997159?v=4)\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>To make things even easier, on GitHub, you can just drag-and-drop an image into an issue or pull request, and it automatically generates the right Markdown for you.</p>\n\n\n\n<p>Whether you&rsquo;re linking out to a tutorial or showing off a screenshot, links and images help you add that extra bit of personality and clarity to your Markdown.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-s-next\">What&rsquo;s next?</h2>\n\n\n\n<p>You now know the basics of Markdown, including what it is, why it matters, where you can use it, and how to start writing it with confidence. With just a few techniques, you can create clean, readable documentation that makes your GitHub projects stand out.</p>\n\n\n\n<p>Whether you&rsquo;re building a README, opening an issue, or writing project notes, Markdown is going to be one of the tools you use the most.</p>\n\n\n\n<p>If you want to learn more about Markdown, here are some good places to get started:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https://docs.github.com/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax\">Basic formatting syntax</a></li>\n\n\n\n<li><a href=\"https://docs.github.com/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks\">Creating and highlighting code blocks</a></li>\n\n\n\n<li><a href=\"https://docs.github.com/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/quickstart-for-writing-on-github\">Quickstart for writing at GitHub</a></li>\n</ul>\n\n\n\n<p>Happy coding!</p>\n</body></html>\n<p>The post <a href=\"https://github.blog/developer-skills/github/github-for-beginners-getting-started-with-markdown/\">GitHub for Beginners: Getting started with Markdown</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Alexis Wales","@title_type":"html","@raw_title":"Securing the git push pipeline: Responding to a critical remote code execution vulnerability","@url":"https://github.blog/security/securing-the-git-push-pipeline-responding-to-a-critical-remote-code-execution-vulnerability/","@links":["https://github.blog/security/securing-the-git-push-pipeline-responding-to-a-critical-remote-code-execution-vulnerability/"],"@entry_id":"https://github.blog/?p=95594","@updated":{"json_class":"Time","s":1777474756,"n":0},"@published":{"json_class":"Time","s":1777390200,"n":0},"@categories":["Security","CVE","GHES"],"@summary":"<p>How we validated, fixed, and investigated a critical vulnerability in under two hours, and confirmed no exploitation.</p>\n<p>The post <a href=\"https://github.blog/security/securing-the-git-push-pipeline-responding-to-a-critical-remote-code-execution-vulnerability/\">Securing the git push pipeline: Responding to a critical remote code execution vulnerability</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>On March 4, 2026, we received a vulnerability report through our <a href=\"https://bounty.github.com\">Bug Bounty program</a> from researchers at Wiz describing a critical remote code execution vulnerability affecting github.com, GitHub Enterprise Cloud, GitHub Enterprise Cloud with Data Residency, GitHub Enterprise Cloud with Enterprise Managed Users, and GitHub Enterprise Server.</p>\n\n\n\n<p>In less than two hours we had validated the finding, deployed a fix to github.com, and begun a forensic investigation that concluded <strong>there was no exploitation</strong>.</p>\n\n\n\n<p>In this post, we want to share what happened, how we responded, and what we are doing to prevent similar issues in the future.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-receiving-the-bug-bounty-report\">Receiving the bug bounty report</h2>\n\n\n\n<p>The bug bounty report described a way for any user with push access to a repository, including a repository they created themselves, to achieve arbitrary command execution on the GitHub server handling their <code>git push</code> operation. The attack required only a single command: <code>git push</code> with a crafted push option that leveraged an unsanitized character.</p>\n\n\n\n<p>Our security team immediately began validating the bug bounty report. Within 40 minutes, we had reproduced the vulnerability internally and confirmed the severity. This was a critical issue that required immediate action.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-understanding-the-vulnerability\">Understanding the vulnerability</h2>\n\n\n\n<p>When a user pushes code to GitHub, the operation passes through multiple internal services. As part of this process, metadata about the push, such as the repository type and the environment it should be processed in, is passed between services using an internal protocol.</p>\n\n\n\n<p>The vulnerability leveraged how user-supplied <a href=\"https://git-scm.com/docs/git-push#Documentation/git-push.txt---push-option\">git push options</a> were handled within this metadata. Push options are an intentional feature of git that allow clients to send key-value strings to the server during a push. However, the values provided by the user were incorporated into the internal metadata without sufficient sanitization. Because the internal metadata format used a delimiter character that could also appear in user input, an attacker could inject additional fields that the downstream service would interpret as trusted internal values.</p>\n\n\n\n<p>By chaining several injected values together, the researchers demonstrated that an attacker could override the environment the push was processed in, bypass sandboxing protections that normally constrain hook execution, and ultimately execute arbitrary commands on the server.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-responding-to-the-vulnerability\">Responding to the vulnerability</h2>\n\n\n\n<p>With the root cause identified on March, 4, 2026, at 5:45 p.m. UTC, our engineering team developed and deployed a fix to github.com at 7:00 p.m. UTC that same day. The fix ensures that user-supplied push option values are properly sanitized and can no longer influence internal metadata fields.</p>\n\n\n\n<p>For GitHub Enterprise Server, we prepared patches across all supported releases (3.14.25, 3.15.20, 3.16.16, 3.17.13, 3.18.7, 3.19.4, 3.20.0, or later) and published <a href=\"https://www.cve.org/cverecord?id=CVE-2026-3854\">CVE-2026-3854</a>. These are available today and we strongly recommend that all GHES customers upgrade immediately.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"investigating-for-exploitation\">Investigating for exploitation</h2>\n\n\n\n<p>With the immediate fix in place on github.com, we moved to the pressing question of whether anyone else found and exploited this vulnerability before the researchers reported it.</p>\n\n\n\n<p>A key property of this vulnerability gave us confidence in our ability to answer that question. The exploit forces the server to take a code path that is never used during normal operations on github.com. This is not something an attacker can avoid or suppress, as it is an inherent consequence of how the injection works.</p>\n\n\n\n<p>We logged this path and queried our telemetry for any instance of this anomalous code path being executed. The results were clear:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Every occurrence mapped to the Wiz researchers&rsquo; own testing activity.</li>\n\n\n\n<li>No other users or accounts triggered this code path.</li>\n\n\n\n<li>No customer data was accessed, modified, or exfiltrated as a result of this vulnerability.</li>\n</ul>\n\n\n\n<p>For GHES customers, exploitation would require an authenticated user with push access on your instance. We recommend reviewing your access logs out of an abundance of caution.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"defense-in-depth\">Defense in depth</h2>\n\n\n\n<p>Beyond fixing the immediate input sanitization issue, our investigation surfaced an additional finding worth sharing.</p>\n\n\n\n<p>The exploit worked in part because the server had access to a code path that was not intended for the environment it was running in. This code path existed on disk as part of the server&rsquo;s container image, even though it was only meant to be used in a different product configuration. An older deployment method had correctly excluded this code, but when the deployment model changed, the exclusion was not carried forward.</p>\n\n\n\n<p>This is a useful reminder that defense in depth matters. The input sanitization fix is the primary remediation, but we have also removed the unnecessary code path from environments where it should not exist. Even if a similar injection vulnerability were discovered in the future, this additional hardening would limit what an attacker could do with it.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-you-should-do\">What you should do</h2>\n\n\n\n<p><strong>GitHub Enterprise Cloud</strong>, <strong>GitHub Enterprise Cloud with Enterprise Managed Users</strong>, <strong>GitHub Enterprise Cloud with Data Residency</strong>, and <strong>github.com</strong> were patched on March 4, 2026. No action is required from users of any of these.</p>\n\n\n\n<p>As mentioned previously, exploitation on <strong>GitHub Enterprise Server</strong> requires an authenticated user with push access on your instance. We recommend that you review <code>/var/log/github-audit.log</code> for push operations containing <code>;</code> in push options. Updates are available in the following releases:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub Enterprise Server 3.14.25 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.15.20 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.16.16 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.17.13 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.18.7 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.19.4 or later</li>\n\n\n\n<li>GitHub Enterprise Server 3.20.0 or later</li>\n</ul>\n\n\n\n<p>We strongly recommend upgrading to the latest patch release as soon as possible. See the <a href=\"https://docs.github.com/en/enterprise-server/admin/release-notes\">GHES release notes</a> for details.</p>\n\n\n\n<p>This vulnerability has been assigned <a href=\"https://www.cve.org/cverecord?id=CVE-2026-3854\">CVE-2026-3854</a>.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"acknowledgments\">Acknowledgments</h2>\n\n\n\n<p>This vulnerability was discovered and responsibly disclosed by researchers at <a href=\"https://www.wiz.io\">Wiz</a>. Their report was thorough, clearly demonstrated the impact, and enabled us to move quickly from validation to remediation. This finding will receive one of the highest rewards in the history of our <a href=\"https://bounty.github.com/\">Bug Bounty program</a>, which has been a cornerstone of our security program for over a decade.</p>\n</body></html>\n<p>The post <a href=\"https://github.blog/security/securing-the-git-push-pipeline-responding-to-a-critical-remote-code-execution-vulnerability/\">Securing the git push pipeline: Responding to a critical remote code execution vulnerability</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Vlad Fedorov","@title_type":"html","@raw_title":"An update on GitHub availability","@url":"https://github.blog/news-insights/company-news/an-update-on-github-availability/","@links":["https://github.blog/news-insights/company-news/an-update-on-github-availability/"],"@entry_id":"https://github.blog/?p=95627","@updated":{"json_class":"Time","s":1777391404,"n":0},"@published":{"json_class":"Time","s":1777370497,"n":0},"@categories":["Company news","News & insights"],"@summary":"<p>Here’s what we’ve done—and what we’re still doing—to improve our availability and reliability.</p>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/an-update-on-github-availability/\">An update on GitHub availability</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>I wanted to give an update on GitHub&rsquo;s availability in light of <a href=\"#h-recent-incidents\">two recent incidents</a>. Both of those incidents are not acceptable, and we are sorry for the impact they had on you. I wanted to share some details on them, as well as explain what we&rsquo;ve done and what we&rsquo;re doing to improve our reliability.</p>\n\n\n\n<p>We started executing our plan to increase GitHub&rsquo;s capacity by 10X in October 2025 with a goal of substantially improving reliability and failover. By February 2026, it was clear that we needed to design for a future that requires 30X today&rsquo;s scale.</p>\n\n\n\n<p>The main driver is a rapid change in how software is being built. Since the second half of December 2025, agentic development workflows have accelerated sharply. By nearly every measure, the direction is already clear: repository creation, pull request activity, API usage, automation, and large-repository workloads are all growing quickly.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?resize=1920%2C1080\" alt=\"Three line graphs showing record acceleration of pull requests merged (peaking at 90M), commits (peaking at 1.4B), and new repos per month (20M).\" class=\"wp-image-95628\" srcset=\"https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?w=1920 1920w, https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?w=300 300w, https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?w=768 768w, https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?w=1024 1024w, https://github.blog/wp-content/uploads/2026/04/record-accelleration-1920x1080-2.png?w=1536 1536w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" /></figure>\n\n\n\n<p>This exponential growth does not stress one system at a time. A pull request can touch Git storage, mergeability checks, branch protection, GitHub Actions, search, notifications, permissions, webhooks, APIs, background jobs, caches, and databases. At high scale, small inefficiencies compound: queues deepen, cache misses become database load, indexes fall behind, retries amplify traffic, and one slow dependency can affect several product experiences.</p>\n\n\n\n<p>Our priorities are clear: availability first, then capacity, then new features. We are reducing unnecessary work, improving caching, isolating critical services, removing single points of failure, and moving performance-sensitive paths into systems designed for these workloads. This is distributed systems work: reducing hidden coupling, limiting blast radius, and making GitHub degrade gracefully when one subsystem is under pressure. We&rsquo;re making progress quickly, but these incidents are examples of where there&rsquo;s still work to do.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-we-re-doing\">What we&rsquo;re doing</h2>\n\n\n\n<p>Short term, we had to resolve a variety of bottlenecks that appeared faster than expected from moving webhooks to a different backend (out of MySQL), redesigning user session cache to redoing authentication and authorization flows to substantially reduce database load. We also leveraged our migration to Azure to stand up a lot more compute.</p>\n\n\n\n<p>Next we focused on isolating critical services like git and GitHub Actions from other workloads and minimizing the blast radius by minimizing single points of failure. This work started with careful analysis of dependencies and different tiers of traffic to understand what needs to be pulled apart and how we can minimize impact on legitimate traffic from various attacks. Then we addressed those in order of risk. Similarly, we accelerated parts of migrating performance or scale sensitive code out of Ruby monolith into Go.</p>\n\n\n\n<p>While we were already in progress of migrating out of our smaller custom data centers into public cloud, we started working on path to multi cloud. This longer-term measure is necessary to achieve the level of resilience, low latency, and flexibility that will be needed in the future.</p>\n\n\n\n<p>The number of repositories on GitHub is growing faster than ever, but a much harder scaling challenge is the rise of large monorepos. For the last three months, we&rsquo;ve been investing heavily in response to this trend both within git system and in the pull request experience.</p>\n\n\n\n<p>We will have a separate blog post soon describing extensive work we&rsquo;ve done and the new upcoming API design for greater efficiency and scale. As part of this work, we have invested in optimizing merge queue operations, since that is key for repos that have many thousands of pull requests a day.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-recent-incidents\">Recent incidents</h2>\n\n\n\n<p>The two recent incidents were different in cause and impact, but both reflect why we are increasing our focus on availability, isolation, and blast-radius reduction.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-april-23-merge-queue-incident\">April 23 merge queue incident</h3>\n\n\n\n<p>On April 23, pull requests experienced a regression affecting merge queue operations.</p>\n\n\n\n<p>Pull requests merged through merge queue using the squash merge method produced incorrect merge commits when a merge group contained more than one pull request. In affected cases, changes from previously merged pull requests and prior commits were inadvertently reverted by subsequent merges.</p>\n\n\n\n<p>During the impact window, 658 repositories and 2,092 pull requests were affected. We initially shared slightly higher numbers because our first assessment was intentionally conservative. The issue did not affect pull requests merged outside merge queue, nor did it affect merge queue groups using merge or rebase methods.</p>\n\n\n\n<p>There was no data loss: all commits remained stored in Git. However, the state of affected default branches was incorrect, and we could not safely repair every repository automatically. More details are available in the incident root cause analysis.</p>\n\n\n\n<p>This incident exposed multiple process failures, and we are changing those processes to prevent this class of issue from recurring.</p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-april-27-search-related-incident\">April 27 search-related incident</h3>\n\n\n\n<p>On April 27, an incident affected our Elasticsearch subsystem, which powers several search-backed experiences across GitHub, including parts of pull requests, issues, and projects.</p>\n\n\n\n<p>We are still completing the root cause analysis and will publish it shortly. What we know now is that the cluster became overloaded (likely due to a botnet attack) and stopped returning search results. There was no data loss, and Git operations and APIs were not impacted. However, parts of the UI that depended on search showed no results, which caused a significant disruption.</p>\n\n\n\n<p>This is one of the systems we had not yet fully isolated to eliminate as a single point of failure, because other areas had been higher in our risk-prioritized reliability work. That impact is unacceptable, and we are using the same dependency and blast-radius analysis described above to reduce the likelihood and impact of this type of failure in the future.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-increasing-transparency\">Increasing transparency</h2>\n\n\n\n<p>We have also heard clear feedback that customers need greater transparency during incidents.</p>\n\n\n\n<p>We recently <a href=\"https://github.blog/news-insights/company-news/bringing-more-transparency-to-githubs-status-page/\">updated</a> the <a href=\"https://www.githubstatus.com/\">GitHub status page</a> to include availability numbers. We have also committed to statusing incidents both large and small, so you do not have to guess whether an issue is on your side or ours.</p>\n\n\n\n<p>We are continuing to improve how we categorize incidents so that the scale and scope are easier to understand. We are also working on better ways for customers to report incidents and share signals with us during disruptions.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-our-commitment\">Our commitment</h2>\n\n\n\n<p>GitHub&rsquo;s role has always been to support developers on an open and extensible platform.</p>\n\n\n\n<p>The team at GitHub is incredibly passionate about our work. We hear the pain you&rsquo;re experiencing. We read every email, social post, support ticket, and we take it all to heart. We&rsquo;re sorry.</p>\n\n\n\n<p>We are committed to improving availability, increasing resilience, scaling for the future of software development, and communicating more transparently along the way.</p>\n\n\n\n<p><em>Editor&rsquo;s note: This post was updated on April 28, 2026, to update the number of repos affected during the April 23 incident.</em></p>\n</body></html>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/an-update-on-github-availability/\">An update on GitHub availability</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Mario Rodriguez","@title_type":"html","@raw_title":"GitHub Copilot is moving to usage-based billing","@url":"https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/","@links":["https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/"],"@entry_id":"https://github.blog/?p=95572","@updated":{"json_class":"Time","s":1777325983,"n":0},"@published":{"json_class":"Time","s":1777305502,"n":0},"@categories":["Company news","News & insights"],"@summary":"<p>Starting June 1, your Copilot usage will consume GitHub AI Credits.</p>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/\">GitHub Copilot is moving to usage-based billing</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p><em><strong>TL;DR:</strong> Today, we are announcing that all GitHub Copilot plans will transition to usage-based billing on <strong>June 1, 2026</strong>.</em></p>\n\n\n\n<p>Instead of counting premium requests, every Copilot plan will include a monthly allotment of <strong>GitHub AI Credits</strong>, with the option for paid plans to purchase additional usage. Usage will be calculated based on token consumption, including input, output, and cached tokens, using the listed API rates for each model.</p>\n\n\n\n<p>This change aligns Copilot pricing with actual usage and is an important step toward a sustainable, reliable Copilot business and experience for all users.</p>\n\n\n\n<p>To help customers prepare, we are also launching a <strong>preview bill</strong> experience in early May, giving users and admins visibility into projected costs before the June 1 transition. This will be available to users via their Billing Overview page when they log in to github.com.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-we-re-making-this-change\">Why we&rsquo;re making this change</h2>\n\n\n\n<p>Copilot is not the same product it was a year ago.</p>\n\n\n\n<p>It has evolved from an in-editor assistant into an agentic platform capable of running long, multi-step coding sessions, using the latest models, and iterating across entire repositories. Agentic usage is becoming the default, and it brings significantly higher compute and inference demands.</p>\n\n\n\n<p>Today, a quick chat question and a multi-hour autonomous coding session can cost the user the same amount. GitHub has absorbed much of the escalating inference cost behind that usage, but the current premium request model is no longer sustainable.</p>\n\n\n\n<p>Usage-based billing fixes that. It better aligns pricing with actual usage, helps us maintain long-term service reliability, and reduces the need to gate heavy users.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-s-changing\">What&rsquo;s changing</h2>\n\n\n\n<p>Starting <strong>June 1</strong>, premium request units (PRUs) will be replaced by <strong>GitHub AI Credits</strong>.</p>\n\n\n\n<p>Credits will be consumed based on token usage, including input, output, and cached tokens, according to the published API rates for each model.</p>\n\n\n\n<p>A few important details:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Base plan pricing is not changing.</strong> Copilot Pro remains $10/month, Pro+ remains $39/month, Business remains $19/user/month, and Enterprise remains $39/user/month.</li>\n\n\n\n<li><strong>Code completions and Next Edit suggestions remain included</strong> in all plans and do not consume AI Credits.</li>\n\n\n\n<li><strong>Fallback experiences will no longer be available.</strong> Today, users who exhaust PRUs may fall back to a lower-cost model and continue working. Under the new model, usage will instead be governed by available credits and admin budget controls.</li>\n\n\n\n<li><strong>Copilot code review will also consume GitHub Actions minutes</strong>, in addition to GitHub AI Credits. These minutes are billed at the same per-minute rates as other GitHub Actions workflows.</li>\n</ul>\n\n\n\n<p>Last week, <a href=\"https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/\">we also rolled out temporary changes</a> to Copilot Individual plans, including Free, Pro, Pro+, and Student, and paused self-serve Copilot Business plan purchases. These were reliability and performance measures as we prepare for the broader transition to usage-based billing. We will loosen usage limits once usage-based billing is in effect.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-this-means-for-individuals\">What this means for individuals</h2>\n\n\n\n<p>Copilot Pro and Pro+ monthly subscriptions will include monthly AI Credits aligned to their current subscription prices:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Copilot Pro:</strong> $10/month, including $10 in monthly AI Credits</li>\n\n\n\n<li><strong>Copilot Pro+:</strong> $39/month, including $39 in monthly AI Credits</li>\n</ul>\n\n\n\n<p>Users on a monthly Pro or Pro+ plan will automatically migrate to usage-based billing on June 1, 2026.<br><br>Users on annual Pro or Pro+ plans will remain on their existing plan with premium request-based pricing until their plan expires. <a href=\"https://docs.github.com/copilot/reference/copilot-billing/models-and-pricing#model-multipliers-for-annual-copilot-pro-and-copilot-pro-subscribers\" target=\"_blank\" rel=\"noreferrer noopener\">Model multipliers will increase on June 1 (see table)</a> for annual plan subscribers <em>only</em>. At expiration, they will transition to Copilot Free with the option to upgrade to a paid monthly plan. Alternatively, they may convert to a monthly paid plan before their annual plan expires, and we will provide prorated credits for the remaining value of their annual plan.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-this-means-for-businesses-and-enterprises\">What this means for businesses and enterprises</h2>\n\n\n\n<p>Copilot Business and Copilot Enterprise monthly seat pricing remains unchanged:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Copilot Business:</strong> $19/user/month, including $19 in monthly AI Credits</li>\n\n\n\n<li><strong>Copilot Enterprise:</strong> $39/user/month, including $39 in monthly AI Credits</li>\n</ul>\n\n\n\n<p>To support the transition, existing Copilot Business and Copilot Enterprise customers will automatically receive promotional included usage for June, July, and August:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Copilot Business</strong>: $30 in monthly AI Credits</li>\n\n\n\n<li><strong>Copilot Enterprise</strong>: $70 in monthly AI Credits</li>\n</ul>\n\n\n\n<p>We are also introducing pooled included usage across a business, which helps eliminate stranded capacity. Instead of each user&rsquo;s unused included usage being isolated, credits can be pooled across the organization.</p>\n\n\n\n<p>Admins will also have new budget controls. They will be able to set budgets at the enterprise, cost center, and user levels. When the included pool is exhausted, organizations can choose whether to allow additional usage at published rates or cap spend.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-bottom-line\">The bottom line</h2>\n\n\n\n<p>Plan prices aren&rsquo;t changing. You&rsquo;ll have full control over what you spend, tools to track your usage, and the option to purchase more AI Credits if and when you need them.</p>\n\n\n\n<p>If you have questions, visit our documentation for <a href=\"https://docs.github.com/copilot/concepts/billing/usage-based-billing-for-individuals\">individuals</a> and for <a href=\"https://docs.github.com/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises\">businesses and enterprises</a>, and our <a href=\"https://github.com/orgs/community/discussions/192948\">FAQ and related discussion</a>.</p>\n</body></html>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/\">GitHub Copilot is moving to usage-based billing</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Joe Binder","@title_type":"html","@raw_title":"Changes to GitHub Copilot Individual plans","@url":"https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/","@links":["https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/"],"@entry_id":"https://github.blog/?p=95440","@updated":{"json_class":"Time","s":1777497938,"n":0},"@published":{"json_class":"Time","s":1776708928,"n":0},"@categories":["Company news","News & insights"],"@summary":"<p>We're making these changes to ensure a reliable and predictable experience for existing customers.</p>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/\">Changes to GitHub Copilot Individual plans</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>Today we&rsquo;re making the following changes to GitHub Copilot&rsquo;s Individual plans to protect the experience for existing customers: pausing new sign-ups, tightening usage limits, and adjusting model availability. We know these changes are disruptive, and we want to be clear about why we&rsquo;re making them and how they will affect you.</p>\n\n\n\n<p>Agentic workflows have fundamentally changed Copilot&rsquo;s compute demands. Long-running, parallelized sessions now regularly consume far more resources than the original plan structure was built to support. As Copilot&rsquo;s agentic capabilities have expanded rapidly, agents are doing more work, and more customers are hitting usage limits designed to maintain service reliability. Without further action, service quality degrades for everyone.</p>\n\n\n\n<p>We&rsquo;ve heard your frustrations about usage limits and model availability, and we need to do a better job communicating the guardrails we are adding&mdash;here&rsquo;s what&rsquo;s changing and why.</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>New sign-ups for GitHub Copilot Pro, Pro+, and Student plans are paused</strong>. Pausing sign-ups allows us to serve existing customers more effectively.</li>\n\n\n\n<li><strong>We are tightening usage limits for individual plans</strong>. Pro+ plans offer more than 5X the limits of Pro. Users on the Pro plan who need higher limits can upgrade to Pro+. Usage limits are now displayed in VS Code and Copilot CLI to make it easier for you to avoid hitting these limits.</li>\n\n\n\n<li><strong>Opus models are no longer available in Pro plans</strong>. Opus 4.7 remains available in Pro+ plans. As we announced in our <a href=\"https://github.blog/changelog/2026-04-16-claude-opus-4-7-is-generally-available/\">changelog</a>, Opus 4.5 and Opus 4.6 will be removed from Pro+.</li>\n</ol>\n\n\n\n<p>These changes are necessary to ensure we can serve existing customers with a predictable experience. If you hit unexpected limits or these changes just don&rsquo;t work for you, you can cancel your Pro or Pro+ subscription and receive a refund for the time remaining on your current subscription by visiting your <a href=\"https://github.com/settings/billing/licensing\">Billing settings</a> before May 20.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-usage-limits-work-in-github-copilot\">How usage limits work in GitHub Copilot</h2>\n\n\n\n<p>GitHub Copilot has two usage limits today: session and weekly (7 day) limits. Both limits depend on two distinct factors&mdash;token consumption and the model&rsquo;s multiplier.</p>\n\n\n\n<p>The session limits exist primarily to ensure that the service is not overloaded during periods of peak usage. They&rsquo;re set so most users shouldn&rsquo;t be impacted. Over time, these limits will be adjusted to balance reliability and demand. If you do encounter a session limit, you must wait until the usage window resets to resume using Copilot.</p>\n\n\n\n<p>Weekly limits represent a cap on the total number of tokens a user can consume during the week. We introduced weekly limits recently to control for parallelized, long-trajectory requests that often run for extended periods of time and result in prohibitively high costs.</p>\n\n\n\n<p>The weekly limits for each plan are also set so that most users will not be impacted. If you hit a weekly limit and have premium requests remaining, you can continue to use Copilot with Auto model selection. Model choice will be reenabled when the weekly period resets. If you are a Pro user, you can upgrade to Pro+ to increase your weekly limits. Pro+ includes over 5X the limits of Pro.</p>\n\n\n\n<p>Usage limits are separate from your premium request entitlements. Premium requests determine which models you can access and how many requests you can make. Usage limits, by contrast, are token-based guardrails that cap how many tokens you can consume within a given time window. You can have premium requests remaining and still hit a usage limit.</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-avoiding-surprise-limits-and-improving-our-transparency\">Avoiding surprise limits and improving our transparency</h2>\n\n\n\n<p>Starting today, VS Code and Copilot CLI both display your available usage when you&rsquo;re approaching a limit. These changes are meant to help you avoid a surprise limit.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" height=\"898\" width=\"1024\" src=\"https://github.blog/wp-content/uploads/2026/04/Screenshot-2026-04-20-at-2.05.12-PM.png?resize=1024%2C898\" alt=\"Screenshot of a usage limit being hit in VS Code. A message appears that says 'You've used over 75% of your weekly usage limit. Your limit resets on Apr 27 at 8:00 PM.'\" class=\"wp-image-95447\" srcset=\"https://github.blog/wp-content/uploads/2026/04/Screenshot-2026-04-20-at-2.05.12-PM.png?w=1394 1394w, https://github.blog/wp-content/uploads/2026/04/Screenshot-2026-04-20-at-2.05.12-PM.png?w=300 300w, https://github.blog/wp-content/uploads/2026/04/Screenshot-2026-04-20-at-2.05.12-PM.png?w=768 768w, https://github.blog/wp-content/uploads/2026/04/Screenshot-2026-04-20-at-2.05.12-PM.png?w=1024 1024w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" /><figcaption class=\"wp-element-caption\">Usage limits in VS Code</figcaption></figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" height=\"662\" width=\"1024\" src=\"https://github.blog/wp-content/uploads/2026/04/image-20.png?resize=1024%2C662\" alt=\"A screenshot of a usage limit being hit in GitHub Copilot CLI. A message appears that says '! You've used over 75% of your weekly usage limit. Your limit resets on Apr 24 at 3 PM.'\" class=\"wp-image-95442\" srcset=\"https://github.blog/wp-content/uploads/2026/04/image-20.png?w=2976 2976w, https://github.blog/wp-content/uploads/2026/04/image-20.png?w=300 300w, https://github.blog/wp-content/uploads/2026/04/image-20.png?w=768 768w, https://github.blog/wp-content/uploads/2026/04/image-20.png?w=1024 1024w, https://github.blog/wp-content/uploads/2026/04/image-20.png?w=1536 1536w, https://github.blog/wp-content/uploads/2026/04/image-20.png?w=2048 2048w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" /><figcaption class=\"wp-element-caption\">Usage limits in Copilot CLI</figcaption></figure>\n\n\n\n<p>If you are approaching a limit, there are a few things you can do to help reduce the chances of hitting it:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use a model with <strong>a smaller multiplier for simpler tasks</strong>. The larger the multiplier, the faster you will hit the limit.</li>\n\n\n\n<li>Consider <strong>upgrading to Pro+</strong> if you are on a Pro plan to raise your limit by over 5X.</li>\n\n\n\n<li>Use <strong>plan mode</strong> (<a href=\"https://code.visualstudio.com/docs/copilot/concepts/agents#_planning\">VS Code</a>, <a href=\"https://docs.github.com/en/copilot/how-tos/copilot-cli/cli-best-practices#2-plan-before-you-code\">Copilot CLI</a>) to improve task efficiency. Plan mode also improves task success.</li>\n\n\n\n<li><strong>Reduce parallel workflows</strong>. Tools such as <code>/fleet</code> will result in higher token consumption and should be used sparingly if you are nearing your limits.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-we-re-doing-this\">Why we&rsquo;re doing this</h2>\n\n\n\n<p>We&rsquo;ve seen usage intensify for <em>all</em> users as they realize the value of agents and subagents in tackling complex coding problems. These long-running, parallelized workflows can yield great value, but they have also challenged our infrastructure and pricing structure: it&rsquo;s now common for a handful of requests to incur costs that exceed the plan price! These are our problems to solve. The actions we are taking today enable us to provide the best possible experience for existing users while we develop a more sustainable solution.</p>\n\n\n\n<p><em>Editor&rsquo;s note: Updated April 21, 2026, to clarify the refund policy.</em></p>\n</body></html>\n<p>The post <a href=\"https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/\">Changes to GitHub Copilot Individual plans</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Taylor Blau","@title_type":"html","@raw_title":"Highlights from Git 2.54","@url":"https://github.blog/open-source/git/highlights-from-git-2-54/","@links":["https://github.blog/open-source/git/highlights-from-git-2-54/"],"@entry_id":"https://github.blog/?p=95374","@updated":{"json_class":"Time","s":1777327403,"n":0},"@published":{"json_class":"Time","s":1776703437,"n":0},"@categories":["Git","Open Source"],"@summary":"<p>The open source Git project just released Git 2.54. Here is GitHub’s look at some of the most interesting features and changes introduced since last time.</p>\n<p>The post <a href=\"https://github.blog/open-source/git/highlights-from-git-2-54/\">Highlights from Git 2.54</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>The open-source Git project just <a href=\"https://lore.kernel.org/git/xmqqa4uxsjrs.fsf@gitster.g/\">released Git 2.54</a> with features and bug fixes from over 137 contributors, 66 of them new. We last caught up with you on the latest in Git back <a href=\"https://github.blog/open-source/git/highlights-from-git-2-52/\">when 2.52 was released</a>.</p>\n\n\n\n<p>To celebrate this most recent release, here is GitHub&rsquo;s look at some of the most interesting features and changes introduced since last time.</p>\n\n\n\n<p></p><blockquote><p>&#128161; Since the last Git release we wrote about was Git 2.52, this blog post covers the highlights from both the 2.53 and 2.54 releases.</p></blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-rewrite-history-with-git-history\">Rewrite history with <code>git history</code></h2>\n\n\n\n<p>The Git project has a long history of providing tools to rewrite your repository&rsquo;s history. <a href=\"https://git-scm.com/docs/git-rebase/2.54.0\"><code>git rebase &ndash;i</code></a> is the most well-known, and it&rsquo;s remarkably flexible: you can reorder, squash, edit, and drop commits. But that flexibility comes with complexity: an interactive rebase operates on a range of commits, updates your <a href=\"https://git-scm.com/docs/gitglossary/2.54.0#def_working_tree\">working tree</a> and <a href=\"https://git-scm.com/docs/gitglossary/2.54.0#def_index\">index</a> as it goes, and can leave you in a conflicted state that you need to resolve before proceeding.</p>\n\n\n\n<p>For simpler cases, all of that machinery can feel like overkill. If all you want to do is fix a typo in a commit message three commits back, or split one commit into two, an interactive rebase works, but requires you to set up a to-do list, mark the right commit for editing, and then drive the rebase to completion.</p>\n\n\n\n<p>Git 2.54 introduces a new experimental command that is designed for exactly these simpler cases: <code><a href=\"https://git-scm.com/docs/git-history/2.54.0\">git history</a></code>. The <code>history</code> command currently supports two operations: <code>reword</code> and <code>split</code>.</p>\n\n\n\n<p><code>git history reword &lt;commit&gt; </code> opens your editor with the specified commit&rsquo;s message and rewrites it in place, updating any branches that descend from that commit. Unlike <code>git rebase</code>, it doesn&rsquo;t touch your working tree or index, and it can even operate in a <a href=\"https://git-scm.com/docs/gitglossary/2.54.0#def_bare_repository\">bare repository</a>.</p>\n\n\n\n<p><code>git history split &lt;commit&gt;</code> lets you interactively split a commit into two by selecting which hunks should be carved out into a new parent commit. The interface will look familiar if you&rsquo;ve ever used <code>add</code> in interactive mode via <code>git add &ndash;p</code>:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>$ git history split HEAD\ndiff --git a/bar b/bar\nnew file mode 100644\nindex 0000000..50810a5\n--- /dev/null\n+++ b/bar\n@@ -0,0 +1 @@\n+bar\n(1/1) Stage addition [y,n,q,a,d,p,?]? y </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"$ git history split HEAD\ndiff --git a/bar b/bar\nnew file mode 100644\nindex 0000000..50810a5\n--- /dev/null\n+++ b/bar\n@@ -0,0 +1 @@\n+bar\n(1/1) Stage addition [y,n,q,a,d,p,?]? y\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>After selecting hunks, Git creates a new commit with those changes as the parent of the original commit (which retains whatever hunks you didn&rsquo;t select) and rewrites any descendent branches to point at the updated history.</p>\n\n\n\n<p>There are a couple of intentional limitations worth noting. The history command does not support histories that contain merge commits, and it will refuse to perform any operation that would result in a merge conflict. By design, <code>git history</code> is meant for targeted, non-interactive rewrites, not the kind of open-ended history rewriting typically relegated to <code>git rebase &ndash;i</code>.</p>\n\n\n\n<p>The history command is built on top of <code>git replay</code>&lsquo;s core machinery, which was itself extracted into a library as part of this work. That foundation means that <code>git history</code> benefits from <code>replay</code>&lsquo;s ability to operate without touching the working tree, making it a natural fit for scripting and automation in addition to interactive use.</p>\n\n\n\n<p>This command is still marked as experimental, so its interface may evolve. Give it a try with <code>git history reword</code> and <code>git history split</code>, available in Git 2.54.</p>\n\n\n\n<p>[<a href=\"https://github.com/git/git/compare/3e0db84c88c57e70ac8be8c196dfa92c5d656fbc...d205234cb05a5e330c0f7f5b3ea764533a74d69e\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/aa95f87c740011f7d21555c5ad7f0870faf4b5c8...1278a26544e81dddf564fd7730890a7e023ed367\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/2eec0f51156ea872174bbd08f355155f381a568e...d1f33c753de68f63c945c3213f439081ed11c27b\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/dd33e738a469cb7841a4a6132bdce1809d0772aa...d563ecec2845467880f5742e178a9723afef495a\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/f1743ad69a492d1ca3773bfdddf7f5ffd278c19b...26b9946dd756a2efc29f898e53327676a22adc3e\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-config-based-hooks\">Config-based hooks</h2>\n\n\n\n<p>If you&rsquo;ve ever wanted to share a Git <a href=\"https://git-scm.com/docs/githooks\">hook</a> across multiple repositories, you&rsquo;ve probably had to reach for a third-party hook manager, or manually symlink scripts into each repository&rsquo;s <code>$GIT_DIR/hooks</code> directory. That&rsquo;s because, historically, Git hooks could only be defined as executable scripts living in one place: the <code>hooks</code> subdirectory of your <code>.git</code> directory (or whatever <a href=\"https://git-scm.com/docs/git-config/2.54.0#Documentation/git-config.txt-corehooksPath\"><code>core.hooksPath</code></a> points to).</p>\n\n\n\n<p>That meant that if you wanted to run a linter before every commit across all of your repositories, you had to copy the script into each repository, which can be tedious and error-prone. Alternatively, you could set <code>core.hooksPath</code> to point to a shared directory, but that causes all of your repositories to share the exact same set of hooks, with no way to mix and match.</p>\n\n\n\n<p>Git 2.54 introduces a new way to define hooks: in your configuration files. Instead of placing a script at <code>.git/hooks/pre-commit</code>, you can now write:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>[hook \"linter\"]\n   event = pre-commit\n   command = ~/bin/linter --cpp20 </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='[hook \"linter\"]\n   event = pre-commit\n   command = ~/bin/linter --cpp20' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>The <code>hook.&lt;name&gt;.command</code> key specifies the command to run, and <code>hook.&lt;name&gt;.event</code> specifies which hook event should trigger it. Since this is just configuration, it can live in your per-user <code>~/.gitconfig</code>, a system-wide <code>/etc/gitconfig</code>, or in a repository&rsquo;s local config. That makes it straightforward to define a set of hooks centrally and have them apply everywhere.</p>\n\n\n\n<p>Even better, you can now run <em>multiple</em> hooks for the same event. If you want both a linter and a secrets scanner to run before every commit, you can configure them independently:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>[hook \"linter\"]\n   event = pre-commit\n   command = ~/bin/linter --cpp20\n\n[hook \"no-leaks\"]\n   event = pre-commit\n   command = ~/bin/leak-detector</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value='[hook \"linter\"]\n   event = pre-commit\n   command = ~/bin/linter --cpp20\n\n[hook \"no-leaks\"]\n   event = pre-commit\n   command = ~/bin/leak-detector' tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>Git will run them in the order it encounters their configuration. The traditional hook script in <code>$GIT_DIR/hooks</code> still works, and runs last, so existing hooks are unaffected. You can see which hooks are configured (and where they come from) with <code>git hook list</code>:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code\"><code>$ git hook list pre-commit\nglobal    linter  ~/bin/linter --cpp20\nlocal    no-leaks    ~/bin/leak-detector </code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"$ git hook list pre-commit\nglobal    linter  ~/bin/linter --cpp20\nlocal    no-leaks    ~/bin/leak-detector\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>Individual hooks can be disabled without removing their configuration by setting <code>hook.&lt;name&gt;.enabled = false</code>, which is particularly handy when a hook is defined in a system-level config but you need to opt a specific repository out.</p>\n\n\n\n<p>Along the way, Git&rsquo;s internal handling of hooks has been modernized. Many built-in hooks that were previously invoked through ad-hoc code paths (like <code>pre-push</code>, <code>post-rewrite</code>, and the various <code>receive-pack</code> hooks) have been migrated to use the new hook API, meaning they all benefit from the new configuration-based hook machinery.</p>\n\n\n\n<p>[<a href=\"https://github.com/git/git/compare/4aa72ea1f64e8ddcd1865c76b24591c0916c0b5d...005f3fbe07a20dd5f7dea57f6f46cd797387e56a\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/9a8aebae972de22ecd5adb92fec9d77147949c8a...ec1c4d974ac74afb4f0574d29f7bbb30c1c46431\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/4e5821732e684f21a35288d8e67f453ca2595083...5c58dbc887a1f3530cb29c995f63675beebb22e9\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-geometric-repacking-during-maintenance-by-default\">Geometric repacking during maintenance by default</h2>\n\n\n\n<p>Returning readers of this series <a href=\"https://github.blog/open-source/git/highlights-from-git-2-52/#advanced-repository-maintenance-strategies\">may recall</a> our coverage of the new <code>geometric</code> strategy within <code>git maintenance</code>, which was introduced in Git 2.52. That strategy works by inspecting the contents of your repository to determine if some number of <a href=\"https://git-scm.com/book/en/v2/Git-Internals-Packfiles\">packfiles</a> can be combined to form a <a href=\"https://en.wikipedia.org/wiki/Geometric_progression\">geometric progression</a> by object count. If they can, Git performs a geometric repack, condensing the contents of your repository without needing to perform a full garbage collection.</p>\n\n\n\n<p>In 2.52, the <code>geometric</code> strategy was available as an opt-in choice via the <code>maintenance.strategy</code> configuration. In 2.54, it becomes the default strategy for manual maintenance. That means when you run <code>git maintenance run</code> without specifying a strategy, Git will now use the geometric approach instead of the traditional <code>gc</code> task.</p>\n\n\n\n<p>In practice, this means that your repositories will be maintained more efficiently out of the box. The geometric strategy avoids the expensive all-into-one repacks that <code>gc</code> performs, instead combining packs incrementally when possible and falling back to a full <code>gc</code> only when it would consolidate the entire repository into a single pack. Along the way, it keeps your <a href=\"https://git-scm.com/docs/git-commit-graph/2.54.0\">commit-graph</a>, <a href=\"https://git-scm.com/docs/git-reflog/2.54.0\">reflogs</a>, and other auxiliary data structures up to date.</p>\n\n\n\n<p>If you were already using <code>maintenance.strategy = geometric</code> in your configuration, nothing changes. If you hadn&rsquo;t set a strategy (or were relying on the old <code>gc</code> default), you&rsquo;ll start seeing the benefits of geometric repacking automatically. The <code>gc</code> strategy is still available if you prefer it and can be selected with <code>maintenance.strategy = gc</code>.</p>\n\n\n\n<p>[<a href=\"https://github.com/git/git/compare/1ebfc2171310ed5ca2bcd8c1255d45f03e56dda7...452b12c2e0fe7a18f9487f8a090ce46bef207177\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-tip-of-the-iceberg\">The tip of the iceberg&hellip;</h2>\n\n\n\n<p>Now that we&rsquo;ve covered some of the larger changes in more detail, let&rsquo;s take a closer look at a selection of some other new features and updates in this release.</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p>The&nbsp;<code>git add&nbsp;&ndash;p</code>&nbsp;command, Git&rsquo;s tool for interactively staging individual hunks, received a handful of usability improvements in this release. When navigating between hunks with the&nbsp;<code>J</code>&nbsp;and&nbsp;<code>K</code>&nbsp;keys, Git now shows whether&nbsp;you&rsquo;ve&nbsp;previously accepted or skipped each hunk, so you&nbsp;don&rsquo;t&nbsp;have to remember your earlier decisions.</p><p>Separately, a new&nbsp;<code>--no-auto-advance</code>&nbsp;flag changes how&nbsp;<code>git add&nbsp;&ndash;p</code>&nbsp;handles the transition between files.&nbsp;Normally, once you&rsquo;ve made a decision on every hunk in a file, the session automatically moves on to the next one.&nbsp;With&nbsp;<code>--no-auto-advance</code>, the session stays put after&nbsp;you&rsquo;ve&nbsp;decided on the last hunk, letting you use&nbsp;<code>&lt;</code>&nbsp;and&nbsp;<code>&gt;</code>&nbsp;to move between files at your own pace. This can be useful when you want to review your decisions holistically before&nbsp;<em>committing&nbsp;</em>to&nbsp;them.</p><p>[<a href=\"https://github.com/git/git/compare/2b53e8b3ee7f143af785e2a39ce4e1614ff6c66e...8cafc305e22a59efb92472d4132616e24d3184c6\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/f19f1b6cf37d22cf317b5c3b52a11eede1abe267...417b181f99ce53f50dea6541430cfe1f1f359a6a\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p><code>git replay</code>, the experimental command for replaying commits onto a new base without touching the working tree, continues to mature. This release brings several improvements:&nbsp;<code>replay</code>&nbsp;now performs atomic reference updates by default (instead of printing&nbsp;<a href=\"https://git-scm.com/docs/git-update-ref/2.54.0\" target=\"_blank\" rel=\"noreferrer noopener\"><code>update-ref</code></a>&nbsp;commands to&nbsp;<code>stdout</code>), has learned a new&nbsp;<code>--revert</code>&nbsp;mode that reverses the changes from a range of commits, can now drop commits that become empty during replay, and supports replaying all the way down to the root commit.</p><p>[<a href=\"https://github.com/git/git/compare/7bf3785d0973d229fa21a76122c7e4735a2b1ffb...0ee71f4bd035db61342c2c5a25984e4545347c11\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/05ddb9ee8a4c619fbb0e7309fe291bff5cd7c987...2760ee49834953c0860fa5d7983a6af4d27cb6a9\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/03311dca7f91f69e9e0c532fce1c1e3c0a9fa34d...e8b79a96ebaa2113391d14bfcdabe239f6ff8611\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/d8c553bbed21761a8af3fa40a20518e210e78a0d...23d83f8ddbef9adcb87671358b473e55cf90c90b\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>Git&rsquo;s HTTP transport now handles&nbsp;<a href=\"https://www.rfc-editor.org/rfc/rfc6585#section-4\" target=\"_blank\" rel=\"noreferrer noopener\">HTTP 429 &ldquo;Too Many Requests&rdquo;</a>&nbsp;responses. Previously, a 429 from the server would be treated as a fatal error. Git can now retry the request, honoring the server&rsquo;s&nbsp;<code>Retry-After</code>&nbsp;header when present, or&nbsp;fall&nbsp;back to a configurable delay via the new&nbsp;<code>http.retryAfter</code>&nbsp;setting.&nbsp;The&nbsp;new&nbsp;<code>http.maxRetries</code>&nbsp;and&nbsp;<code>http.maxRetryTime</code>&nbsp;configuration options provide control over how many times to retry and how long to wait, respectively.</p><p>[<a href=\"https://github.com/git/git/compare/270e10ad6dda3379ea0da7efd11e4fbf2cd7a325...640657ffd06999ec1ec3b1d030b7f5aac6b7f57b\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p><code>git log &ndash;L</code>, which traces the history of a range of lines within a file, has historically used its own custom output path that bypassed much of Git&rsquo;s standard diff machinery. As a result, it was incompatible with several useful options, including the <code>-S</code> and <code>-G</code> &ldquo;pickaxe&rdquo; options for searching by content changes.</p><p>This release reworks <code>git log &ndash;L</code> to route its output through the standard diff pipeline, making it compatible with patch formatting options and pickaxe searches for the first time.</p><p>Say you want to trace the history of <code>strbuf_addstr()</code> in <code>strbuf.c</code>, but only see commits where <code>len</code> was added or removed within that function: </p><pre class=\"wp-block-code\"><code>$ git log -L :strbuf_addstr:strbuf.c -S len --oneline -1\na70f8f19ad2 strbuf: introduce strbuf_addstrings() to repeatedly add a string\n\ndiff --git a/strbuf.c b/strbuf.c\n--- a/strbuf.c\n+++ b/strbuf.c\n@@ -316,0 +316,9 @@\n+void strbuf_addstrings(struct strbuf *sb, const char *s, size_t n)\n+{\n+      size_t len = strlen(s);\n+\n+      strbuf_grow(sb, st_mult(len, n));\n+      for (size_t i = 0; i &lt; n; i++)\n+              strbuf_add(sb, s, len);\n+}</code></pre>\n<p>Prior to this release, options like <code>-S</code>, (and <code>-G</code>, <code>--word-diff</code>, along with <code>--color-moved</code>) were silently ignored when used with <code>-L</code>. Now they work together naturally: <code>-L</code> scopes the output to the function you care about, and <code>-S</code> filters down to just the commits that touched the symbol you&rsquo;re searching for within it. </p><p>[<a href=\"https://github.com/git/git/compare/fb5516997ef3f882d8e53ce70ba6077533683621...512536a09ea2964e93226f219898ee0a09d85a70\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>Incremental multi-pack indexes, which we first covered in&nbsp;<a href=\"https://github.blog/open-source/git/highlights-from-git-2-47/#incremental-multi-pack-indexes\" target=\"_blank\" rel=\"noreferrer noopener\">our discussion of Git 2.47</a>&nbsp;and followed up on in&nbsp;<a href=\"https://github.blog/open-source/git/highlights-from-git-2-50/#incremental-multi-pack-reachability-bitmaps\" target=\"_blank\" rel=\"noreferrer noopener\">Git 2.50</a>, received further work in this release. The MIDX machinery now supports&nbsp;<em>compaction</em>, which merges smaller MIDX layers together (along with their associated reachability bitmaps) to keep the number of layers in the chain manageable. This is&nbsp;an important step&nbsp;toward making incremental MIDXs practical for long-lived repositories that accumulate many layers over time.</p><p>[<a href=\"https://github.com/git/git/compare/ce74208c2fa13943fffa58f168ac27a76d0eb789...d54da84bd9de09fc339accff553f1fc8a5539154\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p><code>git status</code> learned a new <code>status.compareBranches</code> configuration option. By default, <code>git status</code> shows how your current branch compares to its configured upstream (e.g., &ldquo;Your branch is ahead of &lsquo;origin/main&rsquo; by 3 commits&rdquo;). With <code>status.compareBranches</code>, you can ask it to also compare against your push remote, or both: </p><p></p><pre class=\"wp-block-code\"><code>[status]\n   compareBranches = @{upstream} @{push}</code></pre><p>This is useful if your push destination differs from your upstream, as is common in triangular workflows where you fetch from one remote and push to another (like a fork).</p><p>[<a href=\"https://github.com/git/git/compare/d79fff4a11a5...68791d7506aa\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>Say you have a series of&nbsp;commits, and&nbsp;want to add a trailer to each one of them. You could do this&nbsp;manually, or&nbsp;automate it with something like:&nbsp;<code>git rebase -x &lsquo;git commit --amend --no-edit --trailer=&rdquo;Reviewed-by: A U Thor&nbsp;&lt;a href=\"mailto:&lt;author@example.com&gt;&rdquo;&rsquo;</code>, but that&rsquo;s&nbsp;kind of a&nbsp;mouthful.</p><p>In Git 2.54,&nbsp;<code>git rebase</code>&nbsp;learned a&nbsp;new&nbsp;<code>--trailer</code>&nbsp;option, which appends a trailer to every rebased commit via the&nbsp;<a href=\"https://git-scm.com/docs/git-interpret-trailers\" target=\"_blank\" rel=\"noreferrer noopener\"><code>interpret-trailers</code></a>&nbsp;machinery.&nbsp;Instead of the monstrosity above, we can now write&nbsp;<code>git rebase&nbsp;--trailer&nbsp;\"Reviewed-by: A&nbsp;&lt;a href=\"mailto:<a>&lt;a@example.com</a>&gt;\"</code>&nbsp;and achieve the same effect.</p><p>[<a href=\"https://github.com/git/git/compare/a7a079c2c4bc7b269229a6ea6c147b6b2d5b2684...e4f9d6b0ab2e1903765258991a6265599d0007ce\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>When signing commits, a&nbsp;<a href=\"https://git-scm.com/book/ms/v2/Git-Tools-Signing-Your-Work\" target=\"_blank\" rel=\"noreferrer noopener\">signature</a>&nbsp;remains&nbsp;valid even when it was signed with a GPG key that has since expired.&nbsp;Previously, Git displayed these signatures with&nbsp;a scary&nbsp;red color, which could be misleading&nbsp;and lead you to interpret the signature itself as invalid. Git now correctly treats a valid signature made with a since-expired key as a good signature.</p><p>[<a href=\"https://github.com/git/git/compare/9eb5b3b999cb89d4a09dcf1012784e74154026de...90695bbdaea86064398c26eb259043cadcf99a86\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p><code>git blame</code>&nbsp;learned a new&nbsp;<code>--diff-algorithm</code>&nbsp;option, allowing you to select which&nbsp;<a href=\"https://git-scm.com/docs/diff-options/2.54.0#Documentation/diff-options.txt---diff-algorithmpatienceminimalhistogrammyers\" target=\"_blank\" rel=\"noreferrer noopener\">diff algorithm</a>&nbsp;(e.g.,&nbsp;<code>histogram</code>,&nbsp;<code>patience</code>, or&nbsp;<code>minimal</code>) is used when computing blame. This can sometimes produce meaningfully different (and more useful) blame output, depending on the nature of the changes in your repository&rsquo;s history.</p><p>[<a href=\"https://github.com/git/git/compare/716e871d50dc63a6f436442b127571b9268a75a3...ffffb987fcd3b3d6b88aceed87000ef4a5b6114e\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>Under the hood, a significant amount of work went into&nbsp;restructuring Git&rsquo;s object database (ODB) internals. The ODB source API has been refactored to use a pluggable backend design, with individual functions like&nbsp;<code>read_object()</code>,&nbsp;<code>write_object()</code>, and&nbsp;<code>for_each_object()</code>&nbsp;now dispatched through function pointers on a per-source basis. While none of this is user-visible today, it&nbsp;lays&nbsp;the groundwork for future features like alternative storage backends or more flexible object database configurations.</p><p>[<a href=\"https://ttps//github.com/git/git/compare/2cc71917514657b93014134350864f4849edfc83...3565faf28c2059c6260d53ac71a303b1c04b0a7b\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/d0413b31ddcce6ae6ffaff0a30a67ffbd1a7c648...d6fc6fe6f8b74e663d6013f830b535f50bfc1414\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/2f8c3f6a5a6d6a3de205be709e1a598b9d4b0b3e...83869e15fa9ef3b0ea2adbfe2fe68a309f95b856\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>,&nbsp;<a href=\"https://github.com/git/git/compare/2e3028a58c1f1fbf08538443fc30a48ac4f6bacf...109bcb7d1d2f0d2f0514beec15779190c0b89575\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p><code>git&nbsp;backfill</code>, the experimental command for downloading missing blobs in a&nbsp;<a href=\"https://git-scm.com/docs/partial-clone\" target=\"_blank\" rel=\"noreferrer noopener\">partial clone</a>, learned to accept revision and&nbsp;<a href=\"https://git-scm.com/docs/gitglossary/2.54.0#Documentation/gitglossary.txt-pathspec\" target=\"_blank\" rel=\"noreferrer noopener\">pathspec</a>&nbsp;arguments. Previously,&nbsp;<code>backfill</code>&nbsp;would always download blobs reachable from&nbsp;<code>HEAD</code>&nbsp;across the entire tree. You can now scope it to a particular range of history (e.g.,&nbsp;<code>git backfill main~100..main</code>) or a subset of paths (e.g.,&nbsp;<code>git backfill -- '*.c'</code>), including&nbsp;pathspecs&nbsp;with wildcards.</p><p>This makes backfill much more practical for large partial clones where you only need historical blobs for a specific area of the repository.</p><p>[<a href=\"https://github.com/git/git/compare/cd79c76a51f776bf46a849db04ce2cc45c5c5d6d...46d1f4cf4dcb8aaf799f78410af829e149086f36\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>Git&rsquo;s alias configuration has historically been limited to ASCII alphanumeric characters and hyphens. That meant alias names like &ldquo;h&auml;mta&rdquo; (Swedish for &ldquo;fetch&rdquo;) or &ldquo;&#29366;&#24907;&rdquo; (Japanese for &ldquo;status&rdquo;) were off-limits. Git 2.54 lifts that restriction with a new subsection-based syntax:</p><p></p><pre class=\"wp-block-code\"><code>[alias \"h&auml;mta\"]\n    command = fetch\n</code></pre><p>The traditional <code>[alias] co = checkout</code> syntax continues to work for ASCII names. The new subsection form supports any characters (except newlines and <code>NUL</code> bytes), is matched case-sensitively as raw bytes, and uses a command key for the alias definition. Shell completion has been updated to handle these aliases as well.</p><p>[<a href=\"https://github.com/git/git/compare/ac78c5804e080aa8f0307155eda85465a2a1b1dd...edd8ad18a643d47dd92b08ab865bf7f4a26f50bc\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>, <a href=\"https://github.com/git/git/compare/08c36099359e6a5c694f9abb97e630a247bc8dfb...73cc549559398626f33063f64ece9e558e654c95\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n\n\n\n<li><p>The histogram diff algorithm received a fix for a subtle output quality issue. After any diff algorithm runs, Git performs a &ldquo;compaction&rdquo; phase that&nbsp;shifts&nbsp;and merges change groups to produce cleaner output. In some cases, this shifting could move a change group across the anchor lines that the histogram algorithm had chosen, producing a diff that was technically correct but visually redundant. Git now detects when this happens and re-diffs the affected region, resulting in tighter output that better matches what you would expect.</p><p>[<a href=\"https://github.com/git/git/compare/7f13e5c8c744ec8da268b6f774d16f2ea729f48e...e417277ae99687b576e48cb477a7a50241ea0096\" target=\"_blank\" rel=\"noreferrer noopener\">source</a>]</p></li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-rest-of-the-iceberg\">&hellip;the rest of the iceberg</h2>\n\n\n\n<p>That&rsquo;s just a sample of changes from the latest release. For more, check out the release notes for <a href=\"https://github.com/git/git/blob/v2.54.0/Documentation/RelNotes/2.53.0.adoc\">2.53</a> and <a href=\"https://github.com/git/git/blob/v2.54.0/Documentation/RelNotes/2.54.0.adoc\">2.54</a>, or <a href=\"https://github.com/git/git/tree/v2.54.0/Documentation/RelNotes\">any previous version</a> in the <a href=\"https://github.com/git/git\">Git repository</a>.</p>\n</body></html>\n<p>The post <a href=\"https://github.blog/open-source/git/highlights-from-git-2-54/\">Highlights from Git 2.54</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"},{"json_class":"Feedjira::Parser::AtomEntry","@author":"Cassidy Williams","@title_type":"html","@raw_title":"Building an emoji list generator with the GitHub Copilot CLI","@url":"https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/","@links":["https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/"],"@entry_id":"https://github.blog/?p=95403","@updated":{"json_class":"Time","s":1776446831,"n":0},"@published":{"json_class":"Time","s":1776448800,"n":0},"@categories":["AI & ML","GitHub Copilot","GitHub Copilot CLI"],"@summary":"<p>See how we created an emoji list generator during the Rubber Duck Thursday stream.</p>\n<p>The post <a href=\"https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/\">Building an emoji list generator with the GitHub Copilot CLI</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n","@content":"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>Every week, the GitHub team runs&nbsp;<a href=\"https://www.youtube.com/@GitHub/streams\">a stream called Rubber Duck Thursdays</a>, where we build projects live, cowork with our community, and answer questions!</p>\n\n\n\n<p>This week, we built a very fun project together using the&nbsp;<a href=\"https://github.com/features/copilot/cli?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">GitHub Copilot CLI</a>! Let me tell you about it.</p>\n\n\n\n<p>&#128161;&nbsp;<em>New to GitHub Copilot CLI?&nbsp;<a href=\"https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-for-beginners-getting-started-with-github-copilot-cli/\">Here&rsquo;s how to get started.</a></em></p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rubber Duck Thursdays!\" width=\"500\" height=\"281\" src=\"https://www.youtube.com/embed/ytWRnlXxqsU?start=1744&amp;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div></figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-it\">What is it?</h2>\n\n\n\n<p>In a lot of social media tweets and launches, you often see accounts post things like:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>We shipped the most amazing emoji list generator ever. It:\n\n&#128187; Works in the CLI\n&#129302; Uses the Copilot SDK to intelligently convert your bullet points to relevent emoji\n&#128203; Copies the result to the clipboard</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"We shipped the most amazing emoji list generator ever. It:\n\n&#128187; Works in the CLI\n&#129302; Uses the Copilot SDK to intelligently convert your bullet points to relevent emoji\n&#128203; Copies the result to the clipboard\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>It&rsquo;s beautiful. But coming up with the perfect emoji is far too slow for me in this &ldquo;move fast and break things&rdquo; world. I have projects to build! Repos to vibe! Pull requests to merge! I can&rsquo;t be thinking about emojis!</p>\n\n\n\n<p>And thus, on the stream, we build an emoji list generator (very descriptively called Emoji List Generator) that:</p>\n\n\n\n<p>&#128421;&#65039; Runs in the terminal<br>&#128203; You paste or write a list<br>&#9000;&#65039; You hit Ctrl + S<br>&#128206; You get the list on your clipboard</p>\n\n\n\n<p>(Can you tell I&rsquo;m dogfooding the product here?)</p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-we-built-it\">How we built it</h2>\n\n\n\n<p>We used a few cool technologies for this project:</p>\n\n\n\n<p>&#128421;&#65039;&nbsp;<code>@opentui/core</code>for the terminal UI<br>&#129302;&nbsp;<code>@github/copilot-sdk</code>for the AI brain<br>&#128203;&nbsp;<code>clipboardy</code>for clipboard access</p>\n\n\n\n<p>To start the project off, we opened up the GitHub Copilot CLI.</p>\n\n\n\n<p>In plan mode using Claude Sonnet 4.6, we wrote:</p>\n\n\n<div class=\"wp-block-code-wrapper\">\n<pre class=\"wp-block-code language-plaintext\"><code>I want to create an AI-powered markdown emoji list generator. Where, in this CLI app, if I paste in or write in some bullet points, it will replace those bullet points with relevant emojis to the given point in that list, and copies it to my clipboard. I'd like it to use GitHub Copilot SDK for the AI juiciness.</code></pre>\n<clipboard-copy aria-label=\"Copy\" class=\"code-copy-btn\" data-copy-feedback=\"Copied!\" value=\"I want to create an AI-powered markdown emoji list generator. Where, in this CLI app, if I paste in or write in some bullet points, it will replace those bullet points with relevant emojis to the given point in that list, and copies it to my clipboard. I'd like it to use GitHub Copilot SDK for the AI juiciness.\" tabindex=\"0\" role=\"button\"><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-copy js-clipboard-copy-icon\"><path d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"></path><path d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"></path></svg><svg aria-hidden=\"true\" height=\"16\" viewbox=\"0 0 16 16\" version=\"1.1\" width=\"16\" class=\"octicon octicon-check js-clipboard-check-icon\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg></clipboard-copy></div>\n\n\n<p>Copilot asked me a bunch of clarifying questions, for example around the tech stack and what libraries we should use (shoutout to&nbsp;<a href=\"https://javorszky.co.uk/\">Gabor</a>&nbsp;in the chat for suggesting&nbsp;<a href=\"https://opentui.com/\">OpenTUI</a>), and from there, we had a fully thought-out&nbsp;<code>plan.md</code>file for me to review and use!</p>\n\n\n\n<p>We implemented the plan using Claude Opus 4.7 (which was&nbsp;<a href=\"https://github.blog/changelog/2026-04-16-claude-opus-4-7-is-generally-available/\">recently released</a>!) and a few minutes later, voil&agrave;, we had a fun little terminal UI to work with!</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1869\" height=\"1944\" src=\"https://github.blog/wp-content/uploads/2026/04/list.png?resize=1869%2C1944\" alt=\"Screenshot of the 'Emoji List Generator.' Paste or type your bullet points below. Press CTRL + S to generate, CTRL + C to quit.\n\nYour bullet points\n- Is there a ghost here?\n- Ducks quack a lot\n- I would like to have a word with the moon\n- Mechanical keyboards are cool\n- We just launched a sick new feature\n- I'd like to squish some slime\n\nFollowed by the same list, with appropriate emojis.\" class=\"wp-image-95404\" srcset=\"https://github.blog/wp-content/uploads/2026/04/list.png?w=1869 1869w, https://github.blog/wp-content/uploads/2026/04/list.png?w=288 288w, https://github.blog/wp-content/uploads/2026/04/list.png?w=768 768w, https://github.blog/wp-content/uploads/2026/04/list.png?w=984 984w, https://github.blog/wp-content/uploads/2026/04/list.png?w=1477 1477w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" /></figure>\n\n\n\n<p>The project was small but mighty. In the CLI, we used some really cool tools all together:</p>\n\n\n\n<p>&#128203;&nbsp;<a href=\"https://docs.github.com/copilot/how-tos/copilot-cli/cli-best-practices?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026#plan-mode\">Plan mode</a><br>&#129302;&nbsp;<a href=\"https://docs.github.com/copilot/concepts/agents/copilot-cli/autopilot?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">Autopilot mode</a><br>&#128256;&nbsp;<a href=\"https://docs.github.com/copilot/reference/ai-models/supported-models?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">Multi-model</a>&nbsp;workflow<br>&#128681;&nbsp;<a href=\"https://docs.github.com/copilot/how-tos/copilot-cli/allowing-tools#permissive-options?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">The&nbsp;<code>allow-all</code>tools flag</a><br>&#128025; The&nbsp;<a href=\"https://github.com/github/github-mcp-server?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">GitHub MCP server</a></p>\n\n\n\n<p>If you&rsquo;d like to build a project like this yourself, you can check out the docs for&nbsp;<a href=\"https://docs.github.com/copilot/how-tos/copilot-cli/cli-getting-started?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">the GitHub Copilot CLI</a>&nbsp;and the&nbsp;<a href=\"https://docs.github.com/copilot/how-tos/copilot-sdk/sdk-getting-started?utm_source=blog-rdt-emoji-list-cta&amp;utm_medium=blog&amp;utm_campaign=dev-pod-copilot-cli-2026\">GitHub Copilot SDK</a>&nbsp;today!</p>\n\n\n\n<p>The&nbsp;<a href=\"https://github.com/cassidoo/emoji-list-generator\">emoji list generator is free and open source</a>, just for you.</p>\n\n\n\n<p>Happy building!</p>\n</body></html>\n<p>The post <a href=\"https://github.blog/ai-and-ml/github-copilot/building-an-emoji-list-generator-with-the-github-copilot-cli/\">Building an emoji list generator with the GitHub Copilot CLI</a> appeared first on <a href=\"https://github.blog\">The GitHub Blog</a>.</p>\n"}]}