♾️ 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
./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+.
- Relevant Wasm compatibility table.
For more information see https://kotl.in/wasm_help/.