Release Notes for 1.1.0
Published January 2, 2026
Preamble
Welcome to the first post-1.0 release notes! After shipping our 1.0.0 milestone in April, we spent the rest of 2025 completing the migration to our next-gen scope engine, adding new language support, and polishing the overall experience. As always, Cursorless is on continuous delivery, so all 193 PRs merged since 1.0.0 have already landed in your editor.
The subject at hand
Since the last release, we've merged 193 PRs. Here are the highlights:
Next-gen migration complete 🎉
Remember those "pesky scopes in Clojure, CSS, LaTeX, Ruby, Rust, and Scala" we mentioned in the 1.0.0 release notes? They're done. All of them.
- Migrated Clojure implementations to Tree-sitter queries (#2951)
- Migrated LaTeX implementations to Tree-sitter queries (#2952)
- Migrated Ruby implementations to Tree-sitter queries (#2949)
- Migrated Rust implementations to Tree-sitter queries (#2950)
- Migrated Scala implementations to Tree-sitter queries (#2948)
- Removed the legacy language machinery entirely (#2956)
Every language Cursorless supports now uses our next-gen scope engine, enabling features like next-gen inference ("every funk air past bat"), scope visualization, and the scope tree view across the board.
New language support
- R language support is now enabled (#2721). Statistics enthusiasts, rejoice!
- Java properties files (
.properties) now have Cursorless support (#3077) - Talon list files (
.talon-list) are now supported (#3080)
New scopes and features
- Full line scope: The new
"full line"scope includes leading and trailing whitespace, unlike the existing"line"scope which excludes surrounding whitespace. Try"change full line"when you want to grab the whole enchilada. (#3095) - Argument list scope: Target the entire argument list of a function with
"arg list"(#2907) - Java record statements: Java records now have proper scope support (#3089)
"move"where destination contains source: This now works (#3056)"from"action enabled by default (#2939)
Documentation and visualization improvements
The docs got some serious love this cycle:
- Language-specific scope visualizations in docs: The language pages now show visualizations of what each scope looks like in each language, making it easier to understand exactly what each scope targets (#3016)
- Missing scopes contributor page: A new page helps contributors identify which scopes are missing for each language (#2978)
- Containment icons in scope visualizer: The scope visualizer now shows containment relationships with icons (#3085)

Interior scope improvements
We made significant improvements to interior scopes (the part of a scope between its delimiters):
- Added interior scopes to JavaScript, Java, C#, C, and C++ (#2987, #2988, #2991, #2992)
- Head/tail modifiers are now bounded by all interior types, not just pairs (#3070)
Performance improvements
- Added scope handler cache for improved performance with multiple cursors (#3101)
With a 10,000+ line JSON file and 100 cursors, "take key" now takes about 20–25 ms on a modern CPU.
Bug fixes
- Fixed bug where move source was incorrectly dropped (#3061)
- Fixed R arguments issue with incidental multiple matches (#3064)
- Better handling of quick pick with whitespace (#3045)
- Don't yield empty iteration scopes (#2968)
📈 What's next?
- More testing: We are still working to achieve full test coverage for all supported languages. This is an ongoing process as we discover previously untested areas or add new languages.
- Cursorless everywhere: We're continuing work on bringing Cursorless to more editors and platforms.
- Documentation improvements: We're always looking for documentation contributions
We'd like to end with a massive thank you to our sponsors 🎉, without whom Cursorless development would not be possible!