{"id":20313303,"url":"https://github.com/kam1ni/madmin","last_synced_at":"2026-05-07T15:39:28.635Z","repository":{"id":38284082,"uuid":"120130065","full_name":"Kam1ni/madmin","owner":"Kam1ni","description":"Server management platform written in Node.js, TypeScript and Vue. Great for executing remote scripts, Continuous Deployment and application hosting.","archived":false,"fork":false,"pushed_at":"2025-11-28T14:13:24.000Z","size":2644,"stargazers_count":0,"open_issues_count":31,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-30T20:41:46.056Z","etag":null,"topics":["continous-deployment","javascript","javascript-applications","management","nodejs","server","system-administration","typescript"],"latest_commit_sha":null,"homepage":"","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/Kam1ni.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-02-03T21:11:49.000Z","updated_at":"2025-11-28T14:13:29.000Z","dependencies_parsed_at":"2025-03-04T08:39:04.438Z","dependency_job_id":null,"html_url":"https://github.com/Kam1ni/madmin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Kam1ni/madmin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kam1ni%2Fmadmin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kam1ni%2Fmadmin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kam1ni%2Fmadmin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kam1ni%2Fmadmin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kam1ni","download_url":"https://codeload.github.com/Kam1ni/madmin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kam1ni%2Fmadmin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32744217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["continous-deployment","javascript","javascript-applications","management","nodejs","server","system-administration","typescript"],"created_at":"2024-11-14T18:10:35.146Z","updated_at":"2026-05-07T15:39:28.613Z","avatar_url":"https://github.com/Kam1ni.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Madmin: Application management tool\n\nMadmin is an application that will make managing and deploying new web apps easier through a simple and intuitive web interface.\n\n\n## Apps\nMadmin apps are meant to solve a common issue. Multiple web apps hosted on the same server that all use ports 80 and/or 443. It's not really an issue if they're all static pages hosted via Apache or nginx but when some of them are written in Node.js, C, Golang etc... it becomes harder to assign those ports to all those programs. Madmin apps provide two solutions to this issue. For static file hosting you can use madmin to host those files on a separate domain name or subdomain. For most other apps you can use the proxy setting. Proxy apps will redirect all requests on the specified domain/subdomain to the specified IP address.\n\nExamples are coming soon.\n\n[comment]: \u003c\u003e (TODO: Provide examples.)\n\n\n## Handlers\nHandlers is JavaScript code that you can write in your browser and then trigger on the server by sending an http request to the specified url. This is great for making a placeholder API but more importantly you can use it for Continuous Deployment. Create a new post handler, write the code for updating your application, copy the path and create a webhook for your git repository.\n\nExamples are coming soon.\n\n[comment]: \u003c\u003e (TODO: Provide examples.)\n\n## Scripts\nScripts are basically the same as handlers but instead of being triggered via http requests they can be triggered on madmin start, periodically or manually. \n\nPro tip: Write the code for updating your application as a script and then fetch the script in the handler code. This way you can always manually trigger app updates.\n\nExamples are coming soon.\n\n[comment]: \u003c\u003e (TODO: Provide examples.)\n\n## File Browser\nFile browser with a basic file editor and image viewer. Not finished yet.\n\n[comment]: \u003c\u003e (TODO: Finish the file browser.)\n\n---\n\n## Building\n\nMadmin consists of two parts. The client and the server. The client is a web interface written in Vue with TypeScript. The server is the api endpoint for the client and also for custom handlers and apps. It's also written in TypeScript. Once built you can run it from the server directory by running `npm run start` or you can package it into a binary using `npm run nexe`. Packaging it can be usefull if you want to separate your configuration from the source code and keep things tidy. If you do decide to package it you can run madmin by just executing the generated binary. The generated binary can be found inside the server/nexe directory. \n\n**WARNING** Packaging on arm devices can take a long time but only the first time. Nexe does not provide any arm based Node.js binaries so you will have to build it yourself. I built it on a Raspberry Pi 3 and the first time it take somewhere between 4-12 hours. But because nexe caches generated Node.js binaries inside ~/.nexe, subsequent builds take less then a minute.\n\n### prerequisites\nMake sure you have at least Node.js v12 installed and run ```npm install``` in both the `client` and `server` directory. \n\n### building\n\n```bash\n$ cd server\t\t\t# Switch to the server directory\n$ npm run build\t\t# Transpile TypeScript into JavaScript (Generated output will be put inside the dist directory)\n$ cd ../client\t\t# Switch to the client directory\n$ npm run build\t\t# Build the client (Output will be put inside ../server/dist/public)\n\n# OPTIONAL \n$ cd ../server\t\t# Switch to the server directory\n$ npm run nexe\t\t# Package the application into a single binary\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkam1ni%2Fmadmin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkam1ni%2Fmadmin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkam1ni%2Fmadmin/lists"}