I’ve been building Slate, a floating control panel for Grasshopper and an alternative to Human UI, built as a WebView2/Svelte interface. License is GPLv3, source on GitHub.
I’d been wanting an intuitive, modern, modular control panel for a while. The alternatives out there, and Rhino’s own remote panel, weren’t quite cutting it for me. I wanted something even someone new to Grasshopper could pick up and use. All you do is click a parameter and hit “Capture”, the rest happens right there in the panel. Beyond being approachable for someone new to Grasshopper, it also saves you the hassle of hunting parameters down all over the canvas while actively developing a project. Capture what you need and keep it right there on the side of the screen.
It also has a proper multi-pane layout: split the window into resizable panes from any corner, each with its own tabs, drag a tab out into its own floating window. Human UI has something similar, but Slate’s is simple enough that even someone who has never touched Grasshopper can rearrange it.
A few other things it does:
Dark and light themes
Drag-and-drop everywhere: reorder, move between tabs and panes, group
Undo with a configurable history depth
Captures freestanding native geometry params too (points, curves, breps, meshes and more), each with an optional pin to force it onto the GH canvas preview regardless of GH’s own filter
Captures the native Trigger component, and reads two non-native ones via reflection: Item Selector from the Human plugin and True Only Button from Pancake
Checklist-mode value lists support markdown-style header lines too, just name an item #, ## or ### and it becomes a header instead of a checkbox
This looks really compelling; I haven’t gotten a chance to try it out, but this seems like it could be one of the more successful attempts at this sort of thing. I especially like that the UI is derived directly from the existing GH components, rather than requiring a whole process of defining a UI manually which I always found tedious with other plugins.
Have you considered a “Slate-only” mode? It would be really interesting for this to be a sort of extension of GrasshopperPlayer, where a GH definition could be run like a command and the Slate window appears as a control UI, without ever opening GH.
And have you seen Orkestra? This project has really embraced this idea of a GH script being prepared by someone with more technical experience and being used by non-technical end users. But Slate seems like it has a lot of potential to be even simpler to inject into a typical GH workflow.
Yeah, I’m aware of GrasshopperPlayer, and honestly a project like that crossed my mind too, but I’d been thinking of it as a separate thing. Slate could feed into something like that down the line, but right now I use it alongside Grasshopper on the same monitor. For now I want to stay focused on ideas that support the Grasshopper workflow itself.
For example, with 0.2.0 we can capture native geometry params and control their viewport visibility right from the UI. Combined with the grouping support already in the panel, that starts to feel like a layer system. I’d honestly want this plugin just for that feature alone.
Going forward I’m planning to focus on capturing more of what’s already in Grasshopper (MD Slider, Graph Mapper, Param Viewer, Path Mapper, and whatever else people suggest) and maybe layering a few small useful features on top, plus making sure it all runs smoothly and chasing down bugs.
Haven’t looked at Orkestra yet actually, I’ll check it out. Like you said, my goal has been to build a kind of tabula rasa, a blank slate that can easily be injected into any workflow. Maybe someone else builds a system for presenting a .gh file to clients before I do, and ends up integrating Slate into it.
Hey everyone, pushed a new release today, v0.2.3! Here’s what I added:
What’s new in v0.2.3:
Data Dam capture: mode/delay control, manual release button, and now an optional “Select Gate” link (any Boolean/Integer param or Panel) that auto-releases the dam on a false to true edge, either once or for as long as the gate stays true.
Param Viewer capture: instead of reading the native Param Viewer directly, this now drives its own Data Tree Explorer, a concentric “tree rings” visualization you can drill into down to individual items. The idea is to get the tree visualized cleanly first, then build on top of it, maybe hook it up to Path Mapper so you can drag and drop branches to change their path, or double-click a path directly to assign a new one. Feels like there’s a lot of room to grow here.
Duplicate captures: Alt-drag any captured row to make an independent copy, the original stays where it is, and the copy can be moved to any tab, pane, or workspace like any other row. Handy if you want the same GH parameter driven from two places in the UI. Delete a copy on its own or wipe all of them at once (right-click, or Alt+X). Works across all capture types now: sliders, toggles, buttons, value lists, panels, colour pickers, Trigger, geometry params, Data Dam, Param Viewer.
Text Panel appearance settings now apply to every panel type, not just headers: alignment, color, font size, bold/italic/underline. Also added a markdown style standalone header, drop a lone #, ##, or ### line in a panel and it renders frameless as a section title.
Per-pane background color/pattern: right-click a pane for a background color override plus a tiled pattern (dots, grid, diagonal, crosshatch, rings).
Tab coloring: right-click a tab to color it, tints the tab pill and gives the tab bar itself a light wash from the active tab’s color.
Settings panel cleanup: now scrolls instead of clipping off the window edge, wider so shortcut combos don’t get cramped, and the shortcut list collapses to the most useful ones with a “show more” toggle.
Smaller stuff: the window title now shows the open file’s name, added a Ctrl+scroll zoom hint to the status bar
Bug reports and feedback welcome, as always. If you’d like to support the project: Buy Me a Coffee
I was thinking that, since Slate is and will probably be made of a single component, it would be more convenient to move it to the small toolbar next to Scribble, to save space in the plugin’s toolbar
Go to param (equivalent of Jump to from the standard right click menu, to retrieve the original param. It could otherwise be lost
Add param icons to quickly identify param types at a glance
For the future:
A very uncommon feature, probably impossible. It consists in showing which components is actually updating during a recalculation. Possibly, show a percentage of the total recalculation needed. Useful also for debugging when a total freeze and program termination needed after mishandling of a tree.
Thanks for the feedback! Go to param and param type icons both make sense, I’ll be working on them. The icons will likely be optional in the UI.
The recalculation tracking is a bit outside what Slate is meant to do, so I’m handling that idea in a separate plugin I’m building called SolverTracker. The idea is to show which component is solving and to stop a solve that runs too long, so you don’t have to force-quit Rhino after a freeze. It’s on hold for now because Grasshopper runs the solver on the same thread as its UI, so when a single heavy component hangs, nothing can be drawn or stopped until it finishes. If it gets built, it could possibly be made capturable in Slate later.
Thanks again for the suggestions! Both are done and will be in the next release.
There’s a new “Show icons” switch in Settings (off by default) that shows Grasshopper’s own icon next to each captured control. In Preview mode you can click the icon, or double-click the name, and the canvas jumps to the original object, centers it at 100% zoom and selects it. The days of searching are over.
I’ll let you know as soon as the release is out so you can try it.
Show icons: a new toggle in Settings (off by default) shows Grasshopper’s own icon next to each captured row’s name. In preview mode, click the icon or double click the name to jump the GH canvas to the original object, centered at 100% zoom and selected. Handy in bigger definitions when you want to find where a captured control actually lives.
Group header appearance menu: every group header now has its own menu (the dots button in edit mode, or right click) for a background tint and label alignment, color, size and bold/italic/underline. The background uses a pastel palette, and the pane background menu got the same palette and a tidier two column layout.
Capture order follows the canvas: Capture and Sort by Canvas Position now read the canvas in columns, left to right and top to bottom within each. Columns are decided by horizontal overlap, so a narrow toggle sitting right aligned under a wide slider stays in the same column. Mixed selections are also captured in one interleaved pass instead of being batched by type.
Undo now reaches Grasshopper: values changed by undo are sent back to the GH objects instead of only changing Slate’s own copy.
Smaller stuff: pressing x only deletes a group when the cursor is on its header (a stray x over the body used to wipe the whole group), dropping a slider on the top or bottom of a group header places it beside the group while the middle still nests it, and fixed a few preview pin and restore bugs.
The full list is in the changelog: GitHub. Bug reports and feedback welcome, as always. If you’d like to support the project: Buy Me a Coffee.