tpnCP - cPanelish Virtualmin UI

Hey Folks,

I’m currently developing a “friendly” user interface (UI) to Virtualmin.

This is a “domain-level” interface which organizes things in a similar manner that cPanel and other CP’s do.

The primary goal is to design a user interface which is easy to use, and is completely brandable, therefore integrating into a website seamlessly. A feel which you can call your own, while remaining powered by Virtualmin.

The secondary goal is to introduce a few added features for customer management. These include, customer profile management, billing, and support ticketing amongst other ideas.

I’ve put together a basic demo which is actively being worked on over the coming weeks based on my own website theme, however the system can pretty much take on any look and feel as needed. I mean this literally! This is NOT simply a wrapper based solution.

Finally, and most importantly. The whole interface relies on Virtualmin’s API. This means that core functionality is run through Virtualmin’s existing API keeping it secure. I intend to work with Jamie/Joe to ensure that all available functionality is available in the API along the way, in order to cover the most broad set of features possible. However, at the moment I’m keeping the design lean, simple, and to the point as most users today really don’t need all the extra fluff anyways. (despite popular belief)

Feel free to visit my demo page at the URL below, and be WARNED! It looks and feels NOTHING like Virtualmin, which just goes to show just how powerful Virtualmin really is.

*** Don’t worry, the system is in read-only mode, so you can’t break anything. Unless I let you ***
*** The UI is currently in the early stages of development, and will be updated as more features become available, as well the UI itself will be updated to take on the final look and feel of my actual theme as I progress. ***

If you like what you see, or have any suggestions please post them here. Thanks.


Hey Folks,

Here’s what’s new:

  • UPDATED scripting level caching which now caches for longer periods, and now supports flushing cached data which will be used when an "add", "edit" or "delete" command is issued. (not available in the demo for obvious reasons)

  • ADDED the first draft of our "bandwidth" page showing a fancy "line graph" based on the past 7-days worth of bandwidth for "FTP", "MAIL" and "WEB" respectively. (there will be more information added to this page later.)

  • UPDATED the API calls to run from "api.php" rather than individual files. This simplifies addition and maintenance of new commands when needed.

  • UPDATED the first draft of our "bandwidth" page which now shows a table of bandwidth broken down by "FTP", "MAIL" and "WEB" traffic. I am currently reworking the flash graph as it wasn't showing data correctly.

More updates on their way!


Hey Folks,

I did some updates today including:

  • UPDATED header/footer to include logo, and global navigation links

  • ADDED a script level caching feature which saves having to call the API as often

  • UPDATED the way certain API calls are completed saving CPU and memory usage

That’s it for now. As always if you have any comments or suggestions please let me know.

Working toward version 1.0!


Hi Peter,

It’s a really nice-looking site. I’m looking for something like this also for my clients.

Could you give me a hint on how easy customizable this is? Is it all in CSS/HTML/JavaScript, or are there customizations to be done in other languages?

Keep up the great work!



The UI is 100% customizable, and fairly easy if you know a little PHP.

The code is split into two layers

  1. Page Layer, which constructs the basic layout of the pages. This includes the "index.php" file, a few functions for "authentication/session management" (not implemented in the demo yet), and a series of templates which are basically HTML, CSS, Javascript, and a small bit of PHP (for, if, else).

  2. Content, which constructs the individual sections of the page ("list of domains", "stats", etc). This includes the bulk of the heavy lifting including making calls to the appropriate API commands, parsing the results, managing cached data, and displaying the section content. There is a file called "api.php" which works in a similar manner to "index.php" but handles section content construction, and a series of templates which include HTML, CSS, and a small bit of PHP (for, if, else).

At the very least, you could customize the "page layer", essentially building a wrapper template. However, if you want greater customization, you can also customize the "content layer" making every installation unique.

It’s also possible to add and remove pages as needed.

*** If you have problems customizing things, you can also hire me to do so. Just send me an HTML template, showing me how you’d like things to look, and I’ll make it work. ***

The bulk of the heavy lifting is done in my virtualmin library file, which takes care of talking to the Virtualmin Remote API, decoding the content into a simple user friendly, and consistent array, and dealing with script level caching to speed up performance.

*** The demo server has only about 512MB of RAM, so the challenge has been to develop this fancy UI around minimal system resources, and therefore performance is key to it’s success and usefulness. ***


Hee Peter,

Are you still working on this project?
It looks quite promising!

I’m a PHP developer with my own webhosting server for hosting my websites.
If you are still on this project, i could help develop if you want?

Piet (Netherlands)


Yes, it’s still being developed.

The current branch is being worked into my in-house support system with the intent to put what I’ve worked into a production environment.

If all goes well, this will be the basis of a public pilot release.

At the moment development is being kept in-house, though I may consider your offer at a later time when things are a bit more refined.


Peter is it in your plans to release this with the ability for someone to add translation files for languages other than English?


While it hadn’t initially crossed my mind, I don’t see why not.

I appreciate the suggestion, I’ll add it to my todo list.

Please let me know if you have any further suggestions.


I can’t access the site at nor ping it. I can ping however. I’m currently in Austria.

is this project still alive?

Hey Folks,

A lot of time has passed since I last commented on the project status.

First off, the project IS still being developed, though it has slowed as I work on our in-house CP ported from the same code.

By shifting the focus to a real-world implementation of the features, I am slowly but surely getting the core components complete, and it’s allowing me to set an updated direction for the overall project.

Unfortunately, some months ago while doing some shifting around in the environment, I accidentally deleted the demo.

I will restore this demo within a few weeks, which will also include a few new updates I’ve been working on. In the meantime, if you have questions, comments or suggestions please feel free to post them here.


Hi Peter,

I’m currently looking for an open source solution like WHMCS which is compatible to virtualmin.
I couldn’t find anything so far but your project sounds interesting, unfortunately is your demo-site down.

If you project is still alive I’d like to see a demo. I’m also willing to contribute some work (code, etc.)!

I would like to know more about your project as I’m in the “same boat”… almost.

I’m using WHMCS with Virtualmin integration, so customer info and billing is taken care of. My WHMCS is themed to appear to be a part of the main site, so the user experience is pretty nice on that part.

Now I need virtualmin to have the same look and feel, and make it simplified - your project sounds much like what I’m looking for.

Hey Folks,

At this point, my priorities are focused on making a living through web development. Since this project is yet to show signs of any real financial potential, I’m sure you can understand why development has been extremely slow.

Here’s a thought I’d like all those interested to consider.

If you guys are willing to pay either in part or in full for the development time, it’d definitely shorten the timeline, as I could actually prioritize the work as one of my monthly projects. The more that can be afforded, the faster the timeline would be.

Realistically, I would expect no less than $30/hr (Canadian) for my time, and estimate that the initial release could be completed in about 120 hrs. (8 wks @ 15 hrs/wk).

Please feel free to let me know your thoughts on this topic, as I realize it’s a bit of a sensitive one at best.

I don’t believe the above proposal is unrealistic, however it is highly dependent upon those interested in using the application.

Regardless of the above, the project is still on-going, and will eventually debut in one form or another. However as noted, priority goes to any project I get paid for, as I otherwise cannot afford to pay my bills as I sure you guys can understand.


Sounds like an interesting project; I’ve thought about doing a similar thing myself, but on a much smaller scale. Hopefully you can get a live demo server back up again soon.

I can second that. Although some users appreciate the flexibility of the existing Virtualmin/Webmin panel, some are simply overwhelmed by it.

I was considering creating a simple panel here by using the remote HTTP API.

The big issue with that is all requests have to come from the master admin account, so a regular user account can not be used to authenticate and make changes to their own server settings through the API.

This means a wrapper enforcing a users capabilities (through the master admin account) has to be written to do this. Or alternatively the panel will have to post directly into the existing Virtualmin/Webmin pages. But this worries me due to the chances of breakage when Virtualmin/Webmin or the themes are upgraded.

If I were to attempt such a project of my own, it would be to complement other parts of a hosting business (e.g. support requests, billing, etc). Imagine a custom control panel, something like what DreamHost (shudder) have built, which would incorperate every aspect of a user’s hosting account, whether it be shared hosting (Virtualmin) VPS hosting (Cloudmin), or any other form of server for which I could write Virtualmin modules.

As such, given how the panel would be a central administration area, I would keep user/customer data completely separate from Virtualmin, and, as you said, a wrapper would have to be built which would take into account who was logged into the custom panel at the time before executing an API command. I don’t reckon this would be hard to implament, though; certainly using URIs to Virtualmin interface pages would be out-of-the-question for me. I could never use such a risky method of retrieving, storing and manipulating data.

Any news on this project? Any chance your going to sell your extensions or anything, this is very interesting. :slight_smile:

Very interesting. Subscribing…