Granny Smith is a browser-first Macintosh and Apple Lisa emulator spanning everything from Lisa 2 to Power Macintosh and more that 15 computer models in between.
See it: Demos of PlainTalk speech recognition, A/UX, Marathon, and more
Try it: Run Granny Smith in your browser Use Chromium browser (Safari and Firefox have known issues)
In all models, the original ROMs runs without patches, and all on-board devices the software touches are emulated in enough detail to allow original device drivers to work.
- Apple Lisa 2 and Macintosh XL
- Macintosh Plus
- Macintosh SE/30, IIx, and IIcx (the "GLUE" family)
- Macintosh IIfx
- Macintosh IIci and IIsi (the "MDU" family)
- Macintosh Quadra 700, 900, and 950 (the "MCU" family)
- Macintosh Quadra 840AV and Centris 660AV (the "AV" family)
- Power Macintosh 6100, 7100, and 8100 (the "PDM" family)
- Power Macintosh 7500, 8500, and 9500 (the "TNT" family)
NuBus display cards can be seated in any machine with free slots, including machines that already have built-in video. Each card runs either from a dump of the real declaration ROM or from a runtime-generated generic declaration ROM (no ROM dump is required); the generic ROM can also synthesize custom resolutions (e.g. 800×600)
- Display Card 8•24 (the standard "JMFB" card)
- Display Card 24AC (including hardware QuickDraw acceleration)
- Display Card 8•24 GC (including hardware QuickDraw acceleration)
PCI cards require at this point a real ROM image to work.
- ATI Mach64 GX (Apple "Accelerated" PCI Card) (including 2D hardware acceleration)
The emulated computer models have been tested with various combinations of the following operating systems:
- Mac OS System 2 to 7.6
- A/UX 3.0.1
- Lisa Office System 3.1
- Lisa Xenix 3.0
- Lisa MacWorks XL 3.0
- Copland D11E4
- MkLinux DR3
- Apple Network Server 500 and 700 running AIX 4.1.5
- Power Macintosh 9500MP running BeOS
- Voodoo2 PCI Card
Two principles guide the project: stay true to the hardware, and keep it simple. That may sound like a contradiction, as faithful hardware emulation rarely is simple, but we try to find a sweet spot between the two:
True to the hardware means that compatibility is achieved by behaving like the real underlying hardware, not by patching around differences. Machines boot their original, unpatched ROMs, and every needed on-board device the software touches is modeled. Chip behaviour is pinned against Apple documentation, chip datasheets, Apple's own system software sources.
Keeping it simple means for users that the emulator runs in the browser with no installation. For developers, it means a highly portable C99 core with no special runtime requirements, no JIT or code generators, relying on the compiler and modern hardware to acheive "enough" performance. Extensive automated tests keep verification simple, and the entire project has been created to be AI agent friendly.
You will need a ROM image and a bootable system disk image for the machine you want to run.
- Open Granny Smith in any modern browser
- On first launch, upload a ROM for your chosen model (anything from the Macintosh Plus to the Power Macintosh 8100, or a Lisa); it is persisted in the browser's OPFS storage, so you only need to do this once
- In the Machine Configuration dialog, pick a model, choose RAM, and attach disk images to the floppy / SCSI / CD slots (and display cards to NuBus slots)
- Click Boot - your session is checkpointed continuously in the background, so closing or reloading the tab won't lose state
- Once running, you can drag-and-drop additional disk images directly onto the screen to insert them at runtime
Disk images can be raw (.dsk, .img), compressed (.sit.hqx), or packaged in .zip archives. They are decompressed transparently via the in-tree peeler library.
For build, test, and contribution instructions, see CONTRIBUTING.md. Architecture and design docs live in docs/guide/ARCHITECTURE.md, and coding guidelines in AGENTS.md.
- Safari - known rendering and audio issues; not currently supported
- Firefox - works partially; some compatibility problems remain
- Ethernet - the Quadras' SONIC and the AV machines' MACE controllers are modeled at the register/self-test level but are not bridged to a network; networking is AppleTalk over LocalTalk (serial) only
- Sound input - not modeled on any machine; the Quadras' EASC currently runs as an ASC-compatible core, and the AV machines' Singer/AWACS sound is not modeled at all
- LaserWriter - printer is identified, but print jobs don't complete correctly
This project allows the use of AI (my project, my rules). This is not limited to code generation or code review; it also includes documentation and reverse engineering of the hardware involved. There is no intention to track, at the file or commit level, which code was generated with AI assistance and which was not. I know that AI may be a red flag for some people, and I fully respect that.
- raddad772 for the 68K test suite (single-step-tests)
- xterm.js for terminal emulation in the browser
- JSZip for ZIP file handling
- Emscripten for the WebAssembly toolchain
All trademarks referenced in this project are the property of their respective owners and are used for identification purposes only. This project does not claim any endorsement by or affiliation with the trademark holders.
