Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ShaftDemo

ActionsGitHub repo sizeGitHub issuesGitHub pull requestsPlatforms

Shaft is a cross-platform UI framework designed for high-performance applications with a focus on simplicity and customizability.

A blog post introducing Shaft in details has been posted here.

New✨: Shaft now natively supports multi-window. Check out the Multi Window demo for more details.

Requirements

  • MacOS: Shaft requires Xcode to be installed. After installing Xcode, if you encounter errors like xcrun: error: unable to lookup item..., try update your command line tools following these instructions.

  • Linux:

    1. Install Swift from the official guide
    2. Install SDL backend dependencies from the official documentation. For Ubuntu 24.04, run:
    sudo apt install ninja-build pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev libunwind-dev libpipewire-0.3-dev libdecor-0-dev libfontconfig-dev
  • Windows: Install Swift following the official guide shoube be enough.

Get Stared

git clone https://github.com/ShaftUI/Shaft.git
cd Shaft
swift run Playground

These commands will launch the built-in Playground application, which serves as both an interactive demonstration and comprehensive documentation for the Shaft framework.

To create a new project with Shaft, the CounterTemplate is a good starting point.

Features

  • 🔥Hot reload

A cross-platform hot reload solution is developed along with Shaft, enabling developers to see changes in real-time without restarting the application. Simply follow the instructions in the SwiftReload or clone the CounterTemplate to get started.

  • Simple & Hackable

No build infrastructure or special toolchain required - just a regular Swift package containing both engine and framework, makes it easy to customize, extend, and adapt to your specific needs.

  • Built for demanding workloads

Built for demanding workloads with native multi-threading support, direct low-level graphics API access, and deterministic memory management through ARC. Scales effortlessly from simple apps to complex, resource-intensive applications.

  • Modular design

Shaft's modular design enables integration of custom backends and renderers without much effort. This flexibility allows for unique use cases like terminal-based UI or creating Wayland compositors, enabling developers to adapt the framework for specialized use cases.

  • Automatic UI-data synchronization

Data marked with @Observable enables automatic UI updates when values change. The framework automatically tracks these objects and efficiently refreshes only the affected UI components, eliminating the need for manual state management and reducing boilerplate code. This reactive approach ensures your UI stays synchronized with your data in a performant way:

@ObservableclassCounter{varcount=0}letcounter=Counter()classCounterView:StatelessWidget{func build(context:anyBuildContext)->anyWidget{Column{Text("Count: \(counter.count)")Button{
counter.count +=1} child:{Text("Increment")}}}}

Benchmarks

Shaft is fast from the beginning as it combines Flutter’s design with Swift’s native performance. And by leveraging ARC based memory management it uses as little memory as possible.

The benchmark was conducted on a 2021 MacBook Pro with Apple M1 Max processor and 64 GB of RAM.

Concepts

Architecture

  • Shaft Framework: Basicly a port of Flutter's framework part to Swift with minor changes. Most of Flutter's concepts should be applicable.
  • Shaft.Backend: An protocol that provides everything that the framework requires to run, such as event loop, text input, etc. It's a layer that abstracts the platform specific code.
  • Shaft.Renderer: An protocol that abstracts the underlying graphics API, such as Skia or CoreGraphics.
  • ShaftKit: The built-in customizable widget toolkit that provides high-level widgets for rapid application development.
  • ShaftApp: The application that developer writes.

More documentation can be found in the Playground app.

About

A cross-platform GUI framework for Swift, built for demanding workloads and developer ergonomics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages