{"id":17215654,"url":"https://github.com/infamousjoeg/conceal","last_synced_at":"2026-03-11T19:33:09.938Z","repository":{"id":56003065,"uuid":"260092932","full_name":"infamousjoeg/conceal","owner":"infamousjoeg","description":"Simply store secrets in OS secret stores for easy initial development security.","archived":false,"fork":false,"pushed_at":"2026-02-05T22:24:30.000Z","size":5402,"stargazers_count":7,"open_issues_count":9,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-06T07:39:26.214Z","etag":null,"topics":["command-line-tool","golang","keychain","keyring","secret-distribution","summon","summon-provider","windows-credential-manager"],"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/infamousjoeg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"infamousjoeg"}},"created_at":"2020-04-30T02:17:42.000Z","updated_at":"2025-10-24T16:37:13.000Z","dependencies_parsed_at":"2024-05-30T21:28:44.764Z","dependency_job_id":"be950216-1f6b-4e9c-8952-f8b992271bbb","html_url":"https://github.com/infamousjoeg/conceal","commit_stats":null,"previous_names":["infamousjoeg/go-conceal"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/infamousjoeg/conceal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infamousjoeg%2Fconceal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infamousjoeg%2Fconceal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infamousjoeg%2Fconceal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infamousjoeg%2Fconceal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/infamousjoeg","download_url":"https://codeload.github.com/infamousjoeg/conceal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/infamousjoeg%2Fconceal/sbom","scorecard":{"id":487829,"data":{"date":"2025-08-11","repo":{"name":"github.com/infamousjoeg/conceal","commit":"112fae04949875a542cc7ccb93c6b1a9fe997651"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/23 approved changesets -- score normalized to 0","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":"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":"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":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go-test.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/golangci-lint.yml:10","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/golangci-lint.yml:11","Warn: topLevel 'checks' permission set to 'write': .github/workflows/golangci-lint.yml:12","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-test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/infamousjoeg/conceal/go-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/infamousjoeg/conceal/go-test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/infamousjoeg/conceal/golangci-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/infamousjoeg/conceal/golangci-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/infamousjoeg/conceal/golangci-lint.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction 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: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":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v4.0.0-release not signed: https://api.github.com/repos/infamousjoeg/conceal/releases/158393768","Warn: release artifact v3.0.0-release not signed: https://api.github.com/repos/infamousjoeg/conceal/releases/34657688","Warn: release artifact v2.0.1-dev not signed: https://api.github.com/repos/infamousjoeg/conceal/releases/28424229","Warn: release artifact v2.0.0-dev not signed: https://api.github.com/repos/infamousjoeg/conceal/releases/28382220","Warn: release artifact v1.0.4-dev not signed: https://api.github.com/repos/infamousjoeg/conceal/releases/26359789","Warn: release artifact v4.0.0-release does not have provenance: https://api.github.com/repos/infamousjoeg/conceal/releases/158393768","Warn: release artifact v3.0.0-release does not have provenance: https://api.github.com/repos/infamousjoeg/conceal/releases/34657688","Warn: release artifact v2.0.1-dev does not have provenance: https://api.github.com/repos/infamousjoeg/conceal/releases/28424229","Warn: release artifact v2.0.0-dev does not have provenance: https://api.github.com/repos/infamousjoeg/conceal/releases/28382220","Warn: release artifact v1.0.4-dev does not have provenance: https://api.github.com/repos/infamousjoeg/conceal/releases/26359789"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 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":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"}}]},"last_synced_at":"2025-08-19T18:15:15.315Z","repository_id":56003065,"created_at":"2025-08-19T18:15:15.315Z","updated_at":"2025-08-19T18:15:15.315Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30395635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: 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":["command-line-tool","golang","keychain","keyring","secret-distribution","summon","summon-provider","windows-credential-manager"],"created_at":"2024-10-15T03:25:11.889Z","updated_at":"2026-03-11T19:33:09.915Z","avatar_url":"https://github.com/infamousjoeg.png","language":"Go","funding_links":["https://github.com/sponsors/infamousjoeg","https://www.buymeacoffee.com/infamousjoeg"],"categories":[],"sub_categories":[],"readme":"# Conceal \u003c!-- omit in toc --\u003e\n\nConceal is a command-line utility that eases the interaction between developer and OSX Keychain Access. It is the open-source companion to [Summon](https://cyberark.github.io/summon) as every secret added using this tool into Keychain is added using Summon-compliant formatting. If you don't plan on using Summon, it's still a great Keychain management tool.\n\n[![](https://github.com/infamousjoeg/conceal/workflows/Go/badge.svg?branch=master)](https://github.com/infamousjoeg/conceal/actions?query=workflow%3AGo) [![](https://img.shields.io/github/downloads/infamousjoeg/conceal/latest/total?color=blue\u0026label=Download%20Latest%20Release\u0026logo=github)](https://github.com/infamousjoeg/conceal/releases/latest)\n\n## Table of Contents \u003c!-- omit in toc --\u003e\n- [Requirements](#requirements)\n- [Installation](#installation)\n  - [Homebrew (MacOS)](#homebrew-macos)\n  - [Manual](#manual)\n- [Usage](#usage)\n  - [Add a secret](#add-a-secret)\n  - [Update a secret](#update-a-secret)\n  - [Get a secret value](#get-a-secret-value)\n  - [List Summon secrets](#list-summon-secrets)\n  - [Remove a secret](#remove-a-secret)\n  - [Install Conceal as Summon Provider](#install-conceal-as-summon-provider)\n  - [Show a secret](#show-a-secret)\n  - [Display Help](#display-help)\n  - [Display Version](#display-version)\n- [keychain Package](#keychain-package)\n  - [Usage](#usage-1)\n    - [func  AddSecret](#func--addsecret)\n    - [func  DeleteSecret](#func--deletesecret)\n    - [func  ListSecrets](#func--listsecrets)\n    - [func  SecretExists](#func--secretexists)\n    - [func  UpdateSecret](#func--updatesecret)\n    - [func  GetSecret](#func--getsecret)\n- [clipboard Package](#clipboard-package)\n  - [Usage](#usage-2)\n    - [func  Secret](#func--secret)\n    - [func  SetupCloseHandler](#func--setupclosehandler)\n- [Concept](#concept)\n  - [Why Choose Conceal for Your Secret Management Needs?](#why-choose-conceal-for-your-secret-management-needs)\n    - [**Leverage Existing Tools**](#leverage-existing-tools)\n    - [**Seamless Integration with Summon**](#seamless-integration-with-summon)\n    - [**Establish Secure Coding Practices Early**](#establish-secure-coding-practices-early)\n    - [**Avoid Technical Debt**](#avoid-technical-debt)\n    - [**Cost-Effective Solution**](#cost-effective-solution)\n  - [Key Features of Conceal](#key-features-of-conceal)\n  - [How to Get Started with Conceal](#how-to-get-started-with-conceal)\n  - [Conclusion](#conclusion)\n- [Maintainer](#maintainer)\n- [Contributions](#contributions)\n- [License](#license)\n\n## Requirements\n\n* MacOS\n\n## Installation\n\n### Homebrew (MacOS)\n\n```shell\nbrew tap infamousjoeg/tap\nbrew install conceal\n```\n\n### Manual\n\n1. Download the latest release available at [GitHub Releases](https://github.com/infamousjoeg/conceal/releases).\n2. Move the `conceal` executable file to a directory in your `PATH`. (I use `~/bin`.)\n3. In Terminal, run the following command to make sure it's in your `PATH`: \\\n   `$ conceal`\n\n## Usage\n\n### Add a secret\n\n`$ conceal set dockerhub/token`\n`$ echo \"my-secret-value\" | conceal set dockerhub/token`\n\nTo add a secret to Keychain, call `conceal` and use the `set` command to pass the account name to add. You will be immediately prompted to provide a secret value in a secure manner or you can provide it via STDIN.\n\n### Update a secret\n\n`$ conceal update dockerhub/token`\n`$ echo \"my-new-secret-value\" | conceal update dockerhub/token`\n\nTo update a secret in Keychain, call `conceal` and use the `update` command to pass the account name to update. You will be immediately prompted to provide a secret value in a secure manner or you can provide it via STDIN.\n\n### Get a secret value\n\n`$ conceal get dockerhub/token`\n\nTo retrieve a secret from Keychain, call `conceal` and use the `get` command to pass the account name to retrieve from. The secret value will be added to your clipboard for 15 seconds.\n\n### List Summon secrets\n\n`$ conceal list`\n\nTo list all secrets associated with Summon in Keychain, call `conceal` and use the `list` command to list all accounts present.\n\nTo filter the list further, pipe to `grep` like this `$ conceal list | grep dockerhub/`.\n\n### Remove a secret\n\n`$ conceal unset dockerhub/token`\n\nTo remove a secret that was added for Summon, call `conceal` and use the `unset` command to pass the account name to remove.\n\n### Install Conceal as Summon Provider\n\n`$ conceal summon install`\n\nTo install Conceal as a Summon provider, call `conceal` with the `summon install` command. This will install `conceal` as an available provider for Summon under the name `conceal_summon`. For more information about Summon's providers, check out the documentation at [cyberark.github.io/summon](https://cyberark.github.io/summon).\n\n### Show a secret\n\n**Note: This command is not recommended for use in scripts as it will print the secret to the terminal. It is only available for the Summon provider integration.**\n\n`$ conceal show dockerhub/token`\n\nTo display a secret from Keychain to STDOUT, call `conceal` and use the `show` command to pass the account name to display. This is useful for debugging and testing purposes. It is used by Summon to retrieve the secret value from the `conceal_summon` provider.\n\n### Display Help\n\n`$ conceal help`\n\nTo display the help message, just call `conceal help`.\n\n`$ conceal help [COMMAND]`\n\nTo display the help message for a specific command, just call `conceal help` and provide the command name, such as `set` or `get`.\n\n### Display Version\n\n`$ conceal version`\n\nTo display the current version, call `conceal` with the `version` command.\n\n## keychain Package\n\n```go\nimport \"github.com/infamousjoeg/conceal/pkg/conceal/keychain\"\n```\n\n### Usage\n\n#### func  AddSecret\n\n```go\nfunc AddSecret(secretID string, secret []byte)\n```\nAddSecret is a non-return function that adds the secret and secret value to\nkeychain.\n\n#### func  DeleteSecret\n\n```go\nfunc DeleteSecret(secretID string)\n```\nDeleteSecret is a non-return function that removes the secret from keychain.\n\n#### func  ListSecrets\n\n```go\nfunc ListSecrets() []string\n```\nListSecrets is a string array function that returns all secrets in keychain with\nthe label `summon`.\n\n#### func  SecretExists\n\n```go\nfunc SecretExists(secretID string) bool\n```\nSecretExists is a boolean function to verify a secret is present in keychain.\n\n#### func  UpdateSecret\n\n```go\nfunc UpdateSecret(secretID string, secret []byte)\n```\nUpdateSecret is a non-return function that updates the secret value in keychain.\n\n#### func  GetSecret\n\n```go\nfunc GetSecret(secretID string, delivery string)\n```\nGetSecret is a non-return function that retrieves the secret value from keychain and delivers it in the declared method. If `delivery` is set to `clipboard`, the secret value is copied to the clipboard. If a signal interrupt is detected, the content is immediately cleared. If `delivery` is set to `stdout`, the secret value is printed to the terminal.\n\n## clipboard Package\n\n```go\nimport \"github.com/infamousjoeg/conceal/pkg/conceal/clipboard\"\n```\n\n### Usage\n\n#### func  Secret\n\n```go\nfunc Secret(secret string)\n```\nSecret is a non-return function that adds content to the host clipboard that\npersists for 15 seconds. If a signal interrupt is detected, the content is\nimmediately cleared.\n\n#### func  SetupCloseHandler\n\n```go\nfunc SetupCloseHandler()\n```\nSetupCloseHandler creates a 'listener' on a new goroutine which will notify the\nprogram if it receives an interrupt from the OS. We then handle this by calling\nour clean up procedure and exiting the program.\n\n## Concept\n\n### Why Choose Conceal for Your Secret Management Needs?\n\nIn modern software development, securely managing secrets (such as API keys, passwords, and other sensitive data) is crucial. Conceal, developed by Joe Garcia, is a powerful utility designed to simplify and secure the management of these secrets. Here’s why you should consider using Conceal:\n\n#### **Leverage Existing Tools**\n**\"Why not use what Steve and Bill gave us?\"**\n- Conceal allows developers to use built-in tools and environments (like macOS Keychain) to manage secrets without needing to commit any code or set up a dedicated secrets manager initially. This means you can start development immediately without additional setup overhead.\n\n#### **Seamless Integration with Summon**\n- Conceal works seamlessly with Summon, a tool that injects secrets as environment variables into your applications. This allows for easy transitioning between different environments without changing the code. As you move from development to staging to production, the secrets provider can change without any code modification, enhancing flexibility and security.\n\n#### **Establish Secure Coding Practices Early**\n**\"You're establishing secure coding habits by starting development using environment variables out of the gate.\"**\n- By using Conceal and Summon together, you adopt best practices from the start. Managing secrets via environment variables is a secure method that avoids hardcoding sensitive information in your application code, thus preventing technical debt and security vulnerabilities.\n\n#### **Avoid Technical Debt**\n**\"...instead of creating technical debt that then becomes a problem later on down the line when a secrets manager needs to be baked into it.\"**\n- Starting with good practices means you won't need to refactor your code later to integrate a secrets manager. Conceal helps avoid this costly and time-consuming process by providing a secure solution from the beginning.\n\n#### **Cost-Effective Solution**\n**\"Free or overpay, which do you choose?\"**\n- Conceal leverages free, existing tools, avoiding the need for expensive enterprise secrets management solutions. This makes it a cost-effective choice, especially for startups and small teams.\n\n### Key Features of Conceal\n\n1. **Local Development-Friendly**: Ideal for local development environments where access to a full secrets management system might not be available.\n2. **Ease of Use**: Simple commands to set and retrieve secrets, integrated smoothly with the development workflow.\n3. **Security**: Ensures that secrets are not hardcoded, reducing the risk of accidental exposure.\n\n### How to Get Started with Conceal\n\n1. **Install Conceal**: Follow the instructions in the [Conceal GitHub repository](https://github.com/infamousjoeg/conceal) to install the utility.\n2. **Set Secrets**: Use the `conceal set` command to securely store your secrets.\n3. **Retrieve Secrets**: Integrate with Summon to retrieve secrets as environment variables in your application.\n\n### Conclusion\n\nConceal is a powerful and useful utility for any developer looking to securely manage secrets without incurring additional setup costs or creating technical debt. By integrating with existing tools and promoting secure practices from the start, Conceal ensures your development process remains efficient, secure, and cost-effective. Choose Conceal to simplify your secret management and focus on building great software.\n\nFor more information and to get started, visit the [Conceal GitHub page](https://github.com/infamousjoeg/conceal).\n\n## Maintainer\n\n[@infamousjoeg](https://github.com/infamousjoeg)\n\n[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]\n\n[buymeacoffee]: https://www.buymeacoffee.com/infamousjoeg\n[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\n\n## Contributions\n\nPull Requests are currently being accepted.  Please read and follow the guidelines laid out in [CONTRIBUTING.md]().\n\n## License\n\n[Apache 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfamousjoeg%2Fconceal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finfamousjoeg%2Fconceal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finfamousjoeg%2Fconceal/lists"}