{"id":24512967,"url":"https://github.com/mopemope/firestarter","last_synced_at":"2026-03-11T05:31:12.614Z","repository":{"id":32836599,"uuid":"144025804","full_name":"mopemope/firestarter","owner":"mopemope","description":"Firestarter: A process and shared socket manager","archived":false,"fork":false,"pushed_at":"2023-06-14T16:08:24.000Z","size":340,"stargazers_count":68,"open_issues_count":11,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-27T11:57:06.079Z","etag":null,"topics":["process-manager","rust","socket-server"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/mopemope.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-08-08T14:31:53.000Z","updated_at":"2024-07-23T17:16:07.000Z","dependencies_parsed_at":"2025-04-14T08:44:30.910Z","dependency_job_id":"41c9e16d-698b-49c9-b671-cc29a80291fb","html_url":"https://github.com/mopemope/firestarter","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/mopemope/firestarter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mopemope%2Ffirestarter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mopemope%2Ffirestarter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mopemope%2Ffirestarter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mopemope%2Ffirestarter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mopemope","download_url":"https://codeload.github.com/mopemope/firestarter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mopemope%2Ffirestarter/sbom","scorecard":{"id":659696,"data":{"date":"2025-08-11","repo":{"name":"github.com/mopemope/firestarter","commit":"fb8973b014a437803595eca0fb41c533b8866d01"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.3,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 2/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"40 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2021-0139","Warn: Project is vulnerable to: RUSTSEC-2021-0145 / GHSA-g98v-hv3f-hcfr","Warn: Project is vulnerable to: RUSTSEC-2024-0375","Warn: Project is vulnerable to: RUSTSEC-2020-0159","Warn: Project is vulnerable to: RUSTSEC-2020-0080","Warn: Project is vulnerable to: RUSTSEC-2020-0078 / RUSTSEC-2020-0079 / GHSA-458v-4hrf-g3m4 / GHSA-c79c-gwph-gqfm","Warn: Project is vulnerable to: RUSTSEC-2020-0016","Warn: Project is vulnerable to: RUSTSEC-2021-0119 / GHSA-76w9-p8mg-j927 / GHSA-wgrg-5h56-jg27","Warn: Project is vulnerable to: RUSTSEC-2022-0013 / GHSA-m5pq-gvj9-9vr8","Warn: Project is vulnerable to: RUSTSEC-2022-0006 / GHSA-9hpw-r23r-xgm5","Warn: Project is vulnerable to: RUSTSEC-2020-0071 / GHSA-wcg3-cvx6-7396","Warn: Project is vulnerable to: RUSTSEC-2018-0019 / GHSA-7x36-h62w-vw65 / GHSA-9qj6-4rfq-vm84 / GHSA-fgfm-hqjw-3265 / GHSA-w65j-g6c7-g3m4","Warn: Project is vulnerable to: RUSTSEC-2021-0131","Warn: Project is vulnerable to: RUSTSEC-2022-0019 / GHSA-9g55-pg62-m8hh","Warn: Project is vulnerable to: RUSTSEC-2021-0093 / GHSA-pqqp-xmhj-wgcw","Warn: Project is vulnerable to: RUSTSEC-2022-0041 / GHSA-qc84-gqf4-9926","Warn: Project is vulnerable to: RUSTSEC-2021-0153","Warn: Project is vulnerable to: RUSTSEC-2019-0036 / RUSTSEC-2020-0036 / GHSA-jq66-xh47-j9f3 / GHSA-r98r-j25q-rmpr","Warn: Project is vulnerable to: RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2019-0034 / GHSA-6rhx-hqxm-8p36","Warn: Project is vulnerable to: RUSTSEC-2019-0033 / GHSA-x7vr-c387-8w57","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2020-0026 / GHSA-r43h-gmrm-h5c9","Warn: Project is vulnerable to: RUSTSEC-2019-0011 / GHSA-rh89-x75f-rh3c","Warn: Project is vulnerable to: RUSTSEC-2023-0045 / GHSA-wfg4-322g-9vqv","Warn: Project is vulnerable to: RUSTSEC-2022-0040 / GHSA-9qxh-258v-666c","Warn: Project is vulnerable to: RUSTSEC-2023-0018 / GHSA-mc8h-8q98-g5hr","Warn: Project is vulnerable to: RUSTSEC-2025-0010","Warn: Project is vulnerable to: GHSA-4p46-pwfr-66x6","Warn: Project is vulnerable to: RUSTSEC-2025-0009","Warn: Project is vulnerable to: GHSA-c86p-w88r-qvqr","Warn: Project is vulnerable to: RUSTSEC-2023-0081","Warn: Project is vulnerable to: RUSTSEC-2019-0012 / GHSA-69gw-hgj3-45m7","Warn: Project is vulnerable to: RUSTSEC-2018-0018 / GHSA-55m5-whcv-c49c / GHSA-66p5-j55p-32r9","Warn: Project is vulnerable to: RUSTSEC-2021-0003 / GHSA-43w2-9j62-hq99","Warn: Project is vulnerable to: RUSTSEC-2018-0017","Warn: Project is vulnerable to: RUSTSEC-2018-0007 / GHSA-369h-pjr2-6wrh","Warn: Project is vulnerable to: RUSTSEC-2018-0001 / GHSA-wq8f-46ww-6c2h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T15:43:24.429Z","repository_id":32836599,"created_at":"2025-08-21T15:43:24.430Z","updated_at":"2025-08-21T15:43:24.430Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30372166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"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":["process-manager","rust","socket-server"],"created_at":"2025-01-22T00:52:20.318Z","updated_at":"2026-03-11T05:31:12.586Z","avatar_url":"https://github.com/mopemope.png","language":"Rust","readme":"# Firestarter: A process and shared socket manager\n\n[![crates.io](https://img.shields.io/crates/v/firestarter.svg)](https://crates.io/crates/firestarter)\n[![Patreon](https://img.shields.io/badge/patreon-become%20a%20patron-red.svg)](https://www.patreon.com/mopemope)\n[![Build Status](https://travis-ci.org/mopemope/firestarter.svg?branch=master)](https://travis-ci.org/mopemope/firestarter)\n\nFirestarter is a simple process and shared socket manager, it is designed like [circus][] and [einhorn][], but lightweight and faster.\n\nFirestarter can manage groups of processes and shared sockets like [circus][]. And like [einhorn][] we support manual ack.\nAnd you can control Firestarter daemon, such as increasing worker process from ctrl command.\n\nFirestarter shares sockets using the `systemd socket passing protocol` (LISTEN_FDS).\n\nFirestarter uses explicit configuration files rather than complex command line options.\n\n## Features\n\n* Easy install\n* Fast and saving memory\n* Using explicit configuration file\n* Support control command like [circus][]\n* Support ack like [einhorn][]\n* Execute upgrader program\n\n## Installation\n\nYou can get `firestarter` by installing it with cargo:\n\n```sh\n$ cargo install firestarter\n```\n\n## Usage\n\nFirestarter is process and shared socket manager. Run `firestarter -h` to see detailed usage.\n\n```\nfirestarter\nprocess and shared socket manager\n\nUSAGE:\n    firestarter \u003cSUBCOMMAND\u003e\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nSUBCOMMANDS:\n    ctrl      Run control client\n    help      Prints this message or the help of the given subcommand(s)\n    list      Show worker names\n    run       Run daemon\n    status    Show worker status\n    stop      Stop daemon\n```\n\nExample\n\n```sh\n$ firestarter run --config misc/config.toml\n```\n\nThe configuration file uses toml. An example is below.\n\n```toml\n[worker1] # set worker group name.\n\n# set to commands with their arguments that are executed when this worker is started.\n# exec_start = \"./demo/target/debug/demo\"\nexec_start = \"/usr/bin/emacs --fg-daemon\"\n\n# set to commands to execute to stop the service started via exec_start.\n# if you do not set it, sigterm will be sent to the exec_start process.\n# note that upgrade ack does not use this command.\nexec_stop = \"/usr/bin/emacsclient --eval (kill-emacs)\"\n\n# set the number of startup processes.\nnumprocesses = 1\n\n# set working directory.\n# working_directory = \"/tmp\".\n\n# set restart policy. default is none.\n# none: not restart process.\n# on-failure: restart the process if it is not completed normally.\n# always: restart the process whenever you exit.\nrestart = \"on-failure\"\n\n# set the seconds to delay the startup of the process.\n# warmup_delay = 1\n\n# start the process immediately without starting the process when connecting the client socket.\nstart_immediate = true\n\n# set shared socket addresses.\n# it also support unix domain socket. (e.g.: /tmp/foo.sock)\nsocket_address = [\"127.0.0.1:4000\", \"127.0.0.1:4001\"]\n\n# set processes environment.\nenvironments=[\"TEST_A=XXXX\", \"TEST_B=YYYY\"]\n\n# set upgrade ack type. this is similar to einhorn 's ACKs. timer is default.\n# timer: it will terminate the old process after a certain time (sec).\n# manual: send ack manually. For details, refer to einhorn's manual ack document\n# none: no ack. simple stop and start\nack = \"manual\"\n\n# set timer ack time in seconds. default 1sec.\n# ack_timeout = 1\n\n# set ack signal. default is SIGUSR2.\n# ack_signal = \"SIGUSR2\"\n\n# set uid.\n# uid = 1000\n\n# set gid.\n# gid = 10\n\n# set stdout to file.\n# size and timed rotate supported.\n# the format is below.\n# size:\u003cmax file size\u003e:\u003cnumber of backup\u003e:\u003coutput path\u003e\n# time:\u003crollover interval\u003e:\u003ctype of interval\u003e:\u003ctimzone for rotate\u003e:\u003cnumber of backup\u003e:\u003coutput path\u003e\n# the type of timezeone for rotate,the list of possible values is below.\n#‘U’UTC\n#‘L’Local\n# the type of interval,the list of possible values is below.\n#‘S’Seconds\n#‘M’Minutes\n#‘H’Hours\n#‘D’Days\n#\n# exmple\n# stdout_log = \"size:10240:5:/tmp/web1_out.log\"\n# it rolls over in 3 days and keeps 5 backups.\n# stdout_log = \"time:3:D:U:7:/tmp/web1_out.log\"\n\n# set stderr to file.\n# it is the same as stdout.\n# stderr_log = \"size:10240:5:/tmp/web1_err.log\"\n\n# set process live check configuration.\n# we will check the existence of the process (experimental).\n# the process needs to periodically update the mtime of the file passed in environment variable FIRESTARTER_WATCH_FILE.\n# the monitoring process kills the process when the mtime update interval exceeds the threshold. this is the same process as gunicorn's worker notify.\n# the unit is seconds, and the default value is 0. (disable live check)\n# live_check_timeout = 60\n\n# set auto upgrade.\n# it will send upgrade command when their command file is modified.\n# it does the same processing as circus.plugins.CommandReloader.\n# auto_upgrade = false\n\n# set upgrader program.\n# set to the upgrader command.\n# run upgrade only when the upgrader command terminates normally.\n# upgrader = \"/a/b/upgrader --config abc\"\n\n# set upgrade timing.\n# execute the upgrader command for each specified seconds.\n# if not set, execute the upgrade command when executing the upgrade ctrl command.\n# upgrader_active_sec=10\n# upgrader_timeout=60\n```\n\n## Control command\n\nFirestarter also provides a client that controls the running daemon.\n\nFor example, you can check the status with the following command.\n\n```sh\n$ firestarter ctrl worker1 status\nsend ctrl command [status] to [worker1] worker\n[worker1] active\nprocesses [24170]\ntime 00:00:06\n```\n\nFor details, please refer to the help `firestarter ctrl -h`.\n\n## Contributing\n\nContributions are extremely welcome! Please push PR to `dev` branch.\n\n[circus]: https://circus.readthedocs.io/\n[einhorn]: https://github.com/stripe/einhorn\n","funding_links":["https://www.patreon.com/mopemope"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmopemope%2Ffirestarter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmopemope%2Ffirestarter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmopemope%2Ffirestarter/lists"}