{"id":26267870,"url":"https://github.com/oslabs-beta/infernode","last_synced_at":"2025-10-13T18:25:20.956Z","repository":{"id":56799132,"uuid":"524199790","full_name":"oslabs-beta/infernode","owner":"oslabs-beta","description":"Process tracing and flame graph visualization tool for Node.js development","archived":false,"fork":false,"pushed_at":"2024-01-10T03:25:12.000Z","size":36702,"stargazers_count":46,"open_issues_count":34,"forks_count":1,"subscribers_count":3,"default_branch":"dev","last_synced_at":"2025-09-11T05:37:34.921Z","etag":null,"topics":["developer-tools","dtrace","flamegraph","javascript","nodejs","open-source","performance-analysis","performance-tuning","typescript"],"latest_commit_sha":null,"homepage":"","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/oslabs-beta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"publiccode":null,"codemeta":null},"funding":{"github":"open-source-labs","custom":["https://donorbox.org/donations-to-oslabs-inc"]}},"created_at":"2022-08-12T19:16:27.000Z","updated_at":"2025-05-04T14:35:17.000Z","dependencies_parsed_at":"2023-02-18T17:45:34.143Z","dependency_job_id":"b02e1f0e-f546-48dc-ade4-0336e124e874","html_url":"https://github.com/oslabs-beta/infernode","commit_stats":{"total_commits":183,"total_committers":11,"mean_commits":"16.636363636363637","dds":0.7213114754098361,"last_synced_commit":"37313ebc19cfbf8402c78a0a576b12ea761c1783"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/oslabs-beta/infernode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2Finfernode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2Finfernode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2Finfernode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2Finfernode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oslabs-beta","download_url":"https://codeload.github.com/oslabs-beta/infernode/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2Finfernode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279016583,"owners_count":26085850,"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-10-13T02:00:06.723Z","response_time":61,"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":["developer-tools","dtrace","flamegraph","javascript","nodejs","open-source","performance-analysis","performance-tuning","typescript"],"created_at":"2025-03-14T04:18:35.132Z","updated_at":"2025-10-13T18:25:20.940Z","avatar_url":"https://github.com/oslabs-beta.png","language":"TypeScript","readme":"# infernode\n\nA process tracing and flame graph tool for node.js development\n\n![build tests](https://github.com/oslabs-beta/infernode/actions/workflows/node.js.yml/badge.svg)\n![website deployment](https://github.com/oslabs-beta/infernode/actions/workflows/pages.yml/badge.svg)\n![publishing to npmjs.com](https://github.com/oslabs-beta/infernode/actions/workflows/publish.yml/badge.svg)\n\n[INFERNOde Website](https://www.infernode.dev)\n\n[Documentation and Features](https://www.infernode.dev/Documentation/doc2.html)\n\n[Contact the developers](mailto:team@infernode.dev)\n\n## Usage\n\n0. Ensure that your user account has sufficient permissions to perform process tracing on your system.\n\nOn Mac:\n```\necho \"$(whoami) ALL=(ALL) NOPASSWD: /usr/sbin/dtrace\" | sudo tee -a /etc/sudoers\n```\nOn Linux:\n```\necho \"kernel.perf_event_paranoid=-1\" | sudo tee -a /etc/sysctl.conf \u003e /dev/null\nsysctl -p\n```\n1. `npm install --save-dev infernode` in your Node.JS NPM project\n1. `npx infernode` to launch INFERNOde\n1. Navigate to the **Capture** page\n1. Provide the path to your app's entrypoint, relative to the top level directory of your project (e.g. `src/index.js`)\n1. Set a time limit for your capture and hit start\n1. If necessary, interact with your app to trigger the functionality you want to trace\n1. Check out the new flame graph in the sidebar\n\n## Interface\n\n\u003ca href=\"docs/images/infernode-history-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-history-page.png\"\u003e\n\u003cfigcaption\u003eView and Manage Existing Graphs\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n\u003ca href=\"docs/images/infernode-diff-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-diff-page.png\"\u003e\n\u003cfigcaption\u003eGenerate Differential Graphs\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n\u003ca href=\"docs/images/infernode-basic-capture-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-basic-capture-page.png\"\u003e\n\u003cfigcaption\u003eOne-click Captures\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n\u003ca href=\"docs/images/infernode-advanced-capture-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-advanced-capture-page.png\"\u003e\n\u003cfigcaption\u003eFlexible Capture Settings\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n\u003ca href=\"docs/images/infernode-upload-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-upload-page.png\"\u003e\n\u003cfigcaption\u003eUpload Existing `perf` Files\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n\u003ca href=\"docs/images/infernode-help-page.png\"\u003e\u003cfigure\u003e\u003cimg src=\"docs/images/thumbs/infernode-help-page.png\"\u003e\n\u003cfigcaption\u003eIn-app Help\u003c/figcaption\u003e\u003c/figure\u003e\u003c/a\u003e\n\n## Architecture\n\n[Diagrams](docs/arch-diagrams.md)\n\n### Key Dependencies\n\n#### Backend\n\n- TypeScript\n- Node.js\n- Express.js\n- SQLite3\n- Pino\n- Formidable\n\n#### Frontend\n\n- TypeScript\n- React\n- React-Router\n- React-Bootstrap\n- Axios\n\n#### CI/CD\n\n- Github Actions\n- Jest\n- Supertest\n- Semantic-Release\n- Stylelint\n- ESLint\n- Webpack\n\n\n## Developing\n\n1. Clone this repository\n1. `npm install` in the repo directory\n1. `npm run dev` to run the server with on-save recompile/reload\n\n### Additional project scripts\n\nAll scripts are accessible via `npm run \u003cscriptname\u003e`, some key scripts are:\n\n- `resetdb`: Clean out infernode's datastore for a fresh start\n- `clean`: Remove all contents of the `./dist/` directory\n- `copy-assets`:  Copy static assets from `./src/` to `./dist/`\n- `lint`:  Run linter (ESLint) against the relevant client and server source code\n- `build`: Performs `npm run prebuild`, `npm run tsc`, and `npm run webpack` sequentially, will halt if any `prebuild` steps have non-zero exit codes\n- `test`: Performs a fresh `build` and then executes all test suites\n- `start`: Starts the `node` server in production mode, access via \u003chttp://localhost:3000\u003e\n- `dev`: Starts the `node` and `webpack-dev-server` servers in development mode, both dynamically recompiling/bundling/restarting on source code changes, access via \u003chttp://localhost:8080\u003e\n\n### Express.js Global Error Handler\n\n- Invoked via `next( errObject: InfernodeError )`.\n- Takes an `InfernodeError` type object with the following mandatory properties:\n  - `message: string`: A technical error message not necessarily intended for end users\n- The `InfernodeError` object can optionally include:\n  - `userMessage: string`: A non-technical error message intended for (public) end users or API consumers\n  - `httpStatus: number`: A more specific HTTP status code to use for the response\n  - `controller: string`: The Express middleware controller/function/method/operation that caused the error\n- Logs the entire error object + the request method and path to the server's console.\n- The response status will be set to 500 by default if an `errObject.httpStatus` code is not provided.\n- In development mode, entire error object, request method, and request path will be sent in the HTTP response body as JSON.\n- In production mode, only the errObject.userMessage will be sent in the HTTP response body as JSON.\n\n## Contributing\n\nPlease see [CONTRIBUTING.md](CONTRIBUTING.md) for standards and process related to contributing to this project.\n","funding_links":["https://github.com/sponsors/open-source-labs","https://donorbox.org/donations-to-oslabs-inc"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslabs-beta%2Finfernode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foslabs-beta%2Finfernode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslabs-beta%2Finfernode/lists"}