Skip to content

Releases

rebar 0.8.0

Choose a tag to compare

@OverlordDev OverlordDev released this 08 Nov 15:14

New in 0.8.0

arm64 apps start by themselves (experimental)

  • tools/rebar-wrap: an Intel Mac refuses an arm64-only app before anything can be hooked, so the app's main executable becomes a universal file: the original arm64 slice plus a tiny x86_64 program that starts rebar on the same file. A double click, the Dock, open, file associations and Steam then start the app through rebar; bundle, Info.plist and pid are unchanged. enable / disable (puts the original back byte for byte) / status / list / env (per-app environment) / seal / update, and a LaunchAgent that wraps new arm64-only apps as they appear.
  • Rebar launcher: a checkbox "Start apps by themselves" installs / removes that agent; the gear next to it opens a window with watched folders, a switch per app, per-app environment variables, the agent log and "Allow changes" for root-owned App Store apps.
  • Downloaded (quarantined) apps get their bundle signed ad hoc after wrapping (otherwise Gatekeeper calls them "damaged"); removing the quarantine attribute stays your decision.
  • Tried by double click: Cyberpunk 2077, ChatGPT, Gemini, MainStage, Xcode-beta.
  • WRAP=1 ./run_tests.sh runs the whole regression suite through the wrapper (174 pass, the same 5 known failures as the direct run).

Correctness

  • JIT: a ret after ldr x30 is no longer treated as a frame restore (the rule kept stale NZCV flags: Optional<URL> == crashed after a dialog). 0.7.0 has this bug: update.
  • Swift extra inhabitants: arm64 writes index i as i, the host's x86_64 runtime as 2*(i+1)/i<<1; guards for the copy / destroy of such values (Xcode's SwiftUI canvas no longer crashes when a view opens), and State / Binding wrappedValue of an Optional<any P> is converted at the call. Device Hub (Xcode's device app) starts and shows its window (there is no iOS Simulator runtime for an Intel Mac, so no simulator).
  • xcodebuild of a SwiftUI project builds under rebar: vm_allocate blocks are 16 KB aligned inside Apple's linker tools; arm64-only programs started through sandbox-exec / arch / open / NSWorkspace are started through rebar.
  • Logic Pro reaches its project chooser (system_error, CFBundle lookups, sqlite3 / CFCalendar variadics, swift_bridgeObject* guard).
  • Raw syscalls: syscall(n, ...) indirection, access / stat / sysctl and friends.
  • A thread that suspends itself no longer holds the bridge lock (TikTok's crash reporter froze the process).
  • iOS: stand-in class for a missing OpenGLES class, Swift @objc protocols registered with the host runtime, +[UIAppearance appearanceWhenContainedIn:] varargs. TikTok 47.6 now starts and reaches the network but shows no window yet; The Binding of Isaac needs OpenGL ES (not available on this Mac).

Profilers and debugging

  • REBAR_FRAMEPROF=<prefix>: a frame profiler (every frame, per-frame interval, drawable wait, CPU cores busy, time in imports, GPU time with REBAR_FRAMEPROF_GPU=1; OpenGL swaps counted too), REBAR_TIMEPROF=<prefix>: where the time of any program goes (per import / selector, host → guest entries, main run loop hangs). tools/perf/gameprof.py, tools/perf/slowstubs.py.
  • REBAR_NO_METAL_RT=1 (a driver that says YES to ray tracing makes Cyberpunk 2077 build all its path tracing kernels and its watchdog kills it).
  • Smaller aids: REBAR_TRACE_CTX, REBAR_WATCH_VAL, REBAR_TRACE_CASTFAIL, REBAR_TRACE_CASTLR, REBAR_TEST_MANGLED, REBAR_DUMP_WORDS_ON_TRAP, REBAR_TRACE_MACHEXC_BT.

Install

  • rebar-0.8.0-macos-x86_64.zip: rebar, rebar-ios, the support libraries and tools/ (ipa.py, rebar-wrap).
  • Rebar-launcher-0.8.0-macos-x86_64.zip: the launcher app with rebar inside.

rebar 0.7.0

Choose a tag to compare

@OverlordDev OverlordDev released this 07 Nov 22:53

New in 0.7.0

iOS apps and games

  • Unity iOS games run: Shadow Fight 2 (2.46) and Subway Surfers (3.71), decrypted IPAs, open a window and play under rebar-ios (Metal through the NVIDIA driver). The launcher recognises such apps (their executable only loads UnityFramework) and starts them in a host bundle.
  • Fixes on the way: the app's own back-deployed libswift*.dylib are replaced by the host's; -[NSBundle principalClass] of an arm64 bundle; a stand-in AVAudioSession (the Catalyst one waits for an XPC reply that never comes here); the display surface Unity reads at start; the garbage collector of il2cpp (thread_get_state of other guest threads is answered from their guest CPU); variadic +[NSString localizedStringWithFormat:], -initWithFormat:locale:, CFStringAppendFormat; a mach-exception wait that could hang a game for good; swift_dynamicCastMetatype result no longer cut to a byte.
  • Xcode 26.3 (arm64) opens a project under rebar (36 s -> 15 s), Swift/ObjC runtime fixes (Bool results, native Strings, protocol mirroring, plug-in loading); see XCODE_KNOWN_ISSUES.md. IntelliJ IDEA 2025.3, Firefox, VLC, Audacity 4, Wireshark, darktable and MuseScore start with windows and no faults.

Speed

  • JIT: FP comparison flags stay in the x86 flags, cheaper NaN fix-up, smarter flag liveness (a return after a frame restore does not keep NZCV alive), cheaper qsort/bsearch comparator calls. Node / CPython / Godot loops 3-6 % faster, scalar FP micro benchmark 9.2 -> 7.2 ns, qsort kernel 14x -> 8.8x native. Details, ratios to native and the next steps: PERF_REPORT.md; tools: tools/perf/.
  • jit-selftest works on macOS 26 again.

Known

  • Host macOS 26.7.2: run_tests.sh 170 pass / 5 fail (four 4-pixel GUI layout differences and the jit_cache threshold).
  • Several games together or Shadow Fight alone can crash now and then inside the NVIDIA Metal driver (nvmtl_prepare_submission_copies), not in rebar.
  • Xcode: the editor needs ~2.5 minutes of SDK symbol loading after the first Swift file is opened.

Install

  • Rebar-launcher: Rebar.app. Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep the files of the folder together, run ./rebar path/to/arm64/binary [args...]; iOS apps: python3 tools/ipa.py run App.ipa (needs rebar-ios and librebar_sec.dylib next to rebar).

Build from source: ./build.sh.

rebar 0.6.1

Choose a tag to compare

@OverlordDev OverlordDev released this 05 Nov 19:58

Fix release for 0.6.0.

Fixed

  • Rebar launcher: a program in a folder with a non-ASCII name (for example /Volumes/disk1/...) closed about a second after "Launch". A launcher opened from the Dock has no locale, and ps then writes every non-ASCII byte of a command line as M-PM^]. The launcher never matched such a program by its path, took it for something an app had left behind and killed it. ps now runs with a UTF-8 locale. (Cyberpunk 2077 installed on a volume with a Cyrillic name was one of them.) If you use 0.6.0, quit Rebar completely and open the new one.

The rebar binary is the one from 0.6.0; see the 0.6.0 notes for what is new there.

Install

  • Rebar-launcher: Rebar.app. Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.6.0

Choose a tag to compare

@OverlordDev OverlordDev released this 05 Nov 19:18

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs. A user-mode dynamic binary translator (interpreter + x86-64 JIT + Mach-O loader/bridge to the host's system libraries).

New in 0.6.0

Games and large apps

  • Cyberpunk 2077 (the Mac build, arm64) runs and is playable: 17–31 frames/s while driving and walking at 1920×1080 with low textures (the built-in benchmark averages 12) on a Ryzen 7 5800H + RTX 3070 Laptop with a third-party Metal driver for NVIDIA GeForce cards. Measured on that one machine only; frame generation does not work yet (the driver rejects a texture copy), MetalFX upscaling can show lighting artifacts indoors.
  • Steam (arm64) windows and its CEF helper processes start; Godot and Zed run.
  • objc_msgSend fast path: a plain send to a host method no longer takes the bridge lock three times. Sixteen threads encoding Metal commands used to queue on it: 8–12 → 17–31 frames/s in Cyberpunk 2077.
  • The JIT arena is 1920 MB (was 768 MB). A game whose translated code fills the arena used to run the rest in the interpreter, with every thread waiting for the translator lock: 3–4 s of translator time per second, now milliseconds. This is what made driving and loading new map areas stutter.
  • Float structures passed by value through objc_msgSend (setPosition:) no longer end the process; _vsyslog takes a va_list the right way.
  • REBAR_HUD=1 (a switch in the launcher's app settings): Apple's Metal performance HUD (frames/s, frame time, GPU time, memory) over the program's Metal windows.

Speed

  • Translation cache in ~/Library/Caches/rebar/jit: the start addresses of translated blocks and a snapshot of the translated code are saved and mapped back at the next start (REBAR_JIT_CACHE=0 turns it off, REBAR_JIT_CACHE_MAX_MB limits its size).
  • JIT templates for the AdvSIMD forms that went through helpers (widening add/sub/abd/multiply, halving adds, shifts with rounding and accumulation, MUL/MLA/MLS by element, FABD, rounding float↔int conversions): 282 of 361 probed forms were helpers, 68 are. rebar --jit-coverage reports it per encoding.
  • libm functions are leaf calls in translated code; a vector register cache; fewer store-forwarding stalls.

Instructions (checked against a C model, with and without the JIT)

  • BC.cond, CSSC, CPA, CASP (was decoded as STXP), LSE128, THE/RCW, LRCPC2/3, MOPS, MTE arithmetic and stores, RETAASPPC/RETABSPPC
  • SQSHL/UQSHL/SQRSHL/UQRSHL by register, SQDMLAL/SQDMLSL/SQDMULL, USQADD/SUQADD, URECPE/URSQRTE, FRECPX

Fixes

  • fork(): the child resets the locks the forking thread held (Steam's helper deadlocked at its first call into guest code).
  • A process started with SIGUSR2 blocked (the child of a guest's fork+exec) no longer dies at start.

Diagnostics: REBAR_PROFILE_THREADS=1 (a table per thread with REBAR_PROFILE), REBAR_JITTIME=1, REBAR_SLOW_STUB=<ms> names the Objective-C message, --probe-insns.

Also working (from earlier releases)

  • Go, Rust (rustc), CPython 3.13, Java, Node.js, Deno, Ruby, PHP, Erlang, GHC, OCaml, gcc; libc++ (C++20)
  • Frameworks: Accelerate, Vision, CoreML, CoreText, PDFKit, SceneKit, SpriteKit, ImageIO, AVFoundation, CoreImage, MetalPerformanceShaders, SwiftUI (ImageRenderer, Charts), XPC, dispatch, KVO
  • Swift Concurrency, key paths, SwiftUI, Swift Charts; Java HotSpot, .NET CoreCLR, V8 and JavaScriptCore; GTK 3, Cairo; OpenGL through GLFW and LWJGL
  • Mach exception handling, keychain, SecureTransport TLS, Objective-C runtime, libunwind, posix_spawn

Not supported: SVE/SME instructions.

Tests: 182 programs compared against native x86_64 builds (./run_tests.sh); in the final run ios_swiftui2_ipa failed once (a SwiftUI slider value read during an animation) and passed in 15 reruns, alone and under CPU load.

Install

  • Rebar-launcher: Rebar.app. Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.5.0

Choose a tag to compare

@OverlordDev OverlordDev released this 05 Nov 10:38

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs. A user-mode dynamic binary translator (interpreter + x86-64 JIT + Mach-O loader/bridge to the host's system libraries).

New in 0.5.0

Instructions (checked by a self-testing program against a C model, with and without the JIT)

  • FEAT_FRINTTS: FRINT32Z/32X/64Z/64X
  • FEAT_FCMA: FCADD, FCMLA (vector and by element, half/single/double)
  • FEAT_FHM: FMLAL/FMLSL/FMLAL2/FMLSL2
  • FEAT_I8MM: SMMLA, UMMLA, USMMLA, USDOT, SUDOT
  • FEAT_BF16: BFDOT, BFMMLA, BFMLALB/T, BFCVT, BFCVTN/BFCVTN2
  • FEAT_RDM: SQRDMLAH/SQRDMLSH; FEAT_FlagM: RMIF, SETF8, SETF16
  • LDTR/STTR family, LDRAA/LDRAB, PACGA
  • rebar --probe-insns finds A64 encodings the interpreter does not implement yet

Runtimes and frameworks (tested with their own test suites and sample programs)

  • Go: panics from faults (nil dereference) in hot JIT code, async preemption (SIGURG), syscall.Exec, go build, go test for sync/atomic, net/http, syscall, text/template
  • Rust: rustc, unwinding with the Rust personality routine
  • CPython 3.13: about 350 files of its own test suite pass; ctypes and libffi (arm64 ABI, struct by value, closures) work
  • Java (OpenJDK, javac, parallel streams), Node.js, Deno, Ruby (YJIT), PHP, Erlang (BEAM), GHC (-threaded, STM), OCaml bytecode, gcc 16 (compiled SQLite)
  • arm64e binaries (pointer authentication)
  • libc++ (C++20): streams, filesystem, regex, threads, futures, ranges, format, locale
  • libxml2, expat, libxslt callbacks with nine arguments
  • Frameworks: Accelerate, NaturalLanguage, Vision, CoreML, CoreText, PDFKit, SceneKit, SpriteKit, GameplayKit, Contacts, Compression, ImageIO, AudioToolbox, Network, Security, VideoToolbox, AVFoundation, CoreImage, MetalPerformanceShaders, IOKit, SystemConfiguration, SwiftData, SwiftUI (ImageRenderer, Charts), XPC, dispatch, KVO
  • Scripts with #! to an arm64 interpreter, and host scripts started by guests (exec shim)

Also working (from earlier releases)

  • Swift Concurrency, key paths, SwiftUI, Swift Charts
  • Java HotSpot, .NET CoreCLR, LLVM-based JIT runtimes, V8 and JavaScriptCore
  • GTK 3, GLib, Cairo, gdk-pixbuf; OpenGL through GLFW and LWJGL
  • Mach exception handling, keychain, SecureTransport TLS, Objective-C runtime, libunwind, posix_spawn

Not supported: SVE/SME instructions.

Install

  • Rebar-launcher: Rebar.app. Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.4.0

Choose a tag to compare

@OverlordDev OverlordDev released this 04 Nov 16:47

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs. A user-mode dynamic binary translator (interpreter + x86-64 JIT + Mach-O loader/bridge to the host's system libraries).

Frameworks and libraries that work in this release

Swift

  • Swift Concurrency (async/await, tasks, executors)
  • Swift runtime key paths
  • SwiftUI (navigation, forms, canvas) and Swift Charts

Runtimes with their own JIT

  • Java (HotSpot, C1/C2)
  • .NET (CoreCLR)
  • LLVM-based JIT runtimes
  • V8 and JavaScriptCore JavaScript engines

System frameworks

  • Mach exception handling (hardware faults delivered as Mach exceptions)
  • Security: keychain item services, SecureTransport TLS
  • CoreGraphics display enumeration and CoreVideo display link
  • Objective-C runtime: protocol lookup, ARC return-value handshake, assertion handling
  • libunwind (local unwinding API)
  • POSIX process spawning (vfork, posix_spawn), dlopen with relative and @rpath paths

Third-party libraries

  • GTK 3, GDK, GLib, Cairo, gdk-pixbuf
  • OpenGL through GLFW and LWJGL
  • libc++ strings used together with programs that replace the memory allocator

Also: uname and sysctl hw.machine report arm64 to guests.

Install

  • Rebar-launcher: Rebar.app (English). Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.3.0

Choose a tag to compare

@OverlordDev OverlordDev released this 04 Nov 09:26

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs.

New: Java (HotSpot with C1/C2), Minecraft Java Edition, LibreOffice, Blender 4.5 rendering, Go / Zig / Rust toolchains, many fixes.

  • Rebar-launcher: Rebar.app (English). Unzip, move to Applications, open. If macOS says the app is damaged: xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.2.0

Choose a tag to compare

@OverlordDev OverlordDev released this 04 Nov 06:08

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs.

  • Rebar-launcher (Rebar.app, now in English): lists the arm64-only apps on your Mac and launches them. Unzip, move Rebar.app to Applications, open it. If macOS says the app is damaged, run xattr -dr com.apple.quarantine /Applications/Rebar.app.
  • rebar (command line): unzip, keep rebar and librebar_exec.dylib together, run ./rebar path/to/arm64/binary [args...].

Build from source: ./build.sh.

rebar 0.1.0

Choose a tag to compare

@OverlordDev OverlordDev released this 04 Nov 04:57

Runs arm64 macOS programs on Intel/AMD (x86_64) Macs.

Unzip, keep rebar and librebar_exec.dylib in the same folder, run:

./rebar path/to/arm64/binary [args...]

Build from source: ./build.sh.