Skip to content

Repository files navigation

flying-pan

A declarative GUI toolkit for Bun, built on GLFW + MiniAudio + OpenGL.

Building native libraries

stb_truetype (font rasterizer)

# macOS
gcc -dynamiclib -O3 stb_truetype.c -o libtruetype.dylib -lm

# Linux
gcc -shared -fPIC -O3 stb_truetype.c -o libtruetype.so -lm

# Windows (MinGW)
gcc -shared -O3 stb_truetype.c -o truetype.dll -lm

stb_image

# macOS
gcc -dynamiclib -O3 stb_image.c -o libimage.dylib -lm

# Linux
gcc -shared -fPIC -O3 stb_image.c -o libimage.so -lm

# Windows (MinGW)
gcc -shared -O3 stb_image.c -o image.dll -lm

miniaudio (audio)

# macOS
gcc -dynamiclib -O3 miniaudio.c -o libminiaudio.dylib -lm -framework CoreAudio -framework AudioToolbox -framework CoreFoundation

# Linux
gcc -shared -fPIC -O3 miniaudio.c -o libminiaudio.so -lm -lpthread -ldl

# Windows (MinGW)
gcc -shared -O3 miniaudio.c -o miniaudio.dll -lm -lksuser -lwinmm

Generating AST dumps

The FFI bindings are generated from Clang AST JSON dumps. Place the headers in the project root and run:

# GLFW
clang -Xclang -ast-dump=json -fsyntax-only glfw3.h > assets/glfw3.json

# stb_truetype (font rasterizer)
clang -Xclang -ast-dump=json -fsyntax-only stb_truetype.h > assets/stb_truetype.json

# stb_image
clang -Xclang -ast-dump=json -fsyntax-only stb_image.h > assets/stb_image.json

# miniaudio (audio)
clang -Xclang -ast-dump=json -fsyntax-only miniaudio.h > assets/miniaudio.json

# FreeType (optional)
clang -Xclang -ast-dump=json -fsyntax-only freetype2/freetype/freetype.h > assets/freetype.json

Generate Macros dumps

The FFI bindings are generated from Clang AST JSON dumps. Place the headers in the project root and run:

# GLFW
gcc -dM -E glfw3.h > assets/glfw3.macros

# stb_truetype (font rasterizer)
gcc -dM -E stb_truetype.h > assets/stb_truetype.macros

# stb_image
gcc -dM -E stb_image.h > assets/stb_image.macros

# miniaudio (audio)
gcc -dM -E miniaudio.h > assets/miniaudio.macros

# FreeType (optional)
gcc -dM -E freetype2/freetype/freetype.h > assets/freetype.macros

Regenerating FFI bindings

bun run build:glfw          # GLFW + OpenGL bindings
bun run build:miniaudio     # MiniAudio bindings
bun run build:freetype      # FreeType bindings
bun run build:truetype      # stb_truetype bindings
bun run build:image      # stb_image bindings

Running

bun install                 # Install dependencies
bun run src/index.ts        # Run the demo app

About

Ultra-high-performance, low-overhead native multimedia and windowing runtime for Bun. Powered by GLFW and miniaudio binding over `bun:ffi`

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages