♾️ Infinite canvas, infinite zoom, infinite precision*
⬤ Powerful circle geometry instrumentation: treating points, circles and straight lines uniformly
💬 Simple & intuitive design with interactive tips & brief descriptions
💯 Cross-platform (mobile + desktop + browser)
🌲 Dynamic expression-dependency tree
📜 Undo/redo history & auto-save
💾 Custom YAML-derived file format + Safe SVG export
✌ Smart gestures: drag-and-drop, swipe coloring & swipe selection, keyboard shortcuts
🌘 Light/dark mode (WIP, for now as a URL argument ?theme=light
or ?theme=dark
)
*: objects are related via dynamic expressions and child nodes' formulae are recalculated when moving parents or zooming in/out
Built with Compose Multiplatform, targeting
- Desktop (Windows, Linux)
- Android 7.0+ (SDK 24+)
- Web (via Wasm)
- macOS/iOS if ever get an Apple dev account (have to notarize/staple binaries), for now only works as a web app
Combine interactive designs ~ Geogebra
with vector graphics editor ~ Inkscape
and specific type of animations ~ Möbius transformations and possibly Lie sphere geometry
Note
This project is in beta, beware of bugs and breaking changes
Live deployed here from the github-pages
branch.
Executables for Linux, Window and Android can be found in the assets attached to the latest release or on Google Drive.
- From the latest release go to
assets
and downloadwindows.zip
- Unarchive it
- In folder
com.pierbezuhoff.dodeclusters
find filecom.pierbezuhoff.dodeclusters.exe
- Run it! That's it~ (it is bundled with JVM)
- From the latest release go to
assets
and downloadlinux.zip
- Unarchive it
- Go into folder
com.pierbezuhoff.dodeclusters/bin
, you'll find executable filecom.pierbezuhoff.dodeclusters
chmod +x
it and you can run it as./com.pierbezuhoff.dodeclusters
(bundled with JVM)
You can find the apk in the assets attached to the latest release.
Note
Bundled binaries are likely behind web version
Ctrl + A
: quickly select/deselect everythingDelete
,Backspace
: delete selected objectsCtrl + V
: duplicate selected objectsCtrl + +
,Ctrl + =
;Ctrl + -
; mouse wheel: enlarge/shrink selected objects or zoom in/outCtrl + Z
: undo ↶Ctrl + Y
: redo ↷Esc
: cancel any ongoing constructionsM
: go to Drag mode (~ Move)S
: go to MultiSelect mode (~ Selection)R
: go to Regions modeT
: open Transform toolsC
: open Create tools
Important
Requires JDK 17 (later versions may work too)
./gradlew :composeApp:run
./gradlew :composeApp:wasmJsBrowserDevelopmentRun
Build platform-dependent package (e.g. run thru Github Actions using corresponding OS):
./gradlew composeApp:createDistributable
output directory: composeApp/build/compose/binaries/main/app/
Same + use ProGuard to minify:
./gradlew composeApp:createReleaseDistributable
output directory: composeApp/build/compose/binaries/main-release/app/
Individually:
./gradlew packageReleaseMsi
./gradlew packageReleaseDmg
+ notarize/register (requires Apple dev acc)./gradlew packageReleaseDeb
output directory:composeApp/build/compose/binaries/main-release/app/
./gradlew wasmJsBrowserDistribution
output directory: composeApp/build/dist/wasmJs/productionExecutable/
./gradlew wasmJsBrowserDevelopmentExecutableDistribution
output directory: composeApp/build/dist/wasmJs/developmentExecutable/
./gradlew assembleDebug
output directory: composeApp/build/outputs/apk/debug/
To run applications built with Kotlin/Wasm in a browser, you need a browser supporting wasm garbage collection feature:
- For Chrome and Chromium-based browsers (Edge, Brave etc.), it should just work since version 119.
- For Firefox 120+ it should just work.
- For Safari it should work starting from version 18.2.
Note
Safari 18.2 is available for iOS 18.2, iPadOS 18.2, visionOS 2.2, macOS 15.2, macOS Sonoma, and macOS Ventura. On iOS and iPadOS, Safari 18.2 is bundled with the operating system. To get it, update your device to version 18.2 or later. Safari release notes
For more information see https://kotl.in/wasm_help/.