Browser AppleTalk / AFP stack over WebSerial → TashTalk → LocalTalk.
- Connect a TashTalk USB serial adaptor (1 Mbaud, RTS/CTS) from Chrome/Edge
- Act as an AFP server sharing one IndexedDB-backed volume (
Browser Share) to classic Macs - NBP discovery of remote
AFPServerhosts - Act as an AFP client to browse/upload/download/rename/delete on remote shares
- Netboot (AppleTalk Boot Protocol + ChainBoot EBP): bundled
ChainLoader.bin, downloadableBootstrapFloppy.dsk, user-selected System HFS; advertise asBootServer - Bundled welcome pack (
public/welcome/) auto-imported into Browser Share; restore via sidebar Add Welcome Pack Items - AppleSingle / AppleDouble import; zip downloads default to AppleDouble
._pairs (Advanced → Mac OS X zip uses a__MACOSXfolder instead) - Finder-style UI: icon / list / column views, properties (type/creator)
- Advanced → Extension editor… maps filename suffixes to Macintosh creator/type plus a comment (saved in localStorage; used on import when there is no AppleDouble metadata)
- Dropped BinHex (
.hqx), MacBinary (.bin), StuffIt (.sit), and ZIP (.zip) are decoded into the inner Macintosh files (name, forks, type/creator); ZIP merges._and__MACOSXAppleDouble. Toggle via Advanced → Auto-expand files - Resource-fork icons (BNDL / ICN# / icl8) with
./iconssystem fallbacks and a clearable local type-icon cache - Advanced → Resource Fork… (or Get Info / context menu Resources…) lists every resource type, id, and BNDL mapping in the selected file
- Chromium browser with Web Serial API
- TashTalk hardware on LocalTalk
- Node 20+ for development
- For Netboot: a classic Mac (use Advanced → Netboot… → Download for
BootstrapFloppy.dskto enable XPRAM); provide an HFS System volume to stream
npm install
npm run devOpen the printed localhost URL, click Connect TashTalk, pick the TashTalk port.
npm test
npm run buildSee the plan: TashTalk → LLAP/DDP → NBP → ATP → ASP → AFP, with a VirtualFS + Desktop DB for the local share. Netboot rides DDP type 10 on sockets 10/11 beside AFP.
Protocol codecs mirror ClassicStack.
ClassicStack is indebted to the following source code and authors:
- Tashtari for TashTalk (host framing also follows TashRouter; GPLv3)
- Elliot Nunn for NetBoot (ChainLoader / AppleTalk Boot Protocol; MIT)
- XADMaster / The Unarchiver — Dag Ågren, Dirk Stöcker, and the xadmaster library — StuffIt archive formats (also via stuffit-rs)
- Matthias Wiesmann for QuickDrawViewer (PICT / QuickDraw opcode layout and PackBits; Apache 2.0)
- Harald Kuhr for TwelveMonkeys imageio-pict (PICT bitmap packing; BSD-3-Clause)
- Guest login (
No User Authent) plusCleartxt Passwrdand Randnum UAMs when connecting as a client - Resource-fork icon decoder (ICN# / icl8 / BNDL) for Finder icons; system glyphs from
./icons; application type icons cached locally (Advanced → Clear icon cache) - Resource Fork explorer (Advanced → Resource Fork…) dumps types, ids, BNDL/FREF mappings, and decoded icon previews from the selected file
- Desktop DB Add/GetIcon is implemented on the server
- AFP Write uses a simplified path; full WriteContinue parity may need tuning against specific Mac OS versions
- Netboot ChainBoot keeps the selected HFS image in browser memory for the session (writes are not persisted back to the file)
- Default Browser Share files live in
public/welcome/(see that folder’s README); new pack files are imported on next load, archives are expanded (wrappers are not kept), existing names are never overwritten