Translate platform identifier strings across package ecosystems.
An ARM64 Mac is darwin/arm64 to Go, darwin-arm64 to Node, aarch64-apple-darwin to Rust, arm64-darwin to RubyGems, and macosx_11_0_arm64 to Python. This module provides a shared mapping between all of them.
import "github.com/git-pkgs/platforms"
// Parse an ecosystem-specific string into a canonical Platform
p, _ := platforms.Parse(platforms.Go, "darwin/arm64")
// p.Arch == "aarch64", p.OS == "darwin"
// Format a Platform for a different ecosystem
s, _ := platforms.Format(platforms.Rust, p)
// s == "aarch64-apple-darwin"
// Or translate directly
s, _ = platforms.Translate(platforms.Go, platforms.RubyGems, "darwin/arm64")
// s == "arm64-darwin"
// Normalize to the preferred form
s, _ = platforms.Normalize(platforms.Python, "linux_x86_64")
// s == "manylinux_2_17_x86_64"| Ecosystem | Example | Format |
|---|---|---|
go |
linux/amd64 |
os/arch |
node |
darwin-arm64 |
os-arch |
rust |
x86_64-unknown-linux-gnu |
arch-vendor-os-abi |
rubygems |
arm64-darwin |
arch-os |
python |
manylinux_2_17_x86_64 |
tag_version_arch |
debian |
x86_64-linux-gnu |
arch-os-abi |
llvm |
aarch64-apple-darwin |
arch-vendor-os |
nuget |
linux-x64 |
os-arch |
vcpkg |
x64-linux |
arch-os |
conan |
Linux/armv8 |
os/arch (settings) |
homebrew |
arm64_sonoma |
arch_codename |
swift |
aarch64-apple-darwin |
LLVM triples |
kotlin |
linuxX64 |
osArch (camelCase) |
maven |
linux-aarch_64 |
os-arch |
The mapping data lives in JSON files under data/. arches.json and oses.json map canonical names to per-ecosystem aliases. platforms.json has pre-computed full strings for common platforms that can't be composed mechanically (like RubyGems using arm64 on macOS but aarch64 on Linux).
Parsing tries the pre-computed index first, then falls back to decomposing the string using ecosystem-specific rules and resolving components through the alias tables.
See SPEC.md for the full specification.
archspec (Go port) models CPU microarchitectures as a compatibility DAG -- it knows that zen3 descends from zen2 and which instruction sets each supports. This module works one level up, mapping the coarse arch/OS/ABI strings that package managers use. The two are complementary: archspec's Family() returns architecture family names (x86_64, aarch64) that match the canonical arch names used here.
MIT