{"id":22660649,"url":"https://github.com/openovate/reactus","last_synced_at":"2026-05-06T14:31:20.158Z","repository":{"id":44974673,"uuid":"212230353","full_name":"Openovate/reactus","owner":"Openovate","description":"An un-opinionated, un-routed React app build engine.","archived":false,"fork":false,"pushed_at":"2023-01-04T22:04:36.000Z","size":1044,"stargazers_count":0,"open_issues_count":25,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T13:27:56.048Z","etag":null,"topics":["react","react-frameworks","webpack"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Openovate.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-02T01:11:35.000Z","updated_at":"2019-10-09T01:35:44.000Z","dependencies_parsed_at":"2023-02-02T21:32:12.566Z","dependency_job_id":null,"html_url":"https://github.com/Openovate/reactus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Openovate%2Freactus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Openovate%2Freactus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Openovate%2Freactus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Openovate%2Freactus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Openovate","download_url":"https://codeload.github.com/Openovate/reactus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246158256,"owners_count":20732754,"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":["react","react-frameworks","webpack"],"created_at":"2024-12-09T11:11:22.508Z","updated_at":"2026-05-06T14:31:20.068Z","avatar_url":"https://github.com/Openovate.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reactus\n\nAn un-opinionated, un-routed version of a **React** app build engine. There are\nmany great React frameworks, most notably [Next.js](https://nextjs.org/) and\n[Razzle](https://github.com/jaredpalmer/razzle) each helping developers setup\ntheir React app faster than traditional tooling. Reactus is a\n**lite** version of a React framework, focused on generating bundles via\n**Webpack**.\n\nUse **Reactus** if:\n\n - You want to define your own custom file structure\n - You want to create your own React framework\n - You have spent an exhaustive amount of time looking at Webpack's code.\n - You like to work with bare metal libraries\n\nDo not use **Reactus** if:\n\n - You want an out of box full stack solution\n - You want a Zero config framework\n\n## Navigation\n\n - [1. Install](#1-install)\n - [2. Usage](#2-usage)\n   - [Quick Start Example](https://github.com/Openovate/reactus/tree/master/examples/quick-start-example)\n   - [Modular Example](https://github.com/Openovate/reactus/tree/master/examples/modular-example)\n   - [Modular Global Example](https://github.com/Openovate/reactus/tree/master/examples/modular-global-example)\n   - [Bare Metal Example](https://github.com/Openovate/reactus/tree/master/examples/bare-metal-example)\n - [3. Customizing](#23-customizing)\n   - 3.1. [Use a Custom Entry File](#31-use-a-custom-entry-file)\n   - 3.2. [Use a Custom Router File](#32-use-a-custom-router-file)\n   - 3.3. [White Labeling](#33-white-labeling)\n   - 3.4. [Adding Custom Virtual Files](#34-adding-custom-virtual-files)\n   - 3.5. [Use a Custom Page](#35-use-a-custom-page)\n - [4. API](https://github.com/Openovate/reactus/tree/master/docs/globals.md)\n\n### 1. Install\n\n```bash\n$ npm i --save reactus\n```\n\n### 2. Usage\n\nThe following examples show how to use `reactus` in detail.\n\n - [Quick Start Example](https://github.com/Openovate/reactus/tree/master/examples/quick-start-example)\n - [Modular Example](https://github.com/Openovate/reactus/tree/master/examples/modular-example)\n - [Modular Global Example](https://github.com/Openovate/reactus/tree/master/examples/modular-global-example)\n - [Bare Metal Example](https://github.com/Openovate/reactus/tree/master/examples/bare-metal-example)\n\n### 3. Customizing\n\nThis section will show how `reactus` can be changed to fit your project needs.\n\n#### 3.1. Use a Custom Entry File\n\nUsed to be a quick start point, `reactus` uses a\n[pre-defined entry file](https://github.com/Openovate/reactus/tree/master/src/client/entry.js).\nYou can change this with the following snippet of code.\n\n```js\n//#FILE: [ROOT]/src/engine.js\n...\nengine.set('source', 'entry', '/absolute/path/to/your/entry/file.js')\n...\n```\n\nAdditionally in your own `[ROOT]/webpack.config.js`, you can simply point the\nentry directly to your file.\n\n#### 3.2. Use a Custom Router File\n\nUsed to be a quick start point, `reactus` uses a\n[pre-defined router file](https://github.com/Openovate/reactus/tree/master/src/client/Router.jsx).\nYou can change this with the following snippet of code.\n\n```js\n//#FILE: [ROOT]/src/engine.js\n...\nengine.set('source', 'router', '/absolute/path/to/your/router/file.jsx')\n...\n```\n\nIf you are using your own custom entry file like in `3.1. Use a Custom Entry File`,\nyou can directly import your custom router from there.\n\n#### 3.3. White Labeling\n\nIf you are creating your own framework using `reactus`, you may want to\nchange the brand name. You can do this with the following snippet of code.\n\n```js\n//#FILE: [ROOT]/src/engine.js\n...\nengine.set('label', 'your_framework')\n...\n```\n\nThis way, virtual files can be accessed like `your_framework/views/product/detail.jsx`\nfor example.\n\n#### 3.4. Adding Custom Virtual Files\n\nIf you want to declare custom virtual files, you can do so like the following\nsnippet.\n\n```js\n//#FILE: [ROOT]/src/engine.js\n...\nengine.set('map', 'node_modules/reactus/custom.js', '/absolute/path/to/your/code');\n...\n```\n\nThis way, virtual files can be accessed like `reactus/custom` for example. `map`\nis formed as `engine.set('map', target, source)` where the following parameters\nare accepted.\n\n - `target` - the virtual file path *(can be a file or folder)*\n - `source` - the actual path where the file is located, or;\n - `source` - the actual path where the folder is located, or;\n - `source` - the string code to place in the virtual file.\n\n#### 3.5. Use a Custom Page\n\nUsed to be a quick start point, `reactus` uses a\n[pre-defined entry file](https://github.com/Openovate/reactus/tree/master/src/client/Page.jsx).\nYou can change this with the following snippet of code.\n\n```js\n//#FILE: [ROOT]/src/engine.js\n...\nengine.set('page', '/absolute/path/to/your/Page.jsx')\n...\n```\n\n\u003e NOTE: If you are using the default `Router.jsx`, we pass hydrated data using script#react-data in the Page component\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenovate%2Freactus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenovate%2Freactus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenovate%2Freactus/lists"}