https://miro.medium.com/v2/resize:fit:700/1*c8u2wl9VOGwW9Z5XgyCbDg.png

Docgen allows developers go from their codebase to a beautiful and interactive documentation in a few seconds.

It’s a program that extracts documentation for a Solidity project and generates an interactive website from it using Docusaurus.

Introduction

@bonadocs/docgen is based on solidity-docgen. If you already use solidity-docgen, you already know how to use @bonadocs/docgen. Hmmm, maybe 90% of it. The two main differences are:

The markdown output is fully configurable through Handlebars templates, but the default templates should do a good job of displaying all of the information in the source code in Markdown format. If you don’t want to generate a website, the generated Markdown files can be used with a static site generator such as Docusaurus, Vuepress, MkDocs, Jekyll (GitHub Pages), etc., in order to publish a documentation website.

Widget?

The widgets are interactive components that allow users to interact with the contracts directly from the documentation website. Widgets run simulations by default and enable developers to test without paying gas fees. Developers love to learn by doing, and this is the perfect way to let them do just that. The widgets are generated using @bonadocs/widget.

Note: widgets will only be generated for contracts with their deployment addresses specified. Refer to the configuration below

Usage

Install @bonadocs/docgen from npm.

Hardhat

Include the plugin in your Hardhat configuration.

// hardhat.config.ts
+import '@bonadocs/docgen';
export default {
+  docgen: {
+    projectName: 'Your Protocol Name', // optional, a placeholder name will be used if omitted
+    projectDescription: 'An awesome web3 protocol.', // optional, a placeholder description will be used if omitted
+    outputDir: "./site",
+    deploymentAddresses: { // optional. If you want to generate widgets for deployed contracts
+      FirstContractName: [
+        {
+          chainId: 1, // mainnet
+          address: '0x...',
+        },
+        {
+          chainId: 42161, // arbitrum
+          address: '0x...',
+        },
+      ],
+      SecondContractName: [
+        {
+          chainId: 1, // mainnet
+          address: '0x...',
+        },
+        {
+          chainId: 42161, // arbitrum
+          address: '0x...',
+        },
+      ],
+    },
+  }, // if necessary to customize config
};

Then run with npx hardhat docgen.

This creates a new a new folder called site. Next, run this command to go into the site folder.