Repository navigation
Releases
rebar 0.8.0
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 startsrebaron 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.shruns the whole regression suite through the wrapper (174 pass, the same 5 known failures as the direct run).
Correctness
- JIT: a
retafterldr x30is 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
iasi, the host's x86_64 runtime as2*(i+1)/i<<1; guards for the copy / destroy of such values (Xcode's SwiftUI canvas no longer crashes when a view opens), andState/BindingwrappedValueof anOptional<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). xcodebuildof a SwiftUI project builds under rebar:vm_allocateblocks are 16 KB aligned inside Apple's linker tools; arm64-only programs started throughsandbox-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/sysctland 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
@objcprotocols 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 withREBAR_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 andtools/(ipa.py,rebar-wrap).Rebar-launcher-0.8.0-macos-x86_64.zip: the launcher app with rebar inside.
rebar 0.7.0
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 loadsUnityFramework) and starts them in a host bundle. - Fixes on the way: the app's own back-deployed
libswift*.dylibare replaced by the host's;-[NSBundle principalClass]of an arm64 bundle; a stand-inAVAudioSession(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_stateof 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_dynamicCastMetatyperesult 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/bsearchcomparator calls. Node / CPython / Godot loops 3-6 % faster, scalar FP micro benchmark 9.2 -> 7.2 ns,qsortkernel 14x -> 8.8x native. Details, ratios to native and the next steps:PERF_REPORT.md; tools:tools/perf/. jit-selftestworks on macOS 26 again.
Known
- Host macOS 26.7.2:
run_tests.sh170 pass / 5 fail (four 4-pixel GUI layout differences and thejit_cachethreshold). - 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(needsrebar-iosandlibrebar_sec.dylibnext torebar).
Build from source: ./build.sh.
rebar 0.6.1
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, andpsthen writes every non-ASCII byte of a command line asM-PM^]. The launcher never matched such a program by its path, took it for something an app had left behind and killed it.psnow 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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.6.0
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_msgSendfast 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;_vsyslogtakes ava_listthe 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=0turns it off,REBAR_JIT_CACHE_MAX_MBlimits 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-coveragereports 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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.5.0
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-insnsfinds 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 testfor 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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.4.0
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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.3.0
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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.2.0
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
rebarandlibrebar_exec.dylibtogether, run./rebar path/to/arm64/binary [args...].
Build from source: ./build.sh.
rebar 0.1.0
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.