icnsify.md (3247B)
1 +++ 2 date = '2018-02-21T12:14:44-03:00' 3 draft = false 4 title = 'Icnsify' 5 description = "Build and preview .icns icons cross platform." 6 tags = ["Go", "Gio", "Portfolio"] 7 categories = ["development"] 8 +++ 9 10 <style> 11 .carousel { 12 display: flex; 13 overflow: scroll; 14 } 15 </style> 16 17 <div class="carousel"> 18 <img src="/images/icnsify/icns-macos-preview.webp" alt="icnsify-preview macOS" /> 19 <img src="/images/icnsify/icns-windows-preview.webp" alt="icnsify-preview Windows" /> 20 </div> 21 22 ## icnsify: A Lean, Cross-Platform Icon Tool for macOS `.icns` Format 23 [GitHub →](https://github.com/JackMordaunt/icns) 24 25 ### Overview 26 `icnsify` is a fast, lightweight utility for creating and previewing `.icns` 27 files—the proprietary Apple Icon Image format—without relying on macOS. 28 29 I built the first version in a Swedish café in 2018 as my first serious 30 open-source contribution. Since then, it has grown into a widely used 31 tool among developers—especially those building cross-platform apps with 32 [Gio](https://gioui.org)—to automate icon generation as part of their CI 33 pipelines or local development. 34 35 The native Apple tool, `iconutil`, is macOS-only, hard to script, and requires a 36 rigid folder structure with pre-sized PNGs. `icnsify` simplifies this: 37 - **Cross-platform** (runs on Linux, macOS, Windows) 38 - **CLI-first** with support for piping and scripting 39 - **Intelligently resizes a single image** to required sizes 40 - **Auto-converts common formats to PNG** 41 - **Preview GUI** for inspecting `.icns` on any OS 42 43 Install with a single Go command: `go install github.com/jackmordaunt/icns/cmd/icnsify@latest` 44 45 ### My Role 46 I designed and implemented `icnsify` from scratch, using the `.icns` format 47 specification and reverse-engineering documentation like the Wikipedia entry. 48 Key design goals: 49 - **Keep it lean:** Minimal dependencies, instant startup, small binary 50 - **Make it ergonomic:** Smart defaults, clear CLI, and usable in Unix pipelines 51 - **Simplify a complex task:** Resize and convert images automatically 52 - **Support the ecosystem:** Designed for developers publishing to macOS from any OS 53 54 ### Results 55 `icnsify` is now used in multiple open-source projects targeting macOS, 56 particularly in the Go/Gio ecosystem. It has become a go-to tool for developers 57 who value simplicity, cross-platform compatibility, and automation in their 58 toolchain. 59 60 ### Used By 61 62 <div style="display: flex; flex-wrap: wrap; gap: 2rem;"> 63 <a href="https://github.com/fyne-io"> 64 <img style="max-height: 100px; border-radius: 8px;" src="/images/brands/fyne-io.webp" alt="Fyne"/> 65 </a> 66 <a href="https://github.com/wailsapp/wails"> 67 <img style="max-height: 100px;" src="/images/brands/wails.webp" alt="Wails"/> 68 </a> 69 </div> 70 71 ### Platforms 72 73 <div style="display: flex; flex-wrap: wrap; gap: 2rem;"> 74 <i class="fa-4x fa-brands fa-windows"></i> 75 <i class="fa-4x fa-brands fa-apple"></i> 76 <i class="fa-4x fa-brands fa-linux"></i> 77 </div> 78 79 ### Languages 80 81 <div style="display: flex; flex-wrap: wrap; gap: 2rem;"> 82 <img style="max-height: 100px;" src="/images/brands/go.svg"/> 83 </div> 84 85 ### Tech 86 87 <div style="display: flex; flex-wrap: wrap; gap: 2rem;"> 88 <img style="max-height: 100px;" src="/images/brands/gio.svg" class="invert-me"/> 89 </div> 90