Skip to main content
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.

Metadata

Release files for justrunalready 0.1.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for justrunalready 0.1.13
File Size Uploaded
justrunalready-0.1.13.tar.gz 22.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for justrunalready 0.1.13
File Interpreter ABI Platform
justrunalready-0.1.13-py3-none-any.whl Python 3 none any Details

Total release size: 59.2 kB

Release files / justrunalready-0.1.13.tar.gz

Download URL justrunalready-0.1.13.tar.gz
Size 22.2 kB
Tags Source
SHA-256 checksum
How to use checksums
601d7fbdc5b2985cffe6d55dcc5220e143e0e57414500cc99c76dd2034a97146
BLAKE2b-256 checksum
How to use checksums
21c0341dd726dad3db573b7cdbc00e18957d7e1d0aac2298e532b39603b68e28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.8.19

Release files / justrunalready-0.1.13-py3-none-any.whl

Download URL justrunalready-0.1.13-py3-none-any.whl
Size 37.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7cb64dfe95525840067a68f789196f836c890c31d79222956fb4d77ba3f97d38
BLAKE2b-256 checksum
How to use checksums
b68d706be4202e5eeee132d954a8b469d57d132ed6ffd3ebc8f1dfadb6f20f23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.8.19

Release history Release notifications | RSS feed

This release

0.1.13 This release

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page