Repository files navigation

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

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

GitterNPM versionBuild StatusTest CoverageDependency StatusFollow @FabrixApp on Twitter

Fabrix is a strongly typed modern web application framework for Node.js or even Browsers. It builds on the pedigree of Rails and Grails to accelerate development by adhering to a straightforward, convention-based, API-driven design philosophy.

Note: Because Fabrix is lightweight and easily extendable, it's also very very fast and well suited for function based environments.

Getting Started

Install

Note: The CLI is under construction, search for example apps in the meantime

Install the Fabrix CLI. This will help you generate a Fabrix app and more.

$ npm install @fabrix/fab-cli -g

Generate A New Fabrix App

$ fab app <new_app_name>

Start Sewing

Fabrix uses a CLI to generate scaffolding for new applications, and to create resources inside the application.

$ fab --help
Usage:
fab
Generators:
Create New App
fab app <app-name>
Create New Model
fab model <model-name>
Create New Controller
fab controller <controller-name>
Create New Policy
fab policy <policy-name>
Create New Service
fab service <service-name>
Create New Spool
fab spool <spool-name>

Run

Once installation is complete, begin weaving!

$ npm run compile && node dist/server.js

or simply

$ npm start

Sew on and Sew Forth!

Fabrix is really focused on bringing great libraries together in congruent ways. So if you have something like a web scrapping library, then it's easy to implement that as a Spool and share it with the ever growing fabrix ecosystem.

Spools

Spools extend the framework's capabilities and allow developers to leverage existing ecosystem tools through a simple and well-defined API. New features, behavior, APIs, and other functionality can be added to the Fabrix framework through Spools.

Many Fabrix installations will include some of the following Spools:

Compatibility

  • Windows, Mac, and Linux
  • Node 8.0 and newer

Documentation

See fabrix.app/docs for complete documentation.

More Resources

Tutorials

Coming soon!

Videos

Coming soon!

Support

FAQ

See https://github.com/fabrix-app/fabrix/wiki/FAQ

Contributing

We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.

Development

Fabrix uses a continuous integration process and all tests must pass for Fabrix to release a new version. CircleCI releases a new version when a PR is merged into master. For local development, you can download CircleCI's local development tools and run local tests before submitting a Pull Request.

Fabrix maintains a high score of coverage tests, any Pull Request should have well written Integration and Unit tests that increase the overall coverage score.

Browser Support

Browser support provided by Webpack is on it's way.

webpack --config ./test-browser/webpack.config.js

License

MIT

Legacy

Fabrix would not have been possible without the substantial work done by the Trails.js team. While Fabrix maintains a different code base and system of best practices, none of this would have been possible without the contributions from the Trails community.

About

Strongly Typed Modern Web Application Framework for Node.js and Browsers

Topics

Resources

Contributing

Stars

108 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages