Skip to content
A selection of modern reimplementation of Apple's Carbon frameworks, intended for assisting development of modern ports of old games.
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Graphite is a modern reimplementation of a number of aspects from the Carbon frameworks on Mac OS X, intended to support and assist the development of a modern EV Nova clone. It could also be used to develop other classic Macintosh games.

What's included?

Currently Graphite is very bare bones, and very much in active development. Currently the goal is to reimplement much of what was included in my previous two frameworks (ResourceKit and ClassicKit), convert their functionality to Swift, use the Swift Package Manager and get them working cross platform as much as possible.

You can see a checklist of tasks that are currently being worked on, and required to fully accomplish an EV Nova clone.

  • ResourceFork and file reading.
  • ResourceFork and file writing.
  • QuickDraw Picture reading & parsing (to the extent required by EV Nova).
  • RLE (Run-Length Encoding) resource reading & parsing.
  • Color icon (cicn) resource reading & parsing.
  • Pixel pattern (ppat) resource reading & parsing.
  • Sound (snd ) resource reading & parsing.
  • Dialog (DITL/DLOG) resource reading & parsing.


It is strongly recommended that you do not use this unless you specifically need to access ancient data files that are contained within ResourceForks or resource files (rsrc). The formats themselves are restrictive in what they can contain (especially in light of more modern data and file sizes).

However if you are trying to port or clone old Macintosh games that relied upon the resource fork then this maybe helpful.


Contributions are welcome, though currently it is going to be limited to bugs fixes and issues. This is primarily because I'm still fleshing out the main core of Graphite and trying to decide the actual structure of it. Once this is more concrete I will begin accepting contributions of functionality and resource parsers.

You can’t perform that action at this time.