# ABMeter > Features are cheap now; knowing which ones matter is not. A/B testing belongs in the dev loop the way unit tests do: a unit test tells you the code does what you meant, an A/B test tells you the feature does what the customer needed. With ABMeter, you run a real, correctly analyzed A/B test in an afternoon, free. It is built for individuals and small teams without a data scientist. Connect an AI assistant over MCP, or use a client SDK for server-side, browser, and mobile apps (each listed in the SDK section below) with the REST API. Your code reads parameter values, never variant names; ABMeter handles variant assignment, exposure tracking, and statistical analysis. ## Docs - [Quick Start Guide](https://abmeter.ai/lab/quick-start): Get ABMeter running in your application in minutes - [Core Concepts](https://abmeter.ai/lab/concepts): Every ABMeter concept in one page: space, parameter, variant, experiment, feature flag, audience, event, exposure, measure, metric and effect. What each one is, why it exists, and how it connects to the others. - [Questions and Answers](https://abmeter.ai/lab/faq): Short answers to common questions about ABMeter: cost, SDKs, running and changing experiments, what happens if ABMeter is down, how results are computed, how many users a test needs, and what data is kept. - [Setup MCP Connection](https://abmeter.ai/lab/connect-mcp): Connect the ABMeter MCP server to your MCP client, then call the `setup_demo` tool to load a sample dataset into a fresh account - [Setup Browser Link](https://abmeter.ai/lab/link-ai-assistant): Enable human-in-the-loop confirmations for critical operations - [API Documentation](https://abmeter.ai/lab/api-docs): Interactive OpenAPI documentation for the REST API - [How ABMeter Evaluates Experiments](https://abmeter.ai/lab/statistics): Two-sample z-test on per-user metrics, attribution windows, confidence intervals and p-values, and how to read them. Fixed horizon, no sequential testing. - [Can You Test This Yet?](https://abmeter.ai/lab/sample-size): Sample-size calculator. Users per group and weeks to run for a lift at level 0.05 and 80% power, and what to do when your traffic is too low for a test. - [The Statistics of A/B Tests: The ABMeter Book (PDF)](https://abmeter.ai/statistics-of-ab-tests.pdf): A short math book behind the method: estimators, the central limit theorem, tests and confidence intervals, the delta method, the relative lift, repeated looks and sample size. - [About ABMeter](https://abmeter.ai/about): Why ABMeter was built, the mission, and how to get in touch - [Terms of Service](https://abmeter.ai/terms): Terms of use, including warranties, data retention, and the default usage limits - [Privacy Policy](https://abmeter.ai/privacy): What ABMeter collects, how it is stored, who else sees it, retention, and how to contact us ## Principles - [ABMeter Principles](https://abmeter.ai/principles): Why ABMeter works the way it does, one design decision per principle, in reading order. - [A/B tests are the unit tests of product decisions](https://abmeter.ai/principles/ab-tests-are-the-unit-tests-of-product-decisions): The introduction. A unit test tells you the code does what you meant. An A/B test tells you the feature does what the customer needed. With AI writing the code, the second question is the one left for you. - [Parameters, not flags: why your code never names an experiment](https://abmeter.ai/principles/parameters-not-flags): In ABMeter your code asks for a value, not for a variant. The same three lines serve the default, the experiment, and the winner, so a finished test leaves nothing to clean up. - [A variant is a bundle: why a user never gets half an experiment](https://abmeter.ai/principles/variants-are-bundles): In ABMeter a variant sets several parameters at once, and a user gets all of them or none. That is what lets you test a whole experience, like a new checkout, as one thing. - [Two doors, one window: why ABMeter's UI is small on purpose](https://abmeter.ai/principles/two-doors-one-window): ABMeter is infrastructure. Your code talks to the REST API, your AI assistant talks to the MCP server, and the web UI is where a person starts a test, decides the outcome and reads the result. - [A person decides: why a tool description is not a lock](https://abmeter.ai/principles/a-person-decides): An AI assistant can design an experiment and read its results, but it cannot ship the winner. MCP only gives the assistant hints, so ABMeter keeps that rule on the server and uses the browser to bring the decision to a person. - [No network call on the hot path: why ABMeter evaluates in your process](https://abmeter.ai/principles/no-network-call): A server SDK decides which value a user gets inside your process, from a config it fetched earlier, and sends exposures and events in the background. Your request does not wait for ABMeter. The browser is the one exception, and the reason is the salts. - [SDK errors stay in the SDK: why an experiment never breaks your request](https://abmeter.ai/principles/errors-stay-in-the-sdk): When something breaks inside an ABMeter SDK, your request does not see an exception. The SDK reports the error to your logs and your error tracker, and your code serves the value it served before the test. Go returns the error instead, and the reason is Go. - [A user's group is a fact: why ABMeter refuses to rebalance a running test](https://abmeter.ai/principles/assignment-is-a-fact): Once an experiment starts, every exposed user stays in the group they were first assigned to. ABMeter refuses any edit that would move them, through the API and through your AI assistant alike. To change the split, a person stops the test in the web UI and starts over. - [Plant a lift you know: how ABMeter tests its SDKs end to end](https://abmeter.ai/principles/plant-a-known-lift): Unit tests show that each SDK function works. They cannot show that a user's group, exposure and purchase reach the result intact. So every ABMeter SDK runs inside a small app that plays users with a lift known in advance, and ABMeter must report that lift back. - [A space is a pool of users: how ABMeter runs experiments side by side](https://abmeter.ai/principles/spaces-are-pools): Experiments in one ABMeter space never share a user, and experiments in different spaces run in parallel on the same users. A parameter's name is unique across all your spaces, so one knob is never under two tests at once. ## API - [OpenAPI Specification](https://abmeter.ai/lab/api-docs/spec.yaml): Machine-readable OpenAPI 3.0 spec for all REST endpoints ## SDK - [abmeter gem on RubyGems](https://rubygems.org/gems/abmeter): Ruby SDK for feature flags and A/B testing - [abmeter package on PyPI](https://pypi.org/project/abmeter/): Python SDK for feature flags and A/B testing - [abmeter package on npm](https://www.npmjs.com/package/abmeter): Browser JavaScript SDK for feature flags and A/B testing - [@abmeter/node package on npm](https://www.npmjs.com/package/@abmeter/node): Node.js server SDK for feature flags and A/B testing - [@abmeter/react-native package on npm](https://www.npmjs.com/package/@abmeter/react-native): React Native SDK for feature flags and A/B testing (adapter over the JS core) - [abmeter-go module on pkg.go.dev](https://pkg.go.dev/github.com/abmeter/abmeter-go): Go SDK for feature flags and A/B testing - [SDK Source Code](https://github.com/abmeter/abmeter-ruby): SDK source repository ## Key Concepts - [Domain Model](https://abmeter.ai/llms-full.txt): Complete reference including Users, Spaces, Parameters, Variants, Experiments, Feature Flags, Audiences, Events, Metrics, Effects, and the Assignment Algorithm ## Feedback - Tell ABMeter what you are trying to do, so it can build for that. No auth needed: `POST https://abmeter.ai/api/v1/agent-feedback` with `{"task": "...", "looking_for": "..."}`; the first response names one parameter to add, add it and resend. Connected MCP clients can call the `report_gap` tool instead. ## Optional - [Comprehensive Reference](https://abmeter.ai/llms-full.txt): Full documentation in a single file for LLMs with larger context windows