[Beta RELEASE] Building HPM Manifests with hpmArchitect

hpmArchitect is a web based tool for Developers to generate JSON manifests that HPM uses.

hpmArchitect displays a Workbench of all your HPM Packages, allowing each to be edited and JSON produced.

Each tile/card opens a Slide In to allow editing.

You can see the resulting JSON for a Package or, at the Workbench level, all of your Manifests.

It's important to understand that hpmArchitect does not, and will never, alter your live Manifests, out on Github or wherever you've placed them. The JSON produced still need you to deploy them in your repositories, manually.

HPM Search has always used internet based search tools to find results within HPM's Manifest Tree. Today, the tree has 193 Developers and 820 Packages. To find a search result, all 1013 URLs must be followed and read, text extracted and comparisons made. Fast Search, introduced 2 years ago, 'crawls' the HPM Manifest Tree every 20 mins, putting the result into a database. A few weeks ago, HPM was upgraded to use the database during Match Up to significantly reduce the time and effort on your Hub by eliminating the 'crawl' your hub has been doing. hpmArchitect also uses that same database, to display branches from the Tree.

Skimpy documentation can be found at:

hpmArchitect saves your changes locally, that get lost when you end a session (leave the website / close a browser window) but allows you to save all your work for 2 hours by clicking the Workbench Synced button in the upper right corner.

When you visit hpmArchitect for the first time, you're asked to pick Existing or New Developer. New means you have not made a PR to HPM's Master Manifest and your name isn't in that list.

Existing Developers, obviously, means you are using your Name, found in the Master Manifest, or said another way, you are already in the Tree. There's no login, there's no restriction on looking at anyone's set of Packages, because it's all public information within those 1013 (and growing) URLs. Because no data is written (except to the 2 hour save buffer) editing someone else's Packages is just educational, and harmless.

Introduction

Click the image, or visit:
https://hubitatpackagemanager.hubitatcommunity.com/hpmMGen/

In case Beta in the title isn't enough, please check the resulting JSON for accuracy before deploying.

I seriously imagine that this will save the community less than 5% of the time it took me to create it. :smiley: For you though, it could save several minutes out of your life. :smiley:

16 Likes

@csteele thank you for creating this. This should elminate the biggest hurdle in getting developers to publish their code in HPM.

Nice job!

5 Likes

In case you can't remember what your name is in the Master Manifest, it can be found here:

https://raw.githubusercontent.com/HubitatCommunity/hubitat-packagerepositories/refs/heads/master/repositories.json

1 Like

While browsing the Community, as I do everyday, I saw a new package being released from a Developer that isn't already in HPM's MasterManifest. WooHoo, I thought, a 'real world' opportunity to try out my new, favorite Tool. :smiley:

@moshsom created Chatomation. I have no real idea what it is or anything about it. I only saw "Not yet a HPM Package" :slight_smile:

I pulled a few lines of data from his github repo:

masterManifest Name: moshsom
masterManifest Location: https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/repo.json

package name: Chatomation
packageManifest Location: https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation.json
parent: https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation.groovy
child: https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation-automation.groovy

From that alone, I dove into hpmArchitect and the New Developer path.

Initially New means filling out the "who you are" part. The Master Registry Name and Location are what goes into a PR to get added to the Master Manifest. Clicking Save reveals a very empty Workbench. Just the card at the top and an Add Package in the main grid.

Clicking Add New Package presents an empty Edit Package slide in, and it needed three pieces of data (minimum), one of which I duplicated.

Next, I clicked the Apps Button and then +New to create first one, then two components of the Package:

Edit Package than looks like:

Screenshot 2026-03-07 at 4.54.10 PM

I didn't add tags because I don't know the package, can't even reliably spell it. :slight_smile:
Now the Workbench has a Package:

I saved it and for the next couple hours I can close the browser tab (exit the session) and return. Of special NOTE: new developers, by definition, aren't in the Master Manifest, so once the timeout occurs, you are back to being a New Developer. The entire process is to create the Raw Json, which you'd paste into your PC and then get busy deploying the need files to Github or...

The resulting JSON output is:

HPM 'Parcel' of JSONs
// =========================================================
//  HPM ARCHITECT DEPLOYMENT PARCEL
// Generated for: moshsom
// Date: 3/7/2026, 4:45:56 PM
// =========================================================

/* PRE-FLIGHT VERIFICATION CHECKLIST
    1. Ensure all 'location' URLs point to the RAW GitHub content.
    2. Verify 'version' strings match your Groovy code headers.
    3. Confirm 'payPalUrl' is a valid URL (Venmo/PayPal/BuyMeACoffee).
    4. Note: If you are an Existing Developer, you only need to 
       update repository.json and your individual package files. */

// ---------------------------------------------------------
//  STEP 1: HPM MASTER MANIFESTS (repositories.json)
// Only required if you are submitting to HPM for the first time.
// ---------------------------------------------------------
{
    "name": "moshsom",
    "location": "https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/repo.json"
}

// ---------------------------------------------------------
//  STEP 2: INTERMEDIATE MANIFESTS (e.g. repository.json)
// Upload this to the root of your primary GitHub repository.
// ---------------------------------------------------------
{
    "author": "moshsom",
    "gitHubUrl": "https://github.com/moshsom/chatomation",
    "payPalUrl": "",
    "packages": [
        {
            "name": "chatomation",
            "category": "Utility",
            "location": "https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation.json",
            "description": ""
        }
    ]
}

// =========================================================
//  STEP 3: PACKAGE MANIFESTS
// Create a separate .json file for each package listed below.
//  Often used are: packageManifest.json or "device name".json
// Upload these to the GitHub repository adjacent to its .groovy
// =========================================================

/* FILE: chatomation.json */
{
    "packageName": "chatomation",
    "author": "moshsom",
    "version": "1.0.0",
    "category": "Utility",
    "apps": [
        {
            "name": "chatomation",
            "location": "https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation.groovy",
            "required": true,
            "oauth": true,
            "primary": true
        },
        {
            "name": "chatomation-automation",
            "location": "https://raw.githubusercontent.com/moshsom/chatomation/refs/heads/main/chatomation-automation.groovy",
            "required": true
        }
    ]
}

I assumed for this test, when I 'grazed' on @moshsom Github repo, that he'd pick the same directory locations I'd pick. Obviously, Murphy's Law would prevail and he will want a completely different location, or none at all. But the exercise on my part was to validate 1) it works; and 2) the output is fully usable.

I hope this walk through helps the next person...

2 Likes

That’s amazing thank you! I was going to look into this next. :raised_hands:

2 Likes