{"id":18437869,"url":"https://github.com/zilliqa/zilliqa-developer","last_synced_at":"2026-04-23T13:01:23.755Z","repository":{"id":63998514,"uuid":"562973284","full_name":"Zilliqa/zilliqa-developer","owner":"Zilliqa","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-16T16:54:10.000Z","size":77016,"stargazers_count":2,"open_issues_count":67,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-16T18:34:44.191Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zilliqa.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":"CODEOWNERS","security":"SECURITY.md","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":"2022-11-07T16:36:38.000Z","updated_at":"2026-03-03T10:23:43.000Z","dependencies_parsed_at":"2023-10-13T06:30:52.876Z","dependency_job_id":"4e73620a-7969-4019-a644-94b83e75a740","html_url":"https://github.com/Zilliqa/zilliqa-developer","commit_stats":null,"previous_names":[],"tags_count":97,"template":false,"template_full_name":null,"purl":"pkg:github/Zilliqa/zilliqa-developer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fzilliqa-developer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fzilliqa-developer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fzilliqa-developer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fzilliqa-developer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zilliqa","download_url":"https://codeload.github.com/Zilliqa/zilliqa-developer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zilliqa%2Fzilliqa-developer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32181374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T11:42:27.955Z","status":"ssl_error","status_checked_at":"2026-04-23T11:42:18.877Z","response_time":53,"last_error":"SSL_read: 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":"2024-11-06T06:16:30.357Z","updated_at":"2026-04-23T13:01:23.701Z","avatar_url":"https://github.com/Zilliqa.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zilliqa Developer Tools \u0026 Documentation\n\n`zilliqa-developer` is a Bazel based monorepo that contains SDKs, documentations\nand products used to develop solutions based on the Zilliqa ecosystem.\n\nThis repository is organised as follows:\n\n- `docs/`: Pure documentation in `md` or `mdx` format.\n- `examples/`: Reference material.\n- `zilliqa/`: APIs and libraries (JS SDK, Python SDK, etc/)\n- `products/`: Software products(`ceres`, `devex`, `neosavant`, `oil` etc.)\n\nDetailed documentation of the Zilliqa ecosystem is found in [docs/](docs/).\n\nProduct targets contained in this repository are released as follows: TODO(tfr):\nfollowing table is a place holder:\n\n| Target                        | Release page       | Notes             |\n| ----------------------------- | ------------------ | ----------------- |\n| `//products/developer-portal` | portal.zilliqa.com | Contains `//docs` |\n| `//products/dev-wallet`       | wallet.zilliqa.com |                   |\n| `//products/devex`            | devex.zilliqa.com  |                   |\n| `//products/ceres`            | zilliqa.com/apps   |                   |\n| `//products/neo-savant`       | ide.zilliqa.com    |                   |\n\n## Building\n\nTo disable our git queries on build, set the `DISABLE_WORKSPACE_STATUS`\nenvironment variable. This loses version information, but speeds builds and\nstops you having to touch your security key on every bazel run.\n\n### Prerequisites\n\nThis repository is based on the [Bazel build tool](https://bazel.build/). Bazel\nbuilds are mostly self-contained because Bazel downloads dependencies and\narrange them in your workspace. The only external tools we rely on is\n\n- Bazelisk, ibazel or Bazel 5.2\n- Pnpm / Npm / Yarn\n- Python 3.6 or newer\n- Trunk 1.0 or newer\n\nWhile the repository can be built directly with Bazel, we recommend that you\neither use Bazelisk or ibazel as these will manage the Bazel version used. The\nfollowing guide assumes you will be using Bazelisk.\n\nOn most platforms you can install Bazelisk using NPM:\n\n```sh\nnpm install -g @bazel/bazelisk\n```\n\nOn macOS, Bazelisk is also available using `brew`:\n\n```sh\nbrew install bazelisk\n```\n\nLikewise on Windows, it can be installed using `choco`:\n\n```sh\nchoco install bazelisk\n```\n\nOnce installed, verify that Bazelisk is correctly installed by running\n\n```sh\nbazelisk --help\n```\n\nIn case of issues, please refer to the\n[official documentation](https://www.npmjs.com/package/@bazel/bazelisk).\n\n### Building\n\nTo build a target, run\n\n```sh\nbazelisk build [target_name]\n```\n\nwhere `target_name` is the target you want to build. Targets can be found in the\nrespective `BUILD` files and we will also briefly cover how to find them from\nthe commandline in the [Listing targets](#listing-targets) section.\n\nAs a concrete example, you can build the all the Zilliqa Javascript SDK targets\nas:\n\n```sh\nbazelisk build //zilliqa/js/...\n```\n\nor you can pick out a specific target as\n\n```sh\nbazelisk build //zilliqa/js/util:pkg\n```\n\n#### Building documentation\n\nTo build and run the docker image for the documentation locally, run\n\n```sh\nibazel run //products/developer-portal:dev-image\n```\n\nThis will start a server on port `8000`. If `ibazel` is used, the Docker image\nwill recompile everytime you make a file change to anything in the dependency\nlist.\n\nYou can also run the main server on as\n\n```sh\nibazel run //products/developer-portal:image\n```\n\nwhich is served on port `80`.\n\n#### Building libraries\n\n#### Building and publishing `zilliqa-js`\n\nCheckout out the repository. First ensure that tests are passing:\n\n```sh\nbazelisk test //zilliqa/js/...\n```\n\nNext navigate to the `zilliqa/js` folder. If you have not done so, install all\ndependencies:\n\n```sh\npnpm i\n```\n\nThen build all libraries:\n\n```sh\npnpm -r build\n```\n\nFinally, publish:\n\n```sh\npnpm -r publish\n```\n\nAdd `--dry-run` in the event you want to test publish without publishing\nanything.\n\n#### Building and running Docker images\n\nFor the purpose of building Docker images, you do not need Docker installed\nwhereas if you wish to run the generated image, you do need Docker.\n\nTo build the image execute:\n\n```sh\nbazelisk build //products/isolated-server:latest\n```\n\nTo populate the image to the local Docker registry:\n\n```sh\nbazelisk run //products/isolated-server:latest\n```\n\nYou can now verify that the image is in your local registry by running:\n\n```sh\ndocker images | grep products/isolated-server:latest\n```\n\nTo run the image, you need Docker installed\n\n```sh\ndocker run -it bazel/products/isolated-server:latest\n```\n\n### Running executable targets\n\nBazel can run an executable target directly from the build tool. This is done as\n\n```sh\nbazelisk run [target_name]\n```\n\nThis can be used while developing products.\n\n### Testing\n\nTesting follows the same pattern as described above, but using the `test`\ncommand instead:\n\n```sh\nbazelisk test [target_name]\n```\n\nSimilar to when building, you can request to run multiple tests:\n\n```sh\nbazelisk test //zilliqa/js/...\n```\n\nThe above command would run all tests related to the Zilliqa Javascript SDK.\nTODO(tfr): No tests enabled yet.\n\n### Code formatting and style checking\n\nTo maintain a consistent style accross the repository we use\n[trunk.io](https://trunk.io) to manage various linters and code formatters.\n\nTo check your code:\n\n```sh\ntrunk check\n```\n\nTo format your code where possible:\n\n```sh\ntrunk fmt\n```\n\nThis step is enforced by CI.\n\n### Listing targets\n\nOften it is useful to list targets and/or dependencies of targets. Here we\nprovide a few To list all targets:\n\n```sh\nbazelisk query \"//...\"\n```\n\nTo list targets in a subfolder:\n\n```sh\nbazelisk query \"//zilliqa/...\"\n```\n\nTo find the dependencies of at target\n\n```sh\nbazelisk query \"deps(//zilliqa/js/util:pkg)\"\n```\n\n## Useful notes on Bazel\n\nTo get verbose error messages add `--verbose_failures`.\n\nIf you experience issues with Bazel determining relevant toolchain for C++, try\nadding the argument\n`--toolchain_resolution_debug=@bazel_tools//tools/cpp:toolchain_type` to help\ndebug.\n\nIf you experience that it is difficult to understand what folder structure Bazel\nbuilds, add `--sandbox_debug`\n\nTo get all output from tests, use `--test_output=all`\n\nSometimes while debugging it is helpful to clean all to aviod artefacts from\nprevious builds: `bazel clean --expunge`\n\nTo get information about your current Bazel setup run `bazelisk info`.\n\nIf you get bored with bazel constantly asking you for your password/to\nauthenticate via your key, add `--workspace_status_command=echo` to your command\nline. Use `DISABLE_WORKSPACE_STATUS` with `ibazel` (since `ibazel` doesn't pass\ncommand line options on to `bazel`).\n\n## Reasoning Behind Repository Organisation\n\nThis repository is organised as follows:\n\n- `docs/`: Pure documentation in `md` or `mdx` format.\n- `exmaples/`: Reference material.\n- `zilliqa/`: APIs and libraries (JS API, GO API, etc/)\n- `products/`: Software products(`ceres`, `devex`, `neosavant`, `oil` etc.)\n\nThe idea with keeping it all in one repository is as follows:\n\n1. When someone would make a breaking change to the JS Api which would break\n   `ceres`, `devex` and two API examples this would be caught before the change\n   makes it into `main`, and whoever responsbile for the change would also be\n   responsible for updating all broken products as part of that update.\n\n2. The documentation and examples are kept closer to the source code hence\n   making it possible to request an update of docs during the review of a new\n   code piece (as opposed to create a ticket on the backlog, which is under the\n   danger of never being addressed)\n\n3. For our different components, it would be substantially easier to make sure\n   that all are using the same version of a given library. For instance, if the\n   JS API is depending on `BN.js` version 4.11.8 but the `devex` product uses\n   version 5.2.1, this possibly leads to incompatibility between `devex` and the\n   API component. By keeping the two together, we can ensure that releases are\n   done simultaneously and that they rely on the same library version to avoid\n   tedious bugs that are hard to find..\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzilliqa%2Fzilliqa-developer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzilliqa%2Fzilliqa-developer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzilliqa%2Fzilliqa-developer/lists"}