Your AI pair programmer
With GitHub Copilot, get suggestions for whole lines or entire functions right inside your editor.
Trained on billions of lines of public code, GitHub Copilot puts the knowledge you need at your fingertips, saving you time and helping you stay focused.
Extends your editor
GitHub Copilot is available as an extension for Neovim, JetBrains, and Visual Studio Code. You can use the GitHub Copilot extension on your desktop or in the cloud on GitHub Codespaces. And it’s fast enough to use as you type.
Speaks all the languages you love
GitHub Copilot works with a broad set of frameworks and languages. The technical preview does especially well for Python, JavaScript, TypeScript, Ruby, Java, and Go, but it understands dozens of languages and can help you find your way around almost anything.
You’re the pilot
With GitHub Copilot, you’re always in charge. You can cycle through alternative suggestions, choose which to accept or reject, and manually edit suggested code. GitHub Copilot adapts to the edits you make, matching your coding style.
More than autocomplete
GitHub Copilot is powered by Codex, the new AI system created by OpenAI. GitHub Copilot understands significantly more context than most code assistants. So, whether it’s in a docstring, comment, function name, or the code itself, GitHub Copilot uses the context you’ve provided and synthesizes code to match. Together with OpenAI, we’re designing GitHub Copilot to get smarter at producing safe and effective code as developers use it.
1234567891011121314151617181920212223package main type Run struct { Time int // in milliseconds Results string Failed bool } // Get average runtime of successful runs in seconds func averageRuntimeInSeconds(runs []Run) float64 { var totalTime int var failedRuns int for _, run := range runs { if run.Failed { failedRuns++ } else { totalTime += run.Time } } averageRuntime := float64(totalTime) / float64(len(runs) - failedRuns) / 1000 return averageRuntime }
Skip the docs and stop searching for examples. GitHub Copilot helps you stay focused right in your editor.
Convert comments to code. Write a comment describing the logic you want, and let GitHub Copilot assemble the code for you.
123456789101112131415161718192021222324/** * json schema: * [ * { name: "John Doe", * collaborators: ["Jane Doe", "Herbert Frapp", "Elsie McEwan"] * }, * { name: "Jane Doe", * collaborators: ["John Doe", "Karen Smith"] * }, * { name: "Skittles the Cat", * collaborators: [] * } * ] */ function collaborators_map(json: any): Map<string, Set<string>> { const map = new Map<string, Set<string>>(); for (const item of json) { const name = item.name; const collaborators = item.collaborators; const set = new Set<string>(collaborators); map.set(name, set); } return map; }
12345678910111213141516interface CommentMarker { start: string; end: string; } const markers: { [language:string]: CommentMarker } = { javascript: { start: '//', end: ''}, python: { start: '#', end: ''}, css: { start: '/*', end: '*/'}, html: { start: '<!--', end: '-->'}, bash: { start: '#', end: ''}, postscript: { start: '%', end: ''}, cobol: { start: '*', end: ''} asm: { start: ';', end: ''}, haskell: { start: '--', end: ''} }
Autofill for repetitive code. GitHub Copilot works great for quickly producing boilerplate and repetitive code patterns. Feed it a few examples and let it generate the rest!
Tests without the toil. Tests are the backbone of any robust software engineering project. Import a unit test package, and let GitHub Copilot suggest tests that match your implementation code.
123456789101112def strip_suffix(filename): """ Removes the suffix from a filename """ return filename[:filename.rfind('.')] def test_strip_suffix(): """ Tests for the strip_suffix function """ assert strip_suffix('notes.txt') == 'notes' assert strip_suffix('notes.txt.gz') == 'notes.txt'
Show me alternatives. Want to evaluate a few different approaches? GitHub Copilot can show you a list of solutions. Use the code as provided, or edit it to meet your needs.
123456def max_sum_slice(xs): max_ending = max_so_far = 0 for x in xs: max_ending = max(0, max_ending + x) max_so_far = max(max_so_far, max_ending) return max_so_far
Code confidently
in unfamiliar territory
Whether you’re working in a new language or framework, or just learning to code, GitHub Copilot can help you find your way. Tackle a bug, or learn how to use a new framework without spending most of your time spelunking through the docs or searching the web.
1234567891011121314const token = process.env["TWITTER_BEARER_TOKEN"] const fetchTweetsFromUser = async (screenName, count) => { const response = await fetch( `https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=${screenName}&count=${count}`, { headers: { Authorization: `Bearer ${token}`, }, } ) const json = await response.json() return json }
Flight reports
Hundreds of engineers, including many of our own, have been using GitHub Copilot every day. It’s transformed the way they work – here’s what they have to say:
How it works
Frequently
asked questions
Of course! Please use #GitHubCopilot when you post so we can see what you produce!