{"id":33232566,"url":"https://github.com/anacierdem/libdragon-docker","last_synced_at":"2026-02-08T09:00:49.104Z","repository":{"id":36044464,"uuid":"220917802","full_name":"anacierdem/libdragon-docker","owner":"anacierdem","description":"Docker container for easy development with DragonMinded libdragon.","archived":false,"fork":false,"pushed_at":"2026-02-04T19:17:29.000Z","size":1792,"stargazers_count":35,"open_issues_count":16,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-05T06:12:29.264Z","etag":null,"topics":["docker","libdragon","mips","mips-assembly","n64","nintendo","nintendo-64","nintendo-hacking","nintendo64","rdp","rsp"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/anacierdem.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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},"funding":{"patreon":"anacierdem"}},"created_at":"2019-11-11T06:42:39.000Z","updated_at":"2026-02-04T19:18:02.000Z","dependencies_parsed_at":"2024-01-06T19:36:57.002Z","dependency_job_id":"daccd6ff-ee6d-4f38-a2fa-95896ad9841a","html_url":"https://github.com/anacierdem/libdragon-docker","commit_stats":{"total_commits":354,"total_committers":19,"mean_commits":18.63157894736842,"dds":"0.34463276836158196","last_synced_commit":"827f434f7f29d8192611250f3b04909dbad278f7"},"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/anacierdem/libdragon-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacierdem%2Flibdragon-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacierdem%2Flibdragon-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacierdem%2Flibdragon-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacierdem%2Flibdragon-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anacierdem","download_url":"https://codeload.github.com/anacierdem/libdragon-docker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anacierdem%2Flibdragon-docker/sbom","scorecard":{"id":190945,"data":{"date":"2025-08-11","repo":{"name":"github.com/anacierdem/libdragon-docker","commit":"f9ed4bf2b21bc19d607b6b113ee74a9531ddf188"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/anacierdem/libdragon-docker/release.yml/master?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/development/Dockerfile:1: pin your Docker image by updating node:22 to node:22@sha256:5cc527147c43e671934c3530e9f66863162db5f57ce1ed0f227a3bb57b93cfab","Warn: containerImage not pinned by hash: .devcontainer/libdragon/Dockerfile:1: pin your Docker image by updating ghcr.io/dragonminded/libdragon:latest to ghcr.io/dragonminded/libdragon:latest@sha256:1bdf7a25f58eb264359bb964964742fcbd37958ca6b822ebd38b66f8390dcd2d","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   3 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v12.0.4 not signed: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180876315","Warn: release artifact v12.0.3 not signed: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180872165","Warn: release artifact v12.0.2 not signed: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180866213","Warn: release artifact v12.0.1 not signed: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180863883","Warn: release artifact v12.0.0 not signed: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180832400","Warn: release artifact v12.0.4 does not have provenance: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180876315","Warn: release artifact v12.0.3 does not have provenance: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180872165","Warn: release artifact v12.0.2 does not have provenance: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180866213","Warn: release artifact v12.0.1 does not have provenance: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180863883","Warn: release artifact v12.0.0 does not have provenance: https://api.github.com/repos/anacierdem/libdragon-docker/releases/180832400"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:14"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T20:39:39.274Z","repository_id":36044464,"created_at":"2025-08-16T20:39:39.274Z","updated_at":"2025-08-16T20:39:39.274Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29225675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T06:05:31.539Z","status":"ssl_error","status_checked_at":"2026-02-08T05:58:33.853Z","response_time":57,"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":["docker","libdragon","mips","mips-assembly","n64","nintendo","nintendo-64","nintendo-hacking","nintendo64","rdp","rsp"],"created_at":"2025-11-16T18:00:23.572Z","updated_at":"2026-02-08T09:00:49.098Z","avatar_url":"https://github.com/anacierdem.png","language":"JavaScript","funding_links":["https://patreon.com/anacierdem"],"categories":["Toolchains"],"sub_categories":[],"readme":"# Docker Libdragon\n\n[![Build](https://github.com/anacierdem/libdragon-docker/actions/workflows/release.yml/badge.svg?branch=master)](https://github.com/anacierdem/libdragon-docker/actions/workflows/release.yml)\n\nThis is a wrapper for a docker container to make managing the libdragon toolchain easier. It has the additional advantage that libdragon toolchain and library can be installed on a per-project basis instead of managing system-wide installations.\n\n\u003e [!NOTE]\n\u003e I've started this project a few years before [devcontainers](https://containers.dev/) were a thing. The cli still works and provides minor additional functionality, but if you already have a containerized environment, I suggest using a devcontainer instead. It is doing essentially the same thing. You can find more info in [`libdragon` devcontainer](#libdragon-configuration) section. I'll continue to improve that configuration to make it a compelling alternative.\n\n## Prerequisites\n\nYou should have [docker](https://www.docker.com/products/docker-desktop) (`\u003e= 27.2.0`) and [git](https://git-scm.com/downloads) installed on your system.\n\n## Installation\n\nThis is primarily a node.js script which is also packaged as an executable. You have a few options:\n\n### installer\n\nDownload the [windows installer](https://github.com/anacierdem/libdragon-docker/releases/latest) and run it. This option is currently only available on Windows.\n\n\u003cdetails\u003e\n  \u003csummary\u003eDetailed instructions\u003c/summary\u003e\n\n  - Download the Windows installer and run it\n  - It can show a \"Windows protected your PC\" warning. Click \"More info\" and \"Run anyway\".\n  - You should now be able to use the `libdragon` on a command line or PowerShell.\n  - To update it with a new version, download a newer installer and repeat the steps above.\n\n\u003c/details\u003e\n\n### pre-built executable\n\nDownload the [pre-built executable](https://github.com/anacierdem/libdragon-docker/releases/latest) for your system and put it somewhere on your PATH. It is discouraged to put it in your project folder.\n\n\u003cdetails\u003e\n  \u003csummary\u003eWindows instructions\u003c/summary\u003e\n\n  - Download Windows executable and copy it to `C:\\bin`\n  - Press `Windows + R` key combination and then enter `rundll32 sysdm.cpl,EditEnvironmentVariables`\n  - In the `Environment Variables` window find the `Path` variable under `User variables for \u003cyour user name\u003e`\n  - Double click it and add a new entry as `C:\\bin`\n  - Restart your computer.\n  - You should now be able to use the `libdragon` on a command line or PowerShell.\n  - To update it with a new version, just replace the file in `C:\\bin`\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eMacOS instructions\u003c/summary\u003e\n\n  - Download MacOS executable and copy it to `/usr/local/bin`\n  - Right click it and choose `Open`.\n  - It will show a warning, approve it by clicking `Open` again. You can close the newly opened terminal window.\n  - You should now be able to use the `libdragon` command.\n  - To update it with a new version, replace the file in `/usr/local/bin` and repeat the other steps.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eLinux instructions\u003c/summary\u003e\n\n  - Download Linux executable and copy it to `~/.local/bin`, or somewhere convenient on your `PATH`.\n  - Run `chmod u+x ~/.local/bin/libdragon`\n  - You should now be able to use the `libdragon` command on new shell sessions.\n  - To update it with a new version, replace the file and repeat the other steps.\n\n\u003c/details\u003e\n\n### via NPM\n\nInstall [node.js](https://nodejs.org/en/download/) (`\u003e= 24`) and install `libdragon` as a global NPM package;\n\n```bash\nnpm install -g libdragon\n```\n\nTo update the tool to the latest, do `npm i -g libdragon@latest`.\n\n## Quick Guide\n\nNavigate to the folder you want to initialize your project and invoke libdragon;\n\n```bash\nlibdragon init\n```\n\nOn first `init` an example project will be created, the container will be downloaded, started and latest libdragon will get installed on it with all the example ROMs built. You can find all the example ROMs in the `libdragon/examples` folder.\n\nThe container's `make` can be invoked on your current working directory via;\n\n```bash\nlibdragon make\n```\n\nAny additonal parameters are passed down to the actual make command. You can work on the files simultaneously with the docker container and any built artifacts will be available in project directory as it is mounted on the container.\n\nTo update the library and rebuild/install all the artifacts;\n\n```bash\nlibdragon update\n```\n\nIn general, you can invoke libdragon as follows;\n\n    libdragon [flags] \u003caction\u003e\n\nRun `libdragon help [action]` for more details on individual actions.\n\n## Recipes\n\n### Using a different libdragon branch\n\nUse the `--branch` flag to set up a custom libdragon branch when initializing your project:\n\n```bash\nlibdragon init --branch unstable\n```\n\nThis will use the `unstable` toolchain and code.\n\n### Switching to a different branch of libdragon\n\nOn an already initialized project, switch the submodule to the desired branch:\n\n```bash\ngit -C ./libdragon checkout opengl\nlibdragon install\n```\n\nIf your changes are on a different remote, then you will need to manage your git remotes as usual. If you also want to update the remote tracking branch for the submodule, run:\n\n```bash\ngit submodule set-branch -b opengl libdragon\n```\n\nThis will update the branch on `.gitmodules` and if you commit that change, subsequent initializations will use the `opengl` branch by default.\n\n### Testing changes on libdragon\n\nAs libdragon is an actively developed library, you may find yourself at a position where you want to change a few things on it and see how it works. In general, if you modify the files in `libdragon` folder of your project, you can install that version to the docker container by simply running:\n\n```bash\nlibdragon install\n```\n\nThis will update all the artifacts in your container and your new code will start linking against the new version when you re-build it via `libdragon make`. The build system should pick up the change in the library and re-compile the dependent files.\n\nInstead of depending on the above command, you can automatically re-build the library by making it a make dependency in your project:\n\n```makefile\nlibdragon-install:\n\t$(MAKE) -C ./libdragon install\n```\n\nIf your build now depends on `libdragon-install`, it will force an install (which should be pretty quick if you don't have changes) and force the build system to rebuild your project when necessary.\n\nIf you clone this repository, this setup is pretty much ready for you. Make sure you have a working libdragon setup and you get the submodules (e.g `git submodule update --init`). Then you can run `libdragon make bench` to execute the code in `./src` with your library changes. Also see [test bench](#local-test-bench).\n\nWhen managing your changes to the library, you have a few options:\n\n#### **Using `submodule` vendor strategy.**\n\nTo be able to share your project with the library change, you would need to push it somewhere public and make sure it is cloned properly by your contributors. This is not recommended for keeping track of your changes but is very useful if you plan to contribute it back to upstream. In the latter case, you can push your submodule branch to your fork and easily open a PR.\n\n#### **Using `subtree` vendor strategy.**\n\nTo be able to share your project with the library change, you just commit your changes. This is very useful for keeping track of your changes specific to your project. On the other hand this is not recommended if you plan to contribute it back to upstream because you will need to make sure your libdragon commits are isolated and do the juggling when pushing it somewhere via `git subtree push`.\n\n## Working on this repository\n\n\u003e [!TIP]\n\u003e You can simply use [`development` devcontainer](#development-configuration) support to get up an running quickly if your development environment supports it.\n\nAfter cloning this repository on a system with node.js (`\u003e= 24`) \u0026 docker (`\u003e= 27.2.0`), in this repository's root do;\n\n```bash\nnpm install\n```\n\nThis will install all necessary NPM dependencies. Now it is time to get the original libdragon repository. (you can also clone this repository with `--recurse-submodules`)\n\n```bash\ngit submodule update --init\n```\n\nThen run;\n\n```bash\nnpm run libdragon -- init\n```\n\nto download the pre-built toolchain image, start and initialize it. This will also install [test bench](#local-test-bench) dependencies into the container if any.\n\nNow you will be able to work on the files simultaneously with the docker container and any built binaries will be available in your workspace as it is mounted on the container.\n\nThere is a root `Makefile` making deeper makefiles easier with these recipes;\n\n    bench: build the test bench (see below)\n    examples: build libdragon examples\n    tests: build the test ROM\n    libdragon-install: build and install libdragon\n    clean-bench: clean the test bench (see below)\n    clean: clean everything and start from scratch\n\nFor example, to re-build the original libdragon examples do;\n\n```bash\nnpm run libdragon -- make examples\n```\n\nSimilarly to run the `clean` recipe, run;\n\n```bash\nnpm run libdragon -- make clean\n```\n\n\u003e [!IMPORTANT]\n\u003e Keep in mind that `--` is necessary for actual arguments when using npm scripts.\n\n\nTo update the submodule and re-build everything;\n\n```bash\nnpm run libdragon -- update\n```\n\n### Local test bench\n\nThe root `bench` recipe is for building the code in root `src` folder. This is a quick way of testing your libdragon changes or a sample code built around libdragon, and is called the test bench. This recipe together with `examples` and `tests` recipes will build and install libdragon automatically as necessary. Thus, they will always produce a rom image using the libdragon code in the repository via their make dependencies, which is ideal for experimenting with libdragon itself. \n\nThere are also vscode launch configurations to quickly build and run the examples, tests and the bench. If you have [ares](https://ares-emu.net/) on your `PATH`, the launch configurations ending in `(emu)` will start it automatically. For the examples configuration, you can navigate to the relevant `.c` file and `Run selected example` will start it most of the time. In some cases, the output ROM name may not match the `.c` file and in those cases, you can select the ROM file instead and it should work.\n\n\u003e [!NOTE]\n\u003e This repository also uses [UNFLoader](https://github.com/buu342/N64-UNFLoader), so you can use the launch configurations without `(emu)` to run the code if you have a supported flashcart plugged in and have `UNFLoader` executable on your `PATH`.\n\u003e\n\u003e The special `Debug Test Bench (emu)` configuration will start ares with remote debugging for the test bench if you have `gdb-multiarch` executable on your `PATH`. It should automatically break in your `main` function.\n\nYou can clean everything with the `clean` recipe/task (open the command palette and choose `Run Task -\u003e clean`).\n\n### Developing the tool itself\n\nFor a quick development loop it really helps linking the code in this repository as the global libdragon installation. To do this run;\n\n```bash\nnpm link\n```\n\nin the root of the repository. Once you do this, running `libdragon` will use the code here rather than the actual npm installation. Then you can test your changes in the libdragon project here or elsewhere on your computer.\n\nWhen you are happy with your changes, you can verify you conform to the coding standards via:\n\n```bash\nnpm run format-check\nnpm run lint-check\n```\n\nYou can auto-fix applicable errors by running `format` and `lint` scripts instead. Additionally, typescript is used as the type system. To be able to get away with transpiling the code during development, jsDoc flavor of types are used instead of inline ones. To check your types, run:\n\n```bash\nnpm run tsc\n```\n\nTo run the test suite:\n\n```bash\nnpm run test\n```\n\nThis repository uses [`semantic-release`](https://github.com/semantic-release/semantic-release) and manages releases from specially formatted commit messages. To simplify creating them you can use:\n\n```bash\nnpm run cz\n```\n\nIt will create a `semantic-release` compatible commit from your current staged changes.\n\n### Devcontainer support\n\nThe repository provides two devcontainer configurations (`development` and `libdragon`) for supported IDEs. If you have docker and a compatible IDE, you can quickly start working on this project.\nTo create your own dev container backed project, you can use the contents of the `.devcontainer` folder as reference.\n\n\u003cdetails\u003e\n  \u003csummary\u003evscode instructions\u003c/summary\u003e\n\n  - Make sure you have the [Dev container extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) installed and you fulfill its [requirements](https://code.visualstudio.com/docs/devcontainers/containers).\n  - Open command palette and run `Dev Containers: Reopen in container`.\n  - Pick `development` or `libdragon` configuration.\n  - It will prepare the container and open it in the editor.\n\u003c/details\u003e\n\n#### `development` configuration\n\nThis has everything required to develop the tool itself. Just follow \"Working on this repository\" section inside the devcontainer.\n\n\u003e [!NOTE]\n\u003e When working in this devcontainer on a Linux host, you can build and install the latest executable in `${HOME}/.local/bin` by running `npm run install-host` (in the container) to test it on your host.\n\n#### `libdragon` configuration\n\nThis is an example devcontainer setup for using the libdragon toolchain to build n64 ROMs. To start building with libdragon:\n\n- Clone this repository with `--recurse-submodules` or run `git submodule update --init` in the devcontainer.\n- Run `cd libdragon \u0026\u0026 ./build.sh \u0026\u0026 cd ..` to build and install the library.\n- Run `make bench` to build the [test bench](#local-test-bench). You'll see the rom in `src` folder.\n\nIf you setup a similar devcontainer for your project, you can immediately start building n64 ROMs using libdragon.\n\n#### Future direction\n\n- The cli is not enabled on `libdragon` devcontainer, so you cannot currently use actions like `install` or `disasm`. This is supported by the cli (via `DOCKER_CONTAINER`) but not yet enabled on the devcontainer.\n- In the devcontainer, uploading via USB is not yet implemented.\n- Error matching is not yet tested.\n- Ideally the necessary extensions should be automatically installed. This is not configured yet.\n\n## As an NPM dependency\n\nYou can install libdragon as an NPM dependency by `npm install libdragon --save` in order to use docker in your N64 projects. A `libdragon` command similar to global installation is provided that can be used in your NPM scripts as follows;\n```json\n\"scripts\": {\n    \"prepare\": \"libdragon init\"\n    \"build\": \"libdragon make\",\n    \"clean\": \"libdragon make clean\"\n}\n```\n\n## Funding\n\nIf this tool helped you, consider supporting its development by sponsoring it!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanacierdem%2Flibdragon-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanacierdem%2Flibdragon-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanacierdem%2Flibdragon-docker/lists"}