Hey nice - this stuff is so much fun to me. I've worked a number of experiments like this too, especially related to live coding. Love seeing it in the wild.
I built a small project where you can live-code Love2D. The running program updates in real time (no saving needed) and see all values update in real-time, via LSP.
Here's another experiment where I made it so you could "drag and drop" to choose a position for something by manipulating the editor / replacing a computed position with a static one, on keypress.
That's cool! I suspected that someone must have done something like this before.
madmod · 4h ago
I love your project. I am making something with LSP and your code was a great example of what is possible.
jasonjmcghee · 4h ago
Glad it was useful! LSP is definitely under-utilized. It's great for the "malleable software" / small tools for yourself kind of stuff especially.
KRAKRISMOTT · 3h ago
Isn't autocad lisp powered?
necovek · 5h ago
This is a great idea: I'd never think of using LSP for this!
As a software developer, I always get frustrated when I am doing some graphical work and struggle to neatly parametrize whatever I am drawing (wooden cabinets and furniture, room layouts, installation plans...) and switch between coding where that makes most sense and GUI where it doesn't.
The best I've gotten was FreeCAD with Python bindings (I've got a couple of small libraries to build out components for me), but while you can use your own editor, the experience is not very seamless.
And then I start imagining tools like the one here, but obviously doing it just right for me (balancing the level of coding or GUI work).
ttoinou · 1h ago
I think we’re a lot of developers who are frustrated by constantly needing to choose between code or GUI… both have their use case, but I feel like there must be a system that combines both.
mikewarot · 5h ago
This is close to the functionality that Borland Delphi had back in the 1990s. The pascal language and the design of their GUI toolkit were a really good impedance match, so you could freely switch between GUI design and editing the text version of it.
Doing so for languages like C++, was a sea of boilerplate that you couldn't touch, which is why I never moved away from Pascal. Similar fragility was evident in WxPython and it's builder.
I'm glad to see that LLMs can provide a match for less well suited Language/GUI pairs. We all deserve to get that kind of productivity.
FloatArtifact · 21m ago
This is really interesting being able to do bi-directional editing. This is desperately needed for accessibility software to get at underlying text. I would use it for semantic editing of code by voice. However, getting at GUI elements would be amazing.
harrylepotter · 56m ago
We do quite a lot of this using webviews in vscode over at Darwinium. Similar process that involves postMessages between the UI container and the host containing the LSP. Biggest challenge I had with this was figuring out how to map a diagnostic from the language server (which is inherently range-based) to a UI component that would display it - it involves a fairly intricate pubsub system and mapping UI components explicitly to parts of a tree. Would love to share it eventually.
rao-v · 5h ago
Isn’t the python based build123d the current best CAD in code solution? The problem with OpenSCAD is that it cannot export solid geometry, just a final mesh.
More broadly, I was genuinely shocked to realize, when I was playing with it, that there is no cross CAD file format that captures even simple design concepts like “this hole is aligned to the center of this plate” or even “this is a 2mm fillet”. STEP (the file format) mostly just captures final geometry.
I think CAD people just … redesign the part again if they need to move from say Fusion 360 to FreeCAD or whatever. How do they live like that?!
mk_stjames · 3h ago
It's really hard to explain if you don't know how CAD kernels produce final BREP shapes via their process trees, but, try give an example-
something like "this is a 2mm fillet" requires a 'fillet solver' that is deeply ingrained in the kernel. It isn't something that would ever be portable, say, from Fusion360 to CATIA natively because those are completely different kernels with different ways of 'solving' the model (and not just fillets, but, everything).
That is why STEP containing the final BREP manifold solid is the standard interchange that it is - it is a final representation of the solved output that IS portable, and anything else is... difficult.
ethan_smith · 1h ago
The interoperability problem stems from CAD kernels using proprietary B-rep representations and constraint solvers, with STEP's AP242 standard attempting to address this by including Product Manufacturing Information (PMI) and semantic annotations, though adoption remains fragmented.
rjsw · 4h ago
STEP is capable of capturing what you describe, it is down to the "user group" of customers of the CAD vendors to ask for it to be implemented by each CAD system in terms of what they import and export.
We put in for some funding for the next edition of STEP AP242 for me to be able to work more closely with the user group to improve this area.
rao-v · 1h ago
That's awesome! Yeah it seems strange to me that we don't have a standard way of tracking how a model is built up and parameterized (basically Fusion 360's history mode). I'd naively assumed that this was a solved problem in the CAD world - given the whole point of parametric CAD is to be able to easily tweak the distance between two points and have the whole model update.
fwip · 4h ago
I don't think they change programs very often, and only very rarely in the middle of a project.
williamcotton · 4h ago
While it doesn’t use an LSP (which is a great idea!), this project of mine does bidirectional mapping between a GUI and a shell pipeline:
For Slint [https://slint.dev], a (native) GUI Toolkit, I've also developed a LSP server that do live preview and editing.
You can try it online at https://slintpad.com : if you click on the toolbar button to enable the right panel, you can edit the properties from the UI, and this is all done through the LSP and can be integrated in any editor that supports it.
kennykartman · 2h ago
I know basically nothing about CAD, but I know thet fornjot exists and wondered if it might be useful to your purposes, in case you don't know about that.
But well, the project is very cool and I love the idea of using LSP for something more!
taeric · 4h ago
Reminds me of the excitement I got on seeing https://www.youtube.com/watch?v=4tyTgyzUJqM. I still get excited about trying something like this again pretty much every time I see it. Have yet to really get any traction on anything. :(
A lot of folks had fun watching Minecraft built using a live code session, if I recall.
junon · 3h ago
I'm about to set off on this journey too with a code-first PCB editing suite for myself to work on. Seems like this is a good piece of prior art to reference as I need to build similar tooling. Thanks for posting!
The devil is in the details though, and I worry about the UI becoming cluttered and unmanageable.
pshc · 2h ago
This stuff is a dream of mine, editors in different modes that can collaborate seamlessly. Keep up the good work!
SwiftyBug · 4h ago
This is awesome! If someone created a Interface Builder on top of that, I feel like I might even go back to making iOS apps. Xcode makes the whole experience so terrible that it sucks the joy out of it.
nico · 3h ago
Very cool concept. Would love to see something like this for web development. Where making changes in the browser could be persisted seamlessly to code
Whoa … you can use various unicode characters in titles on HN?
jamesbvaughan · 1h ago
I was surprised by this too! I actually did a search for that character in order to check before posting this: https://hn.algolia.com/?q=%E2%87%84
I was a bit concerned that HN's algorithm might down-weight posts with non-ASCII characters in titles to discourage people from trying to attract attention with them, but it seems like it's fine?
low_tech_punk · 4h ago
So if we replace LSP with MCP, the UI might control the code in interesting ways!
bitwize · 5h ago
See also: zoo.dev, started by an acquaintance of mine.
pjmlp · 4h ago
I guess it is about time for the usual Lisp, Smalltalk, Cedar and Oberon remarks.
Why do cool ideas take so much time to be embraced in mainstream?
Retoric question, naturally they weren't VC friendly with exponential growth capitalising user acquisition. /s
I built a small project where you can live-code Love2D. The running program updates in real time (no saving needed) and see all values update in real-time, via LSP.
https://github.com/jasonjmcghee/livelove
And also added the same kind of interactivity like a number slider and color picker that replace text inline, like yours (though via vs code extension: https://gist.github.com/jasonjmcghee/17a404bbf15918fda29cf69...)
Here's another experiment where I made it so you could "drag and drop" to choose a position for something by manipulating the editor / replacing a computed position with a static one, on keypress.
https://clj.social/@jason/113550406525463981
There's so much cool stuff you can do here.
As a software developer, I always get frustrated when I am doing some graphical work and struggle to neatly parametrize whatever I am drawing (wooden cabinets and furniture, room layouts, installation plans...) and switch between coding where that makes most sense and GUI where it doesn't.
The best I've gotten was FreeCAD with Python bindings (I've got a couple of small libraries to build out components for me), but while you can use your own editor, the experience is not very seamless.
And then I start imagining tools like the one here, but obviously doing it just right for me (balancing the level of coding or GUI work).
Doing so for languages like C++, was a sea of boilerplate that you couldn't touch, which is why I never moved away from Pascal. Similar fragility was evident in WxPython and it's builder.
I'm glad to see that LLMs can provide a match for less well suited Language/GUI pairs. We all deserve to get that kind of productivity.
More broadly, I was genuinely shocked to realize, when I was playing with it, that there is no cross CAD file format that captures even simple design concepts like “this hole is aligned to the center of this plate” or even “this is a 2mm fillet”. STEP (the file format) mostly just captures final geometry.
I think CAD people just … redesign the part again if they need to move from say Fusion 360 to FreeCAD or whatever. How do they live like that?!
That is why STEP containing the final BREP manifold solid is the standard interchange that it is - it is a final representation of the solved output that IS portable, and anything else is... difficult.
We put in for some funding for the next edition of STEP AP242 for me to be able to work more closely with the user group to improve this area.
Screenshots and GIFs for the explanation!
https://github.com/williamcotton/guish
But well, the project is very cool and I love the idea of using LSP for something more!
A lot of folks had fun watching Minecraft built using a live code session, if I recall.
The PDF ones are especially fun!
The whole playground is built for bidi sync!
https://lists.openscad.org/empathy/thread/GAX4QYYRUC3CEH572I...
The devil is in the details though, and I worry about the UI becoming cluttered and unmanageable.
> Write in the browser with your text editor.
I was a bit concerned that HN's algorithm might down-weight posts with non-ASCII characters in titles to discourage people from trying to attract attention with them, but it seems like it's fine?
Why do cool ideas take so much time to be embraced in mainstream?
Retoric question, naturally they weren't VC friendly with exponential growth capitalising user acquisition. /s