The official application marketplace for the HentOS Simulator. Browse, discover, and install applications directly into your simulated environment.
cd store-emulator
npm install
npm start- Storefront:
http://localhost:3000/store/index.html - Developer Portal:
http://localhost:3000/store/upload.html
- 📱 App Discovery: Browse a curated collection of both Standard (GUI) and Terminal applications.
- ⚡ One-Click Install: Seamless integration with HentOS via the custom
henthub://protocol. - 🛠️ Developer Portal: Tools to upload, update, and manage your own applications.
- Dependency Management: Automatically resolves and installs shared libraries and required apps.
- 🔄 Dual Mode: Designed to run on GitHub Pages (Production) or a local Node.js emulator (Development) for easy testing.
- Node.js (Required for local emulation)
- HentOS Simulator (Required to install apps)
To test the store locally without deploying to GitHub:
- Navigate to the emulator directory:
cd store-emulator - Install dependencies:
npm install
- Start the emulator:
npm start
- The server acts as a mock GitHub API, handling uploads and file serving.
The easiest way to publish or update an app is using the built-in Developer Portal.
- Open the Developer Portal:
- Local:
http://localhost:3000/store/upload.html - Production: Open
store/upload.htmlin your browser.
- Local:
- Fill in App Details:
- App ID: A unique, internal identifier (e.g.,
NOTEPAD). - Version: Semantic versioning (e.g.,
1.0.0). - Entry Point: The main executable file (e.g.,
Program.cs).
- App ID: A unique, internal identifier (e.g.,
- Drag & Drop Source: Drop your application's source folder into the "Source Files" zone.
- Note: The portal will automatically package your files into a
.hubarchive.
- Note: The portal will automatically package your files into a
- Add Assets: Drop an icon (
.png) and screenshots. - Authenticate: Enter your GitHub Token (if uploading to Production).
- Upload: Click Prepare & Upload Package.
- The tool will automatically:
- 📦 Create the
.hubpackage. - ☁️ Upload the package and assets to the repository.
- 📝 Update
store/manifests/store-manifest.json.
- 📦 Create the
- The tool will automatically:
If you prefer to do it manually:
- Build & Package: Zip your application files (ensure
manifest.jsonis at the root) and rename the.zipto.hub. - Place Files:
- Put the
.hubfile instore/packages/. - Put the
icon.pnginstore/assets/icons/.
- Put the
- Update Manifest:
- Edit
store/manifests/store-manifest.json. - Add a new entry to the
appsarray with your app's details.
- Edit
- Submit PR: Create a Pull Request with your changes.
Every app in the store is defined by a JSON object in store-manifest.json.
{
"appId": "MYAPP", // Unique Identifier (UPPERCASE)
"name": "My Application", // Display Name
"version": "1.0.0", // Semantic Version
"author": "Developer Name", // Creator
"description": "...", // Short description
"terminalOnly": false, // true if it runs in Terminal
"singleInstance": true, // true if only one instance allowed
"minOSVersion": "1.0.0", // Minimum HentOS version required
"entryPoint": "Program.cs", // Main script file
"entryClass": "MyApp.Program", // Namespace.ClassName
"entryMethod": "Main", // Method to call
"size": 1024, // Size in bytes
"icon": "icon.png", // Icon filename inside package
"dependencies": ["TERMINAL"], // List of AppIDs required
"references": ["FontStashSharp"], // List of DLL references
"downloadUrl": "...", // Full URL to .hub file
"iconUrl": "..." // Full URL to icon image
}HentOS supports a robust dependency system. Apps can declare dependencies on other apps (like TERMINAL or SAPPC).
- Recursive Resolution: When a user installs an app, the store automatically calculates the full dependency tree.
- Auto-Installation: All missing dependencies are added to the download queue and installed in the correct order.
- Shared Libraries: Common libraries should be packaged as separate "Library Apps" to save space and ensure version consistency.
The store can be configured to point to the live GitHub repository or your local emulator.
Edit store/assets/js/config.js to switch modes:
const CONFIG = {
mode: 'LOCALHOST', // Options: 'GITHUB' or 'LOCALHOST'
localUrl: 'http://localhost:3000',
repoOwner: 'GetTheNya',
repoName: 'HentHub-Store'
};If you are running the store via file:// protocol (doubly clicking index.html), browsers will block API requests to localhost:3000.
- Fix: Always access the store via
http://localhost:3000/store/index.htmlprovided by the emulator.
- Ensure naming convention matches:
assets/icons/{appId}.png(lowercase). - Check if
iconUrlin manifest is an absolute URL or relative path based on your config.
- The Developer Portal enforces version changes when files are modified. If you are just updating metadata (description, author), you can keep the same version.
This project is licensed under the MIT License. See the LICENSE file for details.
Third-party software used in this project is listed in THIRD_PARTY_NOTICES.md.
Part of the HentOS Ecosystem.