{"id":23835184,"url":"https://github.com/gogrlx/grlx","last_synced_at":"2025-04-13T05:00:23.345Z","repository":{"id":43250258,"uuid":"377938811","full_name":"gogrlx/grlx","owner":"gogrlx","description":"Effective Fleet Configuration Management","archived":false,"fork":false,"pushed_at":"2025-02-18T19:11:58.000Z","size":1366,"stargazers_count":165,"open_issues_count":51,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-13T04:59:57.048Z","etag":null,"topics":["configuration","configuration-management","devops","garlic","go","golang","grlx","management","orchestration"],"latest_commit_sha":null,"homepage":"https://grlx.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gogrlx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"taigrr"}},"created_at":"2021-06-17T19:20:49.000Z","updated_at":"2025-03-31T20:42:41.000Z","dependencies_parsed_at":"2023-09-26T20:01:23.458Z","dependency_job_id":"b6a6ea95-c93f-49ea-b2a5-a247dbf2bee6","html_url":"https://github.com/gogrlx/grlx","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogrlx%2Fgrlx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogrlx%2Fgrlx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogrlx%2Fgrlx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogrlx%2Fgrlx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gogrlx","download_url":"https://codeload.github.com/gogrlx/grlx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665756,"owners_count":21142123,"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":["configuration","configuration-management","devops","garlic","go","golang","grlx","management","orchestration"],"created_at":"2025-01-02T15:27:30.174Z","updated_at":"2025-04-13T05:00:23.274Z","avatar_url":"https://github.com/gogrlx.png","language":"Go","funding_links":["https://github.com/sponsors/taigrr"],"categories":[],"sub_categories":[],"readme":"## \u003cp align=\"center\"\u003e\u003cimg src=\"docs/logos/grlx.jpg\" width=\"300\" alt=\"grlx logo\"\u003e\u003c/p\u003e\n\n# grlx - Effective Fleet Configuration Management\n\n[![License 0BSD](https://img.shields.io/badge/License-0BSD-pink.svg)](https://opensource.org/licenses/0BSD)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gogrlx/grlx)](https://goreportcard.com/report/github.com/gogrlx/grlx) [![GoDoc](https://img.shields.io/badge/GoDoc-reference-007d9c)](https://pkg.go.dev/github.com/gogrlx/grlx)\n[![CodeQL](https://github.com/gogrlx/grlx/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/gogrlx/grlx/actions/workflows/codeql-analysis.yml)\n[![govulncheck](https://github.com/gogrlx/grlx/actions/workflows/govulncheck.yml/badge.svg)](https://github.com/gogrlx/grlx/actions/workflows/govulncheck.yml)\n[![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/m/gogrlx/grlx)](https://github.com/gogrlx/grlx)\n[![Twitter](https://img.shields.io/twitter/follow/gogrlx)](https://x.com/gogrlx)\n[![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.com/invite/VruAThf)\n\ngrlx (pronounced like \"garlic\") is a pure-[Go](http://golang.org) DevOps automation engine designed to use few system resources and keep your application front and center.\n\n## Quick Start\n\nWant to get up and running as quickly as possible to see what all the fuss is about?\nUse our bootstrap scripts!\n\n1. Download and initialize the command line utility from our releases to your dev machine.\n\n```bash\n# replace 'linux' with darwin if you're on macOS\ncurl -L https://releases.grlx.dev/linux/amd64/latest/grlx \u003e grlx \u0026\u0026 chmod +x grlx\n./grlx init\n```\n\nYou'll be asked some questions, such as which interface the `farmer` is listening on, and which ports to use for communication.\nSet the interface to the domain name or IP address of the `farmer`.\nOnce configured, the CLI prints out your administrator public key, which you'll need for the next step!\nIt's recommended you now add `grlx` somewhere in your `$PATH`.\n\n2. On your control server, you'll need to install the `farmer`.\n\n```bash\n# or, just run as root instead of sudo\ncurl -L https://bootstrap.grlx.dev/latest/farmer | sudo bash\n```\n\nYou'll be asked several questions about the interface to listen on, which ports to use, etc.\nFor the quick start, it's recommended to use the default ports (make sure there's no firewall in the way!).\nYou'll be prompted for an admin public key, which you should have gotten from the prior step, and a certificate host name(s).\nMake sure the certificate host name matches the external-facing interface (a domain or IP address) as it will be used for TLS validation!\n\n3. On all of your fleet nodes, you'll need to install the `sprout`.\n\n```bash\n# or, just run as root instead of sudo\n# FARMER_BUS_PORT and FARMER_API_PORT variables are available in case you chose\n# to use different ports.\ncurl -L https://bootstrap.grlx.dev/latest/sprout | FARMERINTERFACE=localhost sudo -E bash\n```\n\nOnce the sprout is up and running, return to the CLI.\n\n4. If all is well, you're ready to `cook`! Accept the TLS cert and the `sprout` keys when prompted.\n\n```bash\ngrlx version\ngrlx keys accept -A\nsleep 15;\ngrlx -T \\* test ping\ngrlx -T \\* cmd run whoami\ngrlx -T \\* cmd run --out json -- uname -a\n```\n\n## Documentation\n\nPlease see the [official docs site](https://docs.grlx.dev) for complete documentation.\n\n## Why grlx?\n\nOur team started out using competing solutions, and we ran into scalability issues.\nPython is a memory hog and is interpreted to boot.\nMany systems struggle with installing Python dependencies properly, and with so many moving parts, the probability of something going wrong increases.\n\n## Architecture\n\ngrlx is made up of three components: the `farmer`, one or many `sprout`s, and a CLI utility, `grlx`.\nThe `farmer` binary runs as a daemon on a management server (referred to as the 'farmer'), and is controlled via the `grlx` cli.\n`grlx` can be run both locally on the management server or remotely over a secure-by-default, TLS-encrypted API.\nThe `sprout` binary should be installed as a daemon on systems that are to be managed.\nManaged systems are referred to as 'sprouts.'\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/diagrams/grlx-arch-light.png\" width=\"100%\" alt=\"architecture diagram\"\u003e\u003c/p\u003e\n\n## Batteries Included\n\n`farmer` contains an embedded messaging Pub-Sub server ([NATS](https://github.com/nats-io/nats-server)), and an api server.\nNodes running `sprout` subscribe to messages over the bus.\nBoth the API server and the messaging bus use TLS encryption (elliptic curve by default), and sprouts authenticate using public-key cryptography.\n\nJobs can be created with the `grlx` command-line interface and typically come in the form of stateful targets called 'recipes'.\nRecipes are yaml documents which describe the desired state of a sprout after the recipe is applied (`cook`ed).\nBecause the `farmer` exposes an API, `grlx` is by no means the only way to create or manage jobs, but it is the only supported method at the beginning.\n\n## Sponsors\n\nA big thank you to all of grlx's sponsors.\nIf you're a small company or individual user and you'd like to donate to grlx's development, you can donate to individual developers using the GitHub Sponsors button.\n\nFor prioritized and commercial support, we have partnered with ADAtomic, Inc., to offer official, on-call hours.\nFor more information, please [contact the team](mailto:grlx@adatomic.com) via email.\n\n### Founders Club\n\n\u003cp align=\"left\"\u003e\n    \u003ca href=\"https://newleafsolutions.dev\"\u003e\n        \u003cimg src=\"docs/logos/newleaf.png\" width=\"125\" alt=\"New Leaf Solutions\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ADAtomic\"\u003e\n        \u003cimg src=\"docs/logos/adatomic.png\" width=\"125\" alt=\"ADAtomic, inc.\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## Early Adopters\n\nIf you or your company use grlx and you'd like to be added to this list, [Create an Issue](https://github.com/gogrlx/grlx/issues/new?assignees=taigrr\u0026labels=docs\u0026projects=\u0026template=add_my_company.md\u0026title=%5BUSER%5D).\n\n\u003cp align=\"left\"\u003e\n    \u003ca href=\"https://www.cellpointsystems.com/software-development\"\u003e\n        \u003cimg src=\"docs/logos/cellpointsystems.png\" width=\"125\" alt=\"Cellpoint Systems, Inc.\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://dendra.science\"\u003e\n        \u003cimg src=\"docs/logos/dendrascience.png\" width=\"125\" alt=\"Dendra Science\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://newleafsolutions.dev\"\u003e\n        \u003cimg src=\"docs/logos/newleaf.png\" width=\"125\" alt=\"New Leaf Solutions, Inc.\"\u003e\n    \u003c/a\u003e \n    \u003ca href=\"https://google.com\"\u003e\n        \u003cimg src=\"docs/logos/google.png\" width=\"125\" alt=\"Google, Inc.\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/ADAtomic\"\u003e\n        \u003cimg src=\"docs/logos/adatomic.png\" width=\"125\" alt=\"ADAtomic, Inc.\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://gladhost.cloud\"\u003e\n        \u003cimg src=\"docs/logos/gladhost.png\" width=\"125\" alt=\"GLADHOST\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## License\n\nDependencies may carry their own license agreements.\nTo see the licenses of dependencies, please view [DEPENDENCIES.md](https://github.com/gogrlx/grlx/blob/master/DEPENDENCIES.md).\n\nUnless otherwise noted, the grlx source files are distributed under the 0BSD license found in the [LICENSE](https://github.com/gogrlx/grlx/blob/master/LICENSE) file.\n\nAll grlx logos are Copyright 2021 Tai Groot and Licensed under CC BY 3.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogrlx%2Fgrlx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgogrlx%2Fgrlx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogrlx%2Fgrlx/lists"}