https://github.com/hallazzang/syso
:wrench: tool for embedding various type of resources in go Windows executable
https://github.com/hallazzang/syso
coff embed go golang ico icon manifest resource rsrc syso versioninfo windows
Last synced: about 1 month ago
JSON representation
:wrench: tool for embedding various type of resources in go Windows executable
- Host: GitHub
- URL: https://github.com/hallazzang/syso
- Owner: hallazzang
- License: mit
- Created: 2019-05-29T14:14:45.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-08-16T13:50:44.000Z (about 6 years ago)
- Last Synced: 2025-08-14T01:24:06.736Z (about 2 months ago)
- Topics: coff, embed, go, golang, ico, icon, manifest, resource, rsrc, syso, versioninfo, windows
- Language: Go
- Homepage:
- Size: 101 KB
- Stars: 42
- Watchers: 4
- Forks: 8
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# syso
[](https://travis-ci.org/hallazzang/syso)
[](https://codecov.io/gh/hallazzang/syso)
[![godoc]](https://godoc.org/github.com/hallazzang/syso)
[![goreportcard]](https://goreportcard.com/report/github.com/hallazzang/syso)**syso** - tool for embedding various type of resources in go Windows executable
Table of contents:
- [Features](#Features)
- [Installation](#Installation)
- [Usage](#Usage)
- [License](#License)## Features
| Feature | [rsrc] | [goversioninfo] | syso(this project) |
| :---------------------------------- | :----: | :-------------: | :----------------: |
| Embedding icons | ✔ | ✔ | ✔ |
| Embedding manifest | ✔ | ✔ | ✔ |
| Configuration through a file | | ✔ | ✔ |
| Embedding version info | | ✔ | ✔ |
| Embedding multilingual version info | | | ✔ |
| Fixed resource identifier | | | ✔ |### Why _fixed_ resource identifier matters?
Because you can easily load your resource in runtime.
Other tools do not guarantee your resource to have same id across builds.## Installation
```
$ go get -u github.com/hallazzang/syso/...
```## Usage
Write a configuration file in JSON, which tells syso what resources you want to embed.
Here's an example:```json
{
"Icons": [
{
"ID": 1,
"Path": "icon.ico"
}
],
"Manifest": {
"ID": 2,
"Path": "App.exe.manifest"
}
}
```You can specify `name` instead of `id`:
```json
...
{
"Name": "MyIcon",
"Path": "icon.ico"
}
...
```Save it as `syso.json` in project's directory and run the tool:
```
$ syso
```This will generate `out.syso` in your current directory.
You can now `go build` to actually include the resources in your executable.## Configuration
Configuration file is written in JSON format.
Top-level configuration is an object that has three optional fields:
`Icon`, `Manifest`, `VersionInfos`.Here are details about configuration object types.
### Icon
| Field | Type | Description |
| ----- | -------- | -------------- |
| ID | `Number` | |
| Name | `String` | |
| Path | `String` | Icon file path |### Manifest
| Field | Type | Description |
| ----- | -------- | ------------------ |
| ID | `Number` | |
| Name | `String` | |
| Path | `String` | Manifest file path |### VersionInfo
| Field | Type | Description |
| ------------ | -------------------------- | ----------------------------------------------------- |
| ID | `Number` | |
| Name | `String` | |
| Fixed | `VersionInfoFixed` | Language-independent information |
| StringTables | `[]VersionInfoStringTable` | Language-specific string information |
| Translations | `[]VersionInfoTranslation` | Language and charset pairs which application supports |##### VersionInfoFixed
| Field | Type | Description |
| -------------- | -------- | ----------------------------------- |
| FileVersion | `String` | Format: `"Major.Minor.Patch.Build"` |
| ProductVersion | `String` | Format: `"Major.Minor.Patch.Build"` |#### VersionInfoStringTable
| Field | Type | Description |
| -------- | -------------------- | ------------------------------------------- |
| Language | `String` | (Required) String table's language, in hex |
| Charset | `String` | (Required) String table's charset, in hex |
| Strings | `VersionInfoStrings` | (Required) Actual string table |#### VersionInfoStrings
| Field | Type | Description |
| ---------------- | -------- | ----------- |
| Comments | `String` | |
| CompanyName | `String` | |
| FileDescription | `String` | |
| FileVersion | `String` | |
| InternalName | `String` | |
| LegalCopyright | `String` | |
| LegalTradeMarks | `String` | |
| OriginalFilename | `String` | |
| PrivateBuild | `String` | |
| ProductName | `String` | |
| ProductVersion | `String` | |
| SpecialBuild | `String` | |#### VersionInfoTranslation
| Field | Type | Description |
| -------- | -------- | ------------------------------------- |
| Language | `String` | (Required) Supported language, in hex |
| Charset | `String` | (Required) Supported charset, in hex |Here's an example configuration:
```json
{
"Icons": [
{
"ID": 1,
"Path": "icon.ico"
},
{
"Name": "Icon",
"Path": "icon2.ico"
}
],
"Manifest": {
"ID": 1,
"Path": "App.exe.manifest"
},
"VersionInfos": [
{
"ID": 1,
"Fixed": {
"FileVersion": "10.0.14393.0",
"ProductVersion": "10.0.14393.0"
},
"StringTables": [
{
"Language": "0409",
"Charset": "04b0",
"Strings": {
"CompanyName": "Microsoft Corporation",
"FileDescription": "Windows Command Processor",
"FileVersion": "10.0.14393.0 (rs1_release.160715-1616)",
"InternalName": "cmd",
"LegalCopyright": "\u00a9 Microsoft Corporation. All rights reserved.",
"OriginalFilename": "Cmd.Exe",
"ProductName": "Microsoft\u00ae Windows\u00ae Operating System",
"ProductVersion": "10.0.14393.0"
}
}
],
"Translations": [
{
"Language": "0409",
"Charset": "04b0"
}
]
}
]
}
```Note that keys are case-insensitive.
You can use both `"companyName"` and `"CompanyName"`, or even `"companyname"` for key.## License
MIT
[godoc]: https://godoc.org/github.com/hallazzang/syso?status.svg
[goreportcard]: https://goreportcard.com/badge/github.com/hallazzang/syso
[rsrc]: https://github.com/akavel/rsrc
[goversioninfo]: https://github.com/josephspurrier/goversioninfo