LXDMosaic: Web GUI


Im working on a server overview page:

Anybody got anything else they want to see ?

(also please ignore the hanging sidebar its just the way firefox’s “take screenshot” renders it)

1 Like

I have just released version 0.5.0 here is the change log


  • Container snapshot breaks loading deployments
  • Providing a port breaks adding host (#113)


  • UI tweaks including
    • sidebar width
    • Collapse server by default when there is > 10 containers (#114)
    • Reload hosts + container tree on alias change
    • Show cpu cores on the dashboard
  • Sort containers in alphabetical order (#115)


  • Let user choose shell when opening container console session (#116)
  • Right click context menu for containers (#118)
  • A server overview page (#121)
  • Bulk delete containers (ground works there for more actions) on server
  • Phone home tracking for containers in a deployment
  • A page to manage instance settings
  • Upgrading guide (#124)
  • Cluster support (#6) including:
    • Auto discover other hosts from cluster members
    • Cluster member roles
    • Cluster memory usage
    • Multiple clusters suport
  • Recored actions (#127)
1 Like


Just release 0.6.0, here is the changelog


  • Store environment variable with cloud-config rev
  • Backup & Restore Containers
  • Browse, upload & delete container files
  • Show if container is in deployment with link to deployment on container view
  • Allow setting server alias when adding
  • Support for VM’s
    • Lets you set your own username with the default password ubuntu
    • Installs LXD agent automatically (while required)


  • Show memory as graph instead of as table
  • Dont show nav text on devices < 1500px
  • Hide project group if host doesn’t support projects
  • Made some general improvements to the node script


  • Settings don’t clear properly between containers

Just released version 0.7.0

It should be much faster and just better


  • Access control - This will break any existing scripts that you may have,
    it uses sessions for everything which isn’t good API design (stateful)
    so ill have to switch to using the tokens to authenticate the API
    This includes the basic functionality to login, add users & reset passwords
    it doesn’t add any kind of per user restrictions!

  • Thanks to Shem Pasamba (@shemgp) for implementing the user token
    functionality for the node server and that will be used for api requests
    in the future.

  • Logo created by my buddy Josh

  • Total storage available to fleet analytics

  • View, create & delete proxy devices on a host (#165)

  • Instance network’s bytes sent / recieved to server overview (#169)

  • Jump between instances, snapshots, images, & profiles from used by tables


  • Indicate cluster groups & standalone hosts on dashboard (#150)
  • Load profile on click instead of passing around an array containing profile data
  • Indicate cluster groups & standalone hosts on profiles
  • Indicate cluster groups & standalone hosts on storage
  • Indicate cluster groups & standalone hosts on networks
  • Indicate cluster groups & standalone hosts on projects
  • Clear modals on hidden (#164)
  • Quite a lot of the UI was updated (to what I think is better)


  • Cant create a container with no devices (#158)
  • All clusters not showing on cluster overview (#151)
  • Cant store backup locally because of missing class property (#164)
  • Cant access files on new versions of LXD

@turtle0x1 did someone reach out already about looking at packaging this as a snap?

With the upcoming launch of Ubuntu Core 20, we were planning on releasing a LXD appliance so folks can easily deploy an image based auto-updated system either in a cloud instance or on a spare piece of hardware, then use it as a LXD remote to run containers and VMs on their network.

While looking into this I brought up LXD Mosaic as something we could bundle with that appliance to provide a nice user friendly web interface. For this to be viable though, we’d need a strictly confined snap version of LXD mosaic. I can’t think of any reason why it wouldn’t be possible to do this though. So was wondering if anyone reached out to you about that yet?

Hi @stgraber that’s really exciting & Id be glad to help!

Nobody has reached out yet with regards to making a snap, ill ping you my email & take another shot while I wait I took a shot and have no idea what im doing (I tried reading the docs) an apache example would probably not go a miss :smile:

Do you have any kind of expected date ? Its just there are probably some quality of life fixes I should prioritize

1 Like

This is possibly quite a bit larger than your project, but nextcloud is also a PHP app that’s available as a snap, uses apache, php and a database, so possibly similar to an extent.

You would appear to be correct

Nice! \o/

Just released version 0.9.0 which includes the following highlights;


  • Version check showing if there is an update available
  • Create, read, update & delete image aliases
  • Update image “public” & “auto update” properties
  • Display some of the system details provided in LXD >= 4.1
  • Export instance as image
  • Create profile
  • Monitor instance metrics (load average (if hosts supports), network, memory & nvidia gpu information if nvidia.runtime is present)
  • Allow user to create custom dashboards of instance metrics
  • Documentation for instance settings
  • Backup scheduling


  • Use the LXD recursion param to drastically improve fetching instances time
  • Add show password toggle when adding servers


  • Cant add more than one profile to deploy cloud config

The instance metrics gathering doesn’t require any external programs or any programs to run on the instances themselves

Example viewing instance metrics

Example Own Dashboard (This needs some work but its a start)

1 Like

Nice work.
How load average metrics is obtained?

Enable lxcfs load averages on the LXD host (may require a restart) and then select a host from the sidebar, click the cog / settings and enable the load averages checkbox it will auto gather from there :blush:

Thank you, but I meant how you get it via LXD API. I found that you are using something like lxc exec c1 – cat /proc/loadavg.

Yeah thats the way, the only other option was deploy a pyhton script that gathered the data and wrote it to a file and the use the file api to pull the files from the file system (this is messy in practice though and much harder to code for (it also grows the instances filesystem which isn’t great))

Also you have to understand its pretty useless unless the user has LXCFS enabled on the hosts, other wise all instances will report the same load average

2 years ago today (Dec 29 2018) the first commit for LXD Mosaic was published, so happy birthday :partying_face:

This release requires changes for non-admin users to be able to login - please read here

The three main changes in this release are;

  • Host & project restrictions
  • LDAP user syncing
  • VGA consoles for virtual machines
Full change log


  • Cron job to disable backup schedules for offline hosts & deleted instances
  • Limit not-admin users to servers/projects
  • View to view & delete hosts in settings
  • Show instance limits on instance view (#288)
  • Get & set comments in the user.comment key for an instance (#283)
  • Show project consumption on project overview
  • Filter by name & instance type in sidebar on hosts with more than 5 instances
  • Show OS icon in sidebar (#296)
  • Button to start an instance on creation (#294)
  • LDAP user syncing & login (#171, #272, #300)
  • Show users who can access a project on project view
  • View storage volumes
  • Attach volumes to instances
  • View VGA console for virtual machines (#238)


  • Support backups & backup schedules in different projects
  • Disable backup schedules when deleting instance
  • Use buttons for bulk instance actions instead of drop down
  • Don’t show carat when host is offline
  • Replace nav button text with icons
  • Go back to default font
  • Split project restrictions into their own table on front end
  • Remove all usage of cdns (so the it should work offline) (#293)
  • Allow setting admin password on first run (#299)
  • Show operation download progress if available (#316)
  • Removed socket.io dependency as it was conflicting with expressws
  • Support opening console’s in other projects


  • Switching projects in snap broken
  • An issue with bulk deleting running instances
  • Resetting user password by pressing enter leads to undefined behaviour (#282)
  • Console session doubling input (#301)
  • Remove card-columns from images which prevents a jumpy UI
  • Attempts to gather offline hosts metrics breaks script

Also will run doom


Hi @turtle0x1

Keep up the good work!

I built LXD cluster on some physical machine, all using Ubuntu Server 20.04… I have LXDmosaic installed via Snap in one of my LXD instance… Feeling good to have a GUI instead of CLI for seasonal sysadmin like me…

I think this project is very potential!

Looking forward for future improvements… By the way, just an input, maybe in the future it will have change skin/theme feature…


Hey @Arief_Wicaksana

ill be sure to put extra customizations on the list - feel free to open any issues you find / ideas on github :smiley:

How can I check Mosaic version and how can I upgrade it with latest? @turtle0x1

Just released version 0.12.0 (snap channel will upgrade tonight)

If your running a manually installed instance upgrades instructions are here


  • Instance’s will now be deleted after a migration
  • Site title based on admin input under settings or default of “LXD Mosaic”


  • Tooltips to buttons in the navigation bar
  • Cron job to gather project analytics
  • Option to load vm console in its own tab
  • View in settings to download old analytics data
  • Network dashboard
  • Setting to store site title
  • Allow logging in with LDAP mail address


  • Cron job to gather old dashboard metrics


  • Cant create backups from web ui
  • Instance host name breadcumb not correct when changing project
1 Like

How can I check which version LXDmosaic is running in my conatiner?