{"id":42705922,"url":"https://github.com/schnell18/localenv","last_synced_at":"2026-01-29T14:33:59.934Z","repository":{"id":150822214,"uuid":"439896954","full_name":"schnell18/localenv","owner":"schnell18","description":"Turn laptop, workstation into full-featured local development environment.","archived":false,"fork":false,"pushed_at":"2025-09-06T02:42:13.000Z","size":645,"stargazers_count":7,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-06T03:28:23.869Z","etag":null,"topics":["container","docker","docker-compose","podman","podman-compose"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schnell18.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"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":"2021-12-19T15:20:03.000Z","updated_at":"2025-09-06T02:42:17.000Z","dependencies_parsed_at":"2025-03-29T20:19:25.191Z","dependency_job_id":"df998096-bafd-45cf-8617-559fd8e5f4dc","html_url":"https://github.com/schnell18/localenv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/schnell18/localenv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schnell18%2Flocalenv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schnell18%2Flocalenv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schnell18%2Flocalenv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schnell18%2Flocalenv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schnell18","download_url":"https://codeload.github.com/schnell18/localenv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schnell18%2Flocalenv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28879663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T10:31:27.438Z","status":"ssl_error","status_checked_at":"2026-01-29T10:31:01.017Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["container","docker","docker-compose","podman","podman-compose"],"created_at":"2026-01-29T14:33:59.859Z","updated_at":"2026-01-29T14:33:59.919Z","avatar_url":"https://github.com/schnell18.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Containerized local development environment\n\nThe local virtual development environment offers convenient and consistent\ncross-platform development experience that allows developers to run the modern\nfull-stack inside their own computer. It manages complex runtime dependencies\neffectively to avoid pollution of host environment by leveraging container\ntechnology. This approach makes good use of computing powers in developer's\nlaptop or workstation and creates sandboxes for safe experiments on the\nsoftware and dependencies. It also addresses the challenge to run clustered\nmiddlewares (for example redis, kafka) as containers, which advertises\ncontainer IP addresses inaccessible from host. The localenv solves this problem\nby carefully crafting the provision scripts that work cross-platform.\nAdditionally, localenv offers a single login (localenv) and password (localenv)\nto access all middlewares or databases it manages, which minimizes the password\nmanagement burden.\n\n# Setup\n\nThe localenv has been verified on Linux, MacOS, and Windows. Specifically, localenv\nhas been tested under:\n\n- MacOS 15.3.2 on 2019 MacBookPro w/ Intel chip\n- Windows 11 10.0.26100 w/ Intel chip\n- Manjaro Zetar (5.15.179-1-MANJARO) on a 2022 Legend Legion w/ Intel chip\n- Ubuntu 2404\n\nTo avoid docker license issue, localenv leverages [podman][18] to manage\ncontainers as podman is free open-source software. Previous podman\nreleases, specifically the versions prior to 4.6.0, don't support\nhealthy status check, leading to issues [startup hangs][12]. Therefore,\na recent version of podman, or at least 4.6.0 is mandatory to run\nlocalenv. Additionally, if you plan to use the companion `tmux.sh` to\nsetup a multi-window termnal development UI, it is hightly recommended\nyou install the follow additional tools on the host machine:\n\n- [DBeaver Community][19]\n- redis client\n- git\n- tmux\n- jq\n- curl\n- xxd\n\n## Install dependencies\n\nThe minimal mandatory dependencies of localenv include Python 3.11+,\npodman 4.6.0+, and the two Python packages required by podman-compose:\ndotenv and pyyaml.\n\n### Install Python\n\nYou may install Python using the official release from [python.org][15]\nor using the OS-specific package manager. Additionally, you may use the\n[uv][20] to setup virtual env for specific Python version. The localenv\nhas been tested with this approach.\n\n### Install podman\n\nOn MacOS, the recommended method to install podman on MacOS is to\nutilize Homebrew:\n\n    brew install podman\n\nOn Linux, you can utilize distribution-specific package manager. For\nexample, on Debian/Ubuntu type:\n\n    sudo apt-get update \u0026\u0026 sudo apt-get install podman\n\nOn Arch/Manjaro type:\n\n    sudo pacman -S podman\n\nOn Windows, grab the Podman Windows installer from podman's github\nproject and install podman with the GUI installer. Alternatively, if you\nare comfortable with command line, you can type:\n\n    winget install podman\n\n### Setup podman-compose\n\nThe official podman-compose 1.3.0 has [a defect][16] which prevents it\nfrom reliably launching containers depending on the successful startup\nof other containers. The [pull request PR #1184][17] fixes this issue\nand is under review. To facilitate setup, the patched podman-compose\nfrom [PR #1184][17] is bundled in this project. You don't have to\ninstall podman-compose separately. However, you still need install the\nrequired Python packages dotenv and pyyaml.\n\n### Setup localenv\n\nSetup of localenv can only be performed after successful installation of\nthe aforementioned tools and libraries. You can install localenv simply\nby cloning the [localenv repository][2]. The localenv is distributed as\ngithub project in source format. No binary package or will be installed\non your computer. The command to clone this project is as follows:\n\n    cd ~\n    git clone https://github.com/schnell18/localenv.git\n\nSince you will interact localenv frequently using command line, put the\nlocalenv project under your home directory is hightly recommended to\navoid typing long directory names.\n\n## Using localenv\n\nThe databases and middlewares, abstracted as infra in the localenv, are\nmanaged by the script `infractl.sh` on MacOS/Linux, `infractl.ps1` on\nWindows. The two scripts should always be launched under the root\ndirectory of localenv. The localenv isn't able to resolve dependencies\nbetween infras so far. If you start infra with dependencies, you should\nthe start them together and the dependencies should go first in the\nargument list. This limitation may be removed in future release.\n\nThe infras managed by localenv are crafted with minimal memory\nconsumption in mind. However, if you start too many infras than\nnecessary, you may render your laptop or workstation irresponsive due to\nexcessive memory consumption or high CPU usage.\n\n### Initialize localenv\n\nDepending on your OS, the localenv may require a intermediate virtual\nmachine which is managed automatically. Prior to you'd better initialize\nthis virtual machine by using the `init` subcommand.\n\nFor example, on MacOS/Linux, type:\n\n    cd ~/localenv\n    ./infractl.sh init\n\nOn Windows, you execute the following commands in a Powershell terminal:\n\n    cd localenv\n    .\\infractl.ps1 init\n\nYou skip this step and start the infras directly. The localenv will\ndetect whether it needs a virtual machine and initializes and starts it\nas necessary.\n\n### Launch infras\n\nIt is straitforward to launch an infra in localenv. First, you change to\nthe root directory where localenv located, then type the `./infractl.sh`\nor `infractl.ps1` script followed by the names of the infra. However,\nwhen the infra has dependencies, You should start infra and its\ndependencies together. The dependencies should go first. For instance,\nto launch jaeger which depends on elasticsearch, you execute commands on\nMacOS/Linux as follows:\n\n    cd localenv\n    ./infractl.sh zookeeper kafka\n\nOn Windows, open a Powershell terminal and type:\n\n    cd localenv\n    .\\infractl.ps1 zookeeper kafka\n\nIf you want to know all supported databases or middlewares, you can type:\n\n    ./infractl.sh list\n\nThe following table lists the supported middlewares and their dependencies:\n\n|  Seq  | infra                       | dependencies               | Notes                           |\n| ----- | --------------------------- | -------------------------- | ------------------------------- |\n|  01   | elasticsearch               |                            | ElasticSearch                   |\n|  02   | mariadb                     |                            | MariaDB                         |\n|  03   | redis-cluster               |                            | Redis Cluster mode              |\n|  04   | redis-sentinel              |                            | Redis Sentinel mode             |\n|  05   | rocketmq                    |                            | RocketMQ                        |\n|  06   | rabbitmq                    |                            | RabbitMQ                        |\n|  07   | kafka                       | zookeeper                  | kafka 3                         |\n|  08   | kafka4                      |                            | kafka 4                         |\n|  09   | nacos                       | mariadb                    | Configuration and service reg   |\n|  10   | etcd                        |                            | etcd                            |\n|  11   | zookeeper                   |                            | zookeeper                       |\n|  12   | mongodb                     |                            | mongodb                         |\n|  13   | [jaeger][8]                 | elasticsearch              | jaeger distributed tracing      |\n|  14   | filebeat                    | elasticsearch              | Log collector                   |\n|  15   | fluentbit                   |                            | High performance log collector  |\n|  16   | nginx                       |                            | High performance webserver      |\n\nTo check if the middlewares are working properly, you may type:\n\n    ./infractl.sh status\n\nTo login the container, type:\n\n    ./infractl.sh attach \u003cinfra-component-name\u003e\n\nThe \u003cinfra-component-name\u003e is defined in the corresponding descriptor.yml file of the infra.\nTo check logs generated by the infra, type:\n\n    ./infractl.sh longs \u003cinfra-component-name\u003e\n\n### Stop infra\n\nTo stop current running infras, type:\n\n    ./infractl.sh stop\n\n\n## Integrate backend or frontend projects\n\nOnce this infrastrure part of localenv is ready, you can integrate your backend or frontend projects\nto take advantage of localenv. For backend projects, you put them under the `localenv/backends`\nfolder. For example, you may add the imaginary project `riemann` to the localenv as follows:\n\n    cd ~/localenv\n    mkdir backends\n    cd backends\n    git clone git@\u003cyour_git_server\u003e/riemann.git\n\nThis directory layout makes the schema and data load functions available to any backend project\ndefines its database schema in the `schema/schema.sql` file and stores csv files under the\n'schema/data' folder in the project.\n\nAdditionally, if you want to add frontend project, you put it under the\n`localenv/frontends` folder.\n\n    cd ~/localenv\n    mkdir frontends\n    cd frontends\n    git clone git@\u003cyour_git_server\u003e/\u003cyour_frontend_project\u003e.git\n\n\n## About the rootness of container\n\nThe philosophy of the localenv is to encourage exploration of the ins-and-outs\nof complex tech stacks. To facilitate digging into the internals, the storage\nfiles of the containerized middlewares are mapped to the host under the\n`.state` folder in the localenv. Similarly, the project files are mapped into\nthe container under `/work` directory by convention. The containers in\nlocalenv is intentionally running as root to ease the file sharing between\ncontainers and host, since the root user in the container is mapped to user\nrunning podman on the host, as discussed in [this article][11]. To ensure\nsecurity and transparency, all container images used by localenv are from\nofficial upstream. For those customized by this project, the Dockerfiles are\nlocated under the `Containerfiles` folder. These images are built\nautomatically thanks to the github action.\n\n## Build Container Image\n\nThe localenv supports multi-architecture image build. The container image build files of the\nmiddlewares required by the localenv are included under the `Containerfiles` folder. These images\nsupport the x86\\_64 and arm64 architecture and run on Apple M1, M2, M3, and M4 chips. To build these\nimages on MacOS, the package `qemu-user-static` should be installed in the virtual machine managed\nby podman. This is automatically handled when you initialize the localenv using command:\n\n    $ ./infractl.sh init\n\nAlternatively, you can install it manually by running the following commands:\n\n    $ podman machine ssh localenv\n    $ rpm-ostree install qemu-user-static\n    $ systemctl reboot\n    $ podman system connection default localenv-root\n\n## Middleware Catalog\nCurrently, the localenv includes following databases and middlewares:\n\n* MariaDB\n* MongoDB\n* Redis\n* RocketMQ\n* RabbitMQ\n* ElasticSearch\n* nginx\n* nacos\n* etcd\n* zookeeper\n* kafka\n* kafka4\n* NATS\n\nAdditional databases and middlewares can be included.\n\nThe databases and middlewares are accessible from the host via port mapping.\nThe service ports and admin URLs of these databases and middlewares are\npresented in the table as follows:\n\n|  Seq  | Middleware       | Port                | admin URL                   |\n| ----- | ---------------- | ------------------- | --------------------------- |\n|  01   | MariaDB          | 3306                |                             |\n|  02   | MongoDB          | 27017               |                             |\n|  03   | Redis(Cluster)   | 7001,7002,7003      |                             |\n|  04   | Redis(Sentinel)  | 6379,6380,6381      |                             |\n|  05   | etcd             | 2379,2380,2381      |                             |\n|  06   | zookeeper        | 2181,2182,2183      |                             |\n|  07   | RocketMQ         | 9876                | http://127.0.0.1:7080       |\n|  08   | ElasticSearch    | 9200                | http://127.0.0.1:5601       |\n|  09   | nacos            | 8848                | http://127.0.0.1:8848/nacos |\n|  10   | rabbitmq         | 5672                | http://127.0.0.1:15672      |\n|  11   | kafka-ui         | 9000                | http://127.0.0.1:9000       |\n|  12   | kafka4           | 19092,29092,39092   | http://127.0.0.1:9000       |\n|  13   | jaeger           | 16686               | http://127.0.0.1:16686      |\n|  14   | NATS             | 4222                | http://127.0.0.1:31311      |\n\n\n### Redis Cluster Mode (redis-cluster)\n\nThe redis instance supported by localenv is a 3-node redis cluster with port\nrange from 7001 to 7003. The cluster password is `localenv`.\nTo connect using the redis-cli, you can type:\n\n    redis-cli -c -h 127.0.0.1 -p 7001 -a localenv\n\nIf you use tmux, then you may launch the `tmux.sh` which open the above session\nin a separate window for you. You may use any other redis management tools to\ninteract with the redis cluster.\n\n### Redis Sentinel Mode (redis-sentinel)\n\nThe redis instance supported by localenv is a 3-slave 3-sentinel redis sentinel\non port 6379. The cluster password is `localenv`. To connect using the redis-cli,\nyou can type:\n\n    redis-cli -h 127.0.0.1 -p 6379 -a localenv\n\nYou may use any other redis management tools to interact with the redis\ncluster.\n\n### MariaDB (MySQL replacement)\n\nThe MariaDB (a MySQL variant) instance in the localenv can be accessed via\n127.0.0.1:3306. For normal application access, use user name `localenv` and\npassword `localenv` to connect to the database. For administrative access, use\npassword `root` for the root user. For tmux user, launching `tmux.sh` will open\na terminal window to open the mysql shell. If you prefer GUI client, use your\nfavorite tool to connect the database using the credentials as aforementioned.\n\nThe data files of MariaDB instance are stored under the folder\n`.state/mariadb/data`. The data persist over environment restart as long as you\ndon't remove these files.\n\n### Kafka4\n\n[Kafka4][10] is an open-source distributed event streaming platform.\nTo start a 3-node kafka cluster in the localenv, type:\n\n    ./infractl.sh start Kafka4\n\nThe 3 kafka nodes are exposed to the host on port 19092, 29092, and 39092\nrespectively.\n\n\n### etcd\n\n[etcd][9] is a strongly consistent, distributed key-value store for distributed\nsystems. To start a 3-node ETCD cluster in the localenv, type:\n\n    ./infractl.sh start etcd\n\n### ElasticSearch\n\nThe ElasticSearch instance in the localenv can be accessed via 127.0.0.1:9200.\nThe companion Kibana is serving on 5601. You can browse http://127.0.0.1:5601 to\naccess the web ui. Alternatively, you can type\n\n    ./infractl.sh webui elasticsearch\n\nto access the Kibana webui.\n\n### RocketMQ\n\nThe [RocketMQ][4] instance includes a webui for administration. The admin URL\nis http://127.0.0.1:7800. Alternatively, you can type\n\n    ./infractl.sh webui rocketmq\n\nto launch the administration webui. Register user name for the first use.\n\nThe data files of RocketMQ instance are stored under the folder\n`.state/rocketmq/broker1/store`. The data survive environment restarts as long\nas you don't remove these files.\n\n### RabbitMQ\n\nThe [RabbitMQ][5] instance includes a webui for administration. The admin URL\nis http://127.0.0.1:15672. Alternatively, you can type\n\n    ./infractl.sh webui rabbitmq\n\nto launch the administration webui. Use the guest/guest to login.\n\n### nacos\n\n[nacos][6] is an open-source application configuration and service registry.\nnacos requires relational database to operate. The localenv utilizes the\nmariadb as the underlying database for nacos. Therefore, you need start mariadb\nwhen you launch nacos:\n\n    ./infractl.sh start mariadb nacos\n\nThis command opens the default web browser and navigates to the nacos\nadministration page. The default user and password are identical, which is\n`nacos`.\nTo open the nacos administration page, you may type:\n\n    ./infractl.sh webui nacos\n\nwhich leads you to the administration UI.\n\n### Jaeger\n\nJaeger is an open-source distributed tracing tool for modern microservices.\nThe Jaeger instance in the localenv uses ElasticSearch as storage, thus it requires\nan ElasticSearch instance. To start Jaeger run:\n\n    ./infractl.sh start elasticsearch jaeger\n\nTo open the Jaeger web ui manually, you may type:\n\n    ./infractl.sh webui jaeger\n\n### filebeat\n\nFilebeat is a popular logs collection tool for modern microservices, especially\nrunning as containers. The filebeat instance in the localenv uses ElasticSearch\nas storage, thus it requires an ElasticSearch instance. To start filebeat run:\n\n    ./infractl.sh start elasticsearch filebeat\n\nTo open the Kibana ui manually, you may type:\n\n    ./infractl.sh webui elasticsearch\n\n### NATS\n\nNATS is a lightweight, high-performance open-source messaging system\ndesigned for cloud-native applications, IoT, and microservices.\n\nThe NATS instance in the localenv is companioned by nui which offers an\nintuitive webui to manage NATS. To start NATS run:\n\n    ./infractl.sh start nats\n\nUpon successful startup, the nui admin page will be displayed in your\ndefault browser.\n\n## Load Data\n\nThe localenv provides tool to load data in .csv format for applications and\nmiddlewares. The data files and schema definition should be organized according\nto the following directory structure for applications:\n\n    ./backends/riemann\n    ├── Dockerfile\n    ├── README.md\n    ├── pom.xml\n    └── schema\n        ├── data\n        │   ├── 001-shipper.csv\n        └── schema.sql\n\nAnd for the middlewares, a similar structure is assumed:\n\n    .infra/nacos\n    ├── descriptor.yml\n    └── provision\n        ├── schema\n        │   ├── data\n        │   │   ├── 01-roles.csv\n        │   │   └── 02-users.csv\n        │   └── schema.sql\n\nThe key is to put the `schema` directory under the `provision` directory.\n\n\n### Load Application Data\n\n***This feature is under refactoring, it may not work out-of-box right now***\n\nWhen you updated the schema of the application or changed data, you may wish\nto apply the new schema or refresh the new data. The localenv helps you to achieve\nthis goal with the `refresh-db` sub command. To refresh schemas and data for all\nbackend applications, type:\n\n    ./appctl.sh refresh-db\n\nTo refresh individual application, say `riemann`, execute the following command:\n\n    ./appctl.sh refresh-db riemann\n\n### Load Middleware Data\n\nNormally, localenv loads the data required by middlewares automatically.\nIn rare cases, you may need reload the data by typing the following command:\n\n    ./infractl.sh refresh-db\n\nThis command removes existing data and recreates databases. Thus run this\ncommand with extreme caution.\n\n\n## Java Remote Debug\n\nYou can use localenv to debug Java program running inside the container from\nyour favorite IDE. This is an effective way to uncover bugs that are difficult\nto reproduce using unit test approach. The debug capability is based on the\nJDWP. To enable debug, you modify the `app-xxx.yml` file as\ndescribed in following sections.\n\n### Setup Debugging\n\nOpen the application specific file `app-xxx.yml`, locate the\nJava application to debug, and set environment variables as follows:\n\n    environment:\n      - JDWP_DEBUG=true\n      - JDWP_PORT=5005\n\n### Expose Debugging Port\n\nThe IDE runs in the host environment, making direct access to the Java program\nrunning inside the container impossible. Therefore, the `JDWP_PORT` must be exposed\nto the host environment. To map the `JDWP_PORT` to host environment, open the application\nspecific `docker-compose-app-xxx.yml` file, locate the Java application to debug and add\nport mapping as follows:\n\n    ports:\n      - \"5005:5005\"\n\n### Setup Remote Debug in IDE\n\nMost main stream Java IDEs support remote debug. This section uses IntelliJ\nIdea as an example. To setup remote debug in IntelliJ Idea, click the debug\nconfiguration dropdown control on the tool bar to create a new debug\nconfiguration.\n\n![Create Remote JVM debug configuration](img/jdwp01.png \"Create Remote Debug\")\n\nType `127.0.0.1` in the `Host` text input, enter the `JDWP_PORT` into the `Port`\nfield. Then select the top-level project in the `Use module classpath` dropdown box.\nClick `OK` to confirm the settings. To start debug, click the `Debug` button.\nThe output window should display:\n\n    Connected to the target VM, address: '127.0.0.1:5005', transport: 'socket'\n\nThis means the IDE has connected to the Java program. Finally, set break points\nand start the debug session.\n\n## Accelerate Container Image Retrieval\n\nTo speedup container image download in China, you may modify\n`~/.config/containers/registries.conf` to include the container image\nregistries as follows:\n\n    unqualified-search-registries = [\"docker.io\"]\n\n    [[registry]]\n    prefix = \"docker.io\"\n    insecure = false\n    blocked = false\n    location = \"docker.xuanyuan.me\"\n\n[2]: https://github.com/schnell18/localenv.git\n[3]: https://wiki.archlinux.org/title/Podman\n[4]: https://rocketmq.apache.org/\n[5]: https://www.rabbitmq.com/\n[6]: https://nacos.io/\n[8]: https://www.jaegertracing.io/\n[9]: https://etcd.io/\n[10]: https://kafka.apache.org/\n[11]: https://opensource.com/article/19/2/how-does-rootless-podman-work\n[12]: https://github.com/containers/podman-compose/issues/1178\n[13]: https://github.com/containers/podman-compose/issues/1183\n[14]: https://doi.org/10.1145/3458817.347618\n[15]: https://www.python.org/downloads/\n[16]: https://github.com/containers/podman-compose/issues/1183\n[17]: https://github.com/containers/podman-compose/pull/1184\n[18]: https://podman.io/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschnell18%2Flocalenv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschnell18%2Flocalenv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschnell18%2Flocalenv/lists"}