MAGISTER CATALYST DOCUMENTATION

Using the SDK

Copyright 2020-2026 Magister, LLC. Magister Catalyst ("Catalyst") is proprietary software.

Install

Extract the zip anywhere on an Apple Silicon Mac. The minimum macOS version is recorded in distribution.json; it includes the requirements of all bundled libraries. Linux and Intel Mac distributions are not available yet.

Select Xcode or Apple's Command Line Tools with xcode-select. C++ applications require C++23 support; CMake projects require CMake 3.24 or newer. Cosmic and Microcosm are included, along with their runtime dependencies and debugging tools. Standard C++ projects use the Apple compiler selected by Xcode or Command Line Tools. No separate LLVM installation is needed. Set the SDK location and command search path:

export CATALYST_SDK="$HOME/SDKs/Catalyst-1.0.0-macos-arm64"
export PATH="$CATALYST_SDK/bin:$PATH"
export MC_HOME="$CATALYST_SDK"

GPU compilation additionally requires Xcode's Metal Toolchain component:

xcodebuild -downloadComponent MetalToolchain

MC_HOME supplies the conf directory to Catalyst applications. Set it to your application's own configuration directory when appropriate. The SDK compilers default it to the SDK location when it is unset. Review and customize the supplied Nexus configuration before using it on your machines.

Read the guide and the SDK reference.

CMake applications

cmake_minimum_required(VERSION 3.24)
project(MyApplication LANGUAGES CXX)
find_package(Catalyst 1.0 CONFIG REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE Catalyst::Shared)
cmake -S . -B build -DCMAKE_PREFIX_PATH="$CATALYST_SDK"
cmake --build build

Catalyst::Catalyst supplies headers and their dependencies. Catalyst::Shared adds the core library; Catalyst::MacShared adds the Mac graphics library and core. These targets link the libraries included in the SDK.

Boost is linked statically. The SDK contains the Boost headers reached by the Catalyst headers for C++23 on macOS arm64. The header list is recorded in licenses/boost/headers.txt. A small libboost_iostreams.a supplies compiled gzip/zlib support for inline functions; the CMake targets link it and system zlib automatically. No Boost installation or Boost dylibs are required.

For Cosmic .cc files, call catalyst_cosmic_directory("${CMAKE_CURRENT_SOURCE_DIR}") after defining your targets. It preserves target include paths, definitions and compile options, and generates database row headers from .cson schemas. The imported executable targets are mc-cosmic, mc-microcosm, and mc-nexus. catalyst_debug_symbols(my_app) enables matching dSYM generation for Debug and RelWithDebInfo builds.

mc-cosmic -g -o hello hello.cc
mc-microcosm -g -o hello hello.mc
cmake -S "$CATALYST_SDK/examples" -B examples-build \
  -DCMAKE_PREFIX_PATH="$CATALYST_SDK"
cmake --build examples-build

On macOS, mc-cosmic automatically links both the core libcatalyst library and libcatalyst_mac when producing an executable. With CATALYST_SDK set to the extracted SDK directory as above, compile a graphics application with:

"$CATALYST_SDK/bin/mc-cosmic" main.cc -o my_graphics_app

Use --link FILE to add other object files or libraries; repeat it for each additional input. Object-only compilation with -c does not link libraries.

The SDK provides relative symbolic links cosmic → mc-cosmic, microcosm → mc-microcosm, and nexus → mc-nexus in bin. The examples directory contains tutorial sources and its own consumer CMake project; service examples may need their documented external services. Compiler sanitizers are not included in this release toolchain.

Use native object files when linking code from Apple's compiler into Cosmic programs with --link. LLVM bitcode inputs must be compatible with the embedded LLVM 23 compiler; Apple Clang can emit vendor extensions that it does not support.

Python and Swift

The zip includes bindings for cvar, CMessenger, and CServer, plus their support types. Both languages use the same native Catalyst library and value serialization. See the binding guide for values, delegates, messaging, ownership, and error handling.

Python

The prebuilt abi3 extension requires standard CPython 3.9 or newer, running natively on arm64. Add the SDK's version-independent package directory:

export PYTHONPATH="$CATALYST_SDK/lib/python${PYTHONPATH:+:$PYTHONPATH}"
python3 -c 'from catalyst import CVar; print(CVar({"answer": 42}).to_cson())'

No extension compilation or separate Python binding dependencies are needed. Keep the package in the SDK layout so its relative loader paths can find the bundled libraries. Free-threaded Python and subinterpreters are not supported.

Swift

The self-contained Swift package is in share/Catalyst/swift. It requires Swift 5.9 or newer and compiles its wrapper sources against the bundled C ABI; it does not require C++ interop. Add it as a local package dependency, then select the Catalyst library product for your target and use import Catalyst.

Set your application's macOS deployment target to at least minimum_macos from distribution.json. For a SwiftPM application, build with the native library's explicit path and runtime search path:

swift build \
  -Xlinker "-L$CATALYST_SDK/lib" \
  -Xlinker "$CATALYST_SDK/lib/libcatalyst.dylib" \
  -Xlinker -rpath -Xlinker "$CATALYST_SDK/lib"

The full library path prevents Swift's libCatalyst.a from shadowing the native libcatalyst.dylib on case-insensitive volumes. For Xcode applications, add the same native library and library search path, and configure runpaths and embedding for your application's final location as described below.

Frameworks and application deployment

Frameworks/Catalyst.framework contains the core library, SDK headers, and its runtime dependencies. Frameworks/CatalystMac.framework adds the Mac library and requires Catalyst.framework beside it. Link Catalyst::Framework or Catalyst::MacFramework in CMake to select these variants. Use one variant consistently throughout an application.

For an Xcode project, add both framework search paths and Catalyst.framework/Headers to the header search paths, and include headers as <mc/cvar.h>. Embed the required frameworks together in your application's Contents/Frameworks, with an @executable_path/../Frameworks runtime search path. Headers use C++23. Re-sign embedded code with your own Developer ID when signing your application. For direct Xcode integration, link Catalyst.framework/Versions/A/Libraries/libboost_iostreams.a and libz.tbd when using compression functions. The CMake framework targets include these link dependencies automatically.

For dylib deployment, copy the contents of lib/*.dylib, preserving symlinks, beside each other. Add that directory to your application's runtime search paths. CMake sets build-time paths to the SDK automatically; configure your application's install paths for its final layout. Do not combine the framework and dylib copies in one process.

The zip contains Developer ID signatures and is submitted to Apple's notary service before release. ZIP archives and standalone executables cannot have notarization tickets stapled to them; Gatekeeper retrieves their tickets online. See Apple's notarization workflow. Archives with -unsigned in their name are local previews with ad-hoc signatures and have not been notarized.

Third-party notices are in licenses, including the source archive and rebuild recipe for the dynamically linked LGPL libdwarf. This software is based in part on the work of the Independent JPEG Group.