Skip to main content

just-makeit

CI Docs codecov

Getting an algorithm right is paramount. Yet it's rarely the bottleneck. Turning it into shippable code — a tested C library, a Python binding, a build system, packaging, and a public C API that Rust or C++ can also link — is the tedious, exacting work that repeats on every project.

just-makeit new scaffolds the whole thing in one command: core C library, thin Python binding, CMake build system, and full test coverage — all passing before you write a single line of your algorithm.


Try it now!

Open in GitHub Codespaces

Click the badge to launch a pre-built sandbox in your browser — no install, no compiler, no Docker required. You'll land in a GitHub Codespaces environment with just-makeit installed, dozens of bundled examples already scaffolded and compiled, and a terminal ready to go. Run an example end-to-end, browse the generated C and Python source, or start a fresh project with just-makeit new.


Quickstart

install-deps installs cmake, a C compiler and pkg-config through your system package manager (only when cmake or a C compiler is missing), then numpy and just-makeit into a Python venv (default /tmp/jm-venv, or pass your own path). Run just-makeit install-deps --help for the full reference.

curl (auto-installs dependencies, creates and activates venv):

. <(curl -fsSL https://just-buildit.github.io/just-makeit/install.sh) [-- path]

Append --check to report what would change without installing anything, or --force to reinstall just-makeit even when it is current.

pip:

pip install just-makeit && just-makeit install-deps [path]

uv:

uv tool install just-makeit && just-makeit install-deps [path]

Docker (no install needed):

docker run --rm -it ghcr.io/just-buildit/jm-examples-linux:latest

Quick examples

Simple standalone extension:

just-makeit new my_project --object engine --state gain:double:1.0
cd my_project && make && make test

Module subpackage — multiple types in one .so:

just-makeit new my_filters --module filter
cd my_filters
just-makeit object fir    --module filter \
    --state "coeffs:float[16]" --state "delay:float _Complex[16]" --state "gain:float:1.0"
just-makeit object biquad --module filter \
    --arg-type float --return-type float \
    --state "b0:double:1.0" --state "b1:double:0.0" --state "a1:double:0.0"
make && make test
from my_filters.filter import Fir, Biquad   # one .so, one import

What you get

my_project/
├── native/
│   ├── inc/my_project/engine/engine_core.h   # public C API + inline step()
│   ├── src/engine/
│   │   ├── engine_core.c          # block processor + lifecycle
│   │   └── engine_ext.c           # thin Python binding
│   └── tests/test_engine_core.c   # CTest
├── src/my_project/
│   ├── engine.pyi                 # type stub
│   └── tests/test_engine.py       # pytest / unittest
├── cmake/my_project.pc.in         # pkg-config template
├── CMakeLists.txt
├── Makefile
├── just-makeit.toml
├── objects/engine.toml            # engine's manifest fragment
└── bootstrap.toml            # tool + system-dep manifest (jbx install-deps)

bootstrap.toml lists the system packages a build needs, per package manager. jbx installs them: jbx install-deps -g dev picks your OS's package manager.


C API

my_project_engine_state_t *my_project_engine_create(double gain);
void my_project_engine_destroy(my_project_engine_state_t *state);
void my_project_engine_reset(my_project_engine_state_t *state);

static inline float _Complex
my_project_engine_step(const my_project_engine_state_t *state,
                       float _Complex x);

void my_project_engine_steps(my_project_engine_state_t *state,
                             const float _Complex *input,
                             float _Complex *output, size_t n);

double my_project_engine_get_gain(const my_project_engine_state_t *state);
void my_project_engine_set_gain(my_project_engine_state_t *state, double val);

Every C symbol jm derives carries [project] c_prefix, which jm new sets to the project name; jm new --no-c-prefix gives bare engine_create.

Python API

from my_project import Engine
import numpy as np

obj = Engine(gain=2.0)

y = obj.step(1.0 + 0.5j)

x = np.ones(1024, dtype=np.complex64)
y = obj.steps(x)          # allocates output ndarray
obj.steps(x, out=y)       # zero-copy

obj.set_gain(0.5)
obj.reset()

with Engine() as e:
    y = e.steps(x)

Requirements

  • Python 3.9+
  • CMake ≥ 3.16
  • A C99 compiler (GCC or Clang; on Windows, clang-cl — not MSVC's cl.exe)
  • NumPy (runtime, for generated projects)

Full documentation →

Authors

Matthew T. Hunter, Ph.D. and Claude Code

Metadata

Release files for just-makeit 0.98.2

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

Built distribution (wheel)

Table of built distributions (wheels) for just-makeit 0.98.2
File Interpreter ABI Platform
just_makeit-0.98.2-py3-none-any.whl Python 3 none any Details

Release files / just_makeit-0.98.2-py3-none-any.whl

Download URL just_makeit-0.98.2-py3-none-any.whl
Size 1.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
d3b21b4ba3b0c85f07e62b26ffcb11cc635903049b3dcc30086574c07ac91893
BLAKE2b-256 checksum
How to use checksums
9cc0f302a326ed48e91c555f6d554ca24fda8bc5c0d66ce1d0e5644273e34d15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

0.104.0

1 release file

0.103.0

1 release file

0.102.0

1 release file

0.99.0

1 release file

0.98.3

1 release file

This release

0.98.2 This release

1 release file

0.98.1

1 release file

0.98.0

1 release file

0.97.0

1 release file

0.96.1

1 release file

0.96.0

1 release file

0.95.0

1 release file

0.94.0

1 release file

0.93.0

1 release file

0.92.3

1 release file

0.92.2

1 release file

0.92.1

1 release file

0.92.0

1 release file

0.91.0

1 release file

0.90.1

1 release file

0.89.0

1 release file

0.88.0

1 release file

0.87.1

1 release file

0.87.0

1 release file

0.86.0

1 release file

0.85.0

1 release file

0.84.0

1 release file

0.83.0

1 release file

0.82.3

1 release file

0.82.2

1 release file

0.82.1

1 release file

0.82.0

1 release file

0.81.0

1 release file

0.80.1

1 release file

0.80.0

1 release file

0.79.1

1 release file

0.79.0

1 release file

0.78.1

1 release file

0.78.0

1 release file

0.77.2

1 release file

0.77.0

1 release file

0.76.5

1 release file

0.76.4

1 release file

0.76.3

1 release file

0.76.2

1 release file

0.76.1

1 release file

0.76.0

1 release file

0.75.5

1 release file

0.75.4

1 release file

0.75.3

1 release file

0.75.2

1 release file

0.75.1

1 release file

0.75.0

1 release file

0.74.0

1 release file

0.73.1

1 release file

0.73.0

1 release file

0.72.2

1 release file

0.72.1

1 release file

0.72.0

1 release file

0.71.1

1 release file

0.71.0

1 release file

0.70.1

1 release file

0.70.0

1 release file

0.69.2

1 release file

0.69.1

1 release file

0.69.0

1 release file

0.68.0

1 release file

0.67.3

1 release file

0.67.2

1 release file

0.67.1

1 release file

0.67.0

1 release file

0.66.1

1 release file

0.66.0

1 release file

0.65.0

1 release file

0.64.1

1 release file

0.64.0

1 release file

0.63.3

1 release file

0.63.2

1 release file

0.63.1

1 release file

0.63.0

1 release file

0.62.1

1 release file

0.62.0

1 release file

0.61.1

1 release file

0.61.0

1 release file

0.60.2

1 release file

0.60.1

1 release file

0.60.0

1 release file

0.59.1

1 release file

0.59.0

1 release file

0.58.0

1 release file

0.57.0

1 release file

0.56.0

1 release file

0.55.3

1 release file

0.55.2

1 release file

0.55.1

1 release file

0.55.0

1 release file

0.54.4

1 release file

0.54.3

1 release file

0.54.2

1 release file

0.54.1

1 release file

0.54.0

1 release file

0.53.1

1 release file

0.53.0

1 release file

0.52.0

1 release file

0.51.0

1 release file

0.50.0

1 release file

0.49.0

1 release file

0.48.0

1 release file

0.47.0

1 release file

0.46.2

1 release file

0.46.1

1 release file

0.46.0

1 release file

0.45.0

1 release file

0.44.0

1 release file

0.43.2

1 release file

0.43.1

1 release file

0.43.0

1 release file

0.42.0

1 release file

0.41.0

1 release file

0.40.0

1 release file

0.39.0

1 release file

0.38.3

1 release file

0.38.2

1 release file

0.38.1

1 release file

0.38.0

1 release file

0.37.1

1 release file

0.37.0

1 release file

0.36.0

1 release file

0.35.0

1 release file

0.34.0

1 release file

0.33.16

1 release file

0.33.15

1 release file

0.33.14

1 release file

0.33.13

1 release file

0.33.12

1 release file

0.33.11

1 release file

0.33.10

1 release file

0.33.9

1 release file

0.33.8

1 release file

0.33.7

1 release file

0.33.6

1 release file

0.33.5

1 release file

0.33.4

1 release file

0.33.3

1 release file

0.33.2

1 release file

0.33.1

1 release file

0.33.0

1 release file

0.32.0

1 release file

0.31.0

1 release file

0.30.2

1 release file

0.30.1

1 release file

0.30.0

1 release file

0.29.1

1 release file

0.29.0

1 release file

0.28.11

1 release file

0.28.10

1 release file

0.28.9

1 release file

0.28.8

1 release file

0.28.7

1 release file

0.28.6

1 release file

0.28.5

1 release file

0.28.4

1 release file

0.28.3

1 release file

0.28.2

1 release file

0.28.1

1 release file

0.28.0

1 release file

0.27.0

1 release file

0.26.1

1 release file

0.26.0

1 release file

0.25.1

1 release file

0.25.0

1 release file

0.24.0

1 release file

0.23.0

1 release file

0.22.0

1 release file

0.21.0

1 release file

0.20.0

1 release file

0.19.37

1 release file

0.19.36

1 release file

0.19.35

1 release file

0.19.34

1 release file

0.19.33

1 release file

0.19.32

1 release file

0.19.31

1 release file

0.19.30

1 release file

0.19.27

1 release file

0.19.26

1 release file

0.19.25

1 release file

0.19.24

1 release file

0.19.23

1 release file

0.19.22

1 release file

0.19.21

1 release file

0.19.20

1 release file

0.19.19

1 release file

0.19.18

1 release file

0.19.17

1 release file

0.19.16

1 release file

0.19.15

1 release file

0.19.14

1 release file

0.19.13

1 release file

0.19.12

1 release file

0.19.11

1 release file

0.19.10

1 release file

0.19.9

1 release file

0.19.8

1 release file

0.19.7

1 release file

0.19.6

1 release file

0.19.5

1 release file

0.19.4

1 release file

0.19.3

1 release file

0.19.2

1 release file

0.19.1

1 release file

0.19.0

1 release file

0.18.1

1 release file

0.18.0

1 release file

0.17.1

1 release file

0.17.0

1 release file

0.16.4

1 release file

0.16.3

1 release file

0.16.2

1 release file

0.16.1

1 release file

0.16.0

1 release file

0.15.9

1 release file

0.15.8

1 release file

0.15.7

1 release file

0.15.6

1 release file

0.15.5

1 release file

0.15.4

1 release file

0.15.3

1 release file

0.15.2

1 release file

0.15.1

1 release file

0.15.0

1 release file

0.14.9

1 release file

0.14.8

1 release file

0.14.7

1 release file

0.14.6

1 release file

0.14.5

1 release file

0.14.4

1 release file

0.14.3

1 release file

0.14.2

1 release file

0.14.1

1 release file

0.14.0

1 release file

0.13.24

1 release file

0.13.23

1 release file

0.13.22

1 release file

0.13.21

1 release file

0.13.19

1 release file

0.13.18

1 release file

0.13.15

1 release file

0.13.14

1 release file

0.13.13

1 release file

0.13.12

1 release file

0.13.10

1 release file

0.13.9

1 release file

0.13.8

1 release file

0.13.7

1 release file

0.13.6

1 release file

0.13.5

1 release file

0.13.4

1 release file

0.13.3

1 release file

0.13.2

1 release file

0.13.1

1 release file

0.13.0

1 release file

0.12.0

1 release file

0.11.5

1 release file

0.11.4

1 release file

0.11.3

1 release file

0.11.2

1 release file

0.11.1

1 release file

0.11.0

1 release file

0.10.9

1 release file

0.10.8

1 release file

0.10.7

1 release file

0.10.6

1 release file

0.10.5

1 release file

0.10.4

1 release file

0.10.3

1 release file

0.10.2

1 release file

0.10.1

1 release file

0.10.0

1 release file

0.9.13

1 release file

0.9.12

1 release file

0.9.11

1 release file

0.9.10

1 release file

0.9.9

1 release file

0.9.6

1 release file

0.9.5

1 release file

0.9.4

1 release file

0.9.3

1 release file

0.9.2

1 release file

0.9.1

1 release file

0.9.0

1 release file

0.8.4

1 release file

0.8.3

1 release file

0.8.2

1 release file

0.8.0

1 release file

0.7.0

1 release file

0.6.9

1 release file

0.6.8

1 release file

0.6.7

1 release file

0.6.6

1 release file

0.6.5

1 release file

0.6.4

1 release file

0.6.3

1 release file

0.6.2

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.4.0

1 release file

0.2.0

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

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