Skip to main content

Win/Linux/Mac bundler helper.

Project description

JRA Logo

JustRunAlready — Cross‑Platform App Bundler

Minimal, predictable bundler that stages your built app into a runnable bundle across Linux, macOS, and Windows. It discovers dependencies, copies what you ship, patches load paths (RPATH/@rpath/PE), and places assets consistently. One CLI and one config on every platform.

Features

  • Single CLI and TOML config for Linux/macOS/Windows
  • Dependency closure for ELF/Mach‑O/PE (patchelf/install_name_tool aware)
  • Canonical layouts (AppDir on Linux, .app on macOS, flat on Windows)

Examples

Basic example:

[app]
name = "MyApp"
staging_root = "install"

[layout.linux]
appdir = "AppDir"
bin_dir = "usr/bin"
lib_dir = "usr/lib"
binary = "myapp"          # name inside bin_dir
rpath = ["$ORIGIN", "$ORIGIN/../lib"]

[layout.macos]
app_bundle = "install/MyApp.app"
lib_dir = "Contents/Frameworks"
rpath = ["@executable_path/../Frameworks"]

[layout.windows]
bin_dir = "bin"
binary = "myapp.exe"       # name inside bin_dir

# Platform-specific include patterns
[include.linux]
patterns = ["lib/*.so"]

[include.macos]
patterns = ["lib/*.dylib"]

[include.windows]
patterns = ["bin/*.dll"]

CLI

Bundle up your built project:

jra bundle --config jra.toml [--platform auto|linux|macos|windows] [--dry-run] [--verbose]

(Optionally) verify nothing is missing:

jra verify --config jra.toml [--platform linux|macos|windows]

Check your environment and tooling:

jra doctor

Configuration

Platform-Specific Binary

Each platform specifies its own binary location. The binary value is the filename inside the platform’s bin_dir:

[layout.linux]
bin_dir = "usr/bin"
binary = "myapp"          # Linux executable name inside bin_dir

[layout.windows]
bin_dir = "bin"
binary = "myapp.exe"      # Windows executable name inside bin_dir

# macOS uses app_bundle instead
[layout.macos]
app_bundle = "install/MyApp.app"

Include Patterns with Exclusions

Use platform-specific include patterns to control which files are bundled. Patterns starting with ! exclude previously matched files:

[include.linux]
patterns = [
    "lib/*.so",           # Include all .so files
    "!lib/*_debug.so",    # But exclude debug libraries
    "!lib/*_test.so"      # And test libraries
]

Copy Mappings

Copy non-library files to specific locations in the bundle:

[copy.linux]
files = [
    # Simple pattern - copies to bundle root
    "myapp.desktop",
    "myapp.png",

    # Pattern-based copy - copies multiple files to directory
    { pattern = "share/icons/*.png", dest = "usr/share/icons" },
    { pattern = "docs/*", dest = "usr/share/doc" },

    # Exact source copy - copies and renames a single file
    { source = "logo.png", dest = "index.png" },
    { source = "readme.txt", dest = "docs/README" }
]

Two types of copy specifications are supported:

  • Pattern-based: Use pattern for glob patterns that match multiple files. The dest is treated as a directory.
  • Exact source: Use source for copying a single file with optional renaming. The dest is the complete target path.

This is particularly useful for Linux AppImage bundles that require .desktop files in the AppDir root.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

justrunalready-0.1.13.tar.gz (22.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

justrunalready-0.1.13-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file justrunalready-0.1.13.tar.gz.

File metadata

  • Download URL: justrunalready-0.1.13.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.19

File hashes

Hashes for justrunalready-0.1.13.tar.gz
Algorithm Hash digest
SHA256 601d7fbdc5b2985cffe6d55dcc5220e143e0e57414500cc99c76dd2034a97146
MD5 30f86da2d4e8f1803fd1e7d9fd5663ac
BLAKE2b-256 21c0341dd726dad3db573b7cdbc00e18957d7e1d0aac2298e532b39603b68e28

See more details on using hashes here.

File details

Details for the file justrunalready-0.1.13-py3-none-any.whl.

File metadata

File hashes

Hashes for justrunalready-0.1.13-py3-none-any.whl
Algorithm Hash digest
SHA256 7cb64dfe95525840067a68f789196f836c890c31d79222956fb4d77ba3f97d38
MD5 ccf914636f45e9e2b06e51a2160c1a3b
BLAKE2b-256 b68d706be4202e5eeee132d954a8b469d57d132ed6ffd3ebc8f1dfadb6f20f23

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page