{"id":40122499,"url":"https://github.com/vipenzo/ridley","last_synced_at":"2026-02-09T21:19:33.755Z","repository":{"id":333100549,"uuid":"1135740026","full_name":"vipenzo/ridley","owner":"vipenzo","description":"A turtle graphics-based 3D modeling tool for 3D printing. Write Clojure scripts, see real-time 3D preview, export STL. WebXR support for VR/AR visualization.","archived":false,"fork":false,"pushed_at":"2026-01-17T18:11:35.000Z","size":1232,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-17T20:29:43.674Z","etag":null,"topics":["3d-modeling","3d-printing","cad","clojurescript","computational-geometry","generative-design","openscad","parametric-design","stl","threejs","turtle-graphics","webxr"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vipenzo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-16T14:23:43.000Z","updated_at":"2026-01-17T18:11:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vipenzo/ridley","commit_stats":null,"previous_names":["vipenzo/ridley"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/vipenzo/ridley","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipenzo%2Fridley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipenzo%2Fridley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipenzo%2Fridley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipenzo%2Fridley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vipenzo","download_url":"https://codeload.github.com/vipenzo/ridley/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipenzo%2Fridley/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28568833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T12:50:50.164Z","status":"ssl_error","status_checked_at":"2026-01-19T12:50:42.704Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-modeling","3d-printing","cad","clojurescript","computational-geometry","generative-design","openscad","parametric-design","stl","threejs","turtle-graphics","webxr"],"created_at":"2026-01-19T13:00:30.098Z","updated_at":"2026-02-09T21:19:33.735Z","avatar_url":"https://github.com/vipenzo.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ridley\n\nA 3D CAD environment powered by turtle graphics and ClojureScript. Create 3D models using an intuitive, programmable approach inspired by Logo.\n\n**[Try it now in your browser](https://vipenzo.github.io/Ridley/)** — no installation required!\n\n![Ridley Screenshot](dev-docs/screenshot.png)\n\n## Overview\n\nRidley combines the simplicity of turtle graphics with powerful 3D modeling capabilities. Write Clojure code to define shapes, extrude profiles along paths, and create complex geometry through boolean operations.\n\n**Key Features:**\n- **Turtle-based modeling**: Move, turn, and place geometry in 3D space\n- **Shape extrusion**: Sweep 2D profiles along arbitrary paths\n- **Loft with transformations**: Scale, rotate, and morph shapes during extrusion\n- **Path recording**: Define reusable movement sequences with loops and conditionals\n- **Boolean operations**: Union, difference, and intersection via Manifold WASM\n- **Live REPL**: Interactive development with command history\n\n## Quick Start\n\n```bash\n# Install dependencies\nnpm install\n\n# Start development server\nnpx shadow-cljs watch app\n\n# Open http://localhost:9000\n```\n\n## Usage\n\nThe interface has two panels:\n\n- **Definitions** (top-left): Define reusable shapes, paths, and functions. Press `Cmd+Enter` to evaluate.\n- **REPL** (bottom-left): Execute commands interactively. Press `Enter` to run, `↑↓` for history.\n\n### Basic Commands\n\n```clojure\n;; Movement\n(f 30)        ; Move forward 30 units\n(th 90)       ; Turn horizontal (yaw) 90°\n(tv 45)       ; Turn vertical (pitch) 45°\n(tr 30)       ; Turn roll 30°\n\n;; 3D Primitives\n(box 20)              ; Cube\n(box 30 20 10)        ; Rectangular box\n(sphere 15)           ; Sphere\n(cyl 10 30)           ; Cylinder\n(cone 15 5 25)        ; Cone (r1, r2, height)\n```\n\n### Shape Extrusion\n\nCreate 3D geometry by extruding 2D shapes along the turtle's path:\n\n```clojure\n;; Basic cylinder\n(extrude (circle 10) (f 30))\n\n;; Rectangle extruded with a turn\n(extrude (rect 20 10) (f 20) (th 45) (f 20))\n\n;; Cone via loft (shape transforms during extrusion)\n(loft (circle 20) #(scale %1 (- 1 %2)) (f 30))\n\n;; Twisted extrusion\n(loft (rect 20 10) #(rotate-shape %1 (* %2 90)) (f 40))\n```\n\n### Paths\n\nRecord movement sequences for reuse:\n\n```clojure\n;; Define a square path\n(def square-path (path (dotimes [_ 4] (f 20) (th 90))))\n\n;; Extrude along the path\n(extrude (circle 5) square-path)\n\n;; Create a closed torus\n(extrude-closed (circle 5) square-path)\n```\n\n### Boolean Operations\n\nCombine meshes using CSG operations (requires Manifold WASM):\n\n```clojure\n;; Create two overlapping shapes\n(box 20)\n(def a (last-mesh))\n\n(f 10)\n(sphere 15)\n(def b (last-mesh))\n\n;; Boolean operations\n(mesh-union a b)        ; Combine\n(mesh-difference a b)   ; Subtract\n(mesh-intersection a b) ; Intersect\n```\n\n## Available Shapes\n\n| Shape | Description |\n|-------|-------------|\n| `(circle r)` | Circle with radius r |\n| `(circle r n)` | Circle with n points |\n| `(rect w h)` | Rectangle w×h |\n| `(polygon pts)` | Custom polygon from points |\n| `(star n outer inner)` | Star with n points |\n\n## Shape Transformations\n\nUse these in loft transform functions:\n\n```clojure\n(scale shape factor)        ; Uniform scale\n(scale shape fx fy)         ; Non-uniform scale\n(rotate-shape shape angle)  ; Rotate (degrees)\n(translate shape dx dy)     ; Translate shape\n(morph shape-a shape-b t)   ; Interpolate between shapes\n(resample shape n)          ; Resample to n points\n```\n\n## Architecture\n\n```\nsrc/ridley/\n├── core.cljs           # Application entry point, UI handling\n├── editor/\n│   └── repl.cljs       # SCI-based code evaluation\n├── turtle/\n│   ├── core.cljs       # Turtle state and movement\n│   ├── shape.cljs      # 2D shape constructors\n│   ├── path.cljs       # Path utilities\n│   └── transform.cljs  # Shape transformations\n├── geometry/\n│   ├── primitives.cljs # Box, sphere, cylinder, cone\n│   ├── operations.cljs # Extrude, revolve, sweep, loft\n│   └── faces.cljs      # Face identification\n├── viewport/\n│   └── core.cljs       # Three.js rendering\n└── manifold/\n    └── core.cljs       # Manifold WASM integration\n```\n\n## Dependencies\n\n- [ClojureScript](https://clojurescript.org/) - Language\n- [shadow-cljs](https://shadow-cljs.github.io/docs/UsersGuide.html) - Build tool\n- [SCI](https://github.com/babashka/sci) - Small Clojure Interpreter for REPL\n- [Three.js](https://threejs.org/) - 3D rendering\n- [Manifold](https://github.com/elalish/manifold) - Mesh boolean operations (WASM)\n\n## Development\n\n```bash\n# Watch mode with hot reload\nnpx shadow-cljs watch app\n\n# Production build\nnpx shadow-cljs release app\n\n# REPL connection\nnpx shadow-cljs cljs-repl app\n```\n\n## Examples\n\nSee [dev-docs/Examples.md](dev-docs/Examples.md) for comprehensive examples including:\n- Basic turtle drawing\n- 3D primitives\n- Shape extrusion and sweeping\n- Loft with transformations\n- Closed extrusions (torus-like shapes)\n- Manifold boolean operations\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvipenzo%2Fridley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvipenzo%2Fridley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvipenzo%2Fridley/lists"}