{"id":13413317,"url":"https://github.com/gyozatech/noodlog","last_synced_at":"2025-09-09T18:18:29.599Z","repository":{"id":46553847,"uuid":"356198922","full_name":"gyozatech/noodlog","owner":"gyozatech","description":"🍜 Parametrized JSON logging library in Golang which lets you obfuscate sensitive data and marshal any kind of content.","archived":false,"fork":false,"pushed_at":"2023-04-19T15:17:58.000Z","size":454,"stargazers_count":44,"open_issues_count":8,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-07-31T20:52:13.364Z","etag":null,"topics":["go","golang","golang-library","golang-tool","hacktoberfest","hacktoberfest2021","json","logger","logging","logging-library","password-safety"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gyozatech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-04-09T08:38:54.000Z","updated_at":"2023-01-18T15:04:13.000Z","dependencies_parsed_at":"2024-01-08T15:34:40.514Z","dependency_job_id":null,"html_url":"https://github.com/gyozatech/noodlog","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/gyozatech/noodlog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyozatech%2Fnoodlog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyozatech%2Fnoodlog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyozatech%2Fnoodlog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyozatech%2Fnoodlog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gyozatech","download_url":"https://codeload.github.com/gyozatech/noodlog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gyozatech%2Fnoodlog/sbom","scorecard":{"id":451186,"data":{"date":"2025-08-11","repo":{"name":"github.com/gyozatech/noodlog","commit":"81ff5e09e934c40199026694450cefa8c934571c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Code-Review","score":3,"reason":"Found 7/23 approved changesets -- score normalized to 3","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":"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":"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":"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml: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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/gyozatech/noodlog/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/gyozatech/noodlog/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/gyozatech/noodlog/release.yml/main?enable=pin","Warn: downloadThenRun not pinned by hash: .github/workflows/go.yml:30","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun 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":"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: Apache License 2.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":"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":-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":"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 18 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-19T08:13:34.580Z","repository_id":46553847,"created_at":"2025-08-19T08:13:34.581Z","updated_at":"2025-08-19T08:13:34.581Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274340903,"owners_count":25267295,"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-09T02:00:10.223Z","response_time":80,"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","golang-library","golang-tool","hacktoberfest","hacktoberfest2021","json","logger","logging","logging-library","password-safety"],"created_at":"2024-07-30T20:01:37.565Z","updated_at":"2025-09-09T18:18:29.568Z","avatar_url":"https://github.com/gyozatech.png","language":"Go","funding_links":[],"categories":["Logging","日志记录","Relational Databases"],"sub_categories":["Search and Analytic Databases","检索及分析资料库","Advanced Console UIs"],"readme":"# Noodlog\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) \n[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go)\n[![CodeFactor](https://www.codefactor.io/repository/github/alessandroargentieri/noodlog/badge)](https://www.codefactor.io/repository/github/alessandroargentieri/noodlog)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gyozatech/noodlog)](https://goreportcard.com/report/github.com/gyozatech/noodlog)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[![made-with-Go](https://img.shields.io/badge/Made%20with-Go-1f425f.svg)](http://golang.org)\n[![codecov](https://codecov.io/gh/gyozatech/noodlog/branch/main/graph/badge.svg?token=7V3XRVR58L)](https://codecov.io/gh/gyozatech/noodlog)\n[![Open Source Love svg1](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/)\n\n![alt text](assets/noodlogo.png?raw=true)\n\n## Summary\n\n**Noodlog** is a Golang JSON parametrized  and highly configurable logging library.\n\nIt allows you to:\n- print **go structs** as JSON messages;\n- print JSON strings and raw strings messages as **pure JSONs**;\n- obscure some **sensitive params** from your logging;\n- **chain objects** or strings in your logs;\n- apply string **templates** to your logs;\n- choose to **trace the caller** file and function and fine tune the settings;\n- apply **pretty printing** or not;\n- apply **colors** to your logging;\n- **customize colors** per log level.\n\n## Import \n\n``` go get github.com/gyozatech/noodlog ```\n\n## Usage\n\nLet's assume you have Go 1.16+ istalled on your computer.\nExecute the following:\n\n```shell\n$ mkdir example \u0026\u0026 cd example\n$ go mod init example\n$ go get github.com/gyozatech/noodlog\n$ touch main.go\n```\nOpen `main.go` and paste the following code:\n\n```golang\npackage main\n\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger().SetConfigs(\n      noodlog.Configs{\n         LogLevel: noodlog.LevelTrace,\n         JSONPrettyPrint: noodlog.Enable,\n         TraceCaller: noodlog.Enable,\n         Colors: noodlog.Enable,\n         CustomColors: \u0026noodlog.CustomColors{ Trace: noodlog.Cyan },\n         ObscureSensitiveData: noodlog.Enable,\n         SensitiveParams: []string{\"password\"},\n      },\n    )\n}\n\nfunc main() {\n    // simple string message (with custom color)\n    log.Trace(\"Hello world!\")\n    \n    // chaining elements\n    log.Info(\"You've reached\", 3, \"login attemps\")\n    \n    // using string formatting\n    log.Warn(\"You have %d attempts left\", 2)\n    \n    // logging a struct with a JSON\n    log.Error(struct{Code int; Error string}{500, \"Generic Error\"})\n    \n    // logging a raw JSON string with a JSON (with obscuring \"password\")\n    log.Info(`{\"username\": \"gyozatech\", \"password\": \"Gy0zApAssw0rd\"}`)\n    \n    // logging a JSON string with a JSON (with obscuring \"password\")\n    log.Info(\"{\\\"username\\\": \\\"nooduser\\\", \\\"password\\\": \\\"N0oDPasSw0rD\\\"}\")\n}\n```\n\nRunning this example with:\n```shell\n$ go run main.go\n```\nYou'll get the following output:\n\n![alt text](assets/example.png?raw=true)\n\n## Settings\n\n**Noodlog** allows you to customize the logs through various settings.\nYou can use various facility functions or the `SetConfigs` function which wraps all the configs together.\n\n----\n\n### LogLevel\n\nTo set the logging level, after importing the library with:\n\n```golang\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger()\n}\n```\nyou can use the facility method:\n\n```golang\nlog.LogLevel(\"warn\")\n```\nor the `SetConfigs` function:\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        LogLevel: noodlog.LevelWarn,\n    },\n)\n```\n`log.LevelWarn` is a pre-built pointer to the string \"warn\".\n\n**The default log level is info**.\n\n----\n\n### JSON Pretty Printing\n\nAfter importing the library with:\n\n```golang\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger()\n}\n```\n\n**To enable** pretty printing of the JSON logs you can use:\n\n```golang\nlog.EnableJSONPrettyPrint()\n```\nor\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n       JSONPrettyPrint: noodlog.Enable,\n    },\n)\n```\n`noodlog.Enable` is a pre-built pointer to the bool _true_.\n\n**to disable** pretty printing you can use:\n\n```golang\nlog.DisableJSONPrettyPrint()\n```\nor\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n       JSONPrettyPrint: noodlog.Disable,\n    },\n)\n```\n`noodlog.Disable` is a pre-built pointer to the bool _false_.\n\n**The default value is _false_**. \n\n----\n\n### Colors\n\nAfter importing the library with:\n\n```golang\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger()\n}\n```\n\n**to enable** colors in JSON logs you can use:\n\n```golang\nlog.EnableColors()\n```\nor\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        Colors: noodlog.Enable,\n    },\n)\n```\n`noodlog.Enable` is a pre-built pointer to the bool _true_.\n\n**To disable** colors you can use:\n\n```golang\nlog.DisableColors()\n```\nor\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        Colors: noodlog.Disable,\n    },\n)\n```\n`noodlog.Disable` is a pre-built pointer to the bool _false_.\n\n**The default value is _false_**. \n\n#### Color\n\nThe **basic** way to use a custom color is declaring using a pointer of a string representing the color. \u003cbr /\u003e\n`log.Cyan`, `log.Green`, `log.Default`, `log.Yellow`, `log.Purple`, `log.Red`, `log.Blue` are pre-build pointers to the strings \"cyan\", \"green\", \"default\", \"yellow\", \"purple\", \"red\", \"blue\".\n\nFor instance, you can customize trace color by:\n\n```golang\nlog.SetTraceColor(noodlog.Cyan)\n```\n\nA more detailed explanation of each log level is available later into this section.\n\n##### Composition of a color\n\nColor can be composed with text color and background color.\nFor each level it can be composed using a string or a true color notation.\n\n**Trivial** usage is creating a new color like: \n```golang\nlog.NewColor(noodlog.Red)\n```\nIt results a red text on default background\n\nAdding a background color can be done through:\n```golang\nlog.NewColor(noodlog.Red).Background(noodlog.Cyan)\n```\nIn this scenario it prints red text on cyan background\n\nA third option is to edit just background color using default text color:\n```golang\nlog.Background(noodlog.Cyan)\n```\nA list of pre-built pointer of a string is [here](#Composition of a color).\n\nLibrary provides also more customization through the usage of true color notation (RGB value).\nBefore the usage of this notation, please consider if your terminal supports truecolor.\nFor instance if you execute (printf required):\n\n```bash\nprintf '\\033[38;2;255;0;0mHello World\\033[0m'\n```\na red text \"Hello World\" should be displayed on the screen\n\nIn this way a wider set of color is available for logging, besides of the previous way it can be created a color as:\n```golang\nlog.NewColorRGB(255,0,0).BackgroundRGB(0,0,255)\n```\nWhere a red text (255 for red, 0 the others) is showed on blue background (255 for blue, 0 for others).\n\nAs in the previous scenario, ``NewColorRGB`` and ``BackgroundRGB`` hasn't to be executed combined.\n\nColor can be used to set color of Trace log, by typing:\n```golang\nlog.SetTraceColor(noodlog.NewColorRGB(255,0,0).BackgroundRGB(0,0,255))\n```\n\n**You can customize the single colors** (for log level) by using:\n\n```golang\nlog.SetTraceColor(noodlog.Cyan)\nlog.SetDebugColor(noodlog.NewColorRGB(255,255,0))\nlog.SetInfoColor(noodlog.NewColor(noodlog.Red).Background(noodlog.Cyan))\nlog.SetWarnColor(noodlog.NewColor(noodlog.Green).BackgroundRGB(0,255,255))\nlog.SetErrorColor(noodlog.NewColorRGB(128,255,0).Background(noodlog.Purple))\n```\nor\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        Colors: noodlog.Enable,\n        CustomColors: \u0026noodlog.CustomColors{ \n            Trace: noodlog.Cyan, \n            Debug: noodlog.NewColorRGB(255,255,0),\n            Info:  noodlog.NewColor(noodlog.Red).Background(noodlog.Cyan),\n            Warn:  noodlog.NewColor(noodlog.Green).BackgroundRGB(0,255,255),\n            Error: noodlog.NewColorRGB(128,255,0).Background(noodlog.Purple),    \n        },\n    },\n)\n```\n\nHere we highlight all the different combination available to customize colors.\n\nWhen enabled, the **default colors** are:\n- _trace_: \"default\"\n- _info_:  \"default\"\n- _debug_: \"green\"\n- _warn_:  \"yellow\"\n- _error_: \"red\"\n\n----\n\n### Trace the caller\n\nNoodles allows you to print the file and the function which are calling the log functions.\n\nAfter importing the library with:\n\n```golang\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger()\n}\n```\n\n**to enable** the trace caller you can use:\n```golang\nlog.EnableTraceCaller()\n```\nor\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        TraceCaller: noodlog.Enable,\n    },\n)\n```\n`noodlog.Enable` is a pre-built pointer to the bool _true_.\n\n**To disable** it:\n```golang\nlog.DisableTraceCaller()\n```\nor\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        TraceCaller: noodlog.Disable,\n    },\n)\n```\n`noodlog.Disable` is a pre-built pointer to the bool _false_.\n\nThe **default value** is _false_.\n\n**Important**: if you want to import **noodlog** only in one package of your project (in order to configure it once) and wraps the logging functions you can use the `EnableSinglePointTracing` to trace file and function the real caller and not of your logging package.\n\nFor example:\n\n`main.go`\n```golang\npackage main\n\nimport (\n   log \"example/logging\"\n)\n\nfunc main() {\n   // main.main real caller we want to track \n   log.Info(\"Hello folks!\")\n}\n```\n\n`logging/logger.go`\n```golang\npackage logging\n\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar l *noodlog.Logger\n\nfunc init() {\n    l = noodlog.NewLogger()\n    // configure logger once\n    l.SetConfig(\n        noodlog.Configs{\n         TraceCaller: noodlog.Enable,\n         SinglePointTracing: noodlog.Enable,\n      },\n    )\n}\n\n// wrapper function\nfunc Info(message ...interface{}) {\n    // if we wouldn't enable SinglePointTracing\n    // logger.Info would have been considered the caller to be tracked\n    l.Info(message...)\n}\n```\n\n----\n\n### Sensitive params\n\nNoodlog gives you the possibility to enable the **obscuration of sensitive params when recognized in the JSON structures** (not in the simple strings that you compose).\n\nAfter importing the library with:\n\n```golang\nimport (\n    \"github.com/gyozatech/noodlog\"\n)\n\nvar log *noodlog.Logger\n\nfunc init() {\n   log = noodlog.NewLogger()\n}\n```\n\nYou can **enable** the sensitive params obscuration with the facility methods:\n\n```golang\nlog.EnableObscureSensitiveData([]string{\"param1\", \"param2\", \"param3\"})\n```\nor with the `SetConfig` function:\n\n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        ObscureSensitiveData: noodlog.Enable,\n        SensitiveParams: []string{\"param1\", \"param2\", \"param3\"},\n    },\n)\n```\nWhere `noodlog.Enable` is a pre-built pointer to the bool _true_.\n\n**To disable** the sensitive params obscuration you can set:\n\n```golang\nlog.DisableObscureSensitiveData()\n```\nor \n```golang\nlog.SetConfigs(\n    noodlog.Configs{\n        ObscureSensitiveData: noodlog.Disable,\n    },\n)\n```\nWhere `noodlog.Disable` is a pre-built pointer to the bool _false_.\n\nThe *default* value for the obscuration is _false_.\n\n----\n\n## Contribute to the project\n\nIf you want to contribute to the project follow the following [guidelines](https://github.com/gyozatech/noodlog/blob/main/CONTRIBUTING.md).\nAny form of contribution is encouraged!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgyozatech%2Fnoodlog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgyozatech%2Fnoodlog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgyozatech%2Fnoodlog/lists"}