{"id":13650222,"url":"https://github.com/derekbar90/catalyst","last_synced_at":"2025-10-25T20:31:41.531Z","repository":{"id":38749104,"uuid":"210376655","full_name":"derekbar90/catalyst","owner":"derekbar90","description":"Typescript NodeJS Microservices Boilerplate with Generator CLI - Moleculer, GraphQL, REST, OAuth2, Jaeger, Grafana, Prometheus, Ory Hydra, Ory Keto w/ Access Control middleware, Moleculer-DB GraphQL mixin, Pug, Redis, sibling client repo (login, persistance layer, react-native-web, ios, android)","archived":false,"fork":false,"pushed_at":"2023-01-05T08:59:11.000Z","size":10908,"stargazers_count":61,"open_issues_count":92,"forks_count":13,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-06T21:59:01.096Z","etag":null,"topics":["boilerplate","catalyst","docker","generator","grafana","graphql","jaeger","microservices","moleculer","nodejs","ory","ory-hydra","ory-keto","prometheus","pug","redis","traefik","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/derekbar90.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":"2019-09-23T14:30:02.000Z","updated_at":"2024-04-16T11:39:21.000Z","dependencies_parsed_at":"2023-02-03T21:46:44.504Z","dependency_job_id":null,"html_url":"https://github.com/derekbar90/catalyst","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/derekbar90/catalyst","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekbar90%2Fcatalyst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekbar90%2Fcatalyst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekbar90%2Fcatalyst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekbar90%2Fcatalyst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/derekbar90","download_url":"https://codeload.github.com/derekbar90/catalyst/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derekbar90%2Fcatalyst/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281015595,"owners_count":26430114,"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-25T02:00:06.499Z","response_time":81,"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":["boilerplate","catalyst","docker","generator","grafana","graphql","jaeger","microservices","moleculer","nodejs","ory","ory-hydra","ory-keto","prometheus","pug","redis","traefik","typescript"],"created_at":"2024-08-02T02:00:35.035Z","updated_at":"2025-10-25T20:31:40.727Z","avatar_url":"https://github.com/derekbar90.png","language":"TypeScript","readme":"\n![Moleculer](https://badgen.net/badge/Powered%20by/Moleculer/0e83cd)\n\n# Project Catalyst\n\nProject Catalyst is a microservices framework which allows you to create and deploy secured base application development tools within 10 minutes.\n\n![CLI Demo](https://github.com/derekbar90/catalyst/blob/master/_templates/cli.gif)\n\t\n## Initial setup\n\n  \n- Pull submodule for the catalyst client.\n\t- ```git submodule update --init --recursive```\n\t- `Note`: If you don't want to use the catalyst client then you can remove the service section from the docker-compose along with it's volume definition. \n- Run `npm i` first to setup any global dev tools which are used. These are defined in the `package.json` which is at the root of the project.\n- Setup acme config with your email at /traefik/traefik.toml\n- Run ```chmod 600 traefik/acme.json```\n\n## Ports Configs\n\n  \n\nThese can also be viewed by looking at the `docker-compose.yaml` file in the project root. Any exposed service is then label within this file for Traefik configuration\n\n  \n\n|Port |Service |\n|----------------|-------------------------------|\n|3000 |Traefik Main |\n|3001 |Traefik Admin |\n|4444 |Hydra Main |\n\n## `Required Setup Step: .ENV Config Setup`\n\n  \n\nIf you have not setup a .env file you must create one at the root of the project.\n\n  \n\nExample:\n\n  \n```\nHOST_NAME={YOUR_HOSTNAME}\nPOSTGRES_HOST==#############\nPOSTGRES_USER==#############\nPOSTGRES_PORT=5432\nPOSTGRES_PASSWORD==#############\nPOSTGRES_DB=postgres\nADMIN_OAUTH2_CLIENT_ID==############# -- !!CHANGE THIS VALUE!!\nADMIN_OAUTH2_CLIENT_SECRET=############# -- !!CHANGE THIS VALUE!!\nEMAIL_API_KEY==############# !! mailgun specific, use nodemailer config for help !!\nEMAIL_DOMAIN==############# !! mailgun specific, use nodemailer config for help !!\nEMAIL_PROVIDER==#############\n```\n\n`If you are running the catalyst-client/using the consumer-app.json config to power a app, you'll want to modify/update the callbacks per deployment env`\n\n#### Notes  \n\n`HOST_NAME`: hostname of choice to have the stack run on, if you do this: make sure that LetsEncrypt can do a hostname validation, certbot can be run via nginx if you need it but traefik will auto setup the SSL cert and hold it on a volumes in `traefik/acme.json`. You may need to set the permission on this folder to 600\n\n## Global Make Commands\n- `make start-stack` - build and launch all containers\n- `make start-stack-metrics` - build and launch all containers with metrics\n  - Tip: You need to restart any running services with a updated docker-compose.env where METRICS_ENABLED=true\n- `make stop-stack` - stop all launched containers\n- `make dbash SVC=SERVICE_NAME` - takes `SVC` arg and creates a bash command line inside the running service\n- `make dlog SVC=SERVICE_NAME` - takes `SVC` arg and logs with following and tails the last 400 lines of a service\n- `start-code-server` - create web served version of VS Code, helpful for working on an iPad (iOS 13 preferrable)\n\n## Global NPM Scripts\n\n  \n\n### Hygen Specific:\n\n- `npm run hygen` - This is a link to the executable bin/script for the hygen generator library.\n\n- `npm run hygen generator help` - View generator help\n\n- `npm run hygen generator new [name]` - Create new generator\n\n- `npm run hygen generator new-with-prompt [name]`: Create new generator w/ prompt\n\n### Project Specific:\n\n- `npm run hygen service new`: Create new service\n\n  \n\n## Per Service NPM scripts\n\n- `npm run dev` - Start development mode (load all services locally with hot-reload \u0026 REPL)\n\n- `npm run build`- Uses typescript to transpile service to javascript\n\n- `npm start` - Start production mode (set `SERVICES` env variable to load certain services) (previous build needed)\n\n- `npm run cli`: Start a CLI and connect to production. Don't forget to set production namespace with `--ns` argument in script\n\n- `npm run lint` - Run TSLint\n\n- `npm run ci` - Run continuous test mode with watching\n\n- `npm test` - Run tests \u0026 generate coverage report\n\n- `npm run dc:up`: Start the stack with Docker Compose\n\n- `npm run dc:down`: Stop the stack with Docker Compose\n\n# Roadmap\n\n1.0 Goals:\n - [x] User Management\n\t - [x] User Registration\n\t - [x] User Login\n\t - [x] Account Verify\n\t - [x] Password Reset\n\t - [ ] Forgot Username\n\t - [x] Global User Registration Event\n - [x] Database Setup\n\t - [x] Local dev support container\n\t - [x] Configurable db adapter\n\t - [x] Migrations support\n\t - [x] Bootstrap on service at launch\n - [ ] Metrics Services\n\t - [x] Prometheus setup\n\t - [x]  Grafana setup at /grafana\n\t - [x]  Metrics config setup for services\n\t\t - [ ] Add to template generation\n - [ ] Tracing Services\n\t - [x] Jaeger setup at /jaeger\n\t - [x] Tracing config setup for services\n\t\t - [ ] Add to template generation\n - [x] SSL Support\n\t - [x]  LetsEncrypt Setup\n\t - [x]  Traefik Setup at :8080/dashboard\n\t - [ ]  Domain setup instruction in README.md\n - [x] Redis Cache\n - [x] API Gateway\n\t - [x] REST\n\t - [x] GraphQL\n - [x] OAuth 2.0\n   - [x] implicit flow\n   - [x] consent flow\n   - [x] auth code flow\n - [x] ORY Keto\n - [x] Email Suport\n   - [x] Service setup w/ mailgun provider \n   - [x] Templating\n   - [x] User registration event consumption for welcome email\n\n1.1 Goals:\n  - [ ] Kubernetes configuation\n  - [ ] Helm charts for each base service\n  - [ ] Jenkins X Support\n\n1.2 Gaols: \n  - [ ] Social Login\n  - [ ] Lerna multi repo support\n  - [ ] One time password support\n\n\n## Links to main libraries to understand\n\n-- `Code Generator`: [Hygen](https://www.hygen.io/)\n\n-- `Router`: [Traefik](https://docs.traefik.io/)\n\n-- `Containers`: [Docker](https://docker.com/)\n\n-- `Microservice Framework`: [Moleculer](http://moleculer.services/)\n\n-- `Message Bus`: [NATS](https://nats-io.github.io/docs/)\n\n-- `Database`: [Postgresql](https://www.postgresql.org/)\n\n-- `Metrics`: [Prometheus](https://prometheus.io/)\n\n-- `Tracing`: [Jaeger](https://www.jaegertracing.io/)\n\n-- `OAuth2`: [Hydra](https://www.ory.sh/hydra)\n\n-- `GraphQL`: [GraphQL](https://graphql.org/)\n\n-- `PassportJS`: [PassportJS](https://passportjs.org)\n\n-- `Kubernetes Middleware` https://gist.github.com/icebob/c717ae22002b9ecaa4b253a67952da3a\n","funding_links":[],"categories":["Examples","📦 Legacy \u0026 Inactive Projects"],"sub_categories":["Repositories"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderekbar90%2Fcatalyst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderekbar90%2Fcatalyst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderekbar90%2Fcatalyst/lists"}