Skip to main content

Important Warnings

  • WARNING: Steamware is functional but still under development. Some features (marked with a *) are not yet implemented. While the parts themselves are stable, the script is not fully stable and may break if misused. Follow the instructions carefully for the best results.
  • WARNING: Never 3D print with supports!
  • WARNING: All numerical values are unit-less. Millimeters are assumed, but slicers ultimately determine the units.

What is Steamware?

Steamware stands for Science-Technology-Engineering-Art-Mathematics ware. It is an open-source modular part family and hardware assembly language, much like Legos, combined with software utilities to generate them. Steamware aims to become a baseline solution for high-integrity hardware generation for 3D printing and beyond.

Steamware is designed to be:

  • Fun and creative (toys, tools, and utilities all in one).
  • Modular, with infinite permutations that can be imagined, designed, and generated in seconds.
  • A catalyst for decentralized manufacturing, challenging traditional approaches.


How Does Steamware Work?

The steamware.py script generates:

  • OpenSCAD code.
  • STL renderings.
  • Images and metadata.

These resources allow users to modify, showcase, or manufacture Steamware elements.


Why Was Steamware Built?

Steamware was created with several goals in mind:

  • To inspire creativity in kids.
  • To reduce costs and promote open-source solutions.
  • To explore applications in robotics, wind energy, housing, and even space exploration.
  • To replace traditional materials like cardboard with modular, reusable parts.

Key Features

Self-Evident Identity

Steamware parts have a property called self-evident identity, meaning their configurations can be visually discerned, encoded, measured, and calculated without the need for barcodes or labels. Parts can even be designed mentally and on the fly.

Super Binding

Steamware uses a fractal-like, basis-unit-centric approach to physical binding. Shafts often accommodate smaller basis units (1/3 the size). Binding methods include:

  • Joinery-based binding.
  • Bolt or string binding.
  • Design-specific binding.

No Illegal Operations

Steamware is designed to be utility-grade, versatile, and cost-effective. Square holes can act as bolt shafts, accommodate smaller basis units, or serve other purposes. All parts are built from basis unit blocks with fit padding applied.

Material Independence

Steamware is a geometry, not a material. While limited by the capabilities of 3D printers, it provides a starting point for countless applications.


Can I Make Money with Steamware?

Absolutely! Steamware is open-source, and you are free to use it commercially. Adding your own unique touch is encouraged. Steamware is about fostering creativity and innovation, and the possibilities are endless.

Installation

The steamware.py script runs without dependencies, but the generated scripts require an OpenSCAD instance to view, render, or photograph Steamware.

On Linux

Install OpenSCAD using the following command:

$ sudo apt-get install openscad

On Windows or macOS

Download OpenSCAD from https://openscad.org/downloads.html.


bu: Basis Unit

The bu variable defines the initial scale of the part within the track string. It represents the length, width, and height of each block unit in the Steamware coordinate system. Basis units are not physical but serve as a reference frame for defining Steamware elements.

Block units, derived from basis units, are slightly smaller due to fit padding. Coupler meshes are applied for every spatial transition instruction in a track string to ensure padding does not interfere with binding. Note that adjacency of blocks does not guarantee binding unless specified by a track string.

The default basis unit is 10, assumed to be in millimeters. However, slicing software ultimately determines the units, so check your slicer configurations. OpenSCAD operates with unit-less measures, but the default fit padding (~0.139) suggests millimeters were intended.

This is a block unit, roughly the size of the basis unit minus padding.

fp: Fit Padding

The fp variable specifies the distance subtracted from a basis unit per block for the exterior profile and interior shaft. Fit padding ensures proper binding of objects, especially within narrow shafts.

A recommended starting value is fp = 0.139 (mm), which is the default if not specified. Adjust as needed for your requirements. WARNING: Ensure your slicer is set to millimeters for accurate results.


ts: Track String

The ts variable represents the track string, where each character defines a transition from the previous block. The track string begins with an assumed block at the origin, requiring no transition character.

Transition Characters

  • X, Y, Z: Translate in the positive X, Y, Z directions.
  • A, B, C: Translate in the negative X, Y, Z directions.

Scale Modifier Characters

  • S: Shrink (1/3 the size).
  • G: Grow (3 times the size).

Style Modifier Characters

  • T: Fully cropped.
  • U: Fully uncropped.
  • V: Edges cropped, uncropped corners.
  • W: Cropped corners, uncropped edges.

The track string acts as an instruction set to build Steamware elements while ensuring modularity. Due to the discrete cubic nature, all blocks of identical or mathematically related basis units exhibit modular properties.

Track Characters

Track Character Spatial Transition Instructions Scale Transform Instructions Type Modifier Instructions Special Transform Instructions Style Modifier Instruction
A -x translation : 1 bu
B -y translation : 1 bu
C -z translation : 1 bu
D divide*
E
F filled(Currently 'S')
G grow bu x 3
H
I
J
K
L
M multiply*
N
O open
P protected*
Q
R
S shrink bu ÷ 3
T fully cropped*
U fully uncropped*
V (edges cropped / uncropped corners)*
W (cropped corners / uncropped edges)*
X x translation : 1 bu
Y y translation : 1 bu
Z z translation : 1 bu

mt: Mass Type

The mt variable defines the mass type of the part:

  • O: Open (default). Identical to the diagram above.
  • P: Protected. Hollow but covered, acting like a pipe extension.
  • F: Filled. Solid with no hollow sections. WARNING: The slicer may print at the density set by the user.

en: Export Name

The en variable specifies the base name for generated files (excluding extensions). Files are placed in a directory named after this variable. If left blank, en defaults to unnamed_steamware_<n>.

ed: Export Directory

The ed variable defines the path where exports are saved: <export_path>/<export_name>. If left blank, ed defaults to the current directory.

Examples

WARNING: All numerical values are unit-less. OpenSCAD operates without units, so physical units (e.g., millimeters) are applied later using slicers. If working in inches, adjust fit padding accordingly.

Example 1: Basic Part

$ steamware \
    --en example_part \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --mt O \
    --ts XXSXXX

Example 2: Doughnut Shape

$ steamware \
    --en doughnut \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --mt O \
    --ts XXXBBAAAYY

Example 3: Cross Shape

$ steamware \
    --en cross \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --ts XXXXAAYYBBBB

Each command generates an .scad file, an .stl file, and a .png file with the specified filename.

Metadata

Release files for steamware 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for steamware 0.1.1
File Size Uploaded
steamware-0.1.1.tar.gz 13.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for steamware 0.1.1
File Interpreter ABI Platform
steamware-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.2 kB

Release files / steamware-0.1.1.tar.gz

Download URL steamware-0.1.1.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ff7089171100bae4682be3c5bbfcfcbaf6b1155e883219bbedd477d18f49eaca
BLAKE2b-256 checksum
How to use checksums
583f109abad2b4b719ea38b255be6f00ad80e4bcf170cb716473b4dd6957b437
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.4

Release files / steamware-0.1.1-py3-none-any.whl

Download URL steamware-0.1.1-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c8708bab9b62dbffb764bae5ecd5569d3351f3d67f76022ce17930a04d78ca7d
BLAKE2b-256 checksum
How to use checksums
a6497a6195f9c07c49a00971590005b54b474f71180ac64b2696552a78b1c0b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.4

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page