{"id":15061323,"url":"https://github.com/fliphub/fliphub","last_synced_at":"2025-04-10T06:40:10.519Z","repository":{"id":57157262,"uuid":"82865013","full_name":"fliphub/fliphub","owner":"fliphub","description":"the easiest app builder","archived":false,"fork":false,"pushed_at":"2017-04-22T22:34:36.000Z","size":2046,"stargazers_count":30,"open_issues_count":22,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T10:35:54.397Z","etag":null,"topics":["babel","builder","bundler","cli","fliphub","fusebox","hubs","javascript","middleware","presets","rollup","tooling","webpack-configs"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fliphub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-23T00:04:06.000Z","updated_at":"2022-01-03T10:02:15.000Z","dependencies_parsed_at":"2022-08-26T14:13:05.314Z","dependency_job_id":null,"html_url":"https://github.com/fliphub/fliphub","commit_stats":null,"previous_names":["flip-box/flipbox"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fliphub%2Ffliphub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fliphub%2Ffliphub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fliphub%2Ffliphub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fliphub%2Ffliphub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fliphub","download_url":"https://codeload.github.com/fliphub/fliphub/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247934808,"owners_count":21020724,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["babel","builder","bundler","cli","fliphub","fusebox","hubs","javascript","middleware","presets","rollup","tooling","webpack-configs"],"created_at":"2024-09-24T23:18:16.115Z","updated_at":"2025-04-10T06:40:10.470Z","avatar_url":"https://github.com/fliphub.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[travis-image]: https://travis-ci.org/fliphub/fliphub.svg?branch=master\n[travis-url]: https://travis-ci.org/fliphub/fliphub\n[flipfam-image]: https://img.shields.io/badge/%F0%9F%8F%97%20%F0%9F%92%A0-flipfam-9659F7.svg\n[flipfam-url]: https://www.npmjs.com/package/flipfam\n[nsp-url]:https://nodesecurity.io/orgs/fliphub/projects/d37f0cc6-02ea-4f05-a8aa-3b6c1e08bd21\n[nsp-image]: https://nodesecurity.io/orgs/fliphub/projects/d37f0cc6-02ea-4f05-a8aa-3b6c1e08bd21/badge\n\n[fliphub-npm-image]: https://img.shields.io/npm/v/fliphub.svg\n[fliphub-npm-url]: https://npmjs.org/package/fliphub\n\n\u003c!-- [![Slack][slack-image]][slack-url] --\u003e\n\n# 🏗💠 fliphub\n[![Build Status][travis-image]][travis-url]\n[![NPM version][fliphub-npm-image]][fliphub-npm-url]\n[![fliphub][gitter-badge]][gitter-url]\n[![flipfam][flipfam-image]][flipfam-url]\n[![Dependencies][david-deps-img]][david-deps-url]\n[![MIT License][license-image]][license-url]\n[![Standard JS Style][standard-image]][standard-url]\n[![NSP Status][nsp-image]][nsp-url]\n![examples-badge](https://img.shields.io/badge/📘-examples-blue.svg?style=flat-square)\n[![PRs Welcome](https://img.shields.io/badge/🌽%20PRs-welcome-EFC052.svg?style=flat-square)](http://makeapullrequest.com)\n\n\u003e the builder, of builders.\n\n\n\n\n\n### 👾 all you need\n#### [see the example](examples/minimal)\n\nenables configs that would take hundreds or thousands of lines, with just a few properties.\n\n\n```js\nconst FlipHub = require('fliphub')\nnew FlipHub({entry: './src/index.js'}).build()\n```\n\n### 📦 installation\n```bash\nyarn add fliphub\nnpm i fliphub --save\n```\n\n\u003c!-- legend for all the packages 0.0?\n[cli][docs-cli]\n--\u003e\n\n### 🗝️ legend\n- [introduction](#-intro)\n- [all the apps](#-all-the-apps)\n- [flipfam][flipfam-url]\n- [fliphub-core](#fliphub-core)\n  - [presets](#-presets)\n  - [hubs](#-hubs)\n- [examples](#-examples)\n- [apps](#-apps)\n- [cli](#-cli)\n- [terminology](#-terminology)\n\n\n## 📅❗ **__[changelog][changelog]__**\nkeep up to date! updated frequently.\n\n[changelog]: https://github.com/fliphub/fliphub/blob/master/docs/CHANGELOG.md\n\n\u003c!-- also see the [board](https://github.com/fliphub/fliphub/issues#boards?repos=82865013) --\u003e\n\n#### all the apps\n\none app? two apps? 100 apps? fusebox, rollup, _and_ webpack? nodejs server, inferno, and react? existing configs? happy and no happy pack? at the same time? no sweat.\n\n```js\nconst FlipHub = require('fliphub')\n\n// take an existing config, flip it to fusebox or rollup or webpack\nconst config = require('./webpack.config.js')\nconfig.flips = {to: 'fusebox'}\n\nconst apps = [\n  config,\n\n  {\n    name: 'infernod',\n    entry: './src/index.js',\n    presets: ['inferno', 'neutrino-preset-happypack', 'web'],\n  },\n  {\n    name: 'backend',\n    entry: './backend/src',\n    presets: ['node'],\n  },\n]\n\nFlipHub.init({apps}).build()\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n#### ♻️ reusability?\n```js\nconst { FlipHub } = require('fliphub')\nconst apps = [\n  {\n    name: 'reacted',\n    presets: ['react'],\n  },\n  {\n    name: 'infernod',\n    presets: ['inferno'],\n  },\n]\n\nFlipHub.init({\n  presets: {\n    reusable: {\n      entry: './src/index.js',\n      flips: {to: 'fusebox'},\n    },\n  },\n  apps,\n}).build()\n```\n\n[they are configured for each environment by default][docs-presets-default]\n[and can be customized for any config you want](#-flags)\n\n## ⚠️ the problem\n- [build systems are notorious for their difficulty][medium-webpack-difficulty].\n- finding and setting up the right\n  - scripts\n  - plugins\n  - loaders\n  - configs\n  - requiring the dependencies\n  - bloating your config files\n  - making configs for\n    - development bundling\n    - production bundling\n    - production dev bundling\n    - test environments\n    - development servers\n    - production servers\n- tedious, with a high barrier of entry\n- time intensive; switching build systems for 1 app is grueling\n- ... all of the above for _every application_\n\n## ✔️ the solution\n- [with the flip of a flag](#-flags), you can go from [webpack][webpack-url], to [fusebox][fusebox-url], to [rollup][rollup-url] or any other supported [build system][docs-build-systems].\n- [existing configs](#-examples) can be used and enhanced with ease.\n- [easily create presets \u0026 hubs][docs-presets-add-your-own] to start converting your build system to another, flip the switch to keep compatibility without breaking everything,\n\n\n\n\n\n\n\n# 📘 examples\n- [examples-minimal][examples-minimal]\n- [examples-canadas][examples-canadas]\n- [examples-monorepo][examples-monorepo]\n- [examples-react][examples-react]\n- [examples-react-and-alias][examples-react-and-alias]\n- [examples-typescript][examples-typescript]\n- [examples-node][examples-node]\n- [examples-lint][examples-lint]\n- [examples-compat][examples-compat] 🚧\n- [examples-tests][examples-tests] 🚧\n- [examples-webworker][examples-webworker] 🚧\n- [examples-code-splitting][examples-code-splitting] 🚧\n- [examples-es6-ts-config][examples-es6-ts-config] 🚧\n- [examples-flags][examples-flags] 🚧\n\n\n# 📚 documentation\n\n- [📖 see the wiki][wiki-url]\n- [🚧 see the work-in-progress docs][docs-wip]\n\n\n# 💠 hubs (middleware +)\n[docs hubs][docs-hubs]\n\n\n## 🚩 flags\n#### ☕🏳️ filters\nwhite-list flags are used to filter which apps are run for different [operations][wiki-url]\n\n## 🏹 aliasing\n\n[see the alias docs][docs-alias]\n\n\n## 🍰 presets\n\n[see the preset documentation][docs-presets]\n\n```js\nconst apps = [{\n  presets: ['alias-resolve', 'neutrino-preset-web', 'eslint'],\n}]\n\nconst appsWithArgs = [{\n  presets: {\n    aliasResolve: __dirname,\n    presetWeb: null,\n    eslint: require('./.eslintrc.js')\n  },\n}]\n```\n\n\u003c!--\n# 🕳 digging deeper\n## 🖇 tools\n- see flipfam\n--\u003e\n\n\n# v0\nv0 is still available as [flipbox][flipbox-url] but is unmaintained.\n\n[docs-wip]: https://github.com/fliphub/fliphub/tree/master/docs\n[docs-build-systems]: https://github.com/fliphub/fliphub/wiki/supported-build-systems\n[docs-presets-add-your-own]: https://github.com/fliphub/fliphub/wiki/presets-add-your-own\n[wip-docs]: https://github.com/fliphub/fliphub/tree/master/docs\n[wiki-url]: https://github.com/fliphub/fliphub/wiki\n[flipbox-url]: https://www.npmjs.com/package/flipbox\n[webpack-url]: https://webpack.js.org/\n[rollup-url]: rollupjs.org\n[fusebox-url]: fuse-box.org\n[docs-presets-default]: https://github.com/fliphub/fliphub/wiki/presets-default\n[examples-minimal]: https://github.com/fliphub/fliphub/tree/master/examples/minimal\n[examples-compat]: https://github.com/fliphub/fliphub/tree/master/examples/compat\n[examples-react]: https://github.com/fliphub/fliphub/tree/master/examples/react\n[examples-react-and-alias]: https://github.com/fliphub/fliphub/tree/master/examples/react-and-alias\n[examples-canadas]: https://github.com/fliphub/fliphub/tree/master/examples/canadas\n[examples-lint]: https://github.com/fliphub/fliphub/tree/master/examples/lint\n[examples-empty]: https://github.com/fliphub/fliphub/tree/master/examples/empty\n[examples-monorepo]: https://github.com/fliphub/fliphub/tree/master/examples/monorepo\n[examples-typescript]: https://github.com/fliphub/fliphub/tree/master/examples/typescript\n[examples-webworker]: https://github.com/fliphub/fliphub/tree/master/examples/webworker\n[examples-tests]: https://github.com/fliphub/fliphub/tree/master/examples/tests\n[examples-code-splitting]: https://github.com/fliphub/fliphub/tree/master/examples/code-splitting\n[examples-es6-ts-config]: https://github.com/fliphub/fliphub/tree/master/examples/es6-ts-config\n[examples-node]: https://github.com/fliphub/fliphub/tree/master/examples/node\n[examples-flags]: https://github.com/fliphub/fliphub/tree/master/examples/flags\n\n[src-core-workflow]: https://github.com/fliphub/fliphub/tree/master/packages/fliphub-core/src\n[src-fliphubp-hubs]: https://github.com/fliphub/fliphub/tree/master/packages/fliphub/src/hubs\n[src-fliphubp-configdefaulter]: https://github.com/fliphub/fliphub/blob/master/packages/fliphub/src/hubs/ConfigDefaulter.js\n[src-fliphubp-presets]: https://github.com/fliphub/fliphub/tree/master/packages/fliphub/src/presets\n[src-fliphub-core]: https://github.com/fliphub/fliphub/tree/master/packages/fliphub/src/core\n\n\n[docs-cli]: https://github.com/fliphub/fliphub/tree/master/docs/cli.md\n[docs-cli]: https://github.com/fliphub/fliphub/tree/master/docs/cli.md\n[docs-alias]: https://github.com/fliphub/fliphub/tree/master/docs/cli.md\n[docs-presets]: https://github.com/fliphub/fliphub/tree/master/docs/cli.md\n[docs-dependencies]: https://github.com/fliphub/fliphub/tree/master/docs/dependencies.md\n[docs-debugging]: https://github.com/fliphub/fliphub/tree/master/docs/debugging.md\n[docs-event-lifecycle]: https://github.com/fliphub/fliphub/tree/master/docs/event-lifecycle.md\n[docs-hubs]: https://github.com/fliphub/fliphub/tree/master/docs/hubs.md\n[docs-next]: https://github.com/fliphub/fliphub/tree/master/docs/next.md\n[docs-operations]: https://github.com/fliphub/fliphub/tree/master/docs/operations.md\n[docs-preset-sourcemaps]: https://github.com/fliphub/fliphub/tree/master/docs/preset-sourcemaps.md\n[docs-preset-html]: https://github.com/fliphub/fliphub/tree/master/docs/preset-html.md\n[docs-preset-default]: https://github.com/fliphub/fliphub/tree/master/docs/preset-default.md\n\n\n\n\n[new-issue-url]: https://github.com/fliphub/fliplog/issues/new\n[fliplog-url]: https://www.npmjs.com/package/fliplog\n[flipfile-url]: https://www.npmjs.com/package/flipfile\n\n\n[src-pkg-json]: https://github.com/fliphub/fliphub/tree/master/package.json\n[src-params]: https://github.com/fliphub/fliphub/tree/master/src/middleware/defaults.js\n[src-fusebox-middleware]: https://github.com/fliphub/fliphub/tree/master/src/middleware/builders/fusebox.js\n[src-presets]: https://github.com/fliphub/fliphub/tree/master/src/middleware/presets.js\n[src-defaults]: https://github.com/fliphub/fliphub/tree/master/src/middleware/defaults.js\n\n[flow-middleware]: https://github.com/fliphub/fliphub/tree/master/flow/MiddlewareInterface\n[flow-app]: https://github.com/fliphub/fliphub/tree/master/flow/MiddlewareInterface\n\n\n\n[david-deps-img]: https://david-dm.org/fliphub/fliphub.svg\n[david-deps-url]: https://david-dm.org/fliphub/fliphub\n\n[emoji-commits]: https://github.com/aretecode/emoji-commits/\n[chalk]: https://github.com/chalk/chalk\n\n[react-refs-error]: https://facebook.github.io/react/docs/error-decoder.html?invariant=119\n[shrinkwrap]: https://docs.npmjs.com/cli/shrinkwrap\n\n[babel-setup]: https://babeljs.io/docs/setup/\n[babel-module-resolver]: https://github.com/tleunen/babel-plugin-module-resolver\n[babel-loader-builder]: https://github.com/aretecode/babel-loader-builder\n[babel-monorepo]: [https://github.com/babel/babel/blob/master/doc/design/monorepo.md]\n[babel-make]: [https://github.com/babel/babel/blob/master/Makefile]\n\n[webpack]: https://webpack.js.org/\n[webpack-alias]: https://webpack.js.org/configuration/resolve/\n[webpack-root]: https://webpack.js.org/guides/migrating/#resolve-root-resolve-fallback-resolve-modulesdirectories\n[medium-webpack-difficulty]: https://medium.com/@dtothefp/why-can-t-anyone-write-a-simple-webpack-tutorial-d0b075db35ed#.b57i57t24\n[webpack-externals]: https://webpack.js.org/configuration/externals/#components/sidebar/sidebar.jsx\n\n[happypack]: https://github.com/amireh/happypack\n[webpack-plugin-uglify]: https://webpack.js.org/guides/migrating/#uglifyjsplugin-minimize-loaders\n\n[fusebox]: http://fuse-box.org/\n[fusebox-alias]: http://fuse-box.org/#alias\n[fusebox-homedir]: http://fuse-box.org/#home-directory\n[fuse-arithmetic]: http://fuse-box.org/#arithmetic-instructions\n\n[sigh]: https://github.com/sighjs/sigh\n[fly]: https://github.com/flyjs/fly\n[brunch]: http://brunch.io/\n[broccili]: [http://broccolijs.com/]\n[gearjs]: [http://gearjs.org/]\n[yeoman]: [http://yeoman.io/]\n[make]: [https://github.com/mklabs/make]\n[documentationjs]: [http://documentation.js.org/]\n[ninjabuild]: [https://ninja-build.org/manual.html]\n\n[meteor-scripts]: [https://github.com/meteor/meteor/tree/devel/scripts]\n[facebook-gulp]: [https://github.com/facebook/react/blob/master/gulpfile.js]\n[facebook-scripts]: [https://github.com/facebook/react/tree/master/scripts]\n[commanderjs]: https://github.com/tj/commander.js/\n\n[node-global]: https://nodejs.org/api/globals.html\n[node-process-env]: https://nodejs.org/api/process.html#process_process_env\n[node-util-format]: https://nodejs.org/api/util.html#util_util_format_format\n[nodejs-tosource]: https://github.com/marcello3d/node-tosource\n\n[yargs]: https://www.npmjs.com/package/yargs\n[node-flag]: https://www.npmjs.com/package/node-flag\n\n[standard-image]: https://img.shields.io/badge/%F0%9F%91%95%20code%20style-standard%2Bes6+-blue.svg\n[standard-url]: https://github.com/aretecode/eslint-config-aretecode\n[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat\n[license-url]: https://spdx.org/licenses/MIT\n\n[slack-url]: https://now-examples-slackin-mquyzyrecx.now.sh/\n[slack-image]: https://now-examples-slackin-mquyzyrecx.now.sh/badge.svg\n\n[com-avoid-symlinks]: @TODO\n[com-massive-package-sizes]: @TODO\n[gitter-badge]: https://img.shields.io/gitter/room/fliphub/pink.svg\n[gitter-url]: https://gitter.im/fliphub/Lobby\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffliphub%2Ffliphub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffliphub%2Ffliphub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffliphub%2Ffliphub/lists"}