• Stars
    star
    1,088
  • Rank 42,244 (Top 0.9 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created over 3 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A classic Mac loaded with everything you'd want

Infinite Mac

80's and 90's era classic Macs that load instantly in a browser and have access to a large software library. The full collection is at infinitemac.org. Shortcuts are available for System 6, System 7, Mac OS 8, Mac OS 9 and KanjiTalk (Japanese). For a high-level overview and the backstory, see the launch blog post and subsequent ones.

Development

This project uses Git LFS, ensure that the LFS tooling is installed before cloning the repo.

This project uses submodules, use git clone --recursive https://github.com/mihaip/infinite-mac.git to clone it (or run git submodule update --init --recursive if you have an existing checkout).

Common development tasks, all done via npm run:

  • start: Run local dev server (will be running at http://localhost:3127). Depends on having disk images built (import-disks needs to be run at least once).
  • import-emulator <emulator>: Copy generated WebAssembly from an emulator submodule (only necessary if modifying the emulator cores, see below for how to rebuild them). The following emulators are supported:
  • import-disks: Build disk images for serving. Copies base OS images for the above emulators, and imports other software (found in Library/) into an "Infinite HD" disk image. Chunks disk images and generates a manifest for serving. This requires the macOS versions of Basilisk II and Mini vMac to be installed, since they are used as part of the image building process.

Common deployment tasks (also done via npm run)

  • build: Rebuild for either local use (in the build/ directory) or for Cloudflare Worker use
  • preview: Serve built assets locally using Vite's server (will be running at https://localhost:4127)
  • worker-dev: Preview built assets in a local Cloudflare Worker (requires a separate build invocation, result will be running at http://localhost:3128)
  • worker-deploy: Deploy built assets to the live version of the Cloudflare Worker (requires a separate build invocation)

Dependencies

Dependencies can be installed with:

npm install
pip3 install -r requirements.txt
npm run build-xadmaster

Building the emulators

Basilisk II, SheepShaver and Mini vMac are the original 68K and PowerPC emulators that enable this project.They are hosted in separate repos and are included via Git submodules. Rebuilding them is only required when making changes to the emulator core, the generated files are in src/emulator and included in the Git repository.

To begin, ensure that you have a Docker image built with the Emscripten toolchain and supporting libraries:

docker build -t macemu_emsdk .

Open a shell into the Docker container:

docker run --rm -it -v `realpath macemu`:/macemu -v `realpath minivmac`:/minivmac -v `realpath dingusppc`:/dingusppc --entrypoint bash macemu_emsdk

Once in that container, you can use a couple of helper scripts to build them:

Basilisk II

cd /macemu/BasiliskII/src/Unix
# Bootstrap Basilisk II, to generate the CPU emulator code
./_embootstrap.sh
# Switch into building for WASM
./_emconfigure.sh
# Actually compile Basilisk II targetting WASM
make -j8

Once it has built, use npm run import-emulator basiliskii from the host to update the files in src/emulator.

SheepShaver

cd /macemu/SheepShaver/src/Unix
# Configure for building for WASM
./_emconfigure.sh
# Actually compile SheepShaver targetting WASM
make -j8

Once it has built, use npm run import-emulator sheepshaver from the host to update the files in src/emulator.

Mini vMac

See this page for the full set set of build options (and this one for more estoeric ones).

cd /minivmac
# Configure for building for WASM
./emscripten_setup.sh
# This configures the Mac Plus model by default, alternative outputs can be
# configured with additionl arguments:
# - `-m 128K -speed z`: Mac 128K (uses 1x speed by default to be more realistic)
# - `-m 512Ke`: Mac 512ke
# - `-m SE`: Mac SE
# - `-m II`: Mac II
# Actually compile Mini vMac targetting WASM
make -j8

Once it has built, use npm run import-emulator minivmac-<model> from the host to update the files in src/emulator.

DingusPPC

cd /dingusppc
mkdir -p build
cd build
emcmake cmake -DCMAKE_BUILD_TYPE=Release ..
make dingusppc -j8

Once it has built, use npm run import-emulator dingusppc from the host to update the files in src/emulator.

More Repositories

1

dex-method-counts

Command-line tool to count per-package methods in Android .dex files
Java
2,598
star
2

readerisdead

A collection of tools to help with the Google Reader shutdown.
Python
466
star
3

mail-trends

Analysis and visualization of email data
Python
140
star
4

react-closure-compiler

Tooling to teach Closure Compiler about React
Java
100
star
5

web-experiments

Web-based experiments
JavaScript
63
star
6

gmail-greasemonkey

Gmail Greasemonkey Scripts
JavaScript
32
star
7

retrogit

Your GitHub time machine.
Go
31
star
8

streamspigot

Flow control for the real-time web firehose
Python
30
star
9

utm-stripper

Removes Google Analytics-related utm_ parameters from displayed URLs
JavaScript
28
star
10

clipboard-sync

Chrome extension to sync the clipboard between computers
JavaScript
26
star
11

feed-scraping

Collection of feed scraping scripts
Python
25
star
12

delicious2google

Exports Delicious bookmarks to Google Bookmarks
Python
24
star
13

google-reader-api

Automatically exported from code.google.com/p/google-reader-api
12
star
14

theres-a-web-app-for-that

Extension that suggests apps from the Chrome Web Store based on websites you visit
JavaScript
10
star
15

chrome-app-repl

Read-eval-print loop (REPL) for Chrome App APIs.
JavaScript
9
star
16

playback-rate

Chrome extension to control the playback rate of HTML5 <video> and <audio> elements.
JavaScript
8
star
17

git-resource-fork-hooks

Git hooks to make it understand files with resource forks, as commonly used in classic Mac OS development.
Python
7
star
18

push-bot

PubSubHubbub to XMPP Gateway
Java
7
star
19

bbedit-protobuf

BBEdit codeless language module for Google's Protocol Buffer definition files
5
star
20

slack-archive

"Off-site" Slack messaging archive
Go
5
star
21

crx-web-hooks

Bringing web hooks to Chrome extensions
Python
4
star
22

solving-bee

Help with the New York Times Spelling Bee puzzle
Swift
4
star
23

feed-intent-viewer

Web Intent to view RSS and Atom feeds as pretty-printed XML.
JavaScript
4
star
24

descent

Simple platform game for the iPhone, based on NS-Shaft.
Objective-C
3
star
25

mscape

Archive of Mscape Software
C++
3
star
26

instagram-downloader

Save images from Instagram
JavaScript
3
star
27

intersquares

Given two Foursquare users, shows where they would have met based on their check-in history
Python
1
star
28

better-github-mail

Better GitHub email push notifications.
Go
1
star
29

overplot

Overheard in New York meets Google Maps
JavaScript
1
star
30

google-reader-touch

"Touches" Google Reader starred/shared/liked/read items so that they're searchable
Python
1
star
31

startup-bookmarks

Chrome extension to open a bookmarks folder at startup
JavaScript
1
star
32

cilantro

Chrome extension for quickly posting and sharing links to Avocado
JavaScript
1
star
33

source-quicklinks

Tools for allowing cross-referencing and quick jumping between WebKit, Chrome, V8, and other open source project codebases
JavaScript
1
star