Repository files navigation

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

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

Brisk

Build Status

A cross-platform set of tools for building native UIs with Reason/OCaml.

The goal of the project is to allow developers efficiently create fast, native apps for all major platforms. It's the best of both worlds: speed and portability, simplicity and great APIs.

🚧 NOTE: Brisk is a Work In Progress. 🚧


Requirements

Our development workflow is managed with esy. It's an incredibly fast package manager that provides reproducible, sandboxed environment for your projects and caches builds.

npm -g i esy@latest

We're open to contributions for supporting opam workflow

macOS

Xcode

In order to build the OSX binary you will need to install Xcode, as well as Command Line Tools:

xcode-select --install

Other Platforms

We're looking for contributors who would help us kickstart Windows and Android renderers.

Getting Started

Examples

This repository contains the core tooling, platform-specific renderers, and examples. To try the examples, clone the repository and run a project:

git clone git@github.com:briskml/brisk.git
cd brisk/examples/components-macos
esy
esy run
# for esy >= 6.0.0
esy run-script run

For the hacker-news example, you might hit esy/esy#943:

error: command failed: 'dune' 'build' '@all' '-p' 'hacker-news' (exited with 127)

In which case, as a stopgap, run the command directly:

esy dune build @all -p hacker-news
esy run

Motivation

We consider UI development an unsolved problem which is at the core of many inefficiencies both for creators and users. As a result, businesses lose money, hobbyists can't release their side projects, and users suffer from poor quality.

We've looked at React Native, Flutter, platform specific libraries, and hybrid frameworks. All of them have different trade-offs: you either give up runtime performance, developer efficiency, or quality. What's more, none of those solutions make it really easy and fast to build native UI apps. React (Native) is the closest one, but as good as it is, JavaScript constrains both runtime performance and developer productivity. React.js itself, our inspiration, is a great framework and Reason gives us tools to improve upon it.

With Brisk, we want to make building great performant apps quick and painless.

Design Decisions

We're building Brisk in Reason, a language with great performance characteristics - low memory footprint, near instant startup, and very fast execution. More importantly, it allows for great expressive APIs and has robust type system features, such as: Algebraic Data Types, Modules, and Pattern matching to name a few. (More about Reason)

All the layout and UI interactions happen on the main thread, leaving all IO/Networking on a secondary, background thread.

We made a deliberate choice to use native widgets to deliver the smoothest and platform-like experience. The macOS and iOS renderers leverage Cocoa; Windows renderer will build upon WPF (or UWP, help us make the choice); Android renderer will interface with Android SDK, etc.

This will provide great performance and allow for using both the native system controls, and implementing identical cross-platform components.

If you'd rather have a single cross-platform codebase similar to Electron apps, our sister project Revery's contributors took it upon themselves to rebuild the whole UI infrastructure from scratch to achieve the same UI on all platforms (think flutter).

Fortunately for everyone, Brisk's core has been factored out into brisk-reconciler - a separate framework that now powers both projects. In the future, we expect developers to be able to seamlessly switch between Revery and Brisk for different parts of their application. 🤯

Contributing

Follow the instructions for the editor plugins here.

To set up a development workflow, simply run this from the project root:

esy

It will install all dependencies and build the project.

To execute the test suites for macOS renderer, use:

esy test:mac

Check out the Good First Issues list and don't forget to join our Discord server if you have any questions.

Community

About

✨Cross-platform set of tools for building native UIs with Reason/OCaml

Topics

Resources

Stars

556 stars

Watchers

21 watching

Forks

Releases

Packages

Used by

Contributors

Languages