{"id":22281186,"url":"https://github.com/canonical/pebble","last_synced_at":"2026-04-02T18:27:55.542Z","repository":{"id":37265902,"uuid":"311671251","full_name":"canonical/pebble","owner":"canonical","description":"Pebble is a lightweight Linux service manager with layered configuration and an HTTP API","archived":false,"fork":false,"pushed_at":"2026-03-29T21:34:48.000Z","size":3104,"stargazers_count":187,"open_issues_count":18,"forks_count":73,"subscribers_count":10,"default_branch":"master","last_synced_at":"2026-03-30T00:22:14.128Z","etag":null,"topics":["api","go","service-manager"],"latest_commit_sha":null,"homepage":"https://documentation.ubuntu.com/pebble/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canonical.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-10T13:44:30.000Z","updated_at":"2026-03-29T21:18:14.000Z","dependencies_parsed_at":"2023-10-04T09:27:02.142Z","dependency_job_id":"daf2c1cc-6138-4012-93ba-8e0c39800387","html_url":"https://github.com/canonical/pebble","commit_stats":{"total_commits":122,"total_committers":16,"mean_commits":7.625,"dds":0.5327868852459017,"last_synced_commit":"5842ea68c9c7590bb64184b1b7cbff039b02b986"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/canonical/pebble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpebble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpebble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpebble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpebble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canonical","download_url":"https://codeload.github.com/canonical/pebble/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpebble/sbom","scorecard":{"id":65064,"data":{"date":"2025-08-11","repo":{"name":"github.com/canonical/pebble","commit":"2af10187014f8a2fce12db9d4a0a6d916cdc9041"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.7,"checks":[{"name":"Code-Review","score":8,"reason":"Found 24/30 approved changesets -- score normalized to 8","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":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"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":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/binaries.yml:1","Warn: no topLevel permission defined: .github/workflows/docs.yaml:1","Warn: no topLevel permission defined: .github/workflows/integration-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/lint.yml:1","Warn: no topLevel permission defined: .github/workflows/scanning.yml:1","Warn: no topLevel permission defined: .github/workflows/snap.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: found token with 'none' permissions: .github/workflows/tiobe.yaml:1","Info: no jobLevel write permissions found"],"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":"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":"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":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/binaries.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/binaries.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/binaries.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/binaries.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/binaries.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/binaries.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yaml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/docs.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/docs.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docs.yaml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/integration-tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/integration-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/integration-tests.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/integration-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:8: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scanning.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/scanning.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/scanning.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/scanning.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/snap.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:149: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/snap.yml:155: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/snap.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/snap.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/snap.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tiobe.yaml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tiobe.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tiobe.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/canonical/pebble/tiobe.yaml/master?enable=pin","Info:   0 out of  32 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   8 third-party GitHubAction dependencies pinned","Info:   4 out of   4 goCommand dependencies pinned"],"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.23.0 not signed: https://api.github.com/repos/canonical/pebble/releases/236124243","Warn: release artifact v1.22.2 not signed: https://api.github.com/repos/canonical/pebble/releases/223204244","Warn: release artifact v1.19.2 not signed: https://api.github.com/repos/canonical/pebble/releases/222558133","Warn: release artifact v1.22.1 not signed: https://api.github.com/repos/canonical/pebble/releases/221974844","Warn: release artifact v1.22.0 not signed: https://api.github.com/repos/canonical/pebble/releases/221696815","Warn: release artifact v1.23.0 does not have provenance: https://api.github.com/repos/canonical/pebble/releases/236124243","Warn: release artifact v1.22.2 does not have provenance: https://api.github.com/repos/canonical/pebble/releases/223204244","Warn: release artifact v1.19.2 does not have provenance: https://api.github.com/repos/canonical/pebble/releases/222558133","Warn: release artifact v1.22.1 does not have provenance: https://api.github.com/repos/canonical/pebble/releases/221974844","Warn: release artifact v1.22.0 does not have provenance: https://api.github.com/repos/canonical/pebble/releases/221696815"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch '1.19-maintenance'","Warn: branch protection not enabled for branch '1.14-maintenance'","Warn: branch protection not enabled for branch '1.10-maintenance'","Warn: branch protection not enabled for branch '1.7-maintenance'","Warn: branch protection not enabled for branch '1.4-maintenance'","Warn: branch protection not enabled for branch '1.1-maintenance'","Warn: branch protection not enabled for branch '1.9-maintenance'","Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is not required on branch 'master'","Info: status check found to merge onto on branch 'master'","Info: PRs are required in order to make changes on 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":-1,"reason":"internal error: internal error: Client.Checks.ListCheckRunsForRef: error during graphqlHandler.setupCheckRuns: non-200 OK status code: 502 Bad Gateway body: \"\u003chtml\u003e\\r\\n\u003chead\u003e\u003ctitle\u003e502 Bad Gateway\u003c/title\u003e\u003c/head\u003e\\r\\n\u003cbody\u003e\\r\\n\u003ccenter\u003e\u003ch1\u003e502 Bad Gateway\u003c/h1\u003e\u003c/center\u003e\\r\\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\\r\\n\u003c/body\u003e\\r\\n\u003c/html\u003e\\r\\n\"","details":null,"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T02:25:32.279Z","repository_id":37265902,"created_at":"2025-08-15T02:25:32.279Z","updated_at":"2025-08-15T02:25:32.279Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31312870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["api","go","service-manager"],"created_at":"2024-12-03T16:15:53.438Z","updated_at":"2026-04-02T18:27:55.533Z","avatar_url":"https://github.com/canonical.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Pebble service manager\n\n[![pebble](https://snapcraft.io/pebble/badge.svg)](https://snapcraft.io/pebble)\n[![snap](https://github.com/canonical/pebble/actions/workflows/snap.yml/badge.svg)](https://github.com/canonical/pebble/actions/workflows/snap.yml)\n[![binaries](https://github.com/canonical/pebble/actions/workflows/binaries.yml/badge.svg)](https://github.com/canonical/pebble/actions/workflows/binaries.yml)\n[![tests](https://github.com/canonical/pebble/actions/workflows/tests.yml/badge.svg)](https://github.com/canonical/pebble/actions/workflows/tests.yml)\n\n_Take control of your internal daemons!_\n\n**Pebble** is a lightweight Linux service manager that helps you orchestrate a set of local processes as an organized set. It resembles well-known tools such as _supervisord_, _runit_, or _s6_, in that it can easily manage non-system processes independently from the system services. However, it was designed with unique features such as layered configuration and an HTTP API that help with more specific use cases.\n\nPebble's key features:\n\n- [Layer](https://documentation.ubuntu.com/pebble/reference/layer-specification/)-based configuration\n- Service [dependencies](https://documentation.ubuntu.com/pebble/explanation/service-dependencies/)\n- Service [logs](https://documentation.ubuntu.com/pebble/reference/cli-commands/#logs) and [log forwarding](https://documentation.ubuntu.com/pebble/reference/log-forwarding/)\n- [Health checks](https://documentation.ubuntu.com/pebble/reference/health-checks/)\n- [Notices](https://documentation.ubuntu.com/pebble/reference/notices/) (aggregated events)\n- [Identities](https://documentation.ubuntu.com/pebble/how-to/manage-identities/)\n- Can be used in [virtual machines and containers](https://documentation.ubuntu.com/pebble/how-to/manage-a-remote-system/)\n- [CLI commands](https://documentation.ubuntu.com/pebble/reference/cli-commands/)\n- [HTTP API](https://documentation.ubuntu.com/pebble/explanation/api-and-clients/) with a [Go client](https://pkg.go.dev/github.com/canonical/pebble/client) and a [Python client](https://github.com/canonical/operator/blob/main/ops/pebble.py)\n\n## Quick start\n\nAt any Linux shell:\n\n```bash\ngo install github.com/canonical/pebble/cmd/pebble@latest\nmkdir -p ~/.config/pebble/layers\nexport PEBBLE=$HOME/.config/pebble\n\necho \"\"\"\\\nservices:\n    demo-service:\n        override: replace\n        command: sleep 1000\n        startup: enabled\n\"\"\" \u003e $PEBBLE/layers/001-demo-service.yaml\n\npebble run\n```\n\nRead more about Pebble's general model [here](https://documentation.ubuntu.com/pebble/explanation/general-model/).\n\nFor a hands-on introduction to Pebble, we recommend going through the [tutorial](https://documentation.ubuntu.com/pebble/tutorial/getting-started/).\n\n## Getting help\n\nTo get the most out of Pebble, we recommend starting with the [documentation](https://documentation.ubuntu.com/pebble/).\n\nYou can [create an issue](https://github.com/canonical/pebble/issues/new) and we will help!\n\n## Hacking and development\n\nSee [HACKING.md](HACKING.md) for information on how to run and hack on the Pebble codebase during development. In short, use `go run ./cmd/pebble`.\n\n## Contributing\n\nWe welcome quality external contributions. We have good unit tests for much of the code, and a thorough code review process. Please note that unless it's a trivial fix, it's generally worth opening an issue to discuss before submitting a pull request.\n\nBefore you contribute a pull request you should sign the [Canonical contributor agreement](https://ubuntu.com/legal/contributors) -- it's the easiest way for you to give us permission to use your contributions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fpebble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanonical%2Fpebble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fpebble/lists"}