← all repositories
copilot-emacs/copilot.el

Emacs finally gets Copilot without selling its soul to VS Code

An unofficial plugin that wires GitHub's official language server into Emacs via raw JSON-RPC, skipping the LSP middleman.

2.3k stars Emacs Lisp Coding Assistants
copilot.el
Velocity · 7d
+1.5
★ / day
Trend
steady
star history

What it does

copilot.el brings GitHub Copilot’s inline completions, interactive chat, and Next Edit Suggestions into Emacs. It installs the official @github/copilot-language-server, handles authentication, and renders ghost-text suggestions that you accept with Tab or arrow keys. Chat streams responses in a dedicated buffer with your current file as automatic context.

The interesting bit

The plugin deliberately bypasses Eglot and other standard LSP clients, talking to Copilot’s server directly through jsonrpc.el. The README explains why: Copilot’s protocol is mostly non-standard LSP, and sharing one global server across all buffers is cleaner than pretending it’s a per-project language server. There’s a full design doc justifying the heresy.

Key highlights

  • Inline completions, chat, and Next Edit Suggestions (NES) in one package
  • NES predicts edits anywhere in the file, not just at cursor — can replace or delete existing text
  • Fish-style keybinding option for company-mode/corfu users who can’t spare Tab
  • Supports GitHub Enterprise via copilot-lsp-settings
  • Available on MELPA; Doom Emacs and Spacemacs configs documented

Caveats

  • Requires Node.js 22+ and a valid GitHub Copilot subscription (free tier exists as of early 2025)
  • Cannot coexist with chep/copilot-chat.el — both claim the copilot-chat feature and will autoload-fight
  • Chat buffer only gets rich markdown rendering if you separately install markdown-mode

Verdict

Worth a look if you’re an Emacs lifer who wants Copilot’s newer features without leaving the editor. Skip it if you’re already happy in VS Code or if juggling yet another Node.js dependency feels like a bridge too far.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.