Thornton Tomasetti’s CORE studio is pleased to release an alpha version of Platypus for Grasshopper.

Platypus allows Grasshopper authors to stream geometry to the web in real time.  It works like a chatroom for parametric geometry, and allows for on-the-fly 3D model mashups in the web browser.  Multiple [Grasshopper] authors can stream geometry into a shared 3D environment on the web – a Platypus Session – and multiple viewers can join that session on to interact with the 3D model.  Platypus can be used to present parametric 3D models to a remote audience, to quickly collaborate with other Grasshopper users, or both!

Platypus is a research project that is enabled by Thornton Tomasetti’s commitment to innovation and research in the AEC industry.  It would not have been possible without the following open source achievements: Three.js, Node.js,, and SocketIO4Net.  To read more, please visit CORE studio’s website.


To Install:

  • In Grasshopper, choose File > Special Folders > Components folder. Save the .gha file and all other included .dll files there.

  • Right-click on each .gha and .dll file > Properties > ‘Unblock’.

  • Restart Rhino and Grasshopper


To Use:

  1. Give our getting started video a quick watch on youtube or at the bottom of this page.

  2. Visit using Chrome or Firefox, and copy the session number from the dropdown menu at the top left of the site.

  3. Grab a Platypus Connection component from the TT Toolbox Tab, Platypus section in Grasshopper.  Provide the session number from step 2 as the ‘Session’ input parameter.  Set the ‘Connect?’ input to true to generate a Platypus Session Key to use downstream.

  4. Use that Platypus Session Key as an input to the Stream Meshes and Stream Lines components.  Feed them some geometry, and check out the results back on

  5. Share your session number with other viewers or grasshopper authors, and enjoy!


Please let us know what you think in the comments here, or on our group’s page on the grasshopper forum.  



CORE studio

Plug-in rating:
Average: 4.7 (3 votes)
Title Release Notes
Platypus Alpha 006
Platypus browser launcher component added and sample files provided. Platypus cutoff date extended to 1/1/2017.  
Version: 0.0.6
Language: English
Platypus Alpha 005
Fifth Alpha release of Platypus. Extended cut-off date to 1/1/2016. All other functionality should be the same.  
Language: English
Platypus Alpha 004
Fourth Alpha release of Platypus. Extended cut-off date to 1/1/2015 - all other functionality similar to Alpha 003  
Language: English
Platypus Alpha 003
Third Alpha release of Platypus for Grasshopper. Added GH>GH geometry streaming, sliders sync between GH and  
Language: English
Platypus Alpha 002
Second Alpha release of Platypus for Grasshopper. Added error messages to Connection component to help debug connection issues. All components will not solve after May 15, 2014.  
Language: English
Platypus Alpha 001
First Alpha release of Platypus for Grasshopper. All components will not solve after April 24, 2014.  
Language: English
Plug-In videos:


mario's picture


after upgrading to Platypus Alpha 006, grasshopper has not been able to connect

anybody had the same problem?

also there are no sample files on the zip folder




mario's picture

this is the error

System::AppDomain::CurrentDomain->UnhandledException event occured

SENDER: Name:DefaultDomain
There are no context policies.

EXCEPTION: System.NullReferenceException
MESSAGE: Object reference not set to an instance of an object.
SOURCE: SocketIOClient
at SocketIOClient.Client.OnMessageEvent(IMessage msg)
at SocketIOClient.Client.wsClient_OpenEvent(Object sender, EventArgs e)
at WebSocket4Net.WebSocket.OnHandshaked()
at WebSocket4Net.Command.Handshake.ExecuteCommand(WebSocket session, WebSocketCommandInfo commandInfo)
at WebSocket4Net.WebSocket.ExecuteCommand(WebSocketCommandInfo commandInfo)
at WebSocket4Net.WebSocket.OnDataReceived(Byte[] data, Int32 offset, Int32 length)
at SuperSocket.ClientEngine.AsyncTcpSession.ProcessReceive(SocketAsyncEventArgs e)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags)
at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

Hi! great tool, thank you for sharing! Is there a way to set a minimum time for the Platypus component to work? I keep receiving this notifications to enable the component every few minutes.  

Hi, great tool! I am having an issue with any geometry that is far from the origin. It seems to want to navigate around the origin instead of the geometry. Is there a way to navigate around the object if it is far from the origin?

bhowes-tt's picture

Hi erhull, Try the zoomExtents button in the view dropdown.

Sbontly's picture

Im curious to know about the upload speed onto the internet? How fast will this plugin respond to interactions?



bhowes-tt's picture

Short answer: it depends.  In general, small models on fast internet connections are the fastest, large models on slow connections the slowest.  

I wrote about this in more detail at the end of this post:

I'm having issues connecting. I think I've unblocked all of the .gha and .dll files but I get two runtime errors. "Socket Error: Error initializing handshake with" as well as "could not connect to platypus server". Any help resolving this would be much appreciated.

ondejcik's picture


i am having same problem too. Otherwise it looks great.

bhowes-tt's picture

There is a thread about this on the grasshopper forum that might be useful:

If you are behind a firewall, port 2358 has to be opened for Platypus to connect to the server.  

I've also heard that users behind proxy servers aren't able to connect - see the comment about trying to get past the great wall below by @huaxiamengqing.


Awesome! Can´t wait to see the next enhacement, congrats

Wieland Schmidt's picture

Great work, thank you for sharing this with us!

Platypus will be very helpfull an I have a lot of ideas how to use it. Are you planning to add something like a remote contol for sliders? That would really change the way we work...

Greetings from Munich, Wieland

bhowes-tt's picture

Thanks, Wieland,

Yes - we are planning on driving Grasshopper sliders from, and allowing for Grasshopper > Grasshopper geometry streaming (points, curves, breps and meshes) as part of our next alpha release or perhaps the one after that.  The GH>GH geometry will be ready for the next one for sure; we are just getting into the sliders now... 

Wow, so cool!  Any plans to allow do enhanced materials?  Thinking of textures/decals, etc. 

Good work!

bhowes-tt's picture

Thanks, Declan,

Textures, decals, and more control over THREE.js materials in general from Grasshopper is a great suggestion.  We'll put it on our development list!  Thanks again.

I ma in China and using the goagent.exe to get out of  The Great

Wall. While,I can't trans the gha brep into your page! It's tell me that Time out--

bhowes-tt's picture

Great question - could you please post an image or two of your GH definition and the error message you are receiving as a comment on this discussion in the Grasshopper Forum?

Also, you mentioned a brep - Platypus only handles lines and meshes at the moment.  If you were trying to stream a brep, you should try a single line or a mesh sphere to verify that you can actually connect to our servers and stream geometry.  

Hi guys, looks like a great tool and I'm keen to try it out with my colleagues. I'm giving it a go right now. I've installed it and fed some geometry into the platypus components, but when I set the connection toggle to true I get this error message:

1. Could not connect to the Platypus server.

Is it likely a problem at my end or the server end?


bhowes-tt's picture

Thanks for your interest, Tom,

Make sure you've unblocked the .gha and .dll files - that is the most common reason for that error.

That's cool

Protected Collaborative Environments
© 2016McNeel Europe. User-submitted content and trademarks property of their respective owners.