Thanks to visit codestin.com
Credit goes to github.com

Skip to content

minh-ton/reynard-browser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

286 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reynard Browser

Reynard is a Gecko-based web browser for iOS 13+.

Unlike other browsers on iOS that are forced to use Apple's WebKit engine (including Safari and all third-party browsers), Reynard uses Gecko. This is the same engine that powers the Firefox browser on desktop and Android devices.

This project is mainly for users on older iOS versions who are stuck with an outdated version of WebKit. Because WebKit is bundled with the OS, these devices cannot receive engine updates and often fail to load modern websites. By using Gecko, which is kept up to date independently, Reynard allows these sites to work again. Users on newer iOS versions can also use the browser if they want an alternative to WebKit, including Firefox add-ons and other Gecko-exclusive features.

Installation

The latest builds are available for download on the Releases page. Please note that this project is still in an early experimental state, so expect bugs and missing features.

TrollStore (iOS 14 - 16)

For the best experience, I'd recommend sideloading Reynard via TrollStore using the Reynard-TrollStore.tipa build. This gives you automatic JIT enablement, better performance, and automatic app updates.

Note

  • For automatic app updates, make sure that the URL Scheme Enabled option is turned on in TrollStore.
  • The TrollStore build does not work correctly on iOS 17.0. Users on this version should use alternative sideloading methods.

AltStore or SideStore (iOS 17+)

You should use AltStore or SideStore to sideload the Reynard.ipa build when TrollStore is not available, especially on newer iOS versions. Please note that you must select the Keep App Extensions option during installation, as Reynard relies on its extensions to function and will not work without them.

You can also click here to add the AltSource for Reynard to AltStore or SideStore.

Important

  • LiveContainer is not supported due to its own limitations.
  • Sideloading methods that use a distribution certificate for signing are not supported.⁠
  • Other sideloading methods are untested, and no support will be provided for issues arising from them.

After sideloading, enable JIT by following the guide below.

Manually enabling JIT on Reynard Browser

Why Enable JIT?

Modern websites run a lot of JavaScript, and that code needs to be fast. Instead of repeatedly reading JavaScript line by line, every browser speeds things up by using JIT to turn frequently used code into machine code that the computer runs directly. This helps complex websites feel smooth instead of slow or laggy.

Although Reynard can work without JIT, performance will be noticeably slower and some websites may not function correctly.

Setting Up

Due to Apple’s restrictions, only Safari is allowed to use JIT by default. To enable JIT in Reynard, we’ll need a few extra steps: a loopback VPN, a pairing file from your computer, and a quick toggle in Reynard’s settings.

Step 1: Download LocalDevVPN

  1. Download the LocalDevVPN app from the App Store on your device.
  2. Open the app and press Connect.
  3. The first time you connect, an alert will ask whether you want to add a VPN configuration. Tap Allow.

Step 2: Create a Pairing File

  1. On your computer, download the iloader tool: https://iloader.app/
  2. Connect your iPhone or iPad to your computer using a USB cable.
  3. In iloader, select your device from the list, then click Manage Pairing File.

  1. Click Export to save the file. Then transfer the created pairingFile.plist to your device, e.g. via AirDrop.

Step 3: Enabling JIT in Reynard

  1. On your device, open Reynard and go to Settings by tapping the three-dot menu (on iPhone) or opening the sidebar (on iPad).
  2. Tap Import Pairing File and select the pairingFile.plist you transferred in the previous step.

  1. Toggle the Enable JIT switch. The first time you do this, the app will download the Developer Disk Image files needed for JIT. Once the download finishes, restart the browser for changes to take effect.

Important Notice

You must be connected to Wi-Fi and have LocalDevVPN turned on whenever you want to use the browser with JIT.

If either is missing when you launch Reynard, or disconnects while you’re browsing, the app will prompt you to activate JIT-Less Mode. This lets you keep browsing without JIT until the next time you relaunch the app.

Jailbroken (iOS 13)

Sideload the Reynard-Jailbroken.ipa build using Filza File Manager with AppSync Unified on a jailbroken device. You will also benefit from automatic JIT enablement and better performance.

Preview

iOS 14 (iPhone 6S Plus, 14.1)

These sites are known to break or render incorrectly on iOS 14. The screenshots below compare how they load in Safari versus Reynard.

github.com chatgpt.com apple.com
Safari Reynard Safari Reynard Safari Reynard






iOS 15 (iPhone 7, 15.8.6)






iOS 26 (iPhone 13 mini, 26.1)

Reynard also works great on the latest version of iOS!






Building

Warning

Build instructions are included below for reference. Please be aware that I do not provide support for issues or errors encountered during the build process.

To build the project, you'll need Xcode, Python 3, Rust and Cargo, and ldid.

Clone the repository.

git clone --recursive https://github.com/minh-ton/reynard-browser
cd reynard-browser

Download Gecko and apply patches.

./tools/development/update-gecko.sh
./tools/development/apply-patches.sh

Build dependencies and the Gecko engine.

./tools/development/build-idevice.sh
./tools/development/build-gecko.sh

To run Reynard, open Reynard.xcodeproj in Xcode and build/run it from there.

Notes

This project initially started out of curiosity. I wanted to see if I could get Gecko to run without the BrowserEngineKit framework, so it could be further modified to run on iOS versions as far back as possible. I got it working, and since then, I’ve been focusing on developing engine patches for better UIKit integration, fixing bugs, and turning this into a full, usable browser.

If you’ve come across this repository and find it interesting, I’d love to get help or collaborate on it. I’m learning as I go here and don’t have much prior experience with iOS app development or with Gecko itself, so any contributions, feedback, or pointers would be greatly appreciated.

Acknowledgements

  • LiveContainer: app extension handling and NSExtension usage.
  • StikDebug and idevice: pairing-based JIT enablement support.
  • TrollStore: spawning a binary as root and JIT enablement.
  • Amethyst-iOS and dolphin-ios: Various utility functions, numerous private API usage, and memory mapping stuff.
  • Pre-existing work on bringing Gecko to iOS using BrowserEngineKit: most of the difficult engine integration.

License

This project is licensed under the GNU General Public License v3.0, except for the patches directory containing the modifications to the Firefox Gecko engine and therefore is licensed under the Mozilla Public License 2.0.

About

An experimental Gecko-based web browser for iOS 13+.

Topics

Resources

License

GPL-3.0, MPL-2.0 licenses found

Licenses found

GPL-3.0
LICENSE
MPL-2.0
LICENSE.firefox

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors