Windsurf has been released for several days now, and personally, I have been using Cursor and Bolt quite a bit. This popular application is something I had to experience to see if it is as good as advertised.
This article mainly discusses the user experience based on actual scenarios and provides a simple comparison with my limited experience of using Cursor, hoping to give everyone a reference.
At the time of writing this article, I have not yet experienced Cursor version 0.43, after all, Cursor was only upgraded after Windsurf was released, so there is a sequence of events.
Preparation
Download and Installation
You can download it directly from the official website, there’s nothing special about it, and the installation can be done as you like.

Registration and Login
At the end of the installation, it requires logging in, so you need to go through the registration and login process.
Registration and login may require attention to network issues, as it is not very stable.
The following are screenshots from daily use, which are not much different from Cursor and are basically consistent with VS Code.

Practical Attempt
I am currently learning Streamlit, so I simplified an application scenario to try it out.
The scenario is as follows:
Using Streamlit to implement an application similar to the ChatGPT page, replacing the large model with a domestic large model API.
Create a New Project
Start
After opening the interface post-installation, directly use <span>Generate a Project with Cascade</span>
.
My Experience:
This entry design experience is slightly better than Cursor, as Cascade is the CHAT chat box of Cursor, including the shortcut keys, which are consistent. This is well-prepared for migration.

Generate (New Project)
Using the following prompt, for the sake of experience, I did not specifically optimize the prompt.
帮我使用streamlit构建一个类似chatgpt网站,后台对接智谱清glm-4-flash 大模型api,使用中文
The screenshot of the generation process is as follows:

My Experience:
-
The dependency versions in requirements.txt are outdated and cannot be used directly. I deleted the version restrictions and used the latest version.
This should be because I did not set the Python environment in advance, later I used Cascade to help me set up a virtual environment.
-
The domestic Zhiyu interface call code is incorrect. If a private knowledge base is not added to the large model, almost all editors are like this, including Cursor. The only one that has an intuitive experience is Bolt (which I have not yet explored).
I manually adjusted this part of the code.
-
The generation process provides its understanding or implementation steps, which facilitates precise modifications to the prompt when the generated results are unsatisfactory. Of course, this may also be due to Claude 3.5 Sonnet putting in great effort later.
-
After generation, a summary explanation is added, indicating which files need review, including which are new and which are updated. I feel this is very necessary, as generating a project requires too many interactions. Having this review at least provides some assurance.
Setting Up Python Virtual Environment
The code I generated directly has not set up the virtual environment, here I directly tell <span>Cascade</span>
to help me install.
帮我设置python虚拟环境
The execution effect is quite good, confirming step by step, and can be executed directly in the Cascade tab without switching.

My Experience:
-
When it comes to executing terminal commands, the effect is better than I expected, and the understanding of the overall project, including the computer environment, is more advanced than Cursor.
Running
Through <span>Cascade</span>
, I tell Windsurf to help me run the application.
运行该应用
点击Accept后自动执行相应运行命令,给出执行结果,并打开浏览器预览。

My Experience:
-
Executing directly in <span>Cascade</span>
is indeed more unified, but I personally still prefer executing commands in the<span>Terminal</span>
due to my professional habits over the years.
Initial Running Effect
This is the result after running; overall it’s acceptable. Excluding the record-keeping for writing this article, it probably took less than 10 minutes to reach this point.

Modify Requirements
Interface
Through <span>Cascade</span>
, I tell Windsurf to help me optimize the interface.
请将右侧主区域背景改为浅灰色,对话消息背景设置为白色,这样美观一点。
The modified effect is as follows:

My Experience:
-
Generally speaking, it’s average. It captured the core of my feedback and made beautifications; the direction and thinking are correct, but there are some issues with the positioning of interface elements, and my requirements were not perfectly implemented.
This also reminds us that while telling Windsurf what to do, if we can explain the purpose, it might be able to do more than you expect.
Functionality
Through <span>Cascade</span>
, I tell Windsurf to help me optimize functionality.
现在调用大模型的返回是同步的,请帮我改为流式返回
I have tested the result; the flow return modification is very accurate, and the key is that the modification of the code’s location and amount is still relatively large.
My Experience:
-
This modification was very satisfactory, perfectly realizing my expectations, especially the flow parameter modification of Zhiyu Qingyan was also correct. According to my understanding, this should only be possible after being familiar with the interface documentation of Zhiyu Qingyan, so it seems that further verification of calling proprietary APIs is needed in the future.
Summary
Overall, after trying it out, it feels good and indeed surpasses the current version of Cursor I am using, mainly reflected in the following points:
-
<span>One-Line Project Creation</span>
, similar to Bolt. Although this point is small, it proves that Windsurf is indeed considering how to optimize user experience. Moreover, after each command initiation, Cascade automatically<span>pins</span>
the command, making it easier to see more returns. -
After each interaction, the <span>file addition and modification</span>
reminders are quite useful. If historical modifications can be viewed in the future, that would be even better. -
The <span>accept and reject buttons</span>
for each return are quite prominent; Cursor’s are smaller. I personally prefer Windsurf, but this is subjective. -
Intuitively, the understanding of the codebase is deeper, and there is no distinction between <span>chat</span>
and<span>codebase</span><code><span> in Cursor, which, while reducing usage difficulty, also sacrifices universality. After all, some projects may not want the large model to scan everything.</span>
In the future, I’ll have time to experience Cursor version 0.43, and I will further use Windsurf. If I discover anything new, I will share it with everyone.
Finally, I hope that <span>Cursor</span>
and <span>Windsurf</span>
can compete, so that we can use higher quality and cost-effective tools.