`.oce` files — your pipeline, your file, your repo
One TOML file captures a full analysis. Commit it to git. Diff last quarter’s run vs today’s. Hand it to a coworker and they get the exact same result. A GUI’s “save state” button can’t touch this.
Every analysis is an .oce file you commit alongside the data. Share the file, rerun it a year later, or hand it to an AI assistant and get an exact answer back.
Generate an experimental design — MaxDiff, CBC, conjoint — with the parameters you actually want, not the defaults the GUI gives you.
design-maxdiff::design
[["design-maxdiff::design"]]n_items = 10items_per_task = 3tasks_per_version = 8versions = 4run_dir = "./design"Turn raw respondent data into a clean, model-ready long file. The same wrangling runs on the pilot and the full field.
choice-wrangling::pipeline-maxdiff
[["choice-wrangling::pipeline-maxdiff"]]design_csv = "design.csv"respondent_csv = "respondents.csv"run_dir = "./workspace"run_name = "pilot"Fit a hierarchical Bayesian model via Stan and finalize diagnostics + part-worths in one call. Swap the plugin to switch estimator — the rest of the pipeline stays the same.
model-hb-stan::fit-finalize
[["model-hb-stan::fit-finalize"]]input = "./data/hb_data.csv"run_dir = "./runs"run_name = "pilot"num_samples = 1000num_chains = 4Score scenarios, rank subsets, compute reach — then commit the output next to the .oce that produced it. A year from now you’ll still know exactly how the number was made.
maxdiff-turf::score-scenarios
[["maxdiff-turf::score-scenarios"]]utilities = "./utilities.csv"scenarios = "./scenarios.csv"out_dir = "./runs/score-scenarios"reach_method = "first-choice"`.oce` files — your pipeline, your file, your repo
One TOML file captures a full analysis. Commit it to git. Diff last quarter’s run vs today’s. Hand it to a coworker and they get the exact same result. A GUI’s “save state” button can’t touch this.
First-class help + IntelliSense, built for LLMs
Every endpoint has structured, machine-readable docs. IntelliSense autocompletes params as you type. Ask an AI to write your .oce — it has real schemas to anchor against. Scripting without the friction.
Timeline — every edit snapshotted, diffable
Regret a parameter tweak? Roll back. Want to see what changed between Monday and Friday? Scrub. Every .oce edit is captured automatically.
Job queue — parallel, sequential, or scheduled
Queue a batch of runs and let them work through in order, or fan several out at once on separate lanes. Need to kick off a 4-hour HB fit at midnight? Schedule it and close the lid.
Open-source, native-speed plugins
Compiled, open-source executables — estimations that crawl in R or Python run in seconds in native Rust. No vendor black-boxes. No cloud round-trips.
Plugin SDK in the language that fits
Rust, R, Python, Julia — plugins speak ocp-json/1. The fast solver in Rust, the Stan model in R, the data prep in Python — all interchangeable from one workbench.
Registry updates — always the latest method
New techniques ship as signed plugin updates on registry.openchoice.app. One click, cryptographically verified, current tools in your hands — no installer dance, no waiting for v2.5.
Your laptop, your data
Cross-platform desktop (Windows, Mac, Linux). No cloud lock-in. Install once, keep forever. Your numbers never leave the machine you chose.