{"id":39967639,"url":"https://github.com/dkron-io/dkron","last_synced_at":"2026-01-27T11:01:18.996Z","repository":{"id":33538100,"uuid":"37184230","full_name":"dkron-io/dkron","owner":"dkron-io","description":"Dkron - Distributed, fault tolerant job scheduling system https://dkron.io","archived":false,"fork":false,"pushed_at":"2026-01-20T22:02:36.000Z","size":144063,"stargazers_count":4665,"open_issues_count":38,"forks_count":406,"subscribers_count":89,"default_branch":"main","last_synced_at":"2026-01-21T07:19:08.992Z","etag":null,"topics":["cron","distributed-systems","fault-tolerance","scheduled-jobs"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dkron-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2015-06-10T08:13:17.000Z","updated_at":"2026-01-20T10:11:00.000Z","dependencies_parsed_at":"2023-07-13T11:18:17.493Z","dependency_job_id":"7fdc4aea-6039-4d32-80cb-a3908f2688a8","html_url":"https://github.com/dkron-io/dkron","commit_stats":{"total_commits":2174,"total_committers":85,"mean_commits":"25.576470588235296","dds":"0.21987120515179392","last_synced_commit":"8c94a5d92fa7c2676f49fc7eb97f3ff6f660b471"},"previous_names":["victorcoder/dcron","victorcoder/dkron","dkron-io/dkron"],"tags_count":141,"template":false,"template_full_name":null,"purl":"pkg:github/dkron-io/dkron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkron-io%2Fdkron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkron-io%2Fdkron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkron-io%2Fdkron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkron-io%2Fdkron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dkron-io","download_url":"https://codeload.github.com/dkron-io/dkron/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkron-io%2Fdkron/sbom","scorecard":{"id":345044,"data":{"date":"2025-08-11","repo":{"name":"github.com/distribworks/dkron","commit":"f5af3f03894339f8c2e2029b0f3816ab4dc162d0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"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":"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":"Maintained","score":10,"reason":"20 commit(s) and 6 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":"Code-Review","score":4,"reason":"Found 6/15 approved changesets -- score normalized to 4","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/autogen.yaml:38","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:29","Warn: no topLevel permission defined: .github/workflows/autogen.yaml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1"],"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"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/autogen.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/autogen.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/autogen.yaml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/autogen.yaml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/autogen.yaml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/autogen.yaml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/autogen.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/distribworks/dkron/release.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating golang:1.23.5 to golang:1.23.5@sha256:e213430692e5c31aba27473cdc84cfff2896d0c097e984bef67b6a44c75a8181","Warn: containerImage not pinned by hash: Dockerfile.light.hub:1: pin your Docker image by updating alpine:3.20 to alpine:3.20@sha256:b3119ef930faabb6b7b976780c0c7a9c1aa24d0c75e9179ac10e6bc9ac080d0d","Warn: containerImage not pinned by hash: Dockerfile.release:1: pin your Docker image by updating alpine:3.20 to alpine:3.20@sha256:b3119ef930faabb6b7b976780c0c7a9c1aa24d0c75e9179ac10e6bc9ac080d0d","Warn: goCommand not pinned by hash: .github/workflows/autogen.yaml:53","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   3 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 v4.0.5 not signed: https://api.github.com/repos/distribworks/dkron/releases/216367213","Warn: release artifact v4.0.4 not signed: https://api.github.com/repos/distribworks/dkron/releases/202149332","Warn: release artifact v4.0.3 not signed: https://api.github.com/repos/distribworks/dkron/releases/199268923","Warn: release artifact v4.0.2 not signed: https://api.github.com/repos/distribworks/dkron/releases/193200479","Warn: release artifact v4.0.1 not signed: https://api.github.com/repos/distribworks/dkron/releases/192151762","Warn: release artifact v4.0.5 does not have provenance: https://api.github.com/repos/distribworks/dkron/releases/216367213","Warn: release artifact v4.0.4 does not have provenance: https://api.github.com/repos/distribworks/dkron/releases/202149332","Warn: release artifact v4.0.3 does not have provenance: https://api.github.com/repos/distribworks/dkron/releases/199268923","Warn: release artifact v4.0.2 does not have provenance: https://api.github.com/repos/distribworks/dkron/releases/193200479","Warn: release artifact v4.0.1 does not have provenance: https://api.github.com/repos/distribworks/dkron/releases/192151762"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 21 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":"60 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-vhxf-7vqr-mrjg","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-vg6x-rcgg-rjx6","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3","Warn: Project is vulnerable to: GHSA-hqq7-2q2v-82xq","Warn: Project is vulnerable to: GHSA-q8gg-vj6m-hgmj","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-36jr-mh4h-2g58","Warn: Project is vulnerable to: GHSA-p3vf-v8qc-cwcr","Warn: Project is vulnerable to: GHSA-gx9m-whjm-85jf","Warn: Project is vulnerable to: GHSA-mmhx-hmjr-r674","Warn: Project is vulnerable to: GHSA-f7f6-9jq7-3rqj","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-8gh8-hqwg-xf34","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-cg87-wmx4-v546","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-m4gq-x24j-jpmf","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-3949-f494-cm99","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-9rhg-254w-fh9x","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"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-18T06:50:57.232Z","repository_id":33538100,"created_at":"2025-08-18T06:50:57.232Z","updated_at":"2025-08-18T06:50:57.232Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28812367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:41:26.337Z","status":"ssl_error","status_checked_at":"2026-01-27T07:41:08.776Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["cron","distributed-systems","fault-tolerance","scheduled-jobs"],"created_at":"2026-01-18T22:00:40.929Z","updated_at":"2026-01-27T11:01:18.991Z","avatar_url":"https://github.com/dkron-io.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg width=\"400\" src=\"docs/images/DKRON_STICKER_OK_CMYK_RGB_CONV_300.png\" alt=\"Dkron\" title=\"Dkron\" /\u003e\n\u003c/p\u003e\n\n# Dkron - Distributed, fault tolerant job scheduling system for cloud native environments [![GoDoc](https://godoc.org/github.com/distribworks/dkron?status.svg)](https://godoc.org/github.com/distribworks/dkron) [![Actions Status](https://github.com/distribworks/dkron/workflows/Test/badge.svg)](https://github.com/distribworks/dkron/actions) [![Gitter](https://badges.gitter.im/distribworks/dkron.svg)](https://gitter.im/distribworks/dkron) [![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20Dkron%20Guru-006BFF)](https://gurubase.io/g/dkron)\n\nWebsite: http://dkron.io/\n\nDkron is a distributed cron service, easy to setup and fault tolerant with focus in:\n\n- Easy: Easy to use with a great UI\n- Reliable: Completely fault tolerant\n- Highly scalable: Able to handle high volumes of scheduled jobs and thousands of nodes\n\nDkron is written in Go and leverage the power of the Raft protocol and Serf for providing fault tolerance, reliability\nand scalability while keeping simple and easily installable.\n\nDkron is inspired by the google\nwhitepaper [Reliable Cron across the Planet](https://queue.acm.org/detail.cfm?id=2745840) and by Airbnb Chronos\nborrowing the same features from it.\n\nDkron runs on Linux, OSX and Windows. It can be used to run scheduled commands on a server cluster using any combination\nof servers for each job. It has no single points of failure due to the use of the Gossip protocol and fault tolerant\ndistributed databases.\n\nYou can use Dkron to run the most important part of your company, scheduled jobs.\n\n## Installation\n\n[Installation instructions](https://dkron.io/docs/basics/installation)\n\nFull, comprehensive documentation is accessible on the [Dkron website](http://dkron.io)\n\n## Quickstart\n\n### Deploying Dkron using Docker\n\nThe best way to test and develop dkron is using docker, you will need [Docker](https://www.docker.com/) with Docker\ncompose installed before proceeding.\n\n```bash\ndocker compose up -d\n```\n\nThe UI should be available on http://localhost:8080/ui.\n\n### Using Dkron\n\nTo add jobs to the system read the [API docs](https://dkron.io/api/).\n\n### Scaling the cluster\n\nTo add more Dkron instances to the cluster:\n\n```bash\ndocker compose up -d --scale dkron-server=4\ndocker compose up -d --scale dkron-agent=10\n```\n\n## Development\n\nTo develop Dkron, you can deploy the cluster with local changes applied with the following steps:\n\n1. Clone the repository.\n\n2. Run the `docker compose`:\n\n    ```bash\n    docker compose -f docker-compose.dev.yml up\n    ```\n\n### Email Testing\n\nFor testing email notifications during development, Mailpit is included in the development docker-compose setup. Mailpit provides a local SMTP server that captures outgoing emails without sending them to real recipients.\n\nStart Mailpit with the development environment:\n\n```bash\ndocker compose -f docker-compose.dev.yml up mailpit\n```\n\nOr run it standalone:\n\n```bash\ndocker run -p 8025:8025 -p 1025:1025 axllent/mailpit\n```\n\nView captured emails at: http://localhost:8025\n\nFor more information, see [docs/EMAIL_TESTING.md](docs/EMAIL_TESTING.md).\n\n### Testing CI Locally\n\nTo validate that your changes will pass in GitHub Actions before pushing:\n\n```bash\n./scripts/test-ci-locally.sh\n```\n\nThis script:\n- Starts Mailpit (simulating the CI service container)\n- Runs tests with the same configuration as GitHub Actions\n- Provides clear pass/fail results\n- Allows you to inspect emails in the Mailpit UI\n\nSee [.github/TESTING.md](.github/TESTING.md) for more information about CI testing.\n\n### Frontend development\n\nDkron dashboard is built using [React Admin](https://marmelab.com/react-admin/) as a single page application.\n\nTo start developing the dashboard enter the `ui` directory and run `npm install` to get the frontend dependencies and\nthen start the local server with `npm start` it should start a new local web server and open a new browser window\nserving de web ui.\n\nMake your changes to the code, then run `make ui` to generate assets files. This is a method of embedding resources in\nGo applications.\n\n### Resources\n\nChef cookbook\nhttps://supermarket.chef.io/cookbooks/dkron\n\nPython Client Library\nhttps://github.com/oldmantaiter/pydkron\n\nRuby client\nhttps://github.com/jobandtalent/dkron-rb\n\nPHP client\nhttps://github.com/gromo/dkron-php-adapter\n\nTerraform provider\nhttps://github.com/bozerkins/terraform-provider-dkron\n\nManage and run jobs in Dkron from your django project\nhttps://github.com/surface-security/django-dkron\n\n## Contributors\n\n\u003ca href=\"https://github.com/distribworks/dkron/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=distribworks/dkron\" /\u003e\n\u003c/a\u003e\n\nMade with [contrib.rocks](https://contrib.rocks).\n\n## Get in touch\n\n- Twitter: [@distribworks](https://twitter.com/distribworks)\n- Chat: https://gitter.im/distribworks/dkron\n- Email: victor at distrib.works\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkron-io%2Fdkron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdkron-io%2Fdkron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkron-io%2Fdkron/lists"}