I've been working on a side project to generate YAML files that can then be turned around and used to generate a Next.js (or other similar framework) site. After finishing the style guide for this project, I decided to try both Cursor and Copilot side-by-side to see which one would be more helpful in finishing the project based on the style guide description
There are two branches on this project cursor
and copilot
that contain the code generated by each tool. To make this as fair as possible, I made sure to use the same style guide description for both branches.
I did three prompts and I took care to use the exact same prompts for both tools. Those are included in the commit messages.
At first, I was just going to do one prompt, so I did Cursor first. Then I committed the result to a branch, closed out Cursor, then switched back to the original main
branch and did the same prompt with Copilot. Then I did two more prompts in a row with Cursor, then switched to Copilot. I did this to make sure that the code generated by one tool would not influence the code generated by the other tool.
Although I have access to the @workspace
feature in Copilot chat, I did not use it for the test since it is not yet available to everyone. I did use the Compose function in Cursor and noted which files I added into the context.
If I really wanted to do more of a scientific test, I probably would have signed up for a separate GitHub account so I would have a "clean" Copilot account. But I decided to turn all of this into a test on a whim, so I didn't do that.
Copilot got closer to generating working code, although I had to manually click buttons to run commands and copy code. Cursor did more in the way of building out more of the project structure, but it never got around to either directly or indirectly defining the packages that would be needed to run the project.
After re-opening Cursor, I was not able to recover my previous chat, so I started a new one. I was able to recover my previous chat with Copilot.
Both generated files containing TypeScript errors. I did not fix these errors in either branch.