{"id":13765817,"url":"https://github.com/scalecube/scalecube-js","last_synced_at":"2025-08-08T21:09:27.152Z","repository":{"id":27126721,"uuid":"111294077","full_name":"scalecube/scalecube-js","owner":"scalecube","description":"Toolkit for working in microservices/micro-frontends architecture. ","archived":false,"fork":false,"pushed_at":"2024-08-12T21:17:23.000Z","size":3776,"stargazers_count":67,"open_issues_count":7,"forks_count":11,"subscribers_count":13,"default_branch":"develop","last_synced_at":"2025-05-07T15:53:24.486Z","etag":null,"topics":["es6","micro-frontends","micro-services","microfrontends","microservices-library","reactive-microservices","rsocket","ui-composition"],"latest_commit_sha":null,"homepage":"http://scalecube.github.io/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scalecube.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":"2017-11-19T12:43:03.000Z","updated_at":"2024-08-12T21:17:26.000Z","dependencies_parsed_at":"2025-01-05T01:11:49.845Z","dependency_job_id":"6ca17fe8-c7b7-4d40-92d5-3685c1c8ea95","html_url":"https://github.com/scalecube/scalecube-js","commit_stats":{"total_commits":397,"total_committers":19,"mean_commits":"20.894736842105264","dds":0.7657430730478589,"last_synced_commit":"1234a6fa383c3f140adac7fddae04d2793012303"},"previous_names":[],"tags_count":445,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalecube%2Fscalecube-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalecube%2Fscalecube-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalecube%2Fscalecube-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalecube%2Fscalecube-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scalecube","download_url":"https://codeload.github.com/scalecube/scalecube-js/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalecube%2Fscalecube-js/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258828305,"owners_count":22763943,"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":["es6","micro-frontends","micro-services","microfrontends","microservices-library","reactive-microservices","rsocket","ui-composition"],"created_at":"2024-08-03T16:00:46.593Z","updated_at":"2025-06-12T21:36:18.065Z","avatar_url":"https://github.com/scalecube.png","language":"TypeScript","funding_links":[],"categories":["Tools"],"sub_categories":["Frameworks"],"readme":"# Scalecube-js\n\nScalecube is a toolkit for creating microservices/micro-frontends based systems.  \n[what is scalecube-js](https://idanilt.medium.com/scalecube-js-2785c491ae54) | [play with codesandbox](https://codesandbox.io/s/scalecube-full-tutorial-yjjvu?file=/package.json) | [full documentation](https://scalecube.github.io/javascript-docs)\n\n[![Join the chat at https://gitter.im/scalecube-js/Lobby](https://badges.gitter.im/scalecube-js/Lobby.svg)](https://gitter.im/scalecube-js/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\u003e ### Project Status\n\u003e\n\u003e scalecube-js curretly not maintained.  \n\u003e If you intested become a maintainer you can reach me at https://www.linkedin.com/in/idanilt/.\n\n## quick start\n\u003e If you are new to scalecube, it's recommended to read [this introduction to scalecube](https://idanilt.medium.com/scalecube-js-2785c491ae54).  \n\nScalecube provide browser and NODE templates, configured and ready for use\n\n### [Browser](packages/browser/README.md)\n\n`yarn add @scalecube/browser` or `npm i @scalecube/browser`\n\n```typescript\nimport { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/browser';\n```\n\n### [Node](packages/node/README.md)\n\n`yarn add @scalecube/node` or `npm i @scalecube/node`\n\n```typescript\nimport { createMicroservice, ASYNC_MODEL_TYPES } from '@scalecube/node';\n```\n\n### Advanced\n\nYou can create your own customized setup, for more details: go to [Microservice](packages/scalecube-microservice/README.md) \n\n### Usage (Browser and node)\n\n#### create a seed\n\n```typescript\n// node - supported WS, WSS and TCP\nexport const MySeedAddress: 'ws://localhost:8000';\n// Browser - under browser post message will be used as transport\nexport const MySeedAddress: 'seed';\n\n// Create a service\ncreateMicroservice({\n   address : MySeedAddress\n});\n```\n\n#### Create a service\n\n```typescript\n// Create service definition\nexport const greetingServiceDefinition = {\n  serviceName: 'GreetingService',\n  methods: { \n    hello: {\n      asyncModel: ASYNC_MODEL_TYPES.REQUEST_RESPONSE,\n    }\n  },\n};\n// Create a service\ncreateMicroservice({\n  services : [{\n    definition: greetingServiceDefinition,\n    reference: {\n      hello : async (name) =\u003e `Hello ${name}`\n    }, \n   }],\n   seedAddress : MySeedAddress\n});\n```\n\n#### Use a service\n\n```typescript\nconst microservice = createMicroservice({seedAddress : MySeedAddress})\n\n// With proxy\nconst greetingService = microservice.createProxy({\n    serviceDefinition: greetingServiceDefinition\n});\n\ngreetingService.hello('ME').then(console.log) // Hello ME\n```\n\n\\*We let Scalecube choose our addresses for us, we know only the seed address.  \nAfter we connected to the seed we will see the whole cluster.\nIn the browser we don't need to import modules, we can create multiple bundles, scalecube will discover the available services\n\n**\\*NOTICE** For Node you have to set addresses, there isn't any default at the moment\n\n#### Worker, Iframes and seperate bundles \n\nYou can use scalecube with multiple bundles even inside iframes and *Web Workers, scalecube will be able to find and invoke the services by the address and seedAddress (via Post Messages).\n\n**\\*NOTICE** In order to use Web Workers you need to load scalecube before loading the Web Worker (scalecube extends Worker class)\n\n**Good**\n```typescript\nimport from \"@scalecube/browser\";\n\nnew Worker(`assets/worker.js`, {\n  type: \"module\"\n});\n```\n\n**Bad**\n```typescript\nnew Worker(`assets/worker.js`, {\n  type: \"module\"\n});\n```\n\n\n#### Dependency Injection\nYou can pass a function instead of object as the reference, this function get `createProxy` and `createServiceCall`, which can help you invoke any service in the cluster. The function need to return object with all the service methods (`[methodName]: function()`).  \nIn the example bellow, we are creating a new instance of a class, but you can do in anyway you want.\n\n```typescript\ncreateMicroservice({\n  seedAddress : MySeedAddress,\n  services: [\n    {\n      definition: serviceB,\n      reference: ({ createProxy, createServiceCall }) =\u003e {\n        const greetingService = createProxy({serviceDefinition: greetingServiceDefinition });\n\n        return new ServiceB(greetingService);\n      }\n    }    \n  ]\n})\n```\n\nFor more examples go to [examples](packages/examples) or [full documentation](https://scalecube.github.io/javascript-docs)\n\n## Scalecube tools\n\n[Router](packages/routers/README.md),  \n[Discovery](packages/scalecube-discovery/README.md),  \n[Transport-browser](packages/transport-browser/README.md),  \n[Transport-nodejs](packages/transport-nodejs/README.md),  \n[Gateway](packages/rsocket-ws-gateway/README.md),  \n[Cluster-browser](packages/cluster-browser/README.md),  \n[Cluster-nodejs](packages/cluster-nodejs/README.md).\n\n## Version\n\n-   [semver format](http://semver.org/)\n\n**MAJOR** version when you make incompatible API changes,\n\n**MINOR** version when you add functionality in a backwards-compatible manner, and\n\n**PATCH** version when you make backwards-compatible bug fixes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscalecube%2Fscalecube-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscalecube%2Fscalecube-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscalecube%2Fscalecube-js/lists"}