{"id":26558080,"url":"https://github.com/andrewwalsh/demystify","last_synced_at":"2025-08-13T02:46:43.473Z","repository":{"id":282223267,"uuid":"947877868","full_name":"AndrewWalsh/demystify","owner":"AndrewWalsh","description":"Automated documentation for APIs","archived":false,"fork":false,"pushed_at":"2025-04-03T13:13:35.000Z","size":3575,"stargazers_count":21,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T14:25:34.759Z","etag":null,"topics":["analysis","api","browser-extension","cli","desktop-app","documentation","generator","http","library","network","openapi","openapi3","openapi31","proxy","sniffer","specification","traffic","webapp"],"latest_commit_sha":null,"homepage":"https://andrewwalsh.github.io/demystify/","language":"TypeScript","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/AndrewWalsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2025-03-13T11:44:14.000Z","updated_at":"2025-04-03T13:13:39.000Z","dependencies_parsed_at":"2025-04-03T14:23:51.268Z","dependency_job_id":"54c6bcaa-7231-4b7a-8f4d-ccd84fe3847a","html_url":"https://github.com/AndrewWalsh/demystify","commit_stats":null,"previous_names":["andrewwalsh/demystify"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/AndrewWalsh/demystify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndrewWalsh%2Fdemystify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndrewWalsh%2Fdemystify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndrewWalsh%2Fdemystify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndrewWalsh%2Fdemystify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndrewWalsh","download_url":"https://codeload.github.com/AndrewWalsh/demystify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndrewWalsh%2Fdemystify/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270170408,"owners_count":24539358,"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","status":"online","status_checked_at":"2025-08-13T02:00:09.904Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["analysis","api","browser-extension","cli","desktop-app","documentation","generator","http","library","network","openapi","openapi3","openapi31","proxy","sniffer","specification","traffic","webapp"],"created_at":"2025-03-22T12:22:09.092Z","updated_at":"2025-08-13T02:46:43.279Z","avatar_url":"https://github.com/AndrewWalsh.png","language":"TypeScript","readme":"\u003ca id=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003c!-- Ref: https://inttter.github.io/md-badges --\u003e\n\u003c!-- Ref: https://simpleicons.org             --\u003e\n\n[![Download for Windows][windows-shield]][windows-url]\n[![Download for Mac][mac-shield]][mac-url]\n[![Download for Linux][linux-shield]][linux-url]\n\n[![Download in the Chrome Web Store][chrome-shield]][chrome-url]\n[![Download in the Firefox Add-on Store][firefox-shield]][firefox-url]\n\u003c!-- [![Download in the Edge Add-on Store][edge-shield]][edge-url] --\u003e\n\n[![Download the npm library][library-shield]][library-url]\n[![Use the CLI tool][cli-shield]][cli-url]\n\n[![MIT License][license-shield]][license-url]\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"example.com\"\u003e\n    \u003cimg src=\"./assets/logo.svg\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003eDemystify\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Generate OpenAPI Specifications in Real Time for Any API\n    \u003cbr /\u003e\n    \u003ca href=\"https://www.awalsh.io/projects/demystify\"\u003e\u003cstrong\u003eRead more about how it works »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://andrewwalsh.github.io/demystify/\"\u003eView Demo\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/AndrewWalsh/demystify/issues/new?labels=bug\"\u003eReport Bug\u003c/a\u003e\n    \u0026middot;\n    \u003ca href=\"https://github.com/AndrewWalsh/demystify/issues/new?labels=enhancement\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n          \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\n        \u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n          \u003ca href=\"#desktop\"\u003eDesktop App\u003c/a\u003e\n          \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"#mac\"\u003eMac\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#linux\"\u003eLinux\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#windows\"\u003eWindows\u003c/a\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\n          \u003ca href=\"#browser-extension\"\u003eBrowser Extension\u003ca\u003e\n          \u003cul\u003e\n            \u003cli\u003e\u003ca href=\"#chrome\"\u003eChrome\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#firefox\"\u003eFirefox\u003c/a\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#cli\"\u003eCLI\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#library\"\u003eLibrary\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#screenshots\"\u003eScreenshots\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\nhttps://github.com/user-attachments/assets/5fdd075f-6191-4714-8fea-22b81c6459a2\n\nDemystify is a suite of tools designed to help understand API behaviour. It generates accurate OpenAPI 3.1 specifications in real time from live network traffic or HAR files. The desktop app achieves this with a built-in proxy, while the browser extension works automatically for all requests in a given tab. The CLI tool works directly on files, and the library can be used in other contexts such as middleware to programmatically generate API specifications.\n\nIt identifies path parameters automatically without manual intervention. Data in the generated specification reflects all observed information across multiple status codes and mime types for request and response headers, bodies, query parameters, path parameters, and cookies for each endpoint.\n\n### Features\n\n- Everything in [OpenAPI DevTools](https://github.com/AndrewWalsh/openapi-devtools)\n- Automated identification of [path parameters](https://www.abstractapi.com/guides/api-glossary/path-parameters)\n- A desktop app that uses a proxy to generate specifications in real time (e.g. a real time version of [mitm2swagger](https://github.com/alufers/mitmproxy2swagger) that supports OpenAPI 3.1)\n- A [website](https://andrewwalsh.github.io/demystify/) and [command line tool](https://www.npmjs.com/package/demystify) that generates OpenAPI specifications from HAR files (e.g. [har-to-openapi](https://github.com/jonluca/har-to-openapi) or [openapi-autospec](https://github.com/Adawg4/openapi-autospec))\n- A [library](https://www.npmjs.com/package/demystify-lib) that learns from network traffic in real time, discovers API topography, and can generate a representation of an API such as the OpenAPI standard\n- An integrated API client that populates automatically and can generate code such as curl commands via [Scalar](https://github.com/scalar/scalar)\n- The capacity to generate different versions of OpenAPI or other HTTP-based standards such as GraphQL\n\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\nDemystify is available in a variety of formats on various platforms.\n\n### Desktop\n\nThe desktop app has a built in proxy that captures network traffic and generates OpenAPI specifications in real time. It is designed to be simple and quick to use, and specifies a local port to listen to and a local or remote host to forward to.\n\n#### Mac\n\n[![Download for Mac][mac-shield]][mac-url]\n\n#### Linux\n\n[![Download for Linux][linux-shield]][linux-url]\n\n#### Windows\n\n[![Download for Windows][windows-shield]][windows-url]\n\n### Browser Extension\n\nThe browser extension can be accessed in the DevTools of your chosen browser. While the tool is open it will record all network requests in the same tab and generate OpenAPI specifications in real time from network traffic.\n\n#### Chrome\n\n[![Download in the Chrome Web Store][chrome-shield]][chrome-url]\n\nLocate the tool in [Chrome DevTools](https://developer.chrome.com/docs/devtools).\n\n#### Firefox\n\n[![Download in the Firefox Add-on Store][firefox-shield]][firefox-url]\n\nLocate the tool in [Firefox DevTools](https://firefox-source-docs.mozilla.org/devtools-user/).\n\n### CLI\n\n[![Use the CLI tool][cli-shield]][cli-url]\n\n```sh\nnpx demystify --input \u003csomefile.har\u003e\n```\n\n```\nUsage: demystify [options]\n\nExample: demystify --input ./example.har\n\nOptions:\n  -h, --help                 Show help information\n  -i, --input  \u003cstring\u003e      A path to a HTTP Archive file (HAR)\n  -s, --stdout \u003cboolean\u003e     Optional: when \"true\", write a JSON array to stdout instead of writing files\n\nThis command writes OpenAPI 3.1 specifications to the current directory\nNames of these files follow the convention {host}.{type}.json\n\nExample host: api.example.com\nExample type: openapi\n```\n\n### Library\n\n[![Download the npm library][library-shield]][library-url]\n\n```sh\nnpm install demystify-lib\n```\n\n```typescript\nimport { Representor } from \"demystify-lib\";\n// Instantiate the representor\n// Which \"represents\" an API in a particular way, such as OpenAPI or GraphQL\nconst representor = new Representor();\n// Call upsert with a valid HAR entry to add it to the representor\n// Repeat as many times as desired\nrepresentor.upsert(/* harEntry */);\n// Call generate on the rest property of representor to generate OpenAPI documents\nconst doc = representor.rest.generate();\n```\n\nSee test files for more information on usage.\n\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- SCREENSHOTS --\u003e\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cdiv align=\"center\"\u003e\n    \u003cimg\n      src=\"./assets/2_mainmenu.png\"\n      alt=\"some paths in the openapi specification, including one that has been parameterised\" width=\"400\"\u003e\n    \u003cp\u003eWatch live network traffic or a HAR file become API specifications\u003cbr/\u003e that update in real time in response to new requests\u003c/p\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\n\n1. Fork the Project\n2. Install and build `npm i \u0026\u0026 npm run build`\n3. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n4. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n5. Test your changes, e.g. by loading the browser extension with `npm run dev` or validating the build in `apps/browser/.output`\n6. Push to the Branch (`git push origin feature/AmazingFeature`)\n7. Open a Pull Request\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the MIT License. See `LICENSE.txt` for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\u003c!-- License --\u003e\n[license-url]: https://github.com/AndrewWalsh/demystify/blob/main/LICENSE.txt\n[license-shield]: https://img.shields.io/github/license/AndrewWalsh/demystify\n\u003c!-- Browser --\u003e\n[chrome-url]: https://chromewebstore.google.com/detail/demystify-browser/kndebpfokhpnobjefobnfcidacfannii?authuser=0\u0026hl=en\n[chrome-shield]: https://img.shields.io/badge/Google%20Chrome-4285F4?logo=GoogleChrome\u0026logoColor=white\n[firefox-url]: https://addons.mozilla.org/en-US/firefox/addon/demystify\n[firefox-shield]: https://img.shields.io/badge/Firefox-FF7139?logo=FirefoxBrowser\u0026logoColor=white\n[edge-url]: /\n[edge-shield]: https://img.shields.io/badge/Edge-0078d7?logo=e\u0026logoColor=white\n\u003c!-- Desktop --\u003e\n[mac-url]: https://github.com/AndrewWalsh/demystify/releases\n[mac-shield]: https://img.shields.io/badge/macOS-000000?logo=apple\u0026logoColor=F0F0F0\n[linux-url]: https://github.com/AndrewWalsh/demystify/releases\n[linux-shield]: https://img.shields.io/badge/Linux-FCC624?logo=linux\u0026logoColor=black\n[windows-url]: https://github.com/AndrewWalsh/demystify/releases\n[windows-shield]: https://custom-icon-badges.demolab.com/badge/Windows-0078D6?logo=windows11\u0026logoColor=white\n\u003c!-- Library --\u003e\n[library-url]: https://www.npmjs.com/package/demystify-lib\n[library-shield]: https://img.shields.io/badge/npm-CB3837?logo=npm\u0026logoColor=fff\n\u003c!-- CLI --\u003e\n[cli-url]: https://www.npmjs.com/package/demystify\n[cli-shield]: https://img.shields.io/badge/npx-6DA55F?logo=iTerm2\u0026logoColor=fff\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewwalsh%2Fdemystify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewwalsh%2Fdemystify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewwalsh%2Fdemystify/lists"}