{"id":15296077,"url":"https://github.com/nodepen/nodes","last_synced_at":"2025-04-04T13:05:34.347Z","repository":{"id":38714007,"uuid":"220737687","full_name":"nodepen/nodes","owner":"nodepen","description":"same nodes, new digs","archived":false,"fork":false,"pushed_at":"2025-03-22T07:03:01.000Z","size":10940,"stargazers_count":168,"open_issues_count":17,"forks_count":9,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-03-28T12:05:45.430Z","etag":null,"topics":["grasshopper","nextjs","rhinocompute","speckle"],"latest_commit_sha":null,"homepage":"https://beta.nodepen.io","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/nodepen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","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":["cdriesler"]}},"created_at":"2019-11-10T03:46:14.000Z","updated_at":"2025-03-16T04:13:23.000Z","dependencies_parsed_at":"2024-01-15T23:52:40.416Z","dependency_job_id":"4138f353-d68b-4ea9-825d-5bbbc4789b8a","html_url":"https://github.com/nodepen/nodes","commit_stats":{"total_commits":2181,"total_committers":2,"mean_commits":1090.5,"dds":"0.14121962402567634","last_synced_commit":"0998b5e842259c1cfba50f298a11bfcb35c7fdf8"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodepen%2Fnodes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodepen%2Fnodes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodepen%2Fnodes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodepen%2Fnodes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nodepen","download_url":"https://codeload.github.com/nodepen/nodes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182335,"owners_count":20897379,"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":["grasshopper","nextjs","rhinocompute","speckle"],"created_at":"2024-09-30T18:09:13.827Z","updated_at":"2025-04-04T13:05:34.302Z","avatar_url":"https://github.com/nodepen.png","language":"TypeScript","funding_links":["https://github.com/sponsors/cdriesler"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"np-banner.png\" \u003e\n\n\u003cdiv\u003e\n\u003cimg alt=\"npm (scoped)\" src=\"https://img.shields.io/npm/v/%40nodepen/nodes?style=flat-square\u0026color=%2398E2C6\"\u003e\n\u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/nodepen/nodes/ci-nodes.yml?label=nodes\u0026style=flat-square\"\u003e\n\u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/nodepen/nodes/ci-converters.yml?label=converters\u0026style=flat-square\"\u003e\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/nodepen/nodes?style=flat-square\"\u003e\n\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/nodepen/nodes?style=social\"\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\nNodepen is a web client for Grasshopper. This monorepo is for the main `@nodepen/nodes` React app library and its supporting packages.\n\nThis project is under active development towards a 2.0 release that will:\n\n- Publish useful bits of the [previous release](https://github.com/nodepen/nodes/releases/tag/1.0.0) as independent libraries\n- Integrate with Speckle for backend processes and frontend visualization\n\n## Features\n\n- Compose, execute, and view results from your Grasshopper graphs in the browser\n- Upload an existing script and continue working on the web\n- Easily pin any number of parameters for a quick configurator-like experience\n- Open the same graph in multiple browser windows for the \"two screen\" UX we've come to love with Rhino and Grasshopper\n- Download your current graph to continue work in Grasshopper offline\n\n## Project Structure\n\nThis monorepo contains the core NodePen libraries (`/packages`) and a collection of example applications (`/apps`) that use them. The applications are meant to be a simple demonstration of how to run a Grasshopper-like environment and how NodePen integrates with Speckle technology.\n\n### Packages\n\nNodePen currently supports three core libraries:\n\n#### @nodepen/nodes\n\nA React component library that exports the main NodePen client-side \"app\" for interacting with nodes and viewing results. It also exports the individual \"views\" which may be included and configured as necessary.\n\n#### @nodepen/core\n\nA typescript library that exports types and utilities for NodePen concepts. Useful if you need to perform operations with NodePen-shaped data but do not need to include the client-side logic.\n\n#### NodePen.Converters\n\nA C# library that can be used to serialize/deserialize types to/from the NodePen Document JSON format.\n\n### Apps\n\n#### nodepen-client\n\nA thin next.js client that communicates directly with the Rhino Compute server for Grasshopper solutions and the Speckle server to receive results from Speckle streams.\n\n#### rhino-compute-server\n\nA minimal Rhino Compute server with endpoints for updating a given NodePen document. Writes results directly to the local Speckle server instance it's configured to point to.\n\n## Local Development\n\nRunning NodePen locally requires a number of dependencies and, at the moment, a bit of manual work for first-time setup. Please also see the section below about known limitations.\n\n### Dependencies\n\nIn order to run all of the example applications, you will need:\n\n- Git with SSH auth\n- Nodejs 16, 18\n- Dotnet CLI\n- Rhino 7+\n- Access to a running Speckle Server\n\n### Initial Setup\n\nClone this repo:\n\n```\ngit clone git@github.com:nodepen/nodes.git\n```\n\nFrom the root directory, run:\n\n```\nnpm i\nnpm run build\n```\n\nThis should install dependencies for all of the javascript projects and build them once. Build failures may still occur for the last project, `nodepen-client`, and can be ignored.\n\nFrom `/apps/rhino-compute-server` run:\n\n```\ndotnet build\n```\n\nThis should restore dependencies for and build both the example application and NodePen.Converters.\n\nLast, follow [Speckle's instructions](https://speckle.guide/dev/server-local-dev.html) for how to set up your local development environment for the speckle-server project. Run the server.\n\nVisit your local Speckle server and:\n\n- Create your admin user (the first user on the server)\n- Create a new stream\n- [Create a personal access token for your account](https://speckle.guide/dev/tokens.html).\n\nAlternatively, you may also source these values from a live Speckle server you have access to.\n\nIn `apps/nodepen-client`, copy `.env.development` to a `.env.development.local` and populate each environment variable with the relevant information from the previous steps.\n\nIn `apps/rhino-compute-server`, copy `appsettings.json` to an `appsettings.local.json` and populate the named variables in the same way.\n\nAt this point, you may leave your Speckle server running and continue onto the next section.\n\n### Development Environment\n\nBoth services in the `/apps` directory must be running in order to develop with NodePen locally. For all current features, you must also have access to a running speckle server (local or otherwise).\n\nOnce all three are successfully running, you can navigate to `http://localhost:4000` to begin working.\n\nYou can validate that everything is working by dropping a grasshopper script onto the canvas and viewing the results in the next tab. (Please see the limitations section below if you script does not appear.)\n\n#### nodepen-client\n\nFrom the root directory, run:\n\n```\nnpm run dev\n```\n\nThis uses turborepo to watch and react to changes made in either the client application or any of the packages it consumes.\n\n#### rhino-compute-server\n\nFrom the `apps/rhino-compute-server` directory, run:\n\n```\ndotnet watch\n```\n\nAfter a short wait for Rhino startup processes, you will see `The Rhino.Compute service is now running` when it's ready for communication with the other apps.\n\n#### speckle-server\n\nFollow Speckle's instructions for local development [here](https://speckle.guide/dev/server-local-dev.html).\n\n### Limitations\n\n- Grasshopper script conversion (upload Grasshopper file =\u003e create NodePen doc) will fail often because several important component types are not yet handled. You may safely use most default components, but you can't (yet!) use anything with a special type or behavior like the Number Slider or floating parameters.\n- You may only expose number-based input parameters at this time in the HUD inputs window.\n\n## Attribution\n\nRhinoceros and Grasshopper are registered trademarks of [Robert McNeel \u0026 Associates](https://www.rhino3d.com).\n\nAll 3D visuals are powered by the [Speckle Viewer](https://github.com/specklesystems/speckle-server/tree/main/packages/viewer).\n\nPrevious drafts of NodePen included the [\"RestHopper\"](https://github.com/RESThopper/resthopper.grasshopper) headless Grasshopper prototype developed at the [2018 AEC Tech Hackathon](http://core.thorntontomasetti.com/aec-tech-2018/aec-tech-2018-hackathon/2018-aec-tech-hackathon-github-repos/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodepen%2Fnodes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnodepen%2Fnodes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodepen%2Fnodes/lists"}