{"id":31883845,"url":"https://github.com/input-output-hk/cuddle","last_synced_at":"2025-10-13T03:52:42.652Z","repository":{"id":197239066,"uuid":"698256535","full_name":"input-output-hk/cuddle","owner":"input-output-hk","description":"CDDL DSL and Testing Tools","archived":false,"fork":false,"pushed_at":"2025-10-01T14:03:23.000Z","size":429,"stargazers_count":6,"open_issues_count":22,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-01T16:08:21.042Z","etag":null,"topics":["cbor","cddl"],"latest_commit_sha":null,"homepage":"","language":"Haskell","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/input-output-hk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-29T14:03:43.000Z","updated_at":"2025-09-16T00:08:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"f8dfa517-1b15-4df0-a5b9-fd6b7d51e7b1","html_url":"https://github.com/input-output-hk/cuddle","commit_stats":null,"previous_names":["input-output-hk/cuddle"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/input-output-hk/cuddle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/input-output-hk%2Fcuddle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/input-output-hk%2Fcuddle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/input-output-hk%2Fcuddle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/input-output-hk%2Fcuddle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/input-output-hk","download_url":"https://codeload.github.com/input-output-hk/cuddle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/input-output-hk%2Fcuddle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279013521,"owners_count":26085368,"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-10-13T02:00:06.723Z","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":["cbor","cddl"],"created_at":"2025-10-13T03:52:41.764Z","updated_at":"2025-10-13T03:52:42.647Z","avatar_url":"https://github.com/input-output-hk.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eCuddle\u003c/h1\u003e\n\nCuddle is a library for generating and manipulating [CDDL](https://datatracker.ietf.org/doc/html/rfc8610).\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/input-output-hk/cuddle/actions/workflows/ci.yml\"\u003e\n    \u003cimg alt=\"GitHub Workflow Status (master)\" src=\"https://img.shields.io/github/actions/workflow/status/input-output-hk/cuddle/ci.yml?branch=master\u0026style=for-the-badge\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Supported features\n\nCuddle currently supports the following CDDL features:\n\n- Groups\n- Values\n- Choices\n- Maps\n  - Structs\n  - Tables\n- Predefined CDDL types\n- Tags\n- Unwrapping\n- Sockets/plugs\n- Generics\n\n### Partial support\n\n- Representation types\n  - Representation types are correctly parsed and formatted, but only certain\n    types are understood in CBOR generation.\n- Cuts\n  - Cut syntax is parsed and formatted, but ignored for CBOR generation.\n- Controls\n  - Controls are correctly parsed and formatted, but only certain controls are\n    understood in CBOR generation.\n- Operator precedence\n- Comments\n  - Comments are currently stripped during formatting.\n\n### Unsupported\n\n- Escaping in bytestrings\n\n\n## The cuddle tool\n\nIncluded in this package is a command line tool for working with CDDL files. It\ncurrently supports four functions:\n\n- Formatting of CDDL files\n- Validating that a CDDL file is legal\n- Generating random CBOR terms matching CDDL productions\n- Testing compliance of a CBOR file against a CDDL spec.\n\n# Huddle\n\nOne of the principal features of Cuddle is the ability to define your CDDL in a\nHaskell DSL, called Huddle. This offers the following benefits:\n\n- Ability to use Haskell's abstraction facilities to define more complex CDDL\n  constructions.\n- Some measure of compile-time safety for your CDDL. Attempting to reference\n  an undefined identifier will be a compile-time error, for example.\n- The ability to modularise your configuration. CDDL lacks any real facility\n  for splitting a CDDL spec amongst multiple files. We solve this instead using\n  Haskell's module system.\n\nObviously, this comes with the downside of needing to sensibly mesh the\ndifferent abstraction facilities offered by Haskell and CDDL. We have tried to\nfind a balance where the Huddle code roughly matches the CDDL but gains many\nof the advantages of writing in Haskell.\n\n[A guide to writing Huddle](docs/huddle.md) goes into more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finput-output-hk%2Fcuddle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finput-output-hk%2Fcuddle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finput-output-hk%2Fcuddle/lists"}