lazyincus – a lazydocker-style terminal UI for Incus

Hey all,

I’ve been using Incus for my containers for a while now, and the one thing I really missed from my Docker days was lazydocker. So I ended up porting it, and here it is: lazyincus.

Demo: lazyincus — a terminal UI for Incus - asciinema.org

It’s basically one screen where you can see all your instances across projects and do the usual stuff without typing incus commands all day: start/stop, logs, config, a shell, snapshots and so on. There’s also a panel for images, volumes, networks and profiles. You can see which instances use what, check network leases and ACLs, clean up unused images, and edit configs in your editor.

If you use incus-compose, run it from a directory with a compose file and you’ll get your services and replicas in their own panel too.

On macOS it’s brew install tallica/tap/lazyincus. For Linux (and macOS if you’d rather skip brew) there are binaries on the releases page.

Fair warning: this is still an early version. I mostly run containers on a single setup, so it needs more testing, especially with VMs and setups that don’t look like mine. If something breaks or looks off, please open an issue. Feature requests are very welcome too; I’d love to hear what would make it useful for you.

Repo: GitHub - tallica/lazyincus: A terminal UI (TUI) for Incus — containers, VMs, snapshots, images and more on one keyboard-driven screen. lazydocker, ported to Incus. · GitHub

(All credit for the original design goes to Jesse Duffield and the lazydocker folks. This is MIT like the original.)

Thanks!

Best,
Michał

Nice work!

This is fun, thank you.

I’ve seen you created a hombrew tap where you have incus-compose in, do you plan to keep it up2date ? If so I would like to reference it until we can have incus-compose in core.

Thank’s again for you’r great work.

@jochumdev Thank you for the kind words :slight_smile: Yes, I plan to keep the Homebrew’s tap up to date. Feel free to reference it. Oh, and thank you for your work on the incus-compose. I’m in process of migrating some of my docker compose files into incus! This is fun, indeed.

Any feedback or feature requests are very welcome. Cheers!

Awesome tool!

Thank you

I would like to have a Projects view where I can add my compose projects (folders) to it and run various actions on them.

@jochumdev Yes, I was thinking about something like this. I called the panel “Stacks”, perhaps “Compose Projects” would be better… I have no strong opinion about it.

Here is a PR: Add a Stacks panel, and have Services follow its selection by tallica · Pull Request #9 · tallica/lazyincus · GitHub if you’d like to test it out. I would appreciate any feedback.

Some screenshots:

Thanks!

Works!

This is a dream, many thanks! Could you add remotes? Like instead “caddy-config” add “pve01:caddy-config” ?

I just tested it and it looks great.

Thanks.

Thanks, glad it’s useful! lazyincus connects to one Incus remote at a time, so to show pve01:caddy-config it needs to know which remote each stack belongs to. Where do you keep that information? As far as I can see, incus-compose doesn’t store it in the compose file.

I would love to see lazyincus support multiple remotes in my example above “pve01” is a remote.

so we could specify “pve01:~/deployments/pve01/caddy-config” for example.

And then “serverXX:~/deployments/serverXX/caddy” and so on.

@jochumdev this is in now, pretty much exactly as you described it. Since 0.12.0 you can press a on the Stacks panel and type pve01:~/deployments/pve01/caddy-config. The stack stays pinned to pve01, so you can add serverXX:~/deployments/serverXX/caddy next to it and keep them all in one list. The path is the compose directory on your machine, and the remote is where the instances run.

A few things that come with it:

  • A remote column shows which server each stack is on, and a * marks the one the rest of the screen is showing.
  • space on a stack switches the whole screen (instances, images, networks…) to that stack’s remote, and R lets you pick any remote.
  • When you stop or remove something on a remote you’re not looking at, the confirmation names that remote, so you don’t hit the wrong server.
  • If a server is slow or offline, its stacks show connecting or unreachable and the rest keeps working.

0.13.0 is out now with some polish on top: panels fill in faster after a switch, and Stacks/Services fold away on remotes with no stacks. I also recorded a new walkthrough, and the last part shows the two-remote setup:

https://asciinema.org/a/1267372

brew upgrade lazyincus, or grab a binary from the release page. Let me know how it works with your servers!

Hi all!

Quick update: 0.14.0 and 0.15.0 are out. For the most significant features I recorded short demos, under a minute each, since that’s easier to follow than a list of keys:

  • Command palette: press ctrl+p and type. Every action is there, each saying what it’ll act on, and you can jump straight to any instance or image by name. (demo)
  • Read-only remotes: I wanted to point lazyincus at my production box without worrying about a stray keypress. Mark a remote readOnly in the config, or run with --read-only, and anything that would change it is refused. You can give each remote a colour too. (demo)
  • Operations and warnings: W shows what the daemon is busy with, whoever started it, and lets you cancel things or acknowledge its warnings. (demo)
  • Compose backups: @jochumdev, this one’s built on your incus-compose backup. B on a stack opens its backups: back up, verify, restore, prune. (demo)
  • Snapshots: rename them, or turn one into a new instance. (demo)
  • Inside an instance: F opens a file from inside the instance in your editor, and / searches the logs or config. (demo)

The full list of changes is in the release notes, and I plan to keep recording demos like these for future releases. brew upgrade lazyincus gets you there, or grab a binary from the same page.

Thanks for all the feedback so far, it’s shaped a lot of this. Keep it coming!

Best,
Michał