{"id":19340205,"url":"https://github.com/flowbased/fbp-manifest","last_synced_at":"2025-07-16T19:32:00.069Z","repository":{"id":5870953,"uuid":"54129083","full_name":"flowbased/fbp-manifest","owner":"flowbased","description":"Flow-Based Programming Manifest tools","archived":false,"fork":false,"pushed_at":"2023-01-16T00:12:03.000Z","size":228,"stargazers_count":8,"open_issues_count":9,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-16T23:29:02.725Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flowbased.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-17T15:24:44.000Z","updated_at":"2021-07-26T23:05:43.000Z","dependencies_parsed_at":"2023-01-13T13:44:03.946Z","dependency_job_id":null,"html_url":"https://github.com/flowbased/fbp-manifest","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/flowbased/fbp-manifest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flowbased%2Ffbp-manifest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flowbased%2Ffbp-manifest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flowbased%2Ffbp-manifest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flowbased%2Ffbp-manifest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flowbased","download_url":"https://codeload.github.com/flowbased/fbp-manifest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flowbased%2Ffbp-manifest/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265534547,"owners_count":23783850,"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":[],"created_at":"2024-11-10T03:25:38.690Z","updated_at":"2025-07-16T19:32:00.053Z","avatar_url":"https://github.com/flowbased.png","language":"JavaScript","readme":"Flow-Based Programming Manifest Tools\n=====================================\n\nThis repository provides a schema for Flow-Based Programming manifest (`fbp.json`) files, as well as tools for populating and validating them. The purpose of FBP manifest files is to provide a platform-agnostic registry of flow-based components available in a project.\n\nManifest files can be used by the FBP runtimes themselves for component loading, and is also useful for development tools like [Flowhub](https://flowhub.io) or [DrawFBP](https://github.com/jpaulm/drawfbp).\n\n## Status\n\nUsed in production with NoFlo, both for Node.js and for [producing browser builds](https://github.com/noflo/noflo-component-loader).\n\n## Tools\n\n* `fbp-manifest-list`: Discover available components and list them\n* `fbp-manifest-deps`: Produce a manifest consisting only of dependencies of a given component\n* `fbp-manifest-stats`: Show component reuse statistics for a project\n* `fbp-manifest-validate`: Validate a FBP manifest file against the schema\n\n## Runtime support\n\nFBP Manifest has been designed to have a plugin architecture where the developers of different flow-based runtimes can add support for their system. See [src/runtimes](https://github.com/flowbased/fbp-manifest/tree/master/src/runtimes) for how to do this. Runtimes can of course also just implement `fbp.json` generation and consumption on their own, and merely utilize the JSON schemas from this project to validate their structure.\n\nCurrently supported FBP runtimes are:\n\n* [NoFlo](http://noflojs.org)\n* [MsgFlo](https://github.com/msgflo/msgflo)\n\n## Manifest structure\n\nFBP manifests consist of the following information:\n\n* `version`: version of the manifest specification, currently `1`\n* `modules`: array of module definitions\n* `main`: (optional) main component definition for running the project\n\nThe modules are objects with the following:\n\n* `name`: name of the module\n* `runtime`: runtime the module is for, for example `noflo-nodejs`\n* `base`: base directory path of the module, relative to project root\n* `components`: array of components contained in the module\n* `description`: (optional) human-readable description for the module\n* `icon`: (optional) default icon for components of the module, following [Font Awesome](http://fontawesome.io/icons/) naming conventions\n\nModules supporting multiple runtimes can appear multiple times in a manifest, once per each supported runtime. For example a NoFlo module that has some common components, and specific components for Node.js and browsers may have three entries with specific runtimes: `noflo`, `noflo-nodejs`, and `noflo-browser`. A manifest can contain modules for an arbitrary number of different runtimes.\n\nComponents are objects with the following:\n\n* `name`: name of the component\n* `path`: path used for executing the component. For example a Node.js require path or Java class path\n* `exec`: command used for starting an instance of the component for components that are standalone processes\n* `elementary`: boolean on whether the component is elementary (code) or not (graph)\n* `source`: (optional) path to the source code of the component, in case it differs from the component path\n* `tests`: (optional) path to the test suite of the component, typically pointing to a [fbp-spec](https://github.com/flowbased/fbp-spec) file\n* `inports`: (optional) array of inport definitions for the component\n* `outports`: (optional) array of outport definitions for the component\n\nEach component needs to provide at minimum the information the runtime needs to run it. Additionally it can provide metadata usable for flow-based programming tools like a ports listing. Either `path` or `exec` needs to be provided.\n\nThe full manifest structure can be found in the [schema](https://github.com/flowbased/fbp-manifest/tree/master/schemata). Manifest files can be validated against the JSON schema or with the `fbp-manifest-validate` tool.\n\n### Extending\n\nIt is possible to extend the manifest files with custom runtime-specific information. To do this, place the custom values under a key named after the runtime they're for. So, for example NoFlo's custom information about a component would go under a `noflo` key:\n\n```json\n{\n  \"name\": \"Merge\",\n  \"path\": \"components/Merge.js\",\n  \"source\": \"components/Merge.coffee\",\n  \"elementary\": true,\n  \"noflo\": {\n    \"async\": false\n  }\n}\n```\n\n## Background\n\n* [FBP Protocol: component](http://noflojs.org/documentation/protocol/#component)\n* [NoFlo issue 247: FBP project manifest](https://github.com/noflo/noflo/issues/247)\n* [FBP Glossary](http://www.jpaulmorrison.com/fbp/gloss.htm)\n\n## Changes\n\n* 0.3.1 (2020-12-16)\n  - The package now ships with TypeScript declarations\n* 0.3.0 (2020-12-16)\n  - Ported from callbacks to Promises\n* 0.2.7 (2020-12-01)\n  - TypeScript definition files (`.d.ts`) are not considered as components\n* 0.2.6 (2020-09-23)\n  - If there are multiple spec files for a module, the fbp-spec file will be used by fbp-manifest\n* 0.2.5 (2020-09-23)\n  - Added support for populating `tests` for each module\n* 0.2.4 (2020-09-17)\n  - Fixed a minor bug with collecting NoFlo graphs\n* 0.2.2 (2020-09-17)\n  - Added support for finding NoFlo TypeScript components\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflowbased%2Ffbp-manifest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflowbased%2Ffbp-manifest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflowbased%2Ffbp-manifest/lists"}