{"id":48994849,"url":"https://github.com/turtlemonvh/blanket","last_synced_at":"2026-05-02T14:01:38.780Z","repository":{"id":145150752,"uuid":"52973270","full_name":"turtlemonvh/blanket","owner":"turtlemonvh","description":"Blanket is a RESTy wrapper for long running tasks.","archived":false,"fork":false,"pushed_at":"2026-05-01T22:46:13.000Z","size":5658,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-02T00:28:35.157Z","etag":null,"topics":["boltdb","golang","queue","rest-api","task-runner"],"latest_commit_sha":null,"homepage":"","language":"Go","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/turtlemonvh.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-03-02T15:22:59.000Z","updated_at":"2026-05-01T22:44:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"2005d296-b36d-494d-8c4f-a340601cf998","html_url":"https://github.com/turtlemonvh/blanket","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/turtlemonvh/blanket","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turtlemonvh%2Fblanket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turtlemonvh%2Fblanket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turtlemonvh%2Fblanket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turtlemonvh%2Fblanket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/turtlemonvh","download_url":"https://codeload.github.com/turtlemonvh/blanket/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/turtlemonvh%2Fblanket/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32536582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: 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":["boltdb","golang","queue","rest-api","task-runner"],"created_at":"2026-04-18T16:12:52.725Z","updated_at":"2026-05-02T14:01:38.774Z","avatar_url":"https://github.com/turtlemonvh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blanket\n\nBlanket is a RESTy wrapper for long running tasks. Define task types as\nTOML files, submit them via REST API or CLI, and let workers execute\nthem — all from a single binary with a built-in web UI.\n\n## Installation\n\nDownload a pre-built binary from [GitHub Releases](https://github.com/turtlemonvh/blanket/releases), or use one of the one-liner installers below.\n\n**Linux / macOS:**\n\n```bash\ncurl -sSfL https://raw.githubusercontent.com/turtlemonvh/blanket/master/scripts/install.sh | bash\n```\n\n**Windows (PowerShell):**\n\n```powershell\nirm https://raw.githubusercontent.com/turtlemonvh/blanket/master/scripts/install.ps1 | iex\n```\n\nThe installers download the binary, create config/data directories\n(XDG-compliant on Linux/macOS, `%LOCALAPPDATA%\\blanket` on Windows),\nwrite a default config file, and fetch the example task types. Set\n`INSTALL_DIR` to override the binary location, or `VERSION=v0.1.0`\nto pin a release.\n\n| | Binary | Config | Data |\n|---|---|---|---|\n| Linux/macOS | `~/.local/bin/blanket` | `~/.config/blanket/` | `~/.local/share/blanket/` |\n| Windows | `%LOCALAPPDATA%\\blanket\\bin\\blanket.exe` | `%LOCALAPPDATA%\\blanket\\` | `%LOCALAPPDATA%\\blanket\\` |\n\n## Quick Start\n\n```bash\n# Start the server (uses ~/.config/blanket/config.json by default)\nblanket\n```\n\nOpen the web UI at [http://localhost:8773/](http://localhost:8773/).\n\n```bash\n# List tasks\nblanket ps\n\n# Submit a task\ncurl -s -X POST localhost:8773/task/ -d '{\"type\": \"echo_task\"}'\n# OR\nblanket submit -t echo_task\n\n# Run a worker with specific capabilities\nblanket worker -t bash,unix\n```\n\n## Usage\n\n### Submitting tasks\n\nThe `echo_task` example writes a fixed string to stdout:\n\n```bash\ncurl -s -X POST localhost:8773/task/ \\\n    -d '{\"type\": \"echo_task\"}'\n```\n\nThe `bash_task` example takes a `DEFAULT_COMMAND` env var and runs it:\n\n```bash\ncurl -s -X POST localhost:8773/task/ \\\n    -d '{\"type\": \"bash_task\", \"environment\": {\"DEFAULT_COMMAND\": \"echo $(date)\"}}'\n```\n\nThe `python_hello` example shells out to `python3`:\n\n```bash\ncurl -s -X POST localhost:8773/task/ \\\n    -d '{\"type\": \"python_hello\", \"environment\": {\"NAME\": \"blanket\"}}'\n```\n\nSubmit via CLI (useful for scripting):\n\n```\n$ blanket submit -t echo_task -e '{\"GREETING\": \"hi\"}'\necho_task 69ded2acce42aa8a11ac9ddc [1744748400]\n\n$ blanket submit -t echo_task -e '{\"GREETING\": \"hi\"}' -q\n69ded2adce42aa8a11ac9de0\n```\n\n### File uploads\n\nAttach files to a task — they're placed in the task's working directory:\n\n```bash\ncurl -X POST localhost:8773/task/ \\\n    -F data='{\"type\": \"echo_task\", \"environment\": {\"GREETING\": \"hi\"}}' \\\n    -F blanket.json=@blanket.json\n```\n\n### Managing tasks\n\n```bash\n# Delete a task\ncurl -s -X DELETE localhost:8773/task/\u003ctask-id\u003e | jq .\nblanket rm \u003ctask-id\u003e\n\n# Remove all tasks\nblanket ps -q | xargs -I {} blanket rm {}\n```\n\n### Validating task types\n\nCheck that all configured task types are runnable (executor exists on\nPATH, command is non-empty):\n\n```bash\nblanket task-validate\n```\n\n### Writing task types\n\nTask types are TOML files. Drop them in any directory listed in\n`tasks.typesPaths` in your config. The filename stem becomes the type\nname.\n\n```toml\ntags = [\"bash\", \"unix\"]\nexecutor = \"bash\"\ncommand = \"echo 'hello from blanket'\"\ntimeout = 300\n\n  [[environment.default]]\n  name = \"NAME\"\n  value = \"world\"\n\n  [[environment.required]]\n  name = \"INPUT_FILE\"\n  description = \"Path to the input data\"\n```\n\nSupported executors: `bash` (default), `cmd` (Windows), `powershell`,\nor any executable that accepts `-c \u003ccommand\u003e`.\n\nSee `examples/types/*.toml` for working examples.\n\n## Command Reference\n\n```\n$ blanket -h\nA fast and easy way to wrap applications and make them available via nice clean\nREST interfaces with built in UI, command line tools, and queuing, all in a\nsingle binary!\n\nUsage:\n  blanket [flags]\n  blanket [command]\n\nAvailable Commands:\n  completion    Generate the autocompletion script for the specified shell\n  help          Help about any command\n  ps            List active and queued tasks\n  rm            Remove tasks\n  submit        Submit a task to be executed.\n  task-validate Validate that task types are runnable\n  version       Print the version number of blanket\n  worker        Run a worker with capabilities defined by tags\n\nFlags:\n  -c, --config string     config file (default is blanket.yaml|json|toml)\n  -h, --help              help for blanket\n      --logLevel string   the logging level to use (default \"info\")\n  -p, --port int32        Port the server will run on (default 8773)\n\nUse \"blanket [command] --help\" for more information about a command.\n```\n\n## Contributing\n\nSee [CONTRIBUTORS.md](CONTRIBUTORS.md) for development setup, build\ninstructions, CI details, and code conventions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturtlemonvh%2Fblanket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fturtlemonvh%2Fblanket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fturtlemonvh%2Fblanket/lists"}