{"id":13648799,"url":"https://github.com/m4b/faerie","last_synced_at":"2025-04-08T18:18:47.481Z","repository":{"id":56363950,"uuid":"73154092","full_name":"m4b/faerie","owner":"m4b","description":"Magical ELF and Mach-o object file writer backend","archived":false,"fork":false,"pushed_at":"2024-04-08T01:57:03.000Z","size":336,"stargazers_count":274,"open_issues_count":19,"forks_count":25,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-01T15:15:49.148Z","etag":null,"topics":["compiler","elf","mach","object-files"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/m4b.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}},"created_at":"2016-11-08T05:57:55.000Z","updated_at":"2025-03-16T03:52:05.000Z","dependencies_parsed_at":"2022-08-15T17:20:37.101Z","dependency_job_id":"351bbc2f-f3c9-4dfd-80b4-7be014fc5ffe","html_url":"https://github.com/m4b/faerie","commit_stats":{"total_commits":218,"total_committers":17,"mean_commits":"12.823529411764707","dds":0.6605504587155964,"last_synced_commit":"04ea1211a677457b331e3f97ec7131dad3dfb655"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4b%2Ffaerie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4b%2Ffaerie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4b%2Ffaerie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4b%2Ffaerie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m4b","download_url":"https://codeload.github.com/m4b/faerie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247898519,"owners_count":21014722,"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","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":["compiler","elf","mach","object-files"],"created_at":"2024-08-02T01:04:33.098Z","updated_at":"2025-04-08T18:18:47.455Z","avatar_url":"https://github.com/m4b.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# faerie [![Build Status](https://github.com/m4b/faerie/workflows/CI/badge.svg)](https://github.com/m4b/faerie/actions) [![Documentatation](https://docs.rs/faerie/badge.svg)](https://docs.rs/faerie).\n\nEmit some object files, at your leisure:\n\n```rust\nuse faerie::{ArtifactBuilder, ArtifactError, triple, Link, Decl};\nuse std::path::Path;\nuse std::fs::File;\n\npub fn main() -\u003e Result\u003c(), ArtifactError\u003e {\n    let name = \"test.o\";\n    let file = File::create(Path::new(name))?;\n    let mut obj = ArtifactBuilder::new(triple!(\"x86_64-unknown-unknown-unknown-elf\"))\n        .name(name.to_owned())\n        .finish();\n\n    // first we declare our symbolic references;\n    // it is a runtime error to define a symbol _without_ declaring it first\n    obj.declarations(\n        [\n            (\"deadbeef\", Decl::function().into()),\n            (\"main\",     Decl::function().global().into()),\n            (\"str.1\",    Decl::cstring().into()),\n            (\"DEADBEEF\", Decl::data_import().into()),\n            (\"printf\",   Decl::function_import().into()),\n        ].iter().cloned()\n    )?;\n\n    // we now define our local functions and data\n    // 0000000000000000 \u003cdeadbeef\u003e:\n    //    0:\t55                   \tpush   %rbp\n    //    1:\t48 89 e5             \tmov    %rsp,%rbp\n    //    4:\t48 8b 05 00 00 00 00 \tmov    0x0(%rip),%rax        # b \u003cdeadbeef+0xb\u003e\n    // \t\t\t7: R_X86_64_GOTPCREL\tDEADBEEF-0x4\n    //    b:\t8b 08                \tmov    (%rax),%ecx\n    //    d:\t83 c1 01             \tadd    $0x1,%ecx\n    //   10:\t89 c8                \tmov    %ecx,%eax\n    //   12:\t5d                   \tpop    %rbp\n    //   13:\tc3                   \tretq\n    obj.define(\"deadbeef\",\n        vec![0x55,\n            0x48, 0x89, 0xe5,\n            0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00,\n            0x8b, 0x08,\n            0x83, 0xc1, 0x01,\n            0x89, 0xc8,\n            0x5d,\n            0xc3])?;\n    // main:\n    // 55\tpush   %rbp\n    // 48 89 e5\tmov    %rsp,%rbp\n    // b8 00 00 00 00\tmov    $0x0,%eax\n    // e8 00 00 00 00   callq  0x0 \u003cdeadbeef\u003e\n    // 89 c6\tmov    %eax,%esi\n    // 48 8d 3d 00 00 00 00 lea    0x0(%rip),%rdi # will be: deadbeef: 0x%x\\n\n    // b8 00 00 00 00\tmov    $0x0,%eax\n    // e8 00 00 00 00\tcallq  0x3f \u003cmain+33\u003e  # printf\n    // b8 00 00 00 00\tmov    $0x0,%eax\n    // 5d\tpop    %rbp\n    // c3\tretq\n    obj.define(\"main\",\n        vec![0x55,\n            0x48, 0x89, 0xe5,\n            0xb8, 0x00, 0x00, 0x00, 0x00,\n            0xe8, 0x00, 0x00, 0x00, 0x00,\n            0x89, 0xc6,\n            0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00,\n            0xb8, 0x00, 0x00, 0x00, 0x00,\n            0xe8, 0x00, 0x00, 0x00, 0x00,\n            0xb8, 0x00, 0x00, 0x00, 0x00,\n            0x5d,\n            0xc3])?;\n    obj.define(\"str.1\", b\"deadbeef: 0x%x\\n\\0\".to_vec())?;\n\n    // Next, we declare our relocations,\n    // which are _always_ relative to the `from` symbol\n    obj.link(Link { from: \"main\", to: \"str.1\", at: 19 })?;\n    obj.link(Link { from: \"main\", to: \"printf\", at: 29 })?;\n    obj.link(Link { from: \"main\", to: \"deadbeef\", at: 10 })?;\n    obj.link(Link { from: \"deadbeef\", to: \"DEADBEEF\", at: 7 })?;\n\n    // Finally, we write the object file\n    obj.write(file)?;\n\n    Ok(())\n}\n```\n\nWill emit an object file like this:\n\n\u003cpre\u003e\u003cfont color=\"#D3D7CF\"\u003eELF \u003c/font\u003e\u003cspan style=\"background-color:#FCE94F\"\u003e\u003cfont color=\"#555753\"\u003eREL\u003c/font\u003e\u003c/span\u003e \u003cfont color=\"#D3D7CF\"\u003e\u003cb\u003eX86_64\u003c/b\u003e\u003c/font\u003e-little-endian @ \u003cfont color=\"#CC0000\"\u003e0x0\u003c/font\u003e:\n\ne_phoff: \u003cfont color=\"#C4A000\"\u003e0x0\u003c/font\u003e e_shoff: \u003cfont color=\"#C4A000\"\u003e0x2a2\u003c/font\u003e e_flags: 0x0 e_ehsize: 64 e_phentsize: 56 e_phnum: 0 e_shentsize: 64 e_shnum: 9 e_shstrndx: 1\n\n\u003cfont color=\"#D3D7CF\"\u003eSectionHeaders(9)\u003c/font\u003e:\n  \u003cb\u003eIdx\u003c/b\u003e   \u003cb\u003eName           \u003c/b\u003e   \u003cb\u003e        Type\u003c/b\u003e   \u003cb\u003eFlags               \u003c/b\u003e   \u003cb\u003eOffset\u003c/b\u003e   \u003cb\u003eAddr\u003c/b\u003e   \u003cb\u003eSize \u003c/b\u003e   \u003cb\u003eLink      \u003c/b\u003e   \u003cb\u003eEntsize\u003c/b\u003e   \u003cb\u003eAlign\u003c/b\u003e  \n  \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e0  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e               \u003c/font\u003e\u003c/span\u003e       SHT_NULL                          \u003cfont color=\"#C4A000\"\u003e0x0   \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x0  \u003c/b\u003e\u003c/font\u003e                0x0       0x0    \n  \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e1  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e.strtab        \u003c/font\u003e\u003c/span\u003e     SHT_STRTAB                          \u003cfont color=\"#C4A000\"\u003e0x8c  \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0xc6 \u003c/b\u003e\u003c/font\u003e                0x0       0x1    \n  \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e2  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e.symtab        \u003c/font\u003e\u003c/span\u003e     SHT_SYMTAB                          \u003cfont color=\"#C4A000\"\u003e0x152 \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0xf0 \u003c/b\u003e\u003c/font\u003e   .strtab(1)   0x18      0x8    \n  \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e3  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e.rodata.str.1    \u003c/font\u003e\u003c/span\u003e   SHT_PROGBITS   \u003cb\u003eALLOC MERGE STRINGS \u003c/b\u003e   \u003cfont color=\"#C4A000\"\u003e0x40  \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x10 \u003c/b\u003e\u003c/font\u003e                0x1       0x1    \n  \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e4  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e.text.deadbeef \u003c/font\u003e\u003c/span\u003e   SHT_PROGBITS   \u003cb\u003eALLOC EXECINSTR     \u003c/b\u003e   \u003cfont color=\"#C4A000\"\u003e0x50  \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x14 \u003c/b\u003e\u003c/font\u003e                0x0       0x10   \n  \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e5  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e.text.main     \u003c/font\u003e\u003c/span\u003e   SHT_PROGBITS   \u003cb\u003eALLOC EXECINSTR     \u003c/b\u003e   \u003cfont color=\"#C4A000\"\u003e0x64  \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x28 \u003c/b\u003e\u003c/font\u003e                0x0       0x10   \n  \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e6  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e.reloc.main    \u003c/font\u003e\u003c/span\u003e       SHT_RELA                          \u003cfont color=\"#C4A000\"\u003e0x242 \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x48 \u003c/b\u003e\u003c/font\u003e   .symtab(2)   0x18      0x8    \n  \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e7  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#2E3436\"\u003e\u003cfont color=\"#D3D7CF\"\u003e.reloc.deadbeef\u003c/font\u003e\u003c/span\u003e       SHT_RELA                          \u003cfont color=\"#C4A000\"\u003e0x28a \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x18 \u003c/b\u003e\u003c/font\u003e   .symtab(2)   0x18      0x8    \n  \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e8  \u003c/font\u003e\u003c/span\u003e   \u003cspan style=\"background-color:#D3D7CF\"\u003e\u003cfont color=\"#2E3436\"\u003e.note.GNU-stack\u003c/font\u003e\u003c/span\u003e   SHT_PROGBITS                          \u003cfont color=\"#C4A000\"\u003e0x0   \u003c/font\u003e   \u003cfont color=\"#CC0000\"\u003e\u003cb\u003e0x0 \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e\u003cb\u003e0x0  \u003c/b\u003e\u003c/font\u003e                0x0       0x1    \n\n\u003cfont color=\"#D3D7CF\"\u003eSyms(10)\u003c/font\u003e:\n  \u003cb\u003e             Addr\u003c/b\u003e   \u003cb\u003eBind    \u003c/b\u003e   \u003cb\u003eType     \u003c/b\u003e   \u003cb\u003eSymbol  \u003c/b\u003e   \u003cb\u003eSize \u003c/b\u003e   \u003cb\u003eSection          \u003c/b\u003e   \u003cb\u003eOther\u003c/b\u003e  \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   NOTYPE                 \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e                       0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   FILE        \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003etest.o  \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e   \u003cfont color=\"#D3D7CF\"\u003e\u003ci\u003eABS              \u003c/i\u003e\u003c/font\u003e   0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   SECTION                \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e   .rodata.str.1(3)      0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   SECTION                \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e   .text.deadbeef(4)   0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   SECTION                \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e   .text.main(5)       0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003eOBJECT   \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003estr.1   \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x10 \u003c/font\u003e   .rodata.str.1(3)      0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#34E2E2\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eLOCAL   \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   \u003cfont color=\"#EF2929\"\u003e\u003cb\u003eFUNC     \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003edeadbeef\u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x14 \u003c/font\u003e   .text.deadbeef(4)   0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#EF2929\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eGLOBAL  \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   \u003cfont color=\"#EF2929\"\u003e\u003cb\u003eFUNC     \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003emain    \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x28 \u003c/font\u003e   .text.main(5)       0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#EF2929\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eGLOBAL  \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   NOTYPE      \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003eDEADBEEF\u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e                       0x0    \n  \u003cfont color=\"#CC0000\"\u003e               0 \u003c/font\u003e   \u003cspan style=\"background-color:#EF2929\"\u003e\u003cfont color=\"#555753\"\u003e\u003cb\u003eGLOBAL  \u003c/b\u003e\u003c/font\u003e\u003c/span\u003e   NOTYPE      \u003cfont color=\"#FCE94F\"\u003e\u003cb\u003eprintf  \u003c/b\u003e\u003c/font\u003e   \u003cfont color=\"#4E9A06\"\u003e0x0  \u003c/font\u003e                       0x0    \n\n\u003cfont color=\"#D3D7CF\"\u003eShdr Relocations(4)\u003c/font\u003e:\n\u003cfont color=\"#D3D7CF\"\u003e\u003cb\u003e  .text.main\u003c/b\u003e\u003c/font\u003e(3)\n\u003cfont color=\"#CC0000\"\u003e              13\u003c/font\u003e X86_64_PC32 \u003cfont color=\"#C4A000\"\u003e\u003cb\u003e.rodata.str.1\u003c/b\u003e\u003c/font\u003e\n\u003cfont color=\"#CC0000\"\u003e              1d\u003c/font\u003e X86_64_PLT32 \u003cfont color=\"#C4A000\"\u003e\u003cb\u003eprintf\u003c/b\u003e\u003c/font\u003e+\u003cfont color=\"#CC0000\"\u003e-4\u003c/font\u003e\n\u003cfont color=\"#CC0000\"\u003e               a\u003c/font\u003e X86_64_PLT32 \u003cfont color=\"#C4A000\"\u003e\u003cb\u003e.text.deadbeef\u003c/b\u003e\u003c/font\u003e+\u003cfont color=\"#CC0000\"\u003e-4\u003c/font\u003e\n\n\u003cfont color=\"#D3D7CF\"\u003e\u003cb\u003e  .text.deadbeef\u003c/b\u003e\u003c/font\u003e(1)\n\u003cfont color=\"#CC0000\"\u003e               7\u003c/font\u003e X86_64_GOTPCREL \u003cfont color=\"#C4A000\"\u003e\u003cb\u003eDEADBEEF\u003c/b\u003e\u003c/font\u003e+\u003cfont color=\"#CC0000\"\u003e-4\u003c/font\u003e\n\u003c/pre\u003e\n\n:sunglasses:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4b%2Ffaerie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm4b%2Ffaerie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4b%2Ffaerie/lists"}