#debug #line #graphics #bevy #drawing


A prototype plugin providing a simple line drawing API for bevy

10 releases

0.3.4 Jan 7, 2022
0.3.3 Aug 6, 2021
0.3.2 Jul 26, 2021
0.3.1 Apr 14, 2021
0.1.1-alpha Feb 26, 2021

#11 in Rendering

Download history 31/week @ 2021-09-25 43/week @ 2021-10-02 92/week @ 2021-10-09 104/week @ 2021-10-16 162/week @ 2021-10-23 33/week @ 2021-10-30 37/week @ 2021-11-06 119/week @ 2021-11-13 168/week @ 2021-11-20 148/week @ 2021-11-27 45/week @ 2021-12-04 95/week @ 2021-12-11 47/week @ 2021-12-18 92/week @ 2021-12-25 82/week @ 2022-01-01 62/week @ 2022-01-08

312 downloads per month
Used in 4 crates (3 directly)

MIT license

213 lines


crates.io docs.rs

A plugin providing a simple line drawing api for bevy.

demo demo_2 Click on the above demo to play it.

Master branch has no stability guarantees.


This plugin uses a shader and sends individual points to the GPU, which then moves geometry to make a line. This is quite fast with a significant number of lines, and there is no added cost to moving lines around.


Add bevy_prototype_debug_lines to your Cargo.toml:

bevy_prototype_debug_lines = "0.3"

Add the plugin in your App::build() phase:

use bevy::prelude::*;
use bevy_prototype_debug_lines::*;

fn main() {

Draw a line in whatever system you have using the DebugLines resource:

fn some_system(
    mut lines: ResMut<DebugLines>
) {
    let start = Vec3::splat(-1.0);
    let end = Vec3::splat(1.0);
    let duration = 0.0;     // Duration of 0 will show the line for 1 frame.
    lines.line(start, end, duration);

Some options, such as depth testing, can be changed by inserting the DebugLines resource yourself:

use bevy::prelude::*;
use bevy_prototype_debug_lines::*;

fn main() {
    .insert_resource(DebugLines { depth_test: true, ..Default::default() })

See the examples for more complete usage examples.

Running Examples

You can run the examples like so:

cargo run --example 3d --features="example_deps"

Where 3d is one of the files in the examples

Changes in 0.3.0

In 0.3.0, the thickness parameter has been removed. I don't believe it provides enough value for the performance, time, or issues. However, if you feel differently, let me know in this issue.

This is technically a non-breaking change (i.e. your code will still compile) because duration was added which takes the same spot, but beware that your code still needs to be updated (probably just set old thickness values to 0, if you don't care about duration stuff.).

Bevy Version Support

bevy bevy_prototype_debug_lines
main bevy-main branch (not guaranteed maintained)
0.5 0.3
0.4 0.2.1

Please do not hesitate to let me know if you have any requests, improvements, or suggestions on how to make this crate more ergonomic or otherwise.


~452K SLoC