Rustowl Download

Visualization tool for Rust ownership and variable lifetimes to assist with debugging and optimization, compatible with VSCode, Neovim, and Emacs.

⭐ 4,895 stars on GitHub
Latest Release: v1.0.0-rc.1

About Software

RustOwl is a visualization tool for Rust that helps developers understand ownership movement and variable lifetimes. By analyzing source code when saved, it provides visual feedback through colored underlines to indicate lifetime, immutable/mutable borrowing, and value movement. This helps in debugging complex lifetime issues and optimizing code.

The tool supports major editors like VS Code, Neovim, and Emacs through extensions and an LSP server. It offers features like automatic analysis on save, customizable highlight colors, and detailed visualization of lifetime errors. RustOwl can be installed via Cargo, Winget, AUR, or Docker, making it accessible across different environments.

Use Cases:

  • Visualize variable ownership and lifetimes in Rust code with color-coded underlines
  • Debug lifetime errors by seeing the difference between actual and expected lifetimes
  • Optimize memory usage by understanding ownership movement and borrowing patterns
  • Integrate with VSCode, Neovim, and Emacs for seamless development workflow
  • Run analysis on save to get immediate feedback on ownership and lifetime issues

Downloads

v1.0.0-rc.1 August 19, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.4 May 20, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.3 May 16, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.3-rc.2 May 16, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.3-rc.1 May 16, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.2 May 08, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.1 May 06, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.1-rc.1 May 06, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.1-alpha.3 May 05, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.1-alpha.2 May 05, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.1-alpha.1 May 05, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.0 April 30, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.0-alpha.2 April 30, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.3.0-alpha.1 April 27, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe
v0.2.3-alpha.1 April 25, 2025
rustowl-aarch64-pc-windows-msvc.exeexe
rustowl-x86_64-pc-windows-msvc.exeexe

Package Info

Last Updated
Aug 19, 2025
Latest Version
v1.0.0-rc.1
License
MPL-2.0
Total Versions
15

README

    Visualize ownership and lifetimes in Rust for debugging and optimization


    
        
    
    
        
    
    


    
        
    
    
        
    
    
        
    


    
        
    


    

RustOwl visualizes ownership movement and lifetimes of variables. When you save Rust source code, it is analyzed, and the ownership and lifetimes of variables are visualized when you hover over a variable or function call.

RustOwl visualizes those by using underlines:

  • 🟩 green: variable's actual lifetime
  • 🟦 blue: immutable borrowing
  • 🟪 purple: mutable borrowing
  • 🟧 orange: value moved / function call
  • 🟥 red: lifetime error
    • diff of lifetime between actual and expected, or
    • invalid overlapped lifetime of mutable and shared (immutable) references

Detailed usage is described here.

Currently, we offer VSCode extension, Neovim plugin and Emacs package. For these editors, move the text cursor over the variable or function call you want to inspect and wait for 2 seconds to visualize the information. We implemented LSP server with an extended protocol. So, RustOwl can be used easily from other editor.

Table Of Contents

  • Support
  • Quick Start
    • Prerequisite
    • VS Code
    • Vscodium
  • Other editor support
    • Neovim
    • Emacs
    • RustRover / IntelliJ IDEs
    • Sublime Text
  • Architecture / OS / package repositories
    • Cargo Binstall
    • Windows
    • Archlinux
    • Nix flake
    • GitHub Release
    • Docker
  • Build manually
  • Note

Support

If you're looking for support, please consider checking all issues, existing discussions, and starting a discussion (https://github.com/cordx56/rustowl/discussions/new?category=q-a) first!

Also, you can reach out to us on the Discord server provided above.

Quick Start

Here we describe how to start using RustOwl with VS Code.

Prerequisite

  • cargo installed
    • You can install cargo using rustup from this link (https://rustup.rs/).
  • Visual Studio Code (VS Code) installed

We tested this guide on macOS Sequoia 15.3.2 on arm64 architecture with VS Code 1.99.3 and cargo 1.89.0.

VS Code

You can install VS Code extension from this link (https://marketplace.visualstudio.com/items?itemName=cordx56.rustowl-vscode). RustOwl will be installed automatically when the extension is activated.

Vscodium

You can install Vscodium extension from this link (https://open-vsx.org/extension/cordx56/rustowl-vscode). RustOwl will be installed automatically when the extension is activated.

After installation, the extension will automatically run RustOwl when you save any Rust program in cargo workspace. The initial analysis may take some time, but from the second run onward, compile caching is used to reduce the analysis time.

Other editor support

We support Neovim and Emacs. You have to install RustOwl before using RustOwl with other editors.

You can also create your own LSP client. If you would like to implement a client, please refer to the The RustOwl LSP specification.

Neovim

Minimal setup with lazy.nvim (https://github.com/folke/lazy.nvim):

{
  'cordx56/rustowl',
  version = '*', -- Latest stable version
  build = 'cargo install rustowl',
  lazy = false, -- This plugin is already lazy
  opts = {},
}

For comprehensive configuration options including custom highlight colors, see the Neovim Configuration Guide.

Recommended configuration: Click to expand

{
  'cordx56/rustowl',
  version = '*', -- Latest stable version
  build = 'cargo binstall rustowl',
  lazy = false, -- This plugin is already lazy
  opts = {
    client = {
      on_attach = function(_, buffer)
        vim.keymap.set('n', 'o', function()
          require('rustowl').toggle(buffer)
        end, { buffer = buffer, desc = 'Toggle RustOwl' })
      end
    },
  },
}
See full README on repository.