{"id":13902977,"url":"https://github.com/radarsu/radarsu","last_synced_at":"2026-06-09T17:00:40.296Z","repository":{"id":88330101,"uuid":"105808549","full_name":"radarsu/radarsu","owner":"radarsu","description":"Node.js server-side TypeScript framework with one thing in mind - removing code is easier than writing it. Auto-generated Swagger docs, REST, GraphQL, WebSockets and others - have it all, delete what you don't need 🙈🙉🙊","archived":false,"fork":false,"pushed_at":"2018-12-07T22:07:13.000Z","size":8223,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-14T20:44:23.265Z","etag":null,"topics":["cli","database","express","framework","javascript","modular","module-pattern","nest","nestjs","node","nodejs","nodejs-framework","sequelize","sequelize-typescript","tsoa","typeorm","typescript-framework","winston","winston-logger","yargs"],"latest_commit_sha":null,"homepage":"https://radarsu.radrat.pl/radarsu","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/radarsu.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-10-04T19:20:07.000Z","updated_at":"2024-04-29T14:26:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"7bc65730-4faf-4d9f-9986-cf3018ff5c97","html_url":"https://github.com/radarsu/radarsu","commit_stats":null,"previous_names":["radarsu/radarsu-core"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/radarsu/radarsu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radarsu%2Fradarsu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radarsu%2Fradarsu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radarsu%2Fradarsu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radarsu%2Fradarsu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/radarsu","download_url":"https://codeload.github.com/radarsu/radarsu/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radarsu%2Fradarsu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34116461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"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":["cli","database","express","framework","javascript","modular","module-pattern","nest","nestjs","node","nodejs","nodejs-framework","sequelize","sequelize-typescript","tsoa","typeorm","typescript-framework","winston","winston-logger","yargs"],"created_at":"2024-08-06T22:01:32.129Z","updated_at":"2026-06-09T17:00:40.217Z","avatar_url":"https://github.com/radarsu.png","language":"TypeScript","funding_links":[],"categories":["cli"],"sub_categories":[],"readme":"Work in progress...\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/radarsu/radarsu/\" target=\"blank\"\u003e\u003cimg src=\"https://github.com/radarsu/radarsu/blob/master/assets/logo.png?raw=true\" alt=\"radarsu logo\" /\u003e\u003c/a\u003e\u003cbr/\u003e\n    \u003cstrong\u003eSimplicity is the ultimate sophistication.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"http://nodejs.org\" target=\"blank\"\u003eNode.js\u003c/a\u003e server-side TypeScript framework with one thing in mind - \u003cstrong\u003eremoving code is easier than writing it\u003c/strong\u003e.\u003cbr/\u003e\n\t\u003cstrong\u003eAuto-generated Swagger docs, REST, GraphQL, WebSockets and others\u003c/strong\u003e - have it all, delete what you don't need.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003cstrong\u003eInspired by:\u003c/strong\u003e \u003ca href=\"https://github.com/nestjs/nest/\" target=\"_blank\" alt=\"sails.js\"\u003esails.js\u003c/a\u003e, \u003ca href=\"https://github.com/feathersjs/feathers\" target=\"_blank\" alt=\"feathers\"\u003efeathers\u003c/a\u003e.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://www.npmjs.com/package/radarsu\" target=\"_blank\" alt=\"npm radarsu\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/radarsu.svg\" alt=\"npm\" /\u003e\u003c/a\u003e\n\t\u003cimg src=\"https://img.shields.io/github/license/radarsu/radarsu.svg\" alt=\"license\" /\u003e\n\t\u003cimg src=\"https://img.shields.io/github/stars/radarsu/radarsu.svg\" alt=\"stars\" /\u003e\n\t\u003ca href=\"https://twitter.com/radarsujs\" target=\"_blank\" alt=\"radarsujs twitter\"\u003e\u003cimg src=\"https://img.shields.io/twitter/url/https/github.com/radarsu/radarsu.svg?style=social\" alt=\"social twitter\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Description\nWhen you choose your \u003cstorng\u003eperfect stack\u003c/strong\u003e quite often you realize that setting things up, well-configured and working takes a lot of time. Everything is far from perfect and you need to write tons of code to make all the awesome features work your way according to your needs.\n\nMaybe you have tried \u003cstrong\u003emeteor\u003c/strong\u003e, \u003cstrong\u003eloopback\u003c/strong\u003e, \u003cstrong\u003esails.js\u003c/strong\u003e and nothing suits your needs. Lack of WebSocket integration? No auto-generated swagger docs, CRUD, issues with GraphQL subscriptions? Overcomplicated structure with many concepts you do not really want to implement? \u003cstrong\u003eSimple solution comes here.\u003c/strong\u003e\n\nBuilt on top of nestjs, flexible, ready-to-go.\n\n## Installation\n```sh\nnpm i radarsu\n```\n\n## Features\n- Integrated \u003cstrong\u003eREST\u003c/strong\u003e, \u003cstrong\u003eGraphQL\u003c/strong\u003e and \u003cstrong\u003eWebSocket API\u003c/strong\u003e.\n- \u003cstrong\u003eAutomatic validation\u003c/strong\u003e of incoming requests.\n- \u003cstrong\u003ePretty logging\u003c/strong\u003e to console and files with a well-configured \u003ca href=\"https://github.com/winstonjs/winston\" target=\"_blank\" alt=\"winston\"\u003eWinston\u003c/a\u003e.\n\n\u003cimg src=\"https://github.com/radarsu/radarsu/blob/master/assets/logger.png\" alt=\"radarsu logo\" /\u003e\n\n- \u003cstrong\u003eAuto-generated swagger\u003c/strong\u003e docs and \u003cstrong\u003eGraphQL panel\u003c/strong\u003e.\n- \u003cstrong\u003eAuto-generated CRUD client\u003c/strong\u003e for all the models powered by \u003ca href=\"https://github.com/angular/angular\" taget=\"_blank\" alt=\"angular 2 4 6\"\u003eAngular\u003c/a\u003e and \u003ca href=\"https://github.com/primefaces/primeng\" taget=\"_blank\" alt=\"primefaces primeng\"\u003ePrimeng\u003c/a\u003e.\n- \u003cstrong\u003eCLI\u003c/strong\u003e for generating various components based on templates that you can easiely modify.\n- \u003cstrong\u003eRadarsuSocket\u003c/strong\u003e Client and Server library allowing easy \u003ca href=\"https://github.com/einaros/ws\" target=\"_blank\" alt=\"einaros websocket\"\u003eWebSocket\u003c/a\u003e communication between Client and Server:\n\n```ts\n// client side\nconst result = await ws.emit({\n\taction: `user/login`,\n\targs: [{\n\t\tlogin: `test`,\n\t\tpassword: `test`,\n\t}],\n});\nconsole.log(result); // 'NOT YET IMPLEMENTED';\n```\n```ts\n// requests goes to the server through validation and other middleware\ninterface ILoginRequest {\n\tlogin: string;\n\tpassword: string;\n}\n\n@RadarsuController\n@RadarsuMiddleware(exampleMiddleware, exampleGuard)\nexport class UserController {\n\n\t// body parameters are automatically validated based on ILoginRequest interface\n    public login(@Body() body: ILoginRequest, rs: RadarsuSocket) {\n\t    return 'NOT YET IMPLEMENTED';\n    }\n}\n```\n\n- \u003cstrong\u003eSimple approach\u003c/strong\u003e leaves everything as simple as possible, no coding redundancy, simple file structure:\n- src\n  - \u003cstrong\u003e1-helpers\u003c/strong\u003e - utility functions you like, your own little libraries.\n  - \u003cstrong\u003e2-interfaces\u003c/strong\u003e - types and interfaces.\n  - \u003cstrong\u003e3-config\u003c/strong\u003e - configuration of application and various libraries.\n  - \u003cstrong\u003e4-entities\u003c/strong\u003e - database models powered by \u003ca href=\"https://github.com/RobinBuschmann/sequelize-typescript\" target=\"_blank\" alt=\"sequelize typescript\"\u003esequelize-typescript\u003c/a\u003e.\n  - \u003cstrong\u003e5-services\u003c/strong\u003e - additional logics and storing data in server memory.\n  - \u003cstrong\u003e6-middleware\u003c/strong\u003e - filters, guards, interceptors, whatever you like as a middleware.\n  - \u003cstrong\u003e7-controllers\u003c/strong\u003e - routing and application entry point for all the REST, GraphQL and WebSocket Requests.\n  - \u003cstrong\u003eimport\u003c/strong\u003e - barrel import of every library and object you may need.\n  - \u003cstrong\u003eindex.ts\u003c/strong\u003e - application entry point (bootstrap).\n- \u003cstrong\u003edata\u003c/strong\u003e - place for logs and some server assets (like a favicon).\n- \u003cstrong\u003etemplates\u003c/strong\u003e - place for templates that you can modify accodring to your needs, used to auto-generate components. Powered by \u003ca href=\"https://github.com/mde/ejs\" target=\"_blank\" alt=\"ejs template\"\u003eejs\u003c/a\u003e.\n\n# Drawbacks\nIn order to provide you with a well-configured setup of various libraries perfectly working together \u003cstrong\u003e\u003ca href=\"https://github.com/radarsu/radarsu\" target=\"_blank\" alt=\"radarsu framework\"\u003eradarsu framework\u003c/a\u003e\u003c/strong\u003e does not yet have adapters for other popular libraries. If you wish to switch from \u003ca href=\"https://github.com/winstonjs/winston\" target=\"_blank\" alt=\"winston\"\u003eWinston\u003c/a\u003e to \u003ca href=\"https://github.com/trentm/node-bunyan\" target=\"_blank\" alt=\"bunyan\"\u003eBunyan\u003c/a\u003e or from Sequelize to other database, you need to rewrite initLogger, initDb, (...), methods.\n```ts\nimport {\n    Radarsu, config, radarsuLogger,\n} from './import';\n\nconst log = radarsuLogger(__filename);\n\n(async () =\u003e {\n    config.app = new Radarsu();\n    config.app.initLogger((options) =\u003e {\n        // you are on your own here to return other logger you like\n        return {};\n    });\n    await config.app.launch(config);\n})();\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradarsu%2Fradarsu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradarsu%2Fradarsu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradarsu%2Fradarsu/lists"}