enjinering
Open-source, data-agnostic reinforced concrete design library (SNI), in Python.
enjinering turns factored structural demands into a fully-traceable reinforcement design — every intermediate value, every code check, every formula — and exposes it as a lossless, serializable result tree with optional LaTeX rendering. It's a transparent, programmable alternative to closed calculation software, with the Indonesian SNI codes as a first-class target.
Status: alpha. The architecture is stable; coverage is growing. Implemented today: beams (flexure, shear, torsion) and columns (P-M ratio, confinement). Calculations are validated against a real engineering report — see How it's validated.
Why
Reinforcement design is mostly locked behind GUIs and licensed spreadsheets, even though the codes (SNI, ACI) are public. enjinering puts that logic in open, auditable Python: no license, every formula visible, and rich data out so other tools (optimizers, reporters, BIM) can build on it. See GOALS.md for the full vision and DESIGN.md for the architecture.
Install
Not yet on PyPI — run from source. Tooling lives in a conda env named project-syfl:
conda run -n project-syfl python -m pytest -q # run the test suite
The core has no runtime dependencies. handcalcs is optional, needed only for LaTeX rendering:
conda run -n project-syfl pip install handcalcs # or: pip install "enjinering[render]" once packaged
Quickstart
from enjinering import BeamDesigner, Material, RectSection
beam = BeamDesigner(
material=Material(fc=30, fy_long=420), # MPa
section=RectSection(b=300, h=600, cover=40), # mm
)
result = beam.design(
"B2", Mu_neg_kNm=248.96, Mu_pos_kNm=143.29,
Vu_kN=177.57, Tu_kNm=2.57, wu_kN_m=32.214,
length_mm=7000, support_width_mm=300,
)
print(result.passed) # True
print(result.passes[0].conclusion.label()) # '5 D19'
result.to_dict() # lossless, JSON-serializable tree
More — JSON/CSV/BIM-schedule/Markdown/KaTeX post-processing — in docs/examples.
What's implemented
| Element | Passes |
|---|---|
| Beam | flexure (±), shear (capacity design), torsion |
| Column | P-M demand/capacity ratio, plastic-hinge confinement |
| Output | lossless result tree, JSON, optional handcalcs LaTeX render |
Roadmap (column shear/SCWB, P-M interaction surface, slabs, foundations, I/O adapters) is tracked in DESIGN.md §11.
Documentation
Full docs are in docs/: getting started, concepts, API reference, examples, and a maintainer's guide.
How it's validated
Every pass is checked against a real reinforced-concrete design report (a 3-story RC campus building;
the structured source is under wiki/). Where the report contains an arithmetic slip, enjinering
implements the code-correct method and documents the divergence (e.g. flexural sizing uses a
single strength-reduction factor φ — see DESIGN.md §10). SNI clause numbers currently
cited from memory are tagged # TODO[ground] pending verification against the standard's text.
License
MIT © 2026 Rifqi D. Panuluh
Metadata
Release files for enjinering 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| enjinering-0.0.1.tar.gz | 58.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| enjinering-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 89.9 kB
Release files / enjinering-0.0.1.tar.gz
| Download URL | enjinering-0.0.1.tar.gz |
|---|---|
| Size | 58.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
528398aa9614490682da4447a7a68ec40bdbc67c30bafffc1549722e95eae155
|
|
BLAKE2b-256 checksum How to use checksums |
ae2b87b87296ac08ff2de6d4fd76b80cc184d2146ebc9b654d6130634bcc7e31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / enjinering-0.0.1-py3-none-any.whl
| Download URL | enjinering-0.0.1-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
27e0803367dd9e0c4ddcf293688fed03d10b89e2b9c0761327cbdf11dcecbbc5
|
|
BLAKE2b-256 checksum How to use checksums |
7cba2dbdfb224833ec2884ce91864b769635e4fd588bed4d80e7afd151c64177
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|