{"id":49610918,"url":"https://github.com/pkgforge-dev/appimagetool","last_synced_at":"2026-06-07T05:01:09.196Z","repository":{"id":354197094,"uuid":"1221828334","full_name":"pkgforge-dev/appimagetool","owner":"pkgforge-dev","description":"A Rust implementation of appimagetool for the Anylinux-AppImages project.","archived":false,"fork":false,"pushed_at":"2026-05-13T22:54:12.000Z","size":155,"stargazers_count":6,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-14T01:06:19.618Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pkgforge-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-04-26T18:25:39.000Z","updated_at":"2026-05-13T09:02:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pkgforge-dev/appimagetool","commit_stats":null,"previous_names":["pkgforge-dev/appimagetool"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pkgforge-dev/appimagetool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgforge-dev%2Fappimagetool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgforge-dev%2Fappimagetool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgforge-dev%2Fappimagetool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgforge-dev%2Fappimagetool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkgforge-dev","download_url":"https://codeload.github.com/pkgforge-dev/appimagetool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgforge-dev%2Fappimagetool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34009201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-05-04T17:01:49.483Z","updated_at":"2026-06-07T05:01:09.172Z","avatar_url":"https://github.com/pkgforge-dev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# appimagetool\n\nA Rust implementation of `appimagetool` for the [Anylinux-AppImages](https://github.com/pkgforge-dev/Anylinux-AppImages) project.\n\nIt takes a prepared AppDir and produces a finished `.AppImage` using DWARFS compression and the [uruntime](https://github.com/VHSgunzo/uruntime) AppImage runtime. Single binary, no Python, no C++ deps.\n\n## Quick start\n\n```sh\nappimagetool ./AppDir\n```\n\nThat's it. The tool will:\n\n1. Validate the AppDir (checks for `AppRun`, `.DirIcon`, one `.desktop` file).\n2. Download `mkdwarfs` and `uruntime` if they're not already cached.\n3. Write `X-AppImage-*` metadata into the desktop entry.\n4. Build the DWARFS image with the runtime embedded as the ELF header.\n5. Generate a `.zsync` file when update info is set, plus an `appinfo` sidecar.\n\n## Features\n\n- DWARFS compression for small, delta-friendly AppImages.\n- Drop-in uruntime integration with automatic download and ELF section patching.\n- Optional profile-guided optimization (DWARFS hotness profiling) for faster launches.\n- Built-in zsync generation, no `zsyncmake` shell-out.\n- No central repository, no daemon, no extra runtime deps.\n\n## Usage\n\n### Typical build\n\n```sh\nappimagetool ./build/AppDir \\\n  --output ./dist \\\n  --update-info \"gh-releases-zsync|org|repo|latest|*-x86_64.AppImage.zsync\"\n```\n\n### CI / GitHub Actions\n\nIf `GITHUB_REPOSITORY` is set, update info is auto-derived as\n`gh-releases-zsync|owner|repo|latest|*\u003carch\u003e.AppImage.zsync`. So in CI you usually just need:\n\n```sh\nVERSION=1.2.3 appimagetool ./AppDir --output ./dist\n```\n\n### Cross-arch / aliased filenames\n\nThe tool tracks two arches separately:\n\n- `APPIMAGE_ARCH` is the *runtime* arch. It picks which `mkdwarfs` and `uruntime` binaries to download, and shows up in `X-AppImage-Arch` metadata. Defaults to the host arch.\n- `ARCH` is the *display* arch. It only affects the output filename. Falls back to `APPIMAGE_ARCH` when unset.\n\nThis lets a project publish under an alias like `amd64` while still pulling the correct `x86_64` runtime:\n\n```sh\nAPPIMAGE_ARCH=x86_64 ARCH=amd64 appimagetool ./AppDir\n# produces MyApp-1.2.3-anylinux-amd64.AppImage with X-AppImage-Arch=x86_64\n```\n\n### All CLI options\n\n```\nUsage: appimagetool [OPTIONS] [APPDIR]\n\nArguments:\n  [APPDIR]  Path to the AppDir directory [env: APPDIR] [default: ./AppDir]\n\nOptions:\n  -o, --output \u003cOUTPUT\u003e            Output directory [env: OUTPATH] [default: .]\n  -n, --name \u003cNAME\u003e                Output filename (auto-detected from .desktop) [env: OUTNAME]\n      --appimage-arch \u003cARCH\u003e       Runtime arch (download URL + X-AppImage-Arch) [env: APPIMAGE_ARCH]\n      --arch \u003cARCH\u003e                Display arch used in the output filename [env: ARCH]\n      --runtime \u003cRUNTIME\u003e          Path to uruntime binary [env: RUNTIME]\n      --runtime-url \u003cURL\u003e          URL to download uruntime from [env: URUNTIME_LINK]\n  -u, --update-info \u003cUPINFO\u003e       Update information string [env: UPINFO]\n      --dwarfs-comp \u003cCOMP\u003e         DWARFS compression options [env: DWARFS_COMP]\n      --optimize-launch            Enable DWARFS profile optimization (also via OPTIMIZE_LAUNCH=1)\n      --profile-timeout \u003cSECS\u003e     Profiling timeout in seconds [env: OPTIMIZE_LAUNCH_TIMEOUT] [default: 10]\n      --keep-mount                 Keep the FUSE mount alive after exit (also via URUNTIME_PRELOAD=1)\n      --devel-release              Tag the build as a nightly/devel release (also via DEVEL_RELEASE=1)\n      --dwarfs-profile \u003cPROFILE\u003e   Path to DWARFS profile [env: DWARFSPROF]\n      --mkdwarfs \u003cPATH\u003e            Path to mkdwarfs binary [env: DWARFS_CMD]\n      --dwarfs-url \u003cURL\u003e           URL to download mkdwarfs from [env: DWARFS_LINK]\n      --tmpdir \u003cTMPDIR\u003e            Temporary directory [env: TMPDIR] [default: /tmp]\n  -v, --verbose...                 Increase verbosity (-v, -vv)\n  -q, --quiet...                   Suppress informational output (-q, -qq)\n  -h, --help                       Print help\n  -V, --version                    Print version\n```\n\n### Environment variables\n\nEvery CLI option has a matching env var (shown above). A few extra knobs that are env-only:\n\n| Variable             | Effect                                                                                  |\n| -------------------- | --------------------------------------------------------------------------------------- |\n| `VERSION`            | Version string baked into the AppImage filename and metadata.                           |\n| `APPNAME`            | Override the application name (defaults to the desktop entry's `Name`).                 |\n| `GITHUB_REPOSITORY`  | When set, auto-generates `update_info` as `gh-releases-zsync\\|owner\\|repo\\|latest\\|...` |\n| `ADD_PERMA_ENV_VARS` | Permanent env vars to bake into the runtime, one per line.                              |\n| `URUNTIME_PRELOAD`   | Set to `1` to keep the FUSE mount after the app exits.                                  |\n| `DEVEL_RELEASE`      | Set to `1` to tag the build as a nightly/devel release.                                 |\n| `OPTIMIZE_LAUNCH`    | Set to `1` to enable the DWARFS profiling pass (same as `--optimize-launch`).           |\n| `OPTIMIZE_LAUNCH_TIMEOUT` | Profiling timeout in seconds (default `10`).                                       |\n\n### AppDir requirements\n\nThe AppDir must contain:\n\n1. An executable `AppRun`.\n2. A `.DirIcon` file (PNG or SVG).\n3. Exactly one `.desktop` file in the AppDir root.\n\n### Output filename\n\nBy default:\n\n```\n\u003cAppName\u003e-\u003cVersion\u003e-anylinux-\u003cArch\u003e.AppImage\n```\n\nWhere `AppName` comes from the `.desktop` `Name` key (or `APPNAME`), `Version` from `VERSION` (or `~/version`), and `Arch` is the display arch (`ARCH`, falling back to `APPIMAGE_ARCH`).\n\nYou can also pin the filename outright with `--name` / `OUTNAME`.\n\n## Building\n\n```sh\ncargo build --release\n```\n\n### Running tests\n\n```sh\n# Unit + integration tests\ncargo test --all-features\n\n# Full end-to-end test (requires mkdwarfs + uruntime installed)\ncargo test --all-features -- --ignored\n```\n\n## Project layout\n\n```\nsrc/\n├── main.rs       CLI entry point (clap)\n├── lib.rs        library root\n├── appimage.rs   build pipeline orchestration\n├── config.rs     CLI args + env var resolution\n├── desktop.rs    .desktop parsing and metadata\n├── dwarfs.rs     mkdwarfs resolution, image building, profiling\n├── elf.rs        ELF section read / write / patch\n├── error.rs      error types with actionable hints\n├── log.rs        verbosity-gated logger\n├── uruntime.rs   runtime download, caching, configuration\n└── util.rs       atomic downloads, sanitization, ELF detection\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgforge-dev%2Fappimagetool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkgforge-dev%2Fappimagetool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgforge-dev%2Fappimagetool/lists"}