What If Tinkercad Was Self-Hosted?

While we use a lot of CAD tools, many of us are fans of Tinkercad — especially for working with kids or just doing something quick. But many people dislike having to work across the Internet with their work stored on someone’s servers. We get it. So does [CommonWealthRobotics], which offers CaDoodle. It is nearly a total clone of Tinkercad but runs on Windows, Linux, Mac, or even Chrome OS.

Is it exactly Tinkercad? No, but that’s not always a bad thing. For example, CaDoodle can work with Blender, FreeCAD, OpenSCAD, and more. However, on the business end, it sure looks like the core functions of Tinkercad.

The program appears fairly new, so you have to make some allowances. For example, the Linux AppImage seems to have difficulty loading plugins (which it needs to import many of its file formats). In addition, on at least some systems, you have to resize the window after it starts, or it won’t respond. But, overall, it is pretty impressive. The Settings, by the way, has a checkbox for advanced features, and there are some other goodies there, too.

One reason we found this interesting is that we sometimes go into schools, and they don’t want us to have kids on the Internet. Of course, they don’t like us installing random software either, so you can pick your battles.

Tinkercad, of course, continues to add features. Not all of which you’d expect in a drawing package.

19 thoughts on “What If Tinkercad Was Self-Hosted?

  1. Hey there folks! I am the creator of CaDoodle and I am so happy people are hearing about it and using it! After the Tinkercad outage due to the AWS outage, I started noticing CaDoodle getting lots of attention.

    I am always looking to improve this tool, and am especially looking for other Java devs to help out with the slowly growing back-log of issues. If you are interested in helping, or just using, CaDoodle, please consider joining our discord through the link on the main page.

    Feel free to AMA :)

      1. Yes! There are stand alone for linux and windows, but the Mac app security settings prevent any portable applications. You can also configure CaDoodle to pick where the working directory is, so you can save all the students’ work to the flash drive.

    1. especially looking for other Java devs to help out

      I saw this and became interested, but after looking at the code, I have a lot of concerns/questions.

      Why is there a git submodule to BowlerStudio, which appears to be a completely unrelated project?

      Why are there so many shell scripts for building/running/installing when you’re already using Gradle?

      Where are your unit tests?

      I feel like the installer/updater being its own thing in another repo is also a smell, and the associated website being in a third repo, in a different organization. I’d have included all of that in the same project.

      1. BowlerStudio/bowler-scripting-kernel are the CAD kernel and UI abstraction layers, as well as the Advanced robotics IDE layer. By keeping the source in the development tree I can ensure that both IDE’s maintain compatibility and functionality, and as a lone developer, i can do so in a way that I can manage alone. Basically the cadoodle application repo is JUT the UI elements. the entire CAD engine is in the kernel, and the 3d windowing and control system is pulled out of the BowlerStudio sources. As i develop CaDoodle, BowlerStudio and the bowler CAD kernel each receive the improvements in-line. CaDoodle could be thought of as the new UI for BowlerStudio.

        I often do development all the way down to the CSG stack that I also maintain, and in order to test changes through the stack without releasing untested code, it is very convenient to have it all build from source in a single project.

        As for the shell scripts for running the application, the archetecture is that the main application is not actually run directly by the user, so the shell scripts test the running from source on the various systems on which development is supported, and ensure the developer is using the correct JVM to run the test.

        As for unit tests, those exist withing the project where the functionality resides, mostly in bowler-scripting-kernel and JCSG. BowlerStudio and Cadoodle-Application are JavaFX ui’s, and TBH i do not have UI unit test. If you know how to automate UI testing, that is certainly a skill I am missing and would appreciate!

        I keep the installer in a separate repository because it is literally a different Java application with no shared code in the main application. It is packaged with jpackage into the OS-specific installers, whereas the main application is released as a jar with a json file defining the OS specific JVM. The auto-updater updates the Jar, and JVM if necessary, so that is always running on the latest security patched JVM with the latest application version.

        As for the website being in a different project, that is a strange Github compatibility issue. I already have a Commonwealthrobotics website, so the githubio naming convention failed to allow me to make a cadoodle website that also has its own DNS mapping.

        The main thing to remember, I am a full time teacher, and the dev-ops decisions are tailored to being able to have only a precious few moments between teaching and prep work to be able to make bug fixes and improvements. I use the long vacations of summer to make major lifts. If my decisions are odd to the Sr developers eye, yeah, i get that. I’m always happy to learn :)

        1. I guess I’m still puzzled about why your robotics IDE contains a CAD kernel, such that your CAD program depends on it. If anything, shouldn’t the CAD program know about doing CAD, and the robotics IDE can depend on it, if it has a need?

          CaDoodle could be thought of as the new UI for BowlerStudio.

          This feels like a red flag.

          I definitely see the appeal to simplicity of having all your code from dependencies be modifiable and compiled at once, but not having that separation makes it much harder for anyone else to follow what’s going on. You’re essentially treating it like a monorepo, but spread across two (although looks like it’s four, or more) repositories, which makes it harder to reason about any piece in isolation.

          More separation, getting library code to focus on single responsibilities, publishing libraries to Maven Central, and consuming libraries via published JARs instead of git submodules, would be a good place to start.

          1. When Sonnotype shut down its old system and required migration, it brok all of my maven publishing. that used to be how it worked. JCSG, java-bowler, bowler-scripting-kernel and mujoco-java were all Maven published and released independently. It was a slog getting the CI publishing working in the first place, and I can not muster the effort to go through it all again now that my previous automation is broken.

            A very helpful task to help out would be to reconfigure the builds to be published in the new Sonnotype system. Basically i got stuck on this migration, had to abandon all of the maven publishing in order to keep developing: https://central.sonatype.org/pages/ossrh-eol/#self-service-migration

            CaDoodle, and TInkerCAD for that matter, have a full robotics development and simulation system. The final form of the robotics engine is something akin to the Spore Creature Creator interface, with the CAD stack for modification of the basic links. All of that is hidden behind the advanced features menu, and is not in the Beta release that is out now.

            I am happy to have the modules published as independent libraries again, that would be great. I have long looked at the IHMC extensions for gradle that allow foe a fully source build (so one can step throug debug deep libraries in the end-use application) and the ability to publish each submoduled repo as its own library through Maven. I never used their stack specifically because it was too clunky to set up, but the use case was always something that I appreciated. I now understand more about cascading builds so that i can have the publish step run in CI on the tag release, and then be ignored during the source build.

            In any case, I do not enjoy the dev-ops aspect myself, so i do only as much as i needed to get my development/test/release pipeline automated into CI so i can focus on the application development, bug fixes and feature adds. It sounds like you have a lot of devops experience, would you be willing to use those skills to improve the build/deploy process?

  2. I was introduced to tinkercad while trying to introduce 3d modeling to kids. OpenSCAD is clearly a little advanced for trying to teach the fundamentals of 3d space, and Fusion 360 (or any Autodesk software) was prohibitively expensive. Tinkercad was a great idea, and after learning and teaching it, I’ve found myself using it more often than I anticipated. For us the primary downside is the browser-only online environment. There are always trade-offs with anything though.

    I hadn’t heard of CaDoodle before this, and this sounds great–I’m surprised that after being so well-received for what it is that Tinkercad never released any standalone offline versions. We run Debian, so I’ll give CaDoodle a try tomorrow! We have a pc that has windows, but it’s not ideal for us to resort to that, so hopefully we can get the Linux package running reliably. A project like this would really great news for us!

    Thanks for posting, can’t wait to give it a go!

  3. Works with OpenSCAD? I’m interested.

    Being able to assemble some geometric shapes in a tinkercad-like interface and then have it spit out a script for further use would make it a killer app. Being able to flip back and forth would be revolutionary.

    1. Or, here’s an idea (tempted to tackle this one myself):

      Suppose you have a large and complex rubber gasket thing you need to make a replacement for. But printing flexible stuff by itself is a pain, because it needs support.

      So you design the flexible gasket itself here, in this tool. Then you export it as an OpenSCAD script. Then, you mash that script together with some boilerplate to make OpenSCAD build a solid shell around the actual gasket meant to be printed in flexible filament. Then you use the color tagging example presented in https://hackaday.com/2025/10/14/openscad-in-living-color/ to export the solid shell (to be printed in water-soluble PVA) alongside the flexible filament part into separate files for your 3D printer host software. Then you call the octoprint API and get it printing.*

      Tada, this becomes the human interface to a sophisticated 3D print post-processing toolchain that ends at the hotend nozzle.

      *(along the way you might be able to import generated STLs into something like Open3D if you want to run some sanity checks, like if you have enclosed PVA that won’t dissolve, though that python library is a bit flaky)

      1. So you design a template and print it to paper.
        Then you put the paper on a sheet of rubber – or your chosen gasket material.
        Then you cut out the gasket.

        You’re over thinking it for a one off.
        For production, you’re doing it wrong.

        1. That only works if your gasket is EXTREMELY simple. 2D flat rubber only.

          I had a complex 3D gasket in my washing machine which fit around three different plastic parts like a rubber sock and there’s absolutely no other way you could ever make it.

    2. Well it is sorta like that, but not quite. You can import an OpenSCAD script into CaDoodle, and that script will be copied in as a local file, but still OpenSCAD. You can open the copy from within CaDoodle and continue to tweak the scad, and the CaDoodle steps will be applied to it in sequence. It has a file watcher, so when you save the openscad file, the reloads it in CaDoodle and reapplied all the subsequent steps.

      The file format is a sequence of operations in a JSON file. It would be theoretically possible to generate an OpenSCAD file using the .doodle file as a sequence source. I do not have any plans for that path, but if someone wanted to make it, i’d be happy to help incorporate it!

      1. The file watcher and import is quite neat. I suppose you have some kind of OpenSCAD script parser that generates .doodle-style sequences?

        Do you have documentation of all the different kinds of operations that happen in that file format? If so I guess it would be possible to figure out a 1:1 equivalent in OpenSCAD script and make something that could string them together. One of the world’s weirder transpilers.

        1. It actually uses OpenSCAD in CLI mode to output and STL, then loads that. It would be possible to make such a transcoder, but fr now id rather trust OpenSCAD to process the .scad files and use the mesh export, and parameters via CLI and the interface. the “Plugin” is just downloading the application and accessing it in CLI mode. The plugins all interact at the UNIX Pipe pattern level. Same goes for Freecad, Blender and OpenSCAD. Inkscape SVG’s however are native in the cad kernel, so they dont need a “plugin”.

Leave a Reply to Kevin HarringtonCancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.