{"id":16659371,"url":"https://github.com/dundalek/dinodoc","last_synced_at":"2025-03-21T16:32:28.664Z","repository":{"id":217700019,"uuid":"742389504","full_name":"dundalek/dinodoc","owner":"dundalek","description":"Docusaurus-powered documentation system for Clojure and other languages","archived":false,"fork":false,"pushed_at":"2024-04-12T09:35:22.000Z","size":972,"stargazers_count":24,"open_issues_count":10,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-14T02:21:22.629Z","etag":null,"topics":["clojure","docs-as-code","docs-generator","documentation","docusaurus","living-documentation"],"latest_commit_sha":null,"homepage":"https://dinodoc.pages.dev","language":"Clojure","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/dundalek.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2024-01-12T11:16:21.000Z","updated_at":"2024-04-16T18:26:40.338Z","dependencies_parsed_at":"2024-03-05T13:48:35.269Z","dependency_job_id":"1a57092a-dc23-45fe-84ed-f07ada6ad931","html_url":"https://github.com/dundalek/dinodoc","commit_stats":null,"previous_names":["dundalek/dinodoc"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dundalek%2Fdinodoc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dundalek%2Fdinodoc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dundalek%2Fdinodoc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dundalek%2Fdinodoc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dundalek","download_url":"https://codeload.github.com/dundalek/dinodoc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244829586,"owners_count":20517335,"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":["clojure","docs-as-code","docs-generator","documentation","docusaurus","living-documentation"],"created_at":"2024-10-12T10:24:51.166Z","updated_at":"2025-03-21T16:32:28.261Z","avatar_url":"https://github.com/dundalek.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dinodoc\n\nDinodoc is a documentation tool that generates API documentation from source code with linked markdown articles.\nIt aims to enable creating a unified documentation hub within an organization.\n\nDinodoc is designed to generate documentation from multiple sources.\nIt supports documenting multiple projects in a monorepo or across repos,\nand projects written in other languages besides Clojure.\n\n## Features\n\nIt works on top of [Docusaurus](https://docusaurus.io/) which provides:\n\n- Modern look with Light/Dark theme\n- Include API documentation for non-Clojure languages like [TypeScript](https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/packages/docusaurus-plugin-typedoc)\n- Document HTTP APIs of services with [OpenAPI](https://github.com/rohit-gohri/redocusaurus)\n- Additional features like Search, Diagrams, Analytics, Blog\n- Large ecosystem of [community plugins](https://docusaurus.io/community/resources)\n- Complementary tools like [CMS intergration](https://github.com/tinacms/tinasaurus) to make writing docs easier for non-developers\n\n## Examples\n\nAPI documentation:\n\n- [Clojure](https://dinodoc.pages.dev/examples/promesa/) ([source](https://github.com/dundalek/dinodoc/blob/main/examples/promesa/doc.clj))\n  - single project (Promesa) with curated doc pages and API docs\n  - compare with [codox](https://funcool.github.io/promesa/latest/) and [cljdoc](https://cljdoc.org/d/funcool/promesa/11.0.678/)\n- [TypeScript](https://dinodoc.pages.dev/examples/ts/) ([source](https://github.com/dundalek/dinodoc/tree/main/examples/ts))\n  - including documentation for projects written in other languages within a single site\n  - for example TypeScript using [docusaurus-plugin-typedoc](https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/packages/docusaurus-plugin-typedoc)\n- [Java](https://dinodoc.pages.dev/examples/java/) using Dokka ([source](https://github.com/dundalek/dinodoc/tree/main/examples/java))\n  - using [Dokka](https://dinodoc.pages.dev/docs/dokka/) engine\n- [Java](https://dinodoc.pages.dev/examples/javadoc/) using Javadoc ([source](https://github.com/dundalek/dinodoc/tree/main/examples/javadoc))\n  - linking to Javadoc-generated pages\n- [Kotlin](https://dinodoc.pages.dev/examples/kotlin/) ([source](https://github.com/dundalek/dinodoc/tree/main/examples/kotlin))\n  - using [Dokka](https://dinodoc.pages.dev/docs/dokka/) engine\n- [Rust](https://dinodoc.pages.dev/examples/rust/) ([source](https://github.com/dundalek/dinodoc/tree/main/examples/rust))\n  - based on Rustdoc\n- [HTTP API](https://dinodoc.pages.dev/examples/openapi/petstore/add-pet) ([docs](https://dinodoc.pages.dev/docs/openapi/))\n  - render documentation using [OpenAPI](https://www.openapis.org/) spec\n  - extract and render API spec from code when using [Reitit](https://github.com/metosin/reitit) routes\n\nArchitecture:\n- [Structurizr](https://dinodoc.pages.dev/examples/structurizr/big-bank-plc/) ([docs](https://dinodoc.pages.dev/docs/structurizr/))\n  - architecture documentation with diagrams based on the [C4 model](https://c4model.com/)\n- [ContextMapper](https://dinodoc.pages.dev/examples/contextmapper/insurance-map/) ([source](https://github.com/dundalek/dinodoc/tree/main/examples/contextmapper))\n  - using Domain Driven Design (DDD) to map Bounded Contexts \n- [Glossary](https://dinodoc.pages.dev/examples/contextive/glossary/University/) of terms ([source](https://github.com/dundalek/dinodoc/tree/main/examples/contextive))\n  - use [Contextive](https://github.com/dev-cycles/contextive) definition format to maintain Ubiquitous Language\n\nDiagrams:\n\n- [DB Schema](https://dinodoc.pages.dev/examples/dbschema/chinook/) ([docs](https://dinodoc.pages.dev/docs/dbschema/))\n  - document tables and visualize schema of relational databases\n- [Statecharts](https://dinodoc.pages.dev/examples/statecharts/) ([docs](https://dinodoc.pages.dev/docs/statecharts/))\n  - state machines and [statecharts](https://statecharts.dev/) extracted from source rendered as diagrams\n\nCombining mono and multi repos:\n\n- [Reitit](https://dinodoc.pages.dev/examples/reitit/) ([source](https://github.com/dundalek/dinodoc/blob/main/examples/reitit/doc.clj))\n  - monorepo with multiple modules\n  - API docs combined into a single namespace hierarchy\n- [Polylith](https://dinodoc.pages.dev/examples/polylith/) ([source](https://github.com/dundalek/dinodoc/blob/main/examples/polylith/doc.clj))\n   - monorepo with components\n   - API docs rendered separately for each component\n- [Ring](https://dinodoc.pages.dev/examples/ring/) ([source](https://github.com/dundalek/dinodoc/blob/main/examples/ring/doc.clj))\n  - mix of monorepo and multiple repos\n  - modules in a main monorepo and additional modules in separate repositories\n  - API docs rendered separately under each module\n\n## Usage\n\n1. Create a new [Docusaurus](https://docusaurus.io/docs) site:  \n   ```sh\n   npx create-docusaurus@latest my-website classic\n   ```\n2. Add alias with dependencies to `deps.edn`:\n   ```clojure\n   {:aliases\n    {:doc {:extra-deps {io.github.dundalek/dinodoc {:git/tag \"v0.3.0\" :git/sha \"9d5e861\"}\n           :main-opts [\"doc.clj\"]}}}\n   ```\n3. Create the script to generate docs and save as `doc.clj`:  \n   Defaults are to use source files in `src/` to generate API docs and `doc/` for markdown pages.\n   ```clojure\n   (ns doc\n     (:require [dinodoc.api :as dinodoc]))\n\n   (dinodoc/generate\n    {:inputs [\".\"]\n     :output-path \"docs\"})\n\n   (shutdown-agents)\n   ```\n4. Generate markdown API docs:  \n   `clojure -M:doc`\n5. Render the site:  \n   `npm start` to start dev-server in watch mode  \n   `npm run build` to build the static site for deployment\n\n## Documentation\n\n- [Guide](https://dinodoc.pages.dev/docs/guide) describes options and configuration in more detail.\n- [API Reference](https://dinodoc.pages.dev/docs/api/dinodoc/api/)\n\n## Status\n\nAlpha, there are issues to iron out and improvements to be made.\nThe main points at this stage are:\n\n- Figure out the useful feature set.\n- Possibly try out some experimental features with good leverage based on Living Documentation principles.\n- Settle on good defaults that cover most common uses and figure out minimal required configuration options needed for customization.\n\n## Credits\n\n- Dinodoc started as a fork of [quickdoc](https://github.com/borkdude/quickdoc) and leverages [clj-kondo](https://github.com/clj-kondo/clj-kondo) for code analysis.\n- Inspired by prior work done by [codox](https://github.com/weavejester/codox) and [cljdoc](https://github.com/cljdoc/cljdoc).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdundalek%2Fdinodoc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdundalek%2Fdinodoc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdundalek%2Fdinodoc/lists"}