{"id":27997132,"url":"https://github.com/metarocq/metarocq.github.io","last_synced_at":"2026-03-01T20:34:49.472Z","repository":{"id":41389095,"uuid":"246825362","full_name":"MetaRocq/metarocq.github.io","owner":"MetaRocq","description":"Website of the MetaRocq Project","archived":false,"fork":false,"pushed_at":"2025-04-10T13:35:58.000Z","size":40198,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-24T22:29:17.937Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://metarocq.github.io","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MetaRocq.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":"2020-03-12T12:12:08.000Z","updated_at":"2025-04-10T13:36:01.000Z","dependencies_parsed_at":"2025-05-08T22:03:45.736Z","dependency_job_id":null,"html_url":"https://github.com/MetaRocq/metarocq.github.io","commit_stats":null,"previous_names":["metarocq/metarocq.github.io"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MetaRocq/metarocq.github.io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaRocq%2Fmetarocq.github.io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaRocq%2Fmetarocq.github.io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaRocq%2Fmetarocq.github.io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaRocq%2Fmetarocq.github.io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MetaRocq","download_url":"https://codeload.github.com/MetaRocq/metarocq.github.io/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaRocq%2Fmetarocq.github.io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29983221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":[],"created_at":"2025-05-08T21:53:38.495Z","updated_at":"2026-03-01T20:34:49.443Z","avatar_url":"https://github.com/MetaRocq.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MetaRocq\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/LOGO.png\" alt=\"MetaRocq\" width=\"50px\"/\u003e\n\u003c/p\u003e\n\n[![Build status](https://github.com/MetaRocq/metarocq/actions/workflows/build.yml/badge.svg)](https://github.com/MetaRocq/metarocq/actions) [![MetaRocq Chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://rocq-prover.zulipchat.com)\n[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode\u0026label=\u0026message=Open%20in%20Visual%20Studio%20Code\u0026labelColor=2c2c32\u0026color=007acc\u0026logoColor=007acc)](https://open.vscode.dev/metarocq/metarocq)\n\nMetaRocq is a project formalizing Rocq in Rocq and providing tools for\nmanipulating Rocq terms and developing certified plugins\n(i.e. translations, compilers or tactics) in Rocq.\n\n\n**Quick jump**\n- [MetaRocq](#metarocq)\n  - [Getting started](#getting-started)\n  - [Installation instructions](#installation-instructions)\n  - [Documentation](#documentation)\n  - [Overview of the project](#overview-of-the-project)\n    - [Template-Rocq](#template-rocq)\n    - [PCUIC](#pcuic)\n    - [Safe Checker](#safe-checker)\n    - [Erasure](#erasure)\n    - [Translations](#translations)\n    - [Quotation](#quotation)\n    - [Examples](#examples)\n  - [Papers](#papers)\n  - [Related Projects](#related-projects)\n  - [Team \\\u0026 Credits](#team--credits)\n  - [Bugs](#bugs)\n\n\n\n## Getting started\n\n- You may want to start with a [demo](https://github.com/MetaRocq/metarocq/blob/-/examples/demo.v).\n\n- The current branch [documentation (as light coqdoc files)](https://metarocq.github.io/html/toc.html).\n\n- The [overview](#overview-of-the-project) of the different parts of the project.\n\n\n\n## Installation instructions\n\nSee [INSTALL.md](https://github.com/MetaRocq/metarocq/blob/-/INSTALL.md)\n\n\n\n## Documentation\n\nSee [DOC.md](https://github.com/MetaRocq/metarocq/blob/-/DOC.md)\n\n\n\n## Overview of the project\n\nAt the center of this project is the Template-Rocq quoting library for\nRocq. The project currently has a single repository extending\nTemplate-Rocq with additional features. Each extension is in a dedicated folder.\nThe [dependency graph](https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/depgraph-2022-07-01.png)\nmight be useful to navigate the project.\nStatistics: ~300kLoC of Rocq, ~30kLoC of OCaml.\n\n### [Template-Rocq](https://github.com/MetaRocq/metarocq/blob/-/template-rocq/theories)\n\nTemplate-Rocq is a quoting library for [Rocq](http://rocq-prover.org). It\ntakes `Rocq` terms and constructs a representation of their syntax tree as\nan inductive data type. The representation is based on the kernel's\nterm representation.\n\nAfter importing `MetaRocq.Template.Loader` there are commands `MetaRocq Test Quote t.`,\n`MetaRocq Quote Definition name := (t).` and `MetaRocq Quote Recursively Definition name := (t).` as\nwell as a tactic `quote_term t k`,\nwhere in all cases `t` is a term and `k` a continuation tactic.\n\nIn addition to this representation of terms, Template Rocq includes:\n\n- Reification of the environment structures, for constant and inductive\n  declarations along with their universe structures.\n\n- Denotation of terms and global declarations.\n\n- A monad for querying the environment, manipulating global declarations, calling the type\n  checker, and inserting them in the global environment, in\n  the style of MTac. Monadic programs `p : TemplateMonad A` can be run using `MetaRocq Run p`.\n\n- A formalization of the typing rules reflecting the ones of Rocq, covering all of Rocq\n  except eta-expansion and template polymorphism.\n\n### [PCUIC](https://github.com/MetaRocq/metarocq/blob/-/pcuic/theories)\n\nPCUIC, the Polymorphic Cumulative Calculus of Inductive Constructions is\na cleaned up version of the term language of Rocq and its associated\ntype system, shown equivalent to the one of Rocq. This version of the\ncalculus has proofs of standard metatheoretical results:\n\n- Weakening for global declarations, weakening and substitution for\n  local contexts.\n\n- Confluence of reduction using a notion of parallel reduction\n\n- Context cumulativity / conversion and validity of typing.\n\n- Subject Reduction (case/cofix reduction excluded)\n\n- Principality: every typeable term has a smallest type.\n\n- Bidirectional presentation: an equivalent presentation of the system\n  that enforces directionality of the typing rules. Strengthening follows\n  from this presentation.\n\n- Elimination restrictions: the elimination restrictions ensure\n  that singleton elimination (from Prop to Type) is only allowed\n  on singleton inductives in Prop.\n\n- Canonicity: The weak head normal form of a term of inductive type is a constructor application.\n\n- Consistency under the assumption of strong normalization\n\n- Weak call-by-value standardization: Normal forms of terms of first-order inductive type\ncan be found via weak call-by-value evaluation.\n\nSee the PCUIC [README](https://github.com/MetaRocq/metarocq/blob/-/pcuic/theories/README.md) for\na detailed view of the development.\n\n### [Safe Checker](https://github.com/MetaRocq/metarocq/blob/-/safechecker/theories)\n\nImplementation of a fuel-free and verified reduction machine, conversion\nchecker and type checker for PCUIC. This relies on a postulate of\nstrong normalization of the reduction relation of PCUIC on well-typed terms.\nThe checker is shown to be correct and complete w.r.t. the PCUIC specification.\nThe extracted safe checker is available in Rocq through a new vernacular command:\n\n    MetaRocq SafeCheck \u003cterm\u003e\n\nAfter importing `MetaRocq.SafeChecker.Loader`.\n\nTo roughly compare the time used to check a definition with Rocq's vanilla\ntype-checker, one can use:\n\n    MetaRocq RocqCheck \u003cterm\u003e\n\nThis also includes a verified, efficient re-typing procedure (useful in tactics) in\n`MetaRocq.SafeChecker.PCUICSafeRetyping`.\n\nSee the SafeChecker [README](https://github.com/MetaRocq/metarocq/blob/-/safechecker/theories/README.md) for\na detailed view of the development.\n\n### [Erasure](https://github.com/MetaRocq/metarocq/blob/-/erasure/theories)\n\nAn erasure procedure to untyped lambda-calculus accomplishing the\nsame as the type and proof erasure phase of the Extraction plugin of Rocq.\nThe extracted safe erasure is available in Rocq through a new vernacular command:\n\n    MetaRocq Erase \u003cterm\u003e\n\nAfter importing `MetaRocq.Erasure.Loader`.\n\nThe erasure pipeline includes verified optimizations to remove lets in constructors,\nremove cases on propositional terms, switch to an unguarded fixpoint reduction rule and\ntransform the higher-order constructor applications to first-order blocks for easier\ntranslation to usual programming languages. See the erasure\n[README](https://github.com/MetaRocq/metarocq/blob/-/erasure/theories/README.md) for\na detailed view of the development.\n\n### [Translations](https://github.com/MetaRocq/metarocq/blob/-/translations)\n\nExamples of translations built on top of this:\n\n- a parametricity plugin in [translations/param_original.v](https://github.com/MetaRocq/metarocq/blob/-/translations/param_original.v)\n\n- a plugin to negate functional extensionality in [translations/times_bool_fun.v](https://github.com/MetaRocq/metarocq/blob/-/translations/times_bool_fun.v)\n\n### [Quotation](https://github.com/MetaRocq/metarocq/blob/-/quotation/theories)\n\nThe `Quotation` module is geared at providing functions `□T → □□T` for\n`□T := Ast.term` (currently implemented) and for `□T := { t : Ast.term\n\u0026 Σ ;;; [] |- t : T }` (still in the works).\n\nUltimately the goal of this development is to prove that `□` is a lax monoidal\nsemicomonad (a functor with `cojoin : □T → □□T` that codistributes over `unit`\nand `×`), which is sufficient for proving Löb's theorem.\n\nThe public-facing interface of this development is provided in [`MetaRocq.Quotation.ToTemplate.All`](./quotation/theories/ToTemplate/All.v) and [`MetaRocq.Quotation.ToPCUIC.All`](./quotation/theories/ToPCUIC/All.v).\n\nSee the Quotation [README](https://github.com/MetaRocq/metarocq/blob/-/quotation/theories/README.md) for a more detailed view of the development.\n\n### Examples\n\n- An example Rocq plugin built on the Template Monad, which can be used to\n  add a constructor to any inductive type is in [examples/add_constructor.v](https://github.com/MetaRocq/metarocq/blob/-/examples/add_constructor.v)\n\n- An example *extracted* Rocq plugin built on the extractable Template Monad, which can be used to\n  derive lenses associated to a record type is in [test-suite/plugin-demo](https://github.com/MetaRocq/metarocq/blob/-/test-suite/plugin-demo). The plugin runs in OCaml and is a template for writing extracted plugins.\n\n- An example ``constructor`` tactic written using the Template Monad is in [examples/constructor_tac.v](https://github.com/MetaRocq/metarocq/blob/-/examples/constructor_tac.v),\n  and a more elaborate verified tautology checker is in [examples/tauto.v](https://github.com/MetaRocq/metarocq/blob/-/examples/tauto.v).\n\n- The test-suite files [test-suite/erasure_test.v](https://github.com/MetaRocq/metarocq/blob/-/test-suite/erasure_test.v)\n  and [test-suite/safechecker_test.v](https://github.com/MetaRocq/metarocq/blob/-/test-suite/safechecker_test.v) show example\n  uses (and current limitations of) the extracted verified checker and erasure.\n\n- The [test-suite/self_erasure.v](https://github.com/MetaRocq/metarocq/blob/-/test-suite/self_erasure.v) file checks that erasure\n  works on the verified typechecking and erasure programs themselves.\n\n- The test-suite file [test-suite/erasure_live_test.v](https://github.com/MetaRocq/metarocq/blob/-/test-suite/erasure_live_test.v)\n  shows uses of the verified erasure running *inside* Rocq.\n\n## Papers\n\n- [\"Correct and Complete Type Checking and Certified Erasure for Coq, in Coq\"](https://dl.acm.org/doi/10.1145/3706056) Matthieu Sozeau, Yannick Forster, Meven Lennon-Bertrand, Nicolas Tabareau and Théo Winterhalter. Journal of the ACM, Volume 72, Issue 1. January 2025.\n\n  This paper presents the whole metatheoretical development of PCUIC and verified typechecking and erasure, as of version 1.2 of MetaRocq.\n\n- [\"Verified Extraction from Coq to OCaml](https://dl.acm.org/doi/10.1145/3656379) Yannick Forster, Matthieu Sozeau and Nicolas Tabareau. PACMPL, Volume 8, Issue PLDI. June 2024. Distinguished Paper Award.\n\n  This presents our [verified extraction](https://github.com/yforster/coq-verified-extraction) pipeline from Coq to OCaml/Malfunction.\n\n- [\"The Curious Case of Case\"](https://sozeau.gitlabpages.inria.fr/www/research/publications/The_Curious_Case_of_Case-WITS22-220122.pdf) Matthieu Sozeau, Meven Lennon-Bertrand and Yannick Forster. WITS 2022 presentation, Philadelphia.\n  This presents the challenges around the representation of cases in Coq and PCUIC.\n\n- [\"Bidirectional Typing for the Calculus of Inductive Constructions\"](https://www.meven.ac/category/phd-thesis.html) Meven Lennon-Bertrand, PhD thesis, June 2022.\n  Part 2 describes in detail the bidirectional variant of typing and its use to verify correctness and completeness of the type checker.\n\n- [\"Coq Coq Correct! Verification of Type Checking and Erasure for Coq, in Coq\"](https://metarocq.github.io/coqcoqcorrect)\n  Matthieu Sozeau, Simon Boulier, Yannick Forster, Nicolas Tabareau\n  and Théo Winterhalter. POPL 2020, New Orleans.\n\n  This paper presented the formal proofs of soundness of conversion, type checking and erasure.\n  Now superseded by the April 2023 article above.\n\n- [\"Formalization and meta-theory of type theory\"](https://theowinterhalter.github.io/#phd) Théo Winterhalter, PhD thesis, September 2020.\n  Part 3 describes in detail the verified reduction, conversion and type checker.\n\n- [\"Coq Coq Codet! Towards a Verified Toolchain for Coq in MetaCoq\"](https://sozeau.gitlabpages.inria.fr/www/research/publications/Coq_Coq_Codet-CoqWS19.pdf)\n  Matthieu Sozeau, Simon Boulier, Yannick Forster, Nicolas Tabareau and\n  Théo Winterhalter. Abstract and\n  [presentation](http://www.ps.uni-saarland.de/~forster/downloads/slides-coqws19.pdf)\n  given at the [Coq Workshop\n  2019](https://staff.aist.go.jp/reynald.affeldt/coq2019/), September\n  2019.\n\n- [\"The MetaCoq Project\"](https://sozeau.gitlabpages.inria.fr/www/research/publications/drafts/The_MetaCoq_Project.pdf)\n  Matthieu Sozeau, Abhishek Anand, Simon Boulier, Cyril Cohen, Yannick Forster, Fabian Kunze,\n  Gregory Malecha, Nicolas Tabareau and Théo Winterhalter. JAR, February 2020.\n  Extended version of the ITP 2018 paper.\n\n  This includes a full documentation of the Template Monad and the typing rules of PCUIC.\n\n- [A certifying extraction with time bounds from Coq to call-by-value λ-calculus](https://www.ps.uni-saarland.de/Publications/documents/ForsterKunze_2019_Certifying-extraction.pdf).\n  Yannick Forster and Fabian Kunze.\n  ITP 2019.\n  [Example](https://github.com/uds-psl/certifying-extraction-with-time-bounds/blob/master/Tactics/Extract.v)\n\n- [\"Towards Certified Meta-Programming with Typed Template-Coq\"](https://hal.archives-ouvertes.fr/hal-01809681/document)\n  Abhishek Anand, Simon Boulier, Cyril Cohen, Matthieu Sozeau and Nicolas Tabareau.\n  ITP 2018.\n\n- The system was presented at [Coq'PL 2018](https://popl18.sigplan.org/event/coqpl-2018-typed-template-coq)\n\n## Related Projects\n\n- The [CertiCoq](https://github.com/CertiCoq/certicoq) project develops a certified compiler from the output of verified erasure down\n  to CompCert C-light. It provides in particular OCaml and fully foundationally verified plugins\n  for the whole compilation pipeline from Gallina to Clight and the verified type-checker of MetaRocq.\n\n- The [ConCert](https://github.com/AU-COBRA/ConCert) project develops certified or certifying compilers from Gallina to smart contract languages (Liquidity and\n  CameLIGO), the functional language Elm, and a subset of the Rust programming languages. It uses the typed erasure variant to\n  gather more type information about erased terms and perform optimizations based on this information.\n  The project focuses in particular on the verification and safe extraction of smart contracts for blockchains.\n\n## Team \u0026 Credits\n\n\u003cp align=\"center\"\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/abhishek-anand.jpg\"\nalt=\"Abhishek Anand\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/danil-annenkov.jpeg\"\nalt=\"Danil Annenkov\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/simon-boulier.jpg\"\nalt=\"Simon Boulier\" width=\"150px\"/\u003e\u003cbr/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/cyril-cohen.png\"\nalt=\"Cyril Cohen\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/yannick-forster.jpg\"\nalt=\"Yannick Forster\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/jason-gross.jpg\" alt=\"Jason Gross\"\nwidth=\"150px\"/\u003e\u003cbr/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/meven-lennon-bertrand.jpeg\"\nalt=\"Meven Lennon-Bertrand\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/kenji-maillard.jpg\"\nalt=\"Kenji Maillard\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/gregory-malecha.jpg\"\nalt=\"Gregory Malecha\" width=\"150px\"/\u003e\u003cbr/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/jakob-botsch-nielsen.png\"\nalt=\"Jakob Botsch Nielsen\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/matthieu-sozeau.png\"\nalt=\"Matthieu Sozeau\" width=\"150px\"/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/nicolas-tabareau.jpg\"\nalt=\"Nicolas Tabareau\" width=\"150px\"/\u003e\u003cbr/\u003e\n\u003cimg\nsrc=\"https://github.com/MetaRocq/metarocq.github.io/raw/master/assets/theo-winterhalter.jpg\"\nalt=\"Théo Winterhalter\" width=\"150px\"/\u003e\n\u003cbr/\u003e\n\n\nMetaRocq is developed by (left to right)\n\u003ca href=\"https://github.com/aa755\"\u003eAbhishek Anand\u003c/a\u003e,\n\u003ca href=\"https://github.com/annenkov\"\u003eDanil Annenkov\u003c/a\u003e,\n\u003ca href=\"https://github.com/SimonBoulier\"\u003eSimon Boulier\u003c/a\u003e,\n\u003ca href=\"https://github.com/CohenCyril\"\u003eCyril Cohen\u003c/a\u003e,\n\u003ca href=\"https://github.com/yforster\"\u003eYannick Forster\u003c/a\u003e,\n\u003ca href=\"https://jasongross.github.io\"\u003eJason Gross\u003c/a\u003e,\n\u003ca href=\"https://www.meven.ac\"\u003eMeven Lennon-Bertrand\u003c/a\u003e,\n\u003ca href=\"https://github.com/kyoDralliam\"\u003eKenji Maillard\u003c/a\u003e,\n\u003ca href=\"https://github.com/gmalecha\"\u003eGregory Malecha\u003c/a\u003e,\n\u003ca href=\"https://github.com/jakobbotsch\"\u003eJakob Botsch Nielsen\u003c/a\u003e,\n\u003ca href=\"https://github.com/mattam82\"\u003eMatthieu Sozeau\u003c/a\u003e,\n\u003ca href=\"https://github.com/Tabareau\"\u003eNicolas Tabareau\u003c/a\u003e and\n\u003ca href=\"https://github.com/TheoWinterhalter\"\u003eThéo Winterhalter\u003c/a\u003e.\n\u003c/p\u003e\n\n\n```\nCopyright (c) 2014-2023 Gregory Malecha\nCopyright (c) 2015-2025 Abhishek Anand, Matthieu Sozeau\nCopyright (c) 2017-2023 Simon Boulier, Cyril Cohen\nCopyright (c) 2017-2025 Nicolas Tabareau, Yannick Forster, Théo Winterhalter\nCopyright (c) 2018-2023 Danil Annenkov\nCopyright (c) 2020-2023 Jakob Botsch Nielsen, Meven Lennon-Bertrand\nCopyright (c) 2022-2025 Kenji Maillard\nCopyright (c) 2023      Jason Gross\n```\n\nThis software is distributed under the terms of the MIT license.\nSee [LICENSE](https://github.com/MetaRocq/metarocq/blob/-/LICENSE) for details.\n\n## Bugs\n\nPlease report any bugs or feature requests on the github [issue tracker](https://github.com/MetaRocq/metarocq/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetarocq%2Fmetarocq.github.io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetarocq%2Fmetarocq.github.io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetarocq%2Fmetarocq.github.io/lists"}