OpenStaad for Python

The open-source, unofficial Python library for STAAD.Pro automation. Fully documented on the web and built for vibe coding with Claude, ChatGPT, and Gemini.

downloadspypi versiongithub stars

A Python library your AI assistant already understands

Connect to several STAAD.Pro models open at the same time — each gets its own ops.connect() session. No COM boilerplate, no dispatch calls: call every function straight off that single, discoverable session.

  • ✓A predictable, discoverable API that Claude, ChatGPT, and Gemini autocomplete accurately
  • ✓Returns native Python types (lists, ints, floats) that models reason about cleanly
  • ✓Every function documented online for assistants to fetch before they write code
  • ✓Runs in scripts, Jupyter notebooks, and Streamlit on any Python 3.10+ setup
$pip install openstaad
from openstaad import ops

s = ops.connect()
print(s.GetSTAADFile())
print(s.GetNodeCount())
print(s.GetBeamList())

Open source vs. official libraries

Bentley Systems now ships its own Python library for STAAD.Pro, and it closely resembles an early version of our open-source library. That's fair, we take it as validation. Since then, this library and its documentation have kept evolving to stay ahead of how AI writes engineering code, and we have plenty more improvements planned: lower token consumption and a smoother vibe-coding experience with OpenStaad.

  • ✓Leaner calls. Fewer tokens per operation than a raw 1:1 API wrap.
  • ✓Custom helpers. Purpose-built functions, not just a mirror of the COM API.
  • ✓AI-first docs. Documentation written for assistants to read and act on.

News

Unit Systems guide updated and validated against STAAD.Pro 2025

Docs · Sep 2026 · Read the guide →

AssignSupportToNode now takes a single node — use AssignSupportToNodes for several

v0.0.15 · Aug 2026 · See both functions →

The complete OpenStaad documentation is now on the web

Docs · Jul 2026 · Browse the docs →

Bentley Systems ships its own automation library for STAAD.Pro v25 and v26

Jun 2026

ops.connect() is now the standard way to use OpenStaad

v0.0.14 · Apr 2026 · Read the migration guide →

100% of the OpenSTAAD API is now implemented

Milestone · Feb 2026

The whole documentation is restructured into 35 structural domains. The split is deliberate — it follows how a structure is built, regroups the OpenSTAAD API classes around the element each function touches, and, crucially, matches how an AI can classify a request and reach for the right command.

Each domain is one focused page (Member, Member Loads, Member Results…), grouped into 6 families, and inside every domain each function is grouped by an action verb — 16 in all (Create, Add, Get, Set/Assign, Remove, …) — so people and models navigate by intent instead of memorizing names.

How domains and verbs work →
Functions
730
Domains
35
Families
6
Action verbs
16
DomainCreateAddGetSet/AssignRemoveDeleteClearSelectTransformExecuteViewOpenSaveCloseExportIsTotal
Node36
Member35
Member Section & Material21
Member Specifications29
Member Fireproofing9
Member Attributes9
Member Annotation7
Plate30
Plate Thickness & Specifications17
Plate Attributes5
Solid (3D)27
Parametric Surface20
Physical Member14
Material20
Standard Table Sections27
UPT Profiles20
Prismatic/General Sections8
Section Query & Attributes22
Support41
Group10
Load Cases39
Nodal Loads11
Member Loads22
Plate Loads9
Environmental Loads17
Load Lists7
Load Combinations24
Analysis (Command)25
Member Results12
Plate Results10
Global Results11
Design (Steel)18
View47
Table/Report28
Session/File (Root)43
Bubble area = number of functions11030

Ready to automate STAAD.Pro?

Start with a guide to get your first script running, or jump straight into the function reference.