{"id":27647425,"url":"https://github.com/lgug2z/wpm","last_synced_at":"2025-07-01T07:07:42.505Z","repository":{"id":268198846,"uuid":"903621663","full_name":"LGUG2Z/wpm","owner":"LGUG2Z","description":"Simple user process management for Windows","archived":false,"fork":false,"pushed_at":"2025-06-16T06:56:31.000Z","size":967,"stargazers_count":59,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-30T09:55:57.662Z","etag":null,"topics":["daemon","headless","process-manager","rust","windows"],"latest_commit_sha":null,"homepage":"https://lgug2z.github.io/wpm","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LGUG2Z.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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},"funding":{"github":"LGUG2Z","ko_fi":"lgug2z"}},"created_at":"2024-12-15T04:53:57.000Z","updated_at":"2025-06-10T16:19:05.000Z","dependencies_parsed_at":"2024-12-31T21:24:07.269Z","dependency_job_id":"3c69cee7-d580-41fc-8745-4e94b971effb","html_url":"https://github.com/LGUG2Z/wpm","commit_stats":null,"previous_names":["lgug2z/wpm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LGUG2Z/wpm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGUG2Z%2Fwpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGUG2Z%2Fwpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGUG2Z%2Fwpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGUG2Z%2Fwpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LGUG2Z","download_url":"https://codeload.github.com/LGUG2Z/wpm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGUG2Z%2Fwpm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262916637,"owners_count":23383887,"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":["daemon","headless","process-manager","rust","windows"],"created_at":"2025-04-24T01:49:45.417Z","updated_at":"2025-07-01T07:07:42.482Z","avatar_url":"https://github.com/LGUG2Z.png","language":"Rust","funding_links":["https://github.com/sponsors/LGUG2Z","https://ko-fi.com/lgug2z"],"categories":[],"sub_categories":[],"readme":"# wpm\n\nSimple user process management for Windows.\n\n\u003cp\u003e\n  \u003ca href=\"https://techforpalestine.org/learn-more\"\u003e\n    \u003cimg alt=\"Tech for Palestine\" src=\"https://badge.techforpalestine.org/default\"\u003e\n  \u003c/a\u003e\n  \u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/LGUG2Z/wpm/.github/workflows/windows.yaml\"\u003e\n  \u003cimg alt=\"GitHub all releases\" src=\"https://img.shields.io/github/downloads/LGUG2Z/wpm/total\"\u003e\n  \u003cimg alt=\"GitHub commits since latest release (by date) for a branch\" src=\"https://img.shields.io/github/commits-since/LGUG2Z/wpm/latest\"\u003e\n  \u003ca href=\"https://discord.gg/mGkn66PHkx\"\u003e\n    \u003cimg alt=\"Discord\" src=\"https://img.shields.io/discord/898554690126630914\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/sponsors/LGUG2Z\"\u003e\n    \u003cimg alt=\"GitHub Sponsors\" src=\"https://img.shields.io/github/sponsors/LGUG2Z\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://ko-fi.com/lgug2z\"\u003e\n    \u003cimg alt=\"Ko-fi\" src=\"https://img.shields.io/badge/kofi-tip-green\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://notado.app/feeds/jado/software-development\"\u003e\n    \u003cimg alt=\"Notado Feed\" src=\"https://img.shields.io/badge/Notado-Subscribe-informational\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.youtube.com/channel/UCeai3-do-9O4MNy9_xjO6mg?sub_confirmation=1\"\u003e\n    \u003cimg alt=\"YouTube\" src=\"https://img.shields.io/youtube/channel/subscribers/UCeai3-do-9O4MNy9_xjO6mg\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n[![Watch the introduction video](https://img.youtube.com/vi/uY8OwE4XXHs/hqdefault.jpg)](https://www.youtube.com/watch?v=uY8OwE4XXHs)\n\n_wpm_ is a simple user process manager for Microsoft Windows 11 and above.\n\n_wpm_ allows you to start, stop and manage user level background processes as defined in unit files.\n\n_wpm_ allows you to codify availability and dependency relationships between different units.\n\n_wpm_ allows you to configure healthchecks for different units, with custom retry and back-off strategies.\n\n_wpm_ allows you to pin executables in your unit files to specific versions via remote package manifests.\n\n_wpm_ provides a comprehensive collection of lifecycle hooks which can be set for each unit.\n\n_wpm_ is not an open source project, but an educational source project which is free for personal use, and one that\nencourages you to make charitable donations if you find the software to be useful and have the financial means.\n\nI encourage you to make a charitable donation to\nthe [Palestine Children's Relief Fund](https://pcrf1.app.neoncrm.com/forms/gaza-recovery) or contributing to\na [Gaza Funds campaign](https://gazafunds.com) before you consider sponsoring me on GitHub.\n\n[GitHub Sponsors is enabled for this project](https://github.com/sponsors/LGUG2Z). Unfortunately I don't have anything\nspecific to offer besides my gratitude and shout outs at the end of _komorebi_ live development videos and tutorials.\n\nIf you would like to tip or sponsor the project but are unable to use GitHub Sponsors, you may also sponsor\nthrough [Ko-fi](https://ko-fi.com/lgug2z).\n\n# Installation\n\nWhile this project is in a pre-release state, you can install `wpmd` and `wpmctl` using `cargo`:\n\n```shell\ncargo install --git https://github.com/LGUG2Z/wpm wpmd\ncargo install --git https://github.com/LGUG2Z/wpm wpmctl\n```\n\n# Usage\n\n- Create unit files in `~/.config/wpm` - take a look at the [examples](./examples)\n- The full schema can be found [here](./schema.unit.json) and is likely to change during this early development phase\n- `$USERPROFILE` is a specially handled string in both `arguments` and `environment` which will be replaced with your home dir\n- Run `wpmd` to start the daemon, this will load all unit files in `~/.config/wpm`\n- Run `wpmctl start \u003cUNIT\u003e` (or whatever your unit name is) to start the process\n- Run `wpmctl stop \u003cUNIT\u003e` (or whatever your unit name is) to stop the process\n- Run `wpmctl reload` to reload all unit definitions (useful if you're making changes)\n- Run `wpmctl rebuild` to install manifests for remote executable sources\n\n## Process Monitoring\n\n- Run `wpmctl log \u003cUNIT\u003e` (or whatever your unit name is) to log the output of the process\n\n```\n❯ wpmctl log whkd\nkomorebic focus right\nkomorebic focus left\nkomorebic focus left\nkomorebic focus right\n```\n\n- Run `wpmctl state` to inspect the state of the process manager\n\n```\n❯ wpmctl state\n+--------------+---------+-----------+-------+--------------------------------------+\n| name         | kind    | state     | pid   | timestamp                            |\n+--------------+---------+-----------+-------+--------------------------------------+\n| komorebi     | Simple  | Running   | 34304 |                                      |\n+--------------+---------+-----------+-------+--------------------------------------+\n| whkd         | Simple  | Running   | 6460  |                                      |\n+--------------+---------+-----------+-------+--------------------------------------+\n| komorebi-bar | Simple  | Running   | 37400 |                                      |\n+--------------+---------+-----------+-------+--------------------------------------+\n| kanata       | Simple  | Running   | 34204 |                                      |\n+--------------+---------+-----------+-------+--------------------------------------+\n| masir        | Simple  | Stopped   |       |                                      |\n+--------------+---------+-----------+-------+--------------------------------------+\n| desktop      | Oneshot | Completed |       | 2024-12-15 20:12:36.446380800 -08:00 |\n+--------------+---------+-----------+-------+--------------------------------------+\n```\n\n- Run `wpmctl status \u003cUNIT\u003e` to inspect the status of a unit\n\n```\n❯ wpmctl status kanata\n● Status of kanata:\n  Kind: Simple\n  State: Running since 2024-12-16 17:20:01.796661100 -08:00\n  PID: 41704\n  Log file: C:\\Users\\LGUG2Z\\.config\\wpm\\logs\\kanata.log\n  Command: C:\\Users\\LGUG2Z\\.cargo\\bin\\kanata.exe -c C:\\Users\\LGUG2Z\\minimal.kbd --port 9999\n  Healthcheck: Liveness check after 1s\n\nRecent logs:\n  15:46:38.0790 [INFO] Sleeping for 2s. Please release all keys and don't press additional ones. Run kanata with --help to see how understand more and how to disable this sleep.\n  15:46:40.0807 [INFO] entering the processing loop\n  15:46:40.0808 [INFO] listening for event notifications to relay to connected clients\n  15:46:40.0808 [INFO] Init: catching only releases and sending immediately\n  15:46:40.6899 [INFO] Starting kanata proper\n  15:46:40.6900 [INFO] You may forcefully exit kanata by pressing lctl+spc+esc at any time. These keys refer to defsrc input, meaning BEFORE kanata remaps keys.\n```\n\n# Contribution Guidelines\n\nIf you would like to contribute to `wpm` please take the time to carefully read the guidelines below.\n\n## Commit hygiene\n\n- Flatten all `use` statements\n- Run `cargo +stable clippy` and ensure that all lints and suggestions have been addressed before committing\n- Run `cargo +nightly fmt --all` to ensure consistent formatting before committing\n- Use `git cz` with\n  the [Commitizen CLI](https://github.com/commitizen/cz-cli#conventional-commit-messages-as-a-global-utility) to prepare\n  commit messages\n- Provide **at least** one short sentence or paragraph in your commit message body to describe your thought process for the\n  changes being committed\n\n## License\n\n`wpm` is licensed under the [Komorebi 2.0.0 license](./LICENSE.md), which\nis a fork of the [PolyForm Strict 1.0.0\nlicense](https://polyformproject.org/licenses/strict/1.0.0). On a high level\nthis means that you are free to do whatever you want with `wpm` for\npersonal use other than redistribution, or distribution of new works (i.e.\nhard-forks) based on the software.\n\nAnyone is free to make their own fork of `wpm` with changes intended\neither for personal use or for integration back upstream via pull requests.\n\n_The [Komorebi 2.0.0 License](./LICENSE.md) does not permit any kind of\ncommercial use._\n\n### Contribution licensing\n\nContributions are accepted with the following understanding:\n\n- Contributed content is licensed under the terms of the 0-BSD license\n- Contributors accept the terms of the project license at the time of contribution\n\nBy making a contribution, you accept both the current project license terms, and that all contributions that you have\nmade are provided under the terms of the 0-BSD license.\n\n#### Zero-Clause BSD\n\n```\nPermission to use, copy, modify, and/or distribute this software for\nany purpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL\nWARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE\nFOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY\nDAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN\nAN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\nOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flgug2z%2Fwpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flgug2z%2Fwpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flgug2z%2Fwpm/lists"}