{"id":14557428,"url":"https://github.com/go-sprout/sprout","last_synced_at":"2025-09-04T02:31:46.721Z","repository":{"id":230410571,"uuid":"779271815","full_name":"go-sprout/sprout","owner":"go-sprout","description":"From sprig to sprout - Useful template functions for Go templates with steroids","archived":false,"fork":false,"pushed_at":"2025-08-28T11:09:51.000Z","size":1172,"stargazers_count":176,"open_issues_count":3,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-28T17:38:54.237Z","etag":null,"topics":["go","golang","hacktoberfest","sprig","sprout","template","templates"],"latest_commit_sha":null,"homepage":"https://sprout.atom.codes","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"Masterminds/sprig","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-sprout.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":".github/SUPPORT.md","governance":".github/GOVERNANCE.md","roadmap":"docs/roadmap-to-sprout-v1.0.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["42atomys"]}},"created_at":"2024-03-29T12:48:02.000Z","updated_at":"2025-08-28T11:07:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"bc814576-d1c9-40e4-8431-8012f223da14","html_url":"https://github.com/go-sprout/sprout","commit_stats":null,"previous_names":["42atomys/sprout","go-sprout/sprout"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/go-sprout/sprout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-sprout%2Fsprout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-sprout%2Fsprout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-sprout%2Fsprout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-sprout%2Fsprout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-sprout","download_url":"https://codeload.github.com/go-sprout/sprout/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-sprout%2Fsprout/sbom","scorecard":{"id":432513,"data":{"date":"2025-08-11","repo":{"name":"github.com/go-sprout/sprout","commit":"51a8f3aa474d25e283e75410e3b63f8dac7419e3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Code-Review","score":5,"reason":"Found 5/9 approved changesets -- score normalized to 5","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":"Maintained","score":9,"reason":"11 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/dependabot.yaml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/lint.yaml:9","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/lint.yaml:10","Warn: topLevel 'checks' permission set to 'write': .github/workflows/lint.yaml:12","Warn: no topLevel permission defined: .github/workflows/test.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":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dependabot.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/dependabot.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/dependabot.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/dependabot.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/lint.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/lint.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/lint.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yaml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yaml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/go-sprout/sprout/test.yaml/main?enable=pin","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   1 out of   1 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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Warn: 'stale review dismissal' is disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is required - but no codeowners file found in repo","Warn: 'last push approval' is disabled on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 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"}}]},"last_synced_at":"2025-08-19T03:42:15.488Z","repository_id":230410571,"created_at":"2025-08-19T03:42:15.488Z","updated_at":"2025-08-19T03:42:15.488Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273541942,"owners_count":25124062,"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","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["go","golang","hacktoberfest","sprig","sprout","template","templates"],"created_at":"2024-09-06T20:01:12.186Z","updated_at":"2025-09-04T02:31:46.413Z","avatar_url":"https://github.com/go-sprout.png","language":"Go","funding_links":["https://github.com/sponsors/42atomys"],"categories":["Template Engines","模板引擎","Go"],"sub_categories":["HTTP Clients","HTTP客户端","Other Software"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\".github/profile/images/logo_landing_light.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\".github/profile/images/logo_landing_dark.png\"\u003e\n    \u003cimg alt=\"Sprout Logo\" width=\"700\" src=\"\"\u003e\n  \u003c/picture\u003e\n  \u003chr /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca target=\"_blank\" href=\"https://github.com/go-sprout/sprout/actions/workflows/test.yaml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/go-sprout/sprout/test.yaml?branch=main\u0026label=tests\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" href=\"https://goreportcard.com/report/github.com/go-sprout/sprout\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/go-sprout/sprout\" /\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" href=\"https://codeclimate.com/github/go-sprout/sprout\"\u003e\u003cimg alt=\"Code Climate maintainability\" src=\"https://img.shields.io/codeclimate/maintainability/go-sprout/sprout\"\u003e\u003c/a\u003e\n\u003ca target=\"_blank\" href=\"https://codecov.io/gh/go-sprout/sprout\"\u003e\u003cimg alt=\"Codecov\" src=\"https://img.shields.io/codecov/c/github/go-sprout/sprout\"\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/github/v/release/go-sprout/sprout?label=last%20release\" alt=\"GitHub release (latest by date)\"\u003e\n\u003cimg src=\"https://img.shields.io/github/contributors/go-sprout/sprout?color=blueviolet\" alt=\"GitHub contributors\"\u003e\n\u003cimg src=\"https://img.shields.io/github/stars/go-sprout/sprout?style=flat\u0026color=blueviolet\" alt=\"GitHub Repo stars\"\u003e\n\u003ca target=\"_blank\" href=\"https://pkg.go.dev/github.com/go-sprout/sprout\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/github.com/go-sprout/sprout.svg\" alt=\"Go Reference\"\u003e\u003c/a\u003e\n\u003cbr /\u003e\n\u003ch3\u003e \u003ca target=\"_blank\" href=\"https://docs.atom.codes/sprout\"\u003eOfficial Documentation\u003c/a\u003e\u003c/h3\u003e\n\u003chr/\u003e\n\u003c/div\u003e\n\n\u003e [!NOTE]\n\u003e Sprout is an evolved variant of the [Masterminds/sprig](https://github.com/Masterminds/sprig) library, reimagined for modern Go versions. It introduces fresh functionalities and commits to maintaining the library, picking up where Sprig left off. Notably, Sprig had not seen updates for two years and was not compatible beyond Golang 1.13, necessitating the creation of Sprout.\n\n## Motivation\n\nSprout was born out of the need for a modernized, maintained, and performant template function library. Sprig, the predecessor to Sprout, had not seen updates for two years and was not optimized for later versions of Golang. Sprout aims to fill this gap by providing a library that is actively maintained, compatible with the latest Go versions, and optimized for performance.\n\n## Roadmap to Sprout v1.0\n\nYou can track our progress towards Sprout v1.0 by following the documentation page\n[here](https://docs.atom.codes/sprout/roadmap-to-sprout-v1.0).\n\n## Table of Contents\n\n- [Motivation](#motivation)\n- [Roadmap to Sprout v1.0](#roadmap-to-sprout-v10)\n- [Transitioning from Sprig](#transitioning-from-sprig)\n- [Usage](#usage)\n  - [Creating a Handler](#creating-a-handler)\n  - [Customizing the Handler](#customizing-the-handler)\n  - [Working with Registries](#working-with-registries)\n  - [Working with Registries Groups](#working-with-registries-groups)\n  - [Building Function Maps](#building-function-maps)\n  - [Working with Templates](#working-with-templates)\n- [Usage: Quick Example (code only)](#usage-quick-example)\n- [Performance Benchmarks](#performance-benchmarks)\n  - [Sprig v3.2.3 vs Sprout v0.2](#sprig-v323-vs-sprout-v02)\n- [Development Philosophy (Currently in reflexion to create our)](#development-philosophy-currently-in-reflexion-to-create-our)\n\n\n## Transitioning from Sprig\n\nSprout provide a package `sprigin` to provide a drop-in replacement for Sprig in the v1.0, with the same function names and behavior. To use Sprout in your project, simply replace the Sprig import with sprigin:\n\n\u003e [!IMPORTANT]\n\u003e The `sprigin` package is a temporary solution to provide backward compatibility with Sprig. We recommend updating your code to use the Sprout package directly to take advantage of the new features and improvements.\n\u003e\n\u003e A complete guide is available in the [documentation](https://docs.atom.codes/sprout/migration-from-sprig).\n\n```diff\nimport (\n-  \"github.com/Masterminds/sprig/v3\"\n+  \"github.com/go-sprout/sprout/sprigin\"\n)\n\ntpl := template.Must(\n  template.New(\"base\").\n-   Funcs(sprig.FuncMap()).\n+   Funcs(sprigin.FuncMap()).\n    ParseGlob(\"*.tmpl\")\n)\n```\n\n## Usage\n\n### Creating a Handler\nA handler in Sprout is responsible for managing the function registries and functions. The DefaultHandler is the primary implementation provided by Sprout.\n\n```go\nimport \"github.com/go-sprout/sprout\"\n\nhandler := sprout.New()\n``` \n\n### Customizing the Handler\n\nSprout supports various customization options using handler options:\n\n```go\nhandler := sprout.New(\n  // Add your logger to the handler to log errors and debug information using the\n  // standard slog package or any other logger that implements the slog.Logger interface.\n  // By default, Sprout uses a slog.TextHandler.\n  sprout.WithLogger(slogLogger),\n  // Set the alias for a function. By default, Sprout use alias for some functions for backward compatibility with Sprig.\n  sprout.WithAlias(\"hello\", \"hi\"),\n)\n```\n\n### Working with Registries\nRegistries in Sprout are groups of functions that can be added to a handler. They help organize functions and optimize template performance.\n\nYou can retrieve all built-in registries and functions under [Registries](https://docs.atom.codes/sprout/registries/list-of-all-registries).\n\n```go\nimport (\n  \"github.com/go-sprout/sprout/registry/conversion\" // toString, toInt, toBool, ...\n  \"github.com/go-sprout/sprout/registry/std\" // default, empty, any, all, ...\n)\n\n//...\n\nhandler.AddRegistries(\n  conversion.NewRegistry(),\n  std.NewRegistry(),\n)\n```\n\n### Working with Registries Groups\nIn some cases, you can use a group of registries to add multiple registries at once.\n\nYou can retrieve all built-in registries groups under [Registry Groups](https://docs.atom.codes/sprout/groups/list-of-all-registry-groups).\n\n```go\nimport (\n  \"github.com/go-sprout/sprout/group/all\"\n)\n\n//...\n\nhandler.AddGroup(\n  all.RegistryGroup(),\n)\n```\n\n### Building Function Maps\n\nTo use Sprout with templating engines like `html/template` or `text/template`, you need to build the function map:\n```go\nfuncs := handler.Build()\ntpl := template.New(\"example\").Funcs(funcs).Parse(`{{ hello }}`)\n```\n\n### Working with Templates\nOnce your function map is ready, you can use it to render templates:\n```go\ntpl, err := template.New(\"example\").Funcs(funcs).Parse(`{{ myFunc }}`)\nif err != nil {\n    log.Fatal(err)\n}\ntpl.Execute(os.Stdout, nil)\n``` \nThis will render the template with all functions and aliases available.\n\n\n## Usage: Quick Example \n\nHere is a quick example of how to use Sprout with the `text/template` package:\n```go\npackage main\n\nimport (\n\t\"os\"\n\t\"text/template\"\n\n\t\"github.com/go-sprout/sprout\"\n\t\"github.com/go-sprout/sprout/registry/std\"\n)\n\nfunc main() {\n\thandler := sprout.New()\n\thandler.AddRegistry(std.NewRegistry())\n\n\ttpl := template.Must(\n    template.New(\"example\").Funcs(handler.Build()).Parse(`{{ hello }}`),\n  )\n\ttpl.Execute(os.Stdout, nil)\n}\n```\n\n## Performance Benchmarks\n\nTo see all the benchmarks, please refer to the [benchmarks](benchmarks/README.md) directory.\n\n## Sprig v3.2.3 vs Sprout v0.5\n```\ngoos: linux\ngoarch: amd64\npkg: sprout_benchmarks\ncpu: Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz\nBenchmarkSprig-16              1        2991811373 ns/op        50522680 B/op      32649 allocs/op\nBenchmarkSprout-16             1        1638797544 ns/op        42171152 B/op      18061 allocs/op\nPASS\nok      sprout_benchmarks       4.921s\n```\n\n**Time improvement**: ((2991811373 - 1638797544) / 2991811373) * 100 = 45.3%\n**Memory improvement**: ((50522680 - 42171152) / 50522680) * 100 = 16.5%\n\nSo, Sprout v0.5 is approximately 45.3% faster and uses 16.5% less memory than Sprig v3.2.3. 🚀\n\nYou can see the full benchmark results [here](benchmarks/README.md).\n\n## Development Philosophy (Currently in consideration to create ours)\n\nOur approach to extending and refining Sprout was guided by several key principles:\n\n- Build on the principles of simplicity, flexibility, and consistency. \n- Empower developers to create robust templates without sacrificing performance or usability. \n- Adheres strictly to Go's templating conventions, ensuring a seamless experience for those familiar with Go's native tools.\n- Naming conventions across functions are standardized for predictability and ease of use.\n- Emphasizes error handling, preferring to safe defaults over panics.\n- Provide a clear and comprehensive documentation to help users understand the library and its features.\n- Maintain a high level of code quality, ensuring that the library is well-tested, performant, and reliable.\n- Continuously improve and optimize the library to meet the needs of the community.\n- Avoids any external dependencies within template functions, ensuring all operations are self-contained and reliable.\n- Performance is a key consideration, with a focus on optimizing the library for speed and efficiency.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-sprout%2Fsprout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-sprout%2Fsprout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-sprout%2Fsprout/lists"}