{"id":19458227,"url":"https://github.com/transempiric/iso-web-template","last_synced_at":"2025-10-11T11:44:54.420Z","repository":{"id":92668008,"uuid":"126797942","full_name":"TransEmpiric/iso-web-template","owner":"TransEmpiric","description":"Spring + Universal + Isomorphic + JWT + React + Redux + React Router + Flow + Webpack + LESS -- Isomorphic Web Template","archived":false,"fork":false,"pushed_at":"2018-04-20T04:24:02.000Z","size":1463,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-11T11:44:53.431Z","etag":null,"topics":["flow","jwt","nashorn","react","redux","redux-thunk","spring-boot","spring-security","spring-template","ssr","thread-safety","webpack"],"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/TransEmpiric.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-26T08:31:31.000Z","updated_at":"2019-11-28T12:46:58.000Z","dependencies_parsed_at":"2023-03-08T18:15:19.177Z","dependency_job_id":null,"html_url":"https://github.com/TransEmpiric/iso-web-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TransEmpiric/iso-web-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TransEmpiric%2Fiso-web-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TransEmpiric%2Fiso-web-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TransEmpiric%2Fiso-web-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TransEmpiric%2Fiso-web-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TransEmpiric","download_url":"https://codeload.github.com/TransEmpiric/iso-web-template/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TransEmpiric%2Fiso-web-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007062,"owners_count":26084230,"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","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["flow","jwt","nashorn","react","redux","redux-thunk","spring-boot","spring-security","spring-template","ssr","thread-safety","webpack"],"created_at":"2024-11-10T17:25:57.593Z","updated_at":"2025-10-11T11:44:54.400Z","avatar_url":"https://github.com/TransEmpiric.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iso-web-template\n\n###### [Live Production Example](https://isowebtemplate.transempiric.com)\n\n###### Welcome to the ISO World\n\u003e*My dear, here we must run as fast as we can, just to stay in place.\u003cbr\u003e\nAnd if you wish to go anywhere you must run twice as fast as that.\u003cbr\u003e\u003cbr\u003e*— Lewis Carroll\n\n###### What is this?\n\u003e This is a tool set and example of how to create a production capable **`Spring Boot + React + Isomorphic Web Application`**.\nThe example template can render any view on the server or browser identically. One of the major draw backs of using React in Nashorn is thread safety.\nKeeping the Nashorn Engine thread safe and not shared, causes performance issues. The Nashorn Thread Safety problem is solved here by integrating \na new Spring View Resolver (`TransView`) with a Blocking Queue Resource Pool of **`THREAD-SAFE WARMED-UP NASHORN ENGINES`**. This repo provides a solution to the \nNashorn Thread Safety problem as well as a tool set for many other issues you are likely to encounter as you navigate through the ISO World (TransView, TransAuth, and TransReact).\n\n## Instructions\n\n### `How to run the production build`\n\n`Checkout the iso-web-template project via git.`\n```\ngit clone https://github.com/TransEmpiric/iso-web-template.git\n```\n\n`Insall all npm packages and run the global build from the trans-react root directory`\n```\ncd iso-web-template/src/main/trans-react\nnpm install\nnpm run build\n```\n\n`You can now serve the trans-react/ssr and trans-react/client modules from the iso-web-template root directory with Spring Boot.`\n\n```\ncd ../../../\n./gradlew bootRun\n```\n`With the browser navigate to http://localhost:8080`\n\n### `How to run the development build`\n`This will run a Webpack dev server`\n\n```\ncd iso-web-template/src/main/trans-react/client\nnpm run dev\n```\n\n`You may want to run the backend at the same time, which is Spring Boot, so...`\n\n```\ncd ../../../../\n./gradlew bootRun\n```\n\n`With the browser navigate to http://localhost:3000 to use the WebpackDevServer`\n\n## Back-end Features\n\n### TransView\n\u003eThread Safe, Dynamically Allocated, Warmed Up Nashorn Engine Pool\n\n- Uses Blocking Queue Resource Pool with Reentrant Lock and Dynamic Engine Creation\n- TransViewTemplateView.java: New Spring Template Integration\n- TransViewTemplateViewResolver.java: New Spring Template Integration \n- TransViewTemplateConfigurer.java - New Spring Integration\n- TransViewAssetManifest.java: Reads a JSON asset manifest file\n- See [TransView](src/main/java/com/transempiric/transView/README.md) sub-project for details\n\n### TransAuth\n\u003eStateless JWT Authentication Module for Spring Security.\n\n- Access Token and Refresh Token Workflow\n- Simple, other options can often be overkill\n- See [TransAuth](src/main/java/com/transempiric/transAuth/README.md) sub-project for details\n\n## UI Features\n\n### trans-react\n\u003e A React tool set and example with Server Side Rendering (SSR) Components. \nMade up of a Sever Side Rendering (SSR) module, [trans-react-ssr](src/main/trans-react/ssr/README.md)\nand a Client Side Render (BSR) module, [trans-react-client](src/main/trans-react/client/README.md).\n\n- Isomorphic, runs on the Nashorn\n- Multi-module Node Build\n- Easy to use Build Scripts\n- React with SSR\n- Follows Create React App Closely\n- React Router\n- HOC's for redirects, errors, and security\n- Redux\n- Flow\n- Webpack\n- Less\n- Stateless JWT Authentication w/ Spring Security\n- Token Authentication and Token Refresh Flow\n- See [trans-react](src/main/trans-react/README.md) sub-project for details\n\n## Test User:\nYou can login in with the following credentials:\n\u003cbr\u003e\njdev: I41LikeBeer!\n\n## Notes:\nThe subjects within may be moved to sperate projects eventually and posted on Maven Central or NPM.\nThere are lot of ideas here and not enough time to explain them all.\nPlease take a look and help out if you can.\n\n❤ From the Transempiric Collective\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransempiric%2Fiso-web-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftransempiric%2Fiso-web-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftransempiric%2Fiso-web-template/lists"}