Hyperbook Documentation

OpenSCAD

The openscad directive provides an interactive OpenSCAD editor with:

  • a code view,
  • a parameter view (JSON object mapped to -D variables),
  • and a 3D preview.

You can render the model, copy the code, and download exports as STL or 3MF.

Usage

Wrap OpenSCAD code in a :::openscad block and use a scad (or openscad) code fence.

:::openscad
 
```scad
cube([20,20,20], center=true);
```
 
:::
Preview
cube([20,20,20], center=true);

Attributes

Attribute Description Default
id Unique id for persistence auto-generated
src Load source from an external file path inline code block
height Height of the editor/preview container calc(100dvh - 80px)
library Comma-separated list of libraries to load into the OpenSCAD environment none

Possible libraries include: BOSL2, BOSL, MCAD, NopSCADlib, fonts

Load code from file

:::openscad{src="openscad/example.scad"}
:::

Example with variables

:::openscad
 
```scad
segments = 5;
size = 5;
height = 10;
rounded = 1;
label = "K";
 
$fn = segments;
 
module body(size, height, rounded) {
  if (rounded) {
    minkowski() {
      cube([size, size, height], center=true);
      sphere(r=1);
    }
  } else {
    cube([size, size, height], center=true);
  }
}
 
difference() {
  body(size, height, rounded);
  translate([0, 0, height / 2 + 0.1])
    linear_extrude(height=1)
      text(label, size=8, halign="center", valign="center");
}
```
 
:::
Preview
segments = 5; size = 5; height = 10; rounded = 1; label = "K"; $fn = segments; module body(size, height, rounded) { if (rounded) { minkowski() { cube([size, size, height], center=true); sphere(r=1); } } else { cube([size, size, height], center=true); } } difference() { body(size, height, rounded); translate([0, 0, height / 2 + 0.1]) linear_extrude(height=1) text(label, size=8, halign="center", valign="center"); }

Example with Library

:::openscad{library="BOSL2"}
```scad
include <BOSL2/std.scad>
include <BOSL2/walls.scad>
 
$fn = 100;
rod_diameter = 12;
 
module bridge(width = 230, height = 80, rod_diameter = 12) {
  pilar_width = height / 2;
  pilar_height = height + 5;
  middle_width = width - pilar_width * 2;
  middle_thickness = max(rod_diameter, 19);
  rod_diameter_plus_threshold = rod_diameter + 0.5;
  module pilar() {
    difference() {
      cube([pilar_width, middle_thickness + 10, pilar_height], center=true);
      rotate([90, 0, 0])
      translate([0, 0, -middle_thickness/2])
      cylinder(h=middle_thickness, d=rod_diameter_plus_threshold, center=true);
      rotate([90, 0, 0])
      translate([0, 0, middle_thickness/2])
      cylinder(h=middle_thickness, d=rod_diameter_plus_threshold / 4, center=true);
      translate([0, 0, pilar_height/2])
      cylinder(h=rod_diameter_plus_threshold*2, d=rod_diameter_plus_threshold, center=true);
      translate([0, 0, -pilar_height/2])
      cylinder(h=rod_diameter_plus_threshold*2, d=rod_diameter_plus_threshold, center=true);
    }
  }
 
  module middle() {
    s = [[0, 0], [middle_width, 0], [middle_width, -height / 2 - 20], [middle_width - 20, -height / 2 - 10], [20, -height / 2 - 10], [0, -height / 2 - 20]];
    rotate([90, 0, 0])
    translate([0,2.5,0])
      hex_panel(s, 2, 10, h=12, frame=5);
  }
 
  middle();
  translate([-pilar_width / 2, 0, -height/2])
    pilar();
  translate([middle_width + pilar_width / 2, 0, -height/2])
    pilar();
}
 
bridge(rod_diameter=rod_diameter);
```
 
:::
Preview
include <BOSL2/std.scad> include <BOSL2/walls.scad> $fn = 100; rod_diameter = 12; module bridge(width = 230, height = 80, rod_diameter = 12) { pilar_width = height / 2; pilar_height = height + 5; middle_width = width - pilar_width * 2; middle_thickness = max(rod_diameter, 19); rod_diameter_plus_threshold = rod_diameter + 0.5; module pilar() { difference() { cube([pilar_width, middle_thickness + 10, pilar_height], center=true); rotate([90, 0, 0]) translate([0, 0, -middle_thickness/2]) cylinder(h=middle_thickness, d=rod_diameter_plus_threshold, center=true); rotate([90, 0, 0]) translate([0, 0, middle_thickness/2]) cylinder(h=middle_thickness, d=rod_diameter_plus_threshold / 4, center=true); translate([0, 0, pilar_height/2]) cylinder(h=rod_diameter_plus_threshold*2, d=rod_diameter_plus_threshold, center=true); translate([0, 0, -pilar_height/2]) cylinder(h=rod_diameter_plus_threshold*2, d=rod_diameter_plus_threshold, center=true); } } module middle() { s = [[0, 0], [middle_width, 0], [middle_width, -height / 2 - 20], [middle_width - 20, -height / 2 - 10], [20, -height / 2 - 10], [0, -height / 2 - 20]]; rotate([90, 0, 0]) translate([0,2.5,0]) hex_panel(s, 2, 10, h=12, frame=5); } middle(); translate([-pilar_width / 2, 0, -height/2]) pilar(); translate([middle_width + pilar_width / 2, 0, -height/2]) pilar(); } bridge(rod_diameter=rod_diameter);
OpenSCAD

Create Shareable URL

Select Sections

✎ GitHub© Copyright 2026 by OpenPatch