{"id":15204021,"url":"https://github.com/kakao/mango","last_synced_at":"2026-01-14T03:18:15.015Z","repository":{"id":57725819,"uuid":"80708130","full_name":"kakao/mango","owner":"kakao","description":"Core utility library \u0026 data connectors designed for simpler usage in Scala","archived":true,"fork":false,"pushed_at":"2023-06-27T08:27:27.000Z","size":2789,"stargazers_count":41,"open_issues_count":1,"forks_count":13,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-10-02T21:34:55.461Z","etag":null,"topics":["concurrent","couchbase","elasticsearch","hbase","json","kakao","logging","scala","utility-library","zookeeper"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/kakao.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-02T08:52:26.000Z","updated_at":"2024-01-18T04:58:54.000Z","dependencies_parsed_at":"2024-09-24T06:02:19.261Z","dependency_job_id":"3e37ff4e-e5a9-4991-b6f8-52004cf8ecd3","html_url":"https://github.com/kakao/mango","commit_stats":{"total_commits":17,"total_committers":7,"mean_commits":"2.4285714285714284","dds":0.4117647058823529,"last_synced_commit":"8490fb2bb253aa10d66811a55718810cc65d30e0"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/kakao/mango","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kakao%2Fmango","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kakao%2Fmango/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kakao%2Fmango/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kakao%2Fmango/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kakao","download_url":"https://codeload.github.com/kakao/mango/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kakao%2Fmango/sbom","scorecard":{"id":548021,"data":{"date":"2025-08-11","repo":{"name":"github.com/kakao/mango","commit":"8490fb2bb253aa10d66811a55718810cc65d30e0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/17 approved changesets -- score normalized to 1","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":"project is archived","details":["Warn: Repository is archived."],"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":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":9,"reason":"binaries present in source code","details":["Warn: binary detected: mango-couchbase/lib/CouchbaseMock-1.4.4.jar:1"],"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":"no dependencies found","details":null,"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":"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":"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":"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":"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 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-20T10:02:28.218Z","repository_id":57725819,"created_at":"2025-08-20T10:02:28.218Z","updated_at":"2025-08-20T10:02:28.218Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["concurrent","couchbase","elasticsearch","hbase","json","kakao","logging","scala","utility-library","zookeeper"],"created_at":"2024-09-28T05:05:35.420Z","updated_at":"2026-01-14T03:18:15.000Z","avatar_url":"https://github.com/kakao.png","language":"Scala","readme":"Mango\n=====\n\n[![Build Status](https://travis-ci.org/kakao/mango.svg?branch=master)](https://travis-ci.org/kakao/mango) \n[![GitHub version](https://badge.fury.io/gh/kakao%2Fmango.svg)](https://badge.fury.io/gh/kakao%2Fmango)\n[![Join the chat at https://gitter.im/kakao/mango](https://badges.gitter.im/kakao/mango.svg)](https://gitter.im/kakao/mango?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nMango is a core utility library written Scala for handing JSON formats, concurrency, logging, hashing, cryptography, reflections, etc., as well as making client connections to various endpoints, including HTTP, Telnet, OpenTSDB, Couchbase, ElasticSearch, HBase, and ZooKeeper. \n \nMango has been extensively used in Kakao for years, and is open-sourced under Apache License. Its name follows [Googlers' wisdom](https://github.com/google/guava) that core libraries should be named after tropical fruits. \n\nMango is available on [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.kakao.mango%22), and you can pull the entire Mango library or import only the core and logging features, as follows:\n\n\u003c!-- DO NOT EDIT: The section below will be automatically updated by build script --\u003e\n```scala\nlibraryDependencies += \"com.kakao.mango\" %% \"mango\" % \"0.5.0\"\nlibraryDependencies += \"com.kakao.mango\" %% \"mango-core\" % \"0.5.0\"\n```\n\u003c!-- DO NOT EDIT: The section above will be automatically updated by build script --\u003e\n\nMango is composed of several subprojects, and its dependency structure is shown below, where the upper one is dependent on the lower.\n\n```\n                         ┌───────────┐\n                         │   mango   │\n                         └─────┬─────┘\n                 ┌─────────────┼────────────────┐\n           ┌─────┴─────┐   ┌───┴───┐   ┌────────┴──────┐\n           │ couchbase │   │ hbase │   │ elasticsearch │\n           └─────┬─────┘   └───┬───┘   └────────┬──────┘ \n                 │          ┌──┴───┐            │\n                 │          |  zk  │            │\n                 │          └──┬───┘            │\n                 └─────────────┼────────────────┘\n                          ┌────┴─────┐\n                          │   core   │\n                          └────┬─────┘\n                         ┌─────┴─────┐\n                         │   macro   │\n                         └───────────┘\n``` \n\nSome examples of using Mango are shown below; more comprehensive documentations are in the [wiki](https://github.com/kakao/mango/wiki).\n\n## [JSON Conversions](https://github.com/kakao/mango/wiki/JSON)\n\nIt is simple to parse and serialize JSON files.\n\n```scala\nimport com.kakao.mango.json._\n\n// serialize a case class or Map to JSON\nval data = Map(\"happy\" -\u003e \"new year\")\nval json = toJson(data)        // json: String = {\"happy\":\"new year\"}\n\n// parse json string into Map[String, Any]\nval str = \"\"\"{\"happy\":\"new year\"}\"\"\"\nval parsed = parseJson(str)   // parsed: Map[String, Any] = Map(happy -\u003e new year)\n\n// parse json string into a case class\ncase class Foo(happy: String)\nval foo = fromJson[Foo](json)  // foo: Foo = Foo(new year)\n```\n\n## [HTTP Requests](https://github.com/kakao/mango/wiki/HTTP)\n\nMake asynchronous HTTP requests simply.\n\n```scala\nimport com.kakao.mango.http._\nimport com.kakao.mango.concurrent._\n\nval future = Get(\"http://example.com/\")\nval response = future.sync()\nprintln(response.body) // \"\u003c!doctype html\u003e\\n\u003chtml\u003e ...\"\n```\n\n## [Logging](https://github.com/kakao/mango/wiki/Logging)\n\nMango logging provides a wrapper of [SLF4j](http://www.slf4j.org/) for easier use with Scala. By extending `Logging`, `logger` field is available for logging. It also has a quirk to print the source line numbers, using SLF4j markers.  \n\n```scala\nimport com.kakao.mango.logging.Logging\n\nclass AwesomeClass extends AwesomeBaseClass with Logging {\n  logger.info(s\"quick brown fox blah blah\")\n}\n```\n\n# Development\n\n### Shaded Dependencies\n\nThis project contains shaded version of some libraries that are prone to version conflicts in big projects. They are currently: Jackson (with Scala module), Guava, Netty 3.x, Asynchbase, and AsyncHttpServer. It uses some SBT trick to relocate the classes to `com.kakao.shaded`.\n\n* `mango-shaded-lib` contains the Java dependencies whose classes are relocated using sbt-assembly plugin. The shaded assembly is added as an unmanaged dependency of the `mango-shaded` subproject.\n* `mango-shaded` contains manually relocated Scala files, which cannot be automatically relocated by sbt-assembly.\n\nBecause of the unmanaged dependency, it may be necessary to run the following command before opening this project in an IDE.\n\n    sbt \"+ compile\"\n    \n\n### Cross Compilation and Publishing\n\nTo be compatible with both JRE 1.7 and 1.8, it is required by the build script to use JDK 1.7 while building this project. Set `JAVA_HOME` accordingly before setting up an IDE or running SBT commands.\n\nSince Mango supports both Scala 2.10 and 2.11, it must be cross-complied when publishing:\n\n```\n# Publishing snapshots\nsbt \"+ publish\"\n\n# Publishing releases \nsbt \"release cross\"\n```\n\nWhen publishing snapshots, the `+` is prepended in the `publish` command to make SBT to use the `crossScalaVersions` setting, whereas `release cross` should be used for publishing releases so that `sbt-release-plugin` can handle the release cycle.\n\n\n\n## License\n\nThis software is licensed under the [Apache 2 license](LICENSE), quoted below.\n\nCopyright 2017 Kakao Corp. \u003chttp://www.kakaocorp.com\u003e\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this project except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkakao%2Fmango","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkakao%2Fmango","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkakao%2Fmango/lists"}