{"id":47671953,"url":"https://github.com/portyl-studios/mcfunctionplusplus","last_synced_at":"2026-04-08T06:01:39.721Z","repository":{"id":345346513,"uuid":"905555170","full_name":"Portyl-Studios/MCFunctionPlusPlus","owner":"Portyl-Studios","description":"MCFunction++ streamlines professional datapack workflows with a unified IDE for authoring, validation, and release-ready packaging.","archived":false,"fork":false,"pushed_at":"2026-03-25T05:27:21.000Z","size":2263,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T09:06:47.977Z","etag":null,"topics":["datapack","ide","mcfunction","work-in-progress"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Portyl-Studios.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-19T04:21:34.000Z","updated_at":"2026-03-25T03:46:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Portyl-Studios/MCFunctionPlusPlus","commit_stats":null,"previous_names":["portyl-studios/mcfunctionplusplus"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Portyl-Studios/MCFunctionPlusPlus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portyl-Studios%2FMCFunctionPlusPlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portyl-Studios%2FMCFunctionPlusPlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portyl-Studios%2FMCFunctionPlusPlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portyl-Studios%2FMCFunctionPlusPlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Portyl-Studios","download_url":"https://codeload.github.com/Portyl-Studios/MCFunctionPlusPlus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portyl-Studios%2FMCFunctionPlusPlus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31306692,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["datapack","ide","mcfunction","work-in-progress"],"created_at":"2026-04-02T13:00:14.269Z","updated_at":"2026-04-02T13:00:15.165Z","avatar_url":"https://github.com/Portyl-Studios.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MCFunctionPlusPlus\n\nMCFunction++ streamlines professional datapack workflows with a unified IDE for authoring, validation, and release-ready packaging.\n\n## App Showcase And Usage\n\n### Who is MCFunction++ For?\nMCFunction++ is built for developers who want a faster, more reliable Minecraft datapack workflow.\n\n- New datapack creators who need an approachable IDE with useful feedback while learning commands and structure.\n- Experienced datapack developers who want stronger editing, validation, and packaging workflows for larger projects.\n- Teams and collaborators who need a consistent toolchain for building and shipping datapacks across environments.\n- Creators who want flexibility: a desktop app for full local workflows and a web app for lightweight access.\n\n### What MCFunction++ Offers\n\n- A unified environment for authoring, validating, and packaging datapacks.\n- Desktop and web experiences built on a shared core workflow.\n- Release-ready Windows installer distribution with auto-update support.\n\n### How to Use It\n\n1. Install the Windows desktop app from the latest GitHub release, or run it from source.\n2. Open or create a datapack workspace.\n3. Author datapack files, use validation feedback, and package for release.\n4. Receive update checks once per app launch when using packaged desktop builds.\n\n### Installing from GitHub Releases\n\n1. Open the latest release in `Portyl-Studios/MCFunctionPlusPlus`.\n2. Download the Windows installer file matching `mcfunctionplusplus-setup-\u003cversion\u003e.exe`.\n3. Run the installer and choose your installation directory.\n4. Launch MCFunction++ after installation.\n\nFor normal installation, you only need the `mcfunctionplusplus-setup-\u003cversion\u003e.exe` file.\n\n### Desktop Auto-Update (NSIS)\n\nDesktop auto-updates use `electron-builder` + `electron-updater` with GitHub Releases.\n\n- Provider repo: `Portyl-Studios/MCFunctionPlusPlus`\n- Windows update channel: NSIS artifacts + `latest.yml`\n- Update check behavior: exactly once per app launch (no background polling until restart)\n\nThis behavior is implemented in the Electron main process and only runs in packaged builds.\n\n### Windows Installer Format\n\nWindows packaging is configured for NSIS installer only (no portable target).\nInstaller behavior allows users to choose install directory.\n\n---\n\n## Development Setup\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org/) (v20 or higher)\n- [npm](https://www.npmjs.com/) (v10 or higher, comes with Node.js)\n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/Portyl-Studios/MCFunctionPlusPlus.git\n   cd MCFunctionPlusPlus\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n\n### Development Workflow\n\nStart the development server with hot module replacement:\n```bash\nnpm run dev\n```\n\nThis will launch Vite's dev server with hot reload enabled. Edit files in `src/renderer/` and see changes instantly.\n\n### Running Locally\n\nLaunch the Electron application:\n```bash\nnpm start\n```\n\nOr build and run in one command:\n```bash\nnpm run electron\n```\n\n### Building\n\nCompile TypeScript and build the React application:\n```bash\nnpm run build\n```\n\nThis will:\n1. Compile TypeScript files from `src/main/` to `out/main/`\n2. Bundle the React application from `src/renderer/` to `out/renderer/`\n\n### Building Distributables\n\nCreate a distributable executable for Windows:\n```bash\nnpm run dist:win\n```\n\nThis will create an NSIS installer in the `release/` folder.\n\n**Other platforms:**\n- macOS: `npm run dist:mac` (DMG and ZIP)\n- Linux: `npm run dist:linux` (AppImage and DEB)\n- All platforms: `npm run dist`\n\n### App Icon And Installer Art Assets\n\nRequired app icon files:\n\n- Windows: `assets/icon.ico` (256x256 or multi-size ICO)\n- macOS: `assets/icon.icns` (512x512@2x recommended)\n- Linux: `assets/icon.png` (512x512 recommended)\n\nRequired NSIS installer art files:\n\n- Installer header: `assets/installer-header.bmp` (150x57)\n- Installer sidebar: `assets/installer-sidebar.bmp` (164x314)\n\nYou can generate icon formats from a single PNG using:\n\n- https://www.icoconverter.com/\n- https://cloudconvert.com/png-to-icns\n- https://www.img2go.com/convert-to-icon\n\n### Desktop CI/CD (Auto Version + Release)\n\nThe `.github/workflows/desktop-release-pipeline.yml` workflow automates version bumping and release publishing on pushes to `main`:\n\n- **Trigger**: Pushes to `main` by a non-bot actor\n- **Version**: Reads `major.minor` from `package.json`; auto-computes patch from existing tags (`vMAJOR.MINOR.*`), ignoring user-provided patch\n- **Bump**: Commits version bump to `package.json` if version changes, with `[skip ci]` to prevent re-triggering\n- **Tag \u0026 Release**: Creates tag `vX.Y.Z` and GitHub Release\n- **Assets**: Builds and publishes NSIS artifacts (`.exe`, `.exe.blockmap`, `latest.yml`) if any are missing\n- **Safeguard**: Skips publish if all required assets exist for the target tag\n\n### Tip: Push Without Triggering Release Workflows\n\nAdd `[skip ci]` to your commit message to prevent the workflow from running:\n```bash\ngit commit -m \"docs: update README [skip ci]\"\ngit push\n```\n\n### How to Choose Your Major/Minor\n\nBefore pushing to `main`, set `package.json` version to the major/minor line you want, using patch `0` (example: `2.4.0`). The pipeline creates `v2.4.0` for the first release in that series, then `v2.4.1`, `v2.4.2`, etc. on subsequent pushes.\n\n### Web Deployment (Firebase Hosting)\n\nWeb deployment is on the roadmap. It will only be implemented once the main application is fully featured.\n\n### Minecraft Source Files\n\nThis project uses files extracted from the Minecraft `server.jar` file.\n\n1. Download the latest version of the `server.jar` file from [here](https://www.minecraft.net/en-us/download/server)\n2. Run `java -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports`\n3. The folder used is `/generated/reports/` stored in `/resources/minecraft/\u003cmc_version\u003e`\n\n### License\n\nGPLv3 (General Public License)\nAny derived works must also be open-source and licensed under GPLv3.\n\nSupport the project by contributing!\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fportyl-studios%2Fmcfunctionplusplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fportyl-studios%2Fmcfunctionplusplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fportyl-studios%2Fmcfunctionplusplus/lists"}