{"id":49781437,"url":"https://github.com/pixelib/goomba","last_synced_at":"2026-05-11T21:01:11.728Z","repository":{"id":357012605,"uuid":"1232729022","full_name":"pixelib/goomba","owner":"pixelib","description":"Cross architecture compiler toolchain for cgo, without the fuss","archived":false,"fork":false,"pushed_at":"2026-05-10T22:06:17.000Z","size":76,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T00:20:55.047Z","etag":null,"topics":["arm","cgo","cicd","cli","golang","linux","macos","toolchain","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pixelib.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":"2026-05-08T07:58:56.000Z","updated_at":"2026-05-10T22:05:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pixelib/goomba","commit_stats":null,"previous_names":["pixelib/goomba"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/pixelib/goomba","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelib%2Fgoomba","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelib%2Fgoomba/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelib%2Fgoomba/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelib%2Fgoomba/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pixelib","download_url":"https://codeload.github.com/pixelib/goomba/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pixelib%2Fgoomba/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32912661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-11T17:09:15.040Z","status":"ssl_error","status_checked_at":"2026-05-11T17:08:45.420Z","response_time":120,"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":["arm","cgo","cicd","cli","golang","linux","macos","toolchain","windows"],"created_at":"2026-05-11T21:01:01.288Z","updated_at":"2026-05-11T21:01:11.678Z","avatar_url":"https://github.com/pixelib.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/banner.png\" alt=\"goomba logo\" width=\"500\"/\u003e\n\u003c/p\u003e\n\n# Goomba [![Build Goomba](https://github.com/pixelib/goomba/actions/workflows/ci.yml/badge.svg)](https://github.com/pixelib/goomba/actions/workflows/ci.yml)\n\nGolang is *great* at cross compilation, but it completely falls appart when you need to compile with cgo (`CGO_ENABLED=1`) because it then requires to have target specific toolchains and SDK's.\n\nGoomba solves this problem entirely, by automatically managing portable dependencies to compile anything for anywhere (yes, including cgo for macOS hosts regardles of architecture). It also provides a simple CLI to run builds in parallel with a nice progress output.\nIt's so easy to run, that you don't even need to have Go installed on your machine, and it works the same on Windows, macOS and Linux.\n\nSimply put, it's the perfect matrix build tool for in CI/CD pipelines and local development.\n\n| hosts ↓ / Targets → | Windows x64 | Windows ARM64 | macOS x64 | macOS Apple silicon | Linux x64 | Linux ARM64 |\n|---------------------|---|---|-----------|---------------------|---|---|\n| Windows             | Yes | Yes | Yes *     | Yes *               | Yes | Yes |\n| macOS               | Yes | Yes | Yes *     | Yes *               | Yes | Yes |\n| Linux               | Yes | Yes | Yes *     | Yes *               | Yes | Yes |\n\n \u003csup\u003e * only if Goomba itself has been compiled on macOS (interl or Apple silicon). You can download a compatible ready-made binary on the releases page.\u003c/sup\u003e\n\nQuick example:\n\u003e `goomba build --platforms linux,windows,darwin --arch x64,arm64 --go-args=\"-tags=prod\"`\n\u003e \u003cimg src=\".github/screenshot.png\" alt=\"goomba screenshot\"/\u003e\n\n## goals\n- single binary, no required system tools besides what goomba downloads\n- build matrix support for platforms and architectures\n- optional tui progress and parallel builds\n- predictable output layout under ./dist (or --out)\n\n## Install\n\n**macOS / Linux**\n```sh\ncurl -fsSL https://raw.githubusercontent.com/pixelib/goomba/refs/heads/main/install.sh | bash\n```\n\n**Windows (PowerShell)**\n```powershell\nirm https://raw.githubusercontent.com/pixelib/goomba/refs/heads/main/install.ps1 | iex\n```\n\n## usage\n\n```\ngoomba build [flags] [-- \u003cgo build args\u003e]\n```\n\nHelp is available with:\n\n```\ngoomba --help\ngoomba help\ngoomba build --help\n```\n\n### examples\n\n```\ngoomba build --platforms linux,macos,windows\n```\n\n```\ngoomba build --platforms macos --arch x64,arm64\n```\n\n```\ngoomba build -- --buildmode=c-shared -o dist/libshared.so\n```\n\n```\ngoomba build --out ../dist\n```\n\n### flags\n\n- --platforms: comma separated list of linux, macos, windows\n- --arch: comma separated list of amd64, arm64, x64\n- --no-parallel: run builds one by one\n- --no-tui: disable tui progress output (intended for CI environments)\n- --no-validation: skip validation step\n- --strict: fail if any target fails and remove output directory\n- --verbose: enable verbose logging\n- --java-home: override JAVA_HOME for JNI includes\n- --out: output base directory (default: dist, supports ../ paths)\n- --go-args: append go build args, repeatable\n- --cgo-enabled: enable CGO support and handle special platform dependencies, also implies --go-args=CGO_ENABLED=1\n\nBy default, failed targets are logged and skipped while the rest continue.\nWhen the tui is enabled, go command output is shown as a temporary, last-10-line log under each progress bar.\nWith --verbose, goomba keeps a longer log window and prints command and env details per step.\n\n## output layout\n\nArtifacts are placed in:\n\n```\n./dist/\u003cplatform\u003e/\u003carch\u003e/\u003cbinary\u003e\n```\n\nUse --out to change the base directory. Relative paths are resolved from the current working directory and can include .. segments.\n\n## phases\n\n1. preparing golang runtime (if not installed)\n2. validation\n3. preparing compilers and sdk's\n4. build\n\n## dependency handling\n- respects host env vars for GOROOT, GOPATH, CGO_ENABLED, CGO_CFLAGS, GO111MODULE, GOWORK, GOPROXY\n- if go is missing, goomba downloads it into ~/.goomba/cache or /tmp\n- if a c compiler is missing and cgo is enabled, goomba downloads zig and uses it as a c compiler for all platforms, including macos on arm64 hosts where no compatible c compiler is available otherwise\n\n## technical notes\n\ngoomba respects these go env variables when set on the host:\n\n- GOROOT\n- GOPATH\n- CGO_ENABLED\n- CGO_CFLAGS\n- GO111MODULE\n- GOWORK\n- GOPROXY\n\ngoomba also injects these placeholders for per-target values:\n\n- ${GOOMBA_OS} (go os, for example darwin)\n- ${GOOMBA_ARCH} (go arch, for example arm64)\n- ${GOOMBA_PLATFORM} (display platform, for example macos)\n\nIf JNI headers are needed, set JAVA_HOME or use --java-home to point at a JDK.\n\n## why not goreleaser\n\ngoreleaser is focused on release automation, packaging, and publishing. goomba focuses on a fast build matrix with zero local toolchain requirements and no release config. If you only need cross platform builds from any go project root, goomba aims to be lighter weight.\n\n## Caching\ngoomba caches downloaded dependencies in `~/.goomba/cache` on unix and `%TEMP%\\goomba\\cache` on windows. This includes the golang runtime and zig compiler, so that they don't need to be downloaded again for subsequent builds.\n\n## Acknowledgements\n- [zig](https://ziglang.org/) for providing a portable c compiler that works on all platforms and architectures, making cgo builds possible even on macOS arm64 hosts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixelib%2Fgoomba","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpixelib%2Fgoomba","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpixelib%2Fgoomba/lists"}