{"id":29879477,"url":"https://github.com/typelevel/catapult","last_synced_at":"2025-07-31T08:46:31.755Z","repository":{"id":61910987,"uuid":"545405041","full_name":"typelevel/catapult","owner":"typelevel","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-25T16:09:37.000Z","size":344,"stargazers_count":16,"open_issues_count":7,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-26T08:27:06.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://typelevel.org/catapult/","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/typelevel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null}},"created_at":"2022-10-04T10:03:05.000Z","updated_at":"2025-07-15T21:09:46.000Z","dependencies_parsed_at":"2023-01-20T17:36:29.790Z","dependency_job_id":"35aafb34-1718-46d7-a94b-89606fc01938","html_url":"https://github.com/typelevel/catapult","commit_stats":{"total_commits":140,"total_committers":7,"mean_commits":20.0,"dds":0.4642857142857143,"last_synced_commit":"8bc7732a37f636befa88da8481c63dd90c3b1675"},"previous_names":["typelevel/catapult"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/typelevel/catapult","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fcatapult","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fcatapult/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fcatapult/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fcatapult/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typelevel","download_url":"https://codeload.github.com/typelevel/catapult/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelevel%2Fcatapult/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267889994,"owners_count":24161327,"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-07-30T02:00:09.044Z","response_time":70,"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":[],"created_at":"2025-07-31T08:46:30.740Z","updated_at":"2025-07-31T08:46:31.731Z","avatar_url":"https://github.com/typelevel.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catapult\n\nA thin wrapper for the [Launch Darkly Java server SDK](https://github.com/launchdarkly/java-core) using cats-effect.\n\n```sbt\n\"org.typelevel\" %% \"catapult\" % \"latestVersion\"\n```\n\n## Usage\n\n### Basic variations\n\n```scala\n  object Main extends IOApp.Simple {\n    val sdkKey = \"my-sdk-key\"\n    val config: LDConfig = new LDConfig.Builder().build()\n    val launchDarklyClientResource: Resource[IO, LaunchDarklyClient[IO]] = LaunchDarklyClient.resource[IO](sdkKey, config)\n  \n    override def run: IO[Unit] = launchDarklyClientResource.use { client =\u003e\n      for {\n        // Boolean Variant\n        bool \u003c- client.boolVariation(\"BOOL-FLAG\", new LDContext(\"context-name\"), defaultValue = false)\n        _ \u003c- IO.println(s\"Boolean Variation: ${bool}\")\n  \n        // String Variant\n        string \u003c- client.stringVariation(\"STRING-FLAG\", new LDContext(\"context-name\"), defaultValue = \"default-string\")\n        _ \u003c- IO.println(s\"String Variation: ${string}\")\n  \n        // Integer Variant\n        int \u003c- client.intVariation(\"INTEGER-FLAG\", new LDContext(\"context-name\"), defaultValue = 0)\n        _ \u003c- IO.println(s\"Integer Variation: ${int}\")\n  \n        // Double Variant\n        double \u003c- client.doubleVariation(\"DOUBLE-FLAG\", new LDContext(\"context-name\"), defaultValue = 0.00D)\n        _ \u003c- IO.println(s\"Double Variation: ${double}\")\n  \n        // JSON Variant\n        json \u003c- client.jsonValueVariation(\"JSON-FLAG\", new LDContext(\"context-name\"), defaultValue = LDValue.of(\"{}\"))\n        _ \u003c- IO.println(s\"JSON Variation: ${json}\")\n      } yield ()\n    }\n  }\n```\n\n### Flush the buffered event queue\n\nSpecifies that any buffered events should be sent as soon as possible, rather than waiting for the next flush interval. \nThe underlying is asynchronous, so events still may not be sent until a later time.\n\n```scala\n  launchDarklyClientResource.use { client =\u003e\n    client.flush\n  }.unsafeRunSync()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelevel%2Fcatapult","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypelevel%2Fcatapult","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelevel%2Fcatapult/lists"}