{"id":13527238,"url":"https://github.com/ctrlplusb/react-universally","last_synced_at":"2025-04-01T09:31:19.186Z","repository":{"id":41183237,"uuid":"61155730","full_name":"ctrlplusb/react-universally","owner":"ctrlplusb","description":"A starter kit for universal react applications.","archived":true,"fork":false,"pushed_at":"2018-12-26T14:16:47.000Z","size":2561,"stargazers_count":1692,"open_issues_count":59,"forks_count":242,"subscribers_count":65,"default_branch":"master","last_synced_at":"2025-03-27T07:02:52.433Z","etag":null,"topics":["boilerplate","progressive-web-app","react","server-side-rendering","starter-kit"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/ctrlplusb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2016-06-14T21:05:38.000Z","updated_at":"2024-12-27T00:42:00.000Z","dependencies_parsed_at":"2022-09-03T13:24:58.248Z","dependency_job_id":null,"html_url":"https://github.com/ctrlplusb/react-universally","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlplusb%2Freact-universally","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlplusb%2Freact-universally/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlplusb%2Freact-universally/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrlplusb%2Freact-universally/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ctrlplusb","download_url":"https://codeload.github.com/ctrlplusb/react-universally/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246616065,"owners_count":20806048,"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":["boilerplate","progressive-web-app","react","server-side-rendering","starter-kit"],"created_at":"2024-08-01T06:01:43.843Z","updated_at":"2025-04-01T09:31:18.274Z","avatar_url":"https://github.com/ctrlplusb.png","language":"JavaScript","readme":"\u003cp align='center'\u003e\n  \u003ch1 align='center'\u003eReact, Universally\u003c/h1\u003e\n  \u003cp align='center'\u003e\u003cimg width='150' src='https://raw.githubusercontent.com/ctrlplusb/assets/master/logos/react-universally.png' /\u003e\u003c/p\u003e\n  \u003cp align='center'\u003eA starter kit for universal react applications.\u003c/p\u003e\n\u003c/p\u003e\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-20-orange.svg?style=flat-square)](#contributors)\n\n## About\n\nThis starter kit contains all the build tooling and configuration you need to kick off your next universal React project, whilst containing a minimal \"project\" set up allowing you to make your own architecture decisions (Redux/MobX etc).\n\n\u003e NOTICE: Please read this important [issue](https://github.com/ctrlplusb/react-universally/issues/409) about the behaviour of this project when using `react-async-component`, which is by default bundled with it.\n\n## Features\n\n  - 👀 `react` as the view.\n  - 🔀 `react-router` v4 as the router.\n  - 🚄 `express` server.\n  - 🎭 `jest` as the test framework.\n  - 💄 Combines `prettier` and Airbnb's ESlint configuration - performing code formatting on commit. Stop worrying about code style consistency.\n  - 🖌 Very basic CSS support - it's up to you to extend it with CSS Modules etc.\n  - ✂️ Code splitting - easily define code split points in your source using `react-async-component`.\n  - 🌍 Server Side Rendering.\n  - 😎 Progressive Web Application ready, with offline support, via a Service Worker.\n  - 🐘 Long term browser caching of assets with automated cache invalidation.\n  - 📦 All source is bundled using Webpack v3.\n  - 🚀 Full ES2017+ support - use the exact same JS syntax across the entire project. No more folder context switching! We also only use syntax that is stage-3 or later in the TC39 process.\n  - 🔧 Centralised application configuration with helpers to avoid boilerplate in your code. Also has support for environment specific configuration files.\n  - 🔥 Extreme live development - hot reloading of ALL changes to client/server source, with auto development server restarts when your application configuration changes.  All this with a high level of error tolerance and verbose logging to the console.\n  - ⛑ SEO friendly - `react-helmet` provides control of the page title/meta/styles/scripts from within your components.\n  - 🤖 Optimised Webpack builds via HappyPack and an auto generated Vendor DLL for smooth development experiences.\n  - 🍃 Tree-shaking, courtesy of Webpack.\n  - 👮 Security on the `express` server using `helmet` and `hpp`.\n  - 🏜 Asset bundling support. e.g. images/fonts.\n  - 🎛 Preconfigured to support development and optimised production builds.\n  - ❤️ Preconfigured to deploy to `now` with a single command.\n\nRedux/MobX, data persistence, modern styling frameworks and all the other bells and whistles have been explicitly excluded from this starter kit.  It's up to you to decide what technologies you would like to add to your own implementation based upon your own needs.\n\n\u003e However, we now include a set of \"feature branches\", each implementing a technology on top of the clean master branch.  This provides you with an example on how to integrate said technologies, or use the branches to merge in a configuration that meets your requirements.  See the [`Feature Branches`](/internal/docs/FEATURE_BRANCHES.md) documentation for more.\n\n## Getting started\n\n```bash\ngit clone https://github.com/ctrlplusb/react-universally my-project\ncd my-project\nnpm install\nnpm run develop\n```\n\nNow go make some changes to the `Home` component to see the tooling in action.\n\n## Docs\n\n - [Project Overview](/internal/docs/PROJECT_OVERVIEW.md)\n - [Project Configuration](/internal/docs/PROJECT_CONFIG.md)\n - [Package Script Commands](/internal/docs/PKG_SCRIPTS.md)\n - [FAQ](/internal/docs/FAQ.md)\n - [Feature Branches](/internal/docs/FEATURE_BRANCHES.md)\n - [Deploy your very own Server Side Rendering React App in 5 easy steps](/internal/docs/DEPLOY_TO_NOW.md)\n - [Changelog](/CHANGELOG.md)\n\n## Who's using it and where?\n\nYou can see who is using it and how in [the comments here](https://github.com/ctrlplusb/react-universally/issues/437). Feel free to add to that telling us how you are using it, we'd love to hear from you.\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n| [\u003cimg src=\"https://avatars3.githubusercontent.com/u/243161?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAndrés Calabrese\u003c/sub\u003e](https://github.com/aoc)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=aoc) | [\u003cimg src=\"https://avatars3.githubusercontent.com/u/1965897?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAndrey Luiz\u003c/sub\u003e](https://andreyluiz.github.io/)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=andreyluiz) | [\u003cimg src=\"https://avatars3.githubusercontent.com/u/3148205?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eAlin Porumb\u003c/sub\u003e](https://github.com/alinporumb)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=alinporumb) | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/4349324?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eBenjamin Kniffler\u003c/sub\u003e](https://github.com/bkniffler)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=bkniffler) | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/180773?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eBirkir Rafn Guðjónsson\u003c/sub\u003e](https://medium.com/@birkir.gudjonsson)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Abirkir) [💻](https://github.com/ctrlplusb/react-universally/commits?author=birkir) 👀 | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/2063102?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eCarson Perrotti\u003c/sub\u003e](http://carsonperrotti.com)\u003cbr /\u003e💬 [💻](https://github.com/ctrlplusb/react-universally/commits?author=carsonperrotti) [📖](https://github.com/ctrlplusb/react-universally/commits?author=carsonperrotti) 👀 | [\u003cimg src=\"https://avatars1.githubusercontent.com/u/13365531?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eChristian Glombek\u003c/sub\u003e](https://github.com/LorbusChris)\u003cbr /\u003e[🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3ALorbusChris) [💻](https://github.com/ctrlplusb/react-universally/commits?author=LorbusChris) |\n| :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| [\u003cimg src=\"https://avatars3.githubusercontent.com/u/603683?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eChristoph Werner\u003c/sub\u003e](https://twitter.com/code_punkt)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Acodepunkt) [💻](https://github.com/ctrlplusb/react-universally/commits?author=codepunkt) 👀 | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/1399894?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eDavid Edmondson\u003c/sub\u003e](https://github.com/threehams)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=threehams) | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/10954870?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eDion Dirza\u003c/sub\u003e](https://github.com/diondirza)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Adiondirza) [💻](https://github.com/ctrlplusb/react-universally/commits?author=diondirza) [📖](https://github.com/ctrlplusb/react-universally/commits?author=diondirza) 👀 | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/254095?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eEvgeny Boxer\u003c/sub\u003e](https://github.com/evgenyboxer)\u003cbr /\u003e[🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Aevgenyboxer) [💻](https://github.com/ctrlplusb/react-universally/commits?author=evgenyboxer) | [\u003cimg src=\"https://avatars2.githubusercontent.com/u/191304?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eJoe Kohlmann\u003c/sub\u003e](http://kohlmannj.com)\u003cbr /\u003e[🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Akohlmannj) [💻](https://github.com/ctrlplusb/react-universally/commits?author=kohlmannj) | [\u003cimg src=\"https://avatars2.githubusercontent.com/u/24992?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eLucian Lature\u003c/sub\u003e](https://www.linkedin.com/in/lucianlature/)\u003cbr /\u003e[🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Alucianlature) [💻](https://github.com/ctrlplusb/react-universally/commits?author=lucianlature) 👀 | [\u003cimg src=\"https://avatars1.githubusercontent.com/u/1624703?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eMark Shlick\u003c/sub\u003e](https://github.com/markshlick)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=markshlick) |\n| [\u003cimg src=\"https://avatars1.githubusercontent.com/u/7436773?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eRyan Lindskog\u003c/sub\u003e](https://www.RyanLindskog.com/)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=rlindskog) | [\u003cimg src=\"https://avatars1.githubusercontent.com/u/977713?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSteven Enten\u003c/sub\u003e](http://enten.fr)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Aenten) [💻](https://github.com/ctrlplusb/react-universally/commits?author=enten) 👀 | [\u003cimg src=\"https://avatars1.githubusercontent.com/u/12164768?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSean Matheson\u003c/sub\u003e](http://www.ctrlplusb.com)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Actrlplusb) [💻](https://github.com/ctrlplusb/react-universally/commits?author=ctrlplusb) [📖](https://github.com/ctrlplusb/react-universally/commits?author=ctrlplusb) 💡 👀 [⚠️](https://github.com/ctrlplusb/react-universally/commits?author=ctrlplusb) 🔧 | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/6218853?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eSteven Truesdell\u003c/sub\u003e](https://steventruesdell.com)\u003cbr /\u003e💬 [🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Astrues) [💻](https://github.com/ctrlplusb/react-universally/commits?author=strues) [📖](https://github.com/ctrlplusb/react-universally/commits?author=strues) [⚠️](https://github.com/ctrlplusb/react-universally/commits?author=strues) | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/10552487?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eThomas Leitgeb\u003c/sub\u003e](https://twitter.com/_datoml)\u003cbr /\u003e[🐛](https://github.com/ctrlplusb/react-universally/issues?q=author%3Adatoml) [💻](https://github.com/ctrlplusb/react-universally/commits?author=datoml) | [\u003cimg src=\"https://avatars0.githubusercontent.com/u/595711?v=3\" width=\"100px;\"/\u003e\u003cbr /\u003e\u003csub\u003eTyler Nieman\u003c/sub\u003e](http://tsnieman.net/)\u003cbr /\u003e[💻](https://github.com/ctrlplusb/react-universally/commits?author=tsnieman) |\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlplusb%2Freact-universally","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fctrlplusb%2Freact-universally","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrlplusb%2Freact-universally/lists"}