What Is Lipinski's Rule of Five?
In 1997, Christopher Lipinski and his colleagues at Pfizer published a paper that would fundamentally change how drug designers think about molecular properties. After analyzing thousands of compounds in clinical trials, they noticed a striking pattern: most successfully absorbed oral drugs shared a common set of physical property ranges. Molecules outside these ranges tended to fail in clinical development due to poor absorption.
The result was Lipinski's Rule of Five (Ro5), a set of four simple guidelines that predict whether a compound is likely to be orally bioavailable. The name comes from the convenient fact that all the numerical cutoffs are multiples of five:
- Molecular Weight (MW) ≤ 500 Da: Larger molecules have more difficulty crossing biological membranes. Above 500 Da, oral absorption drops significantly.
- LogP ≤ 5: LogP measures lipophilicity (how much a molecule prefers oil over water). Excessively lipophilic compounds dissolve poorly in aqueous environments like blood plasma and tend to accumulate in fat tissue.
- Hydrogen Bond Donors (HBD) ≤ 5: HBDs are OH and NH groups. Too many make the molecule overly polar for passive membrane permeation.
- Hydrogen Bond Acceptors (HBA) ≤ 10: HBAs are oxygen and nitrogen atoms. Like HBDs, excess acceptors increase polarity and reduce membrane crossing.
The original paper, "Experimental and computational approaches to estimate solubility and permeability in drug discovery and development settings," published in Advanced Drug Delivery Reviews, has been cited over 20,000 times. It remains one of the most influential publications in pharmaceutical science, and the Rule of Five is taught in every medicinal chemistry program worldwide.
Why Each Rule Matters
Understanding the physical chemistry behind each rule makes you a better drug designer. These are not arbitrary numbers – each cutoff reflects real constraints imposed by human biology on drug absorption.
Molecular Weight: The Size Barrier
Cell membranes are lipid bilayers roughly 7–8 nanometers thick. For a drug molecule to cross from the intestinal lumen into the bloodstream, it must slip between or through these membranes. Larger molecules face increasing difficulty with this process. Above 500 Da, the probability of oral absorption drops sharply because the molecule is simply too bulky to permeate efficiently.
There is also a practical consideration: larger molecules tend to be more complex, harder to synthesize, and more likely to trigger immune responses. Keeping molecular weight below 500 is not just about absorption – it pushes designs toward simpler, more practical compounds.
LogP: The Lipophilicity Sweet Spot
Drug absorption requires a balancing act. The molecule must be lipophilic enough to cross cell membranes (which are made of lipids) but hydrophilic enough to dissolve in the aqueous environment of the bloodstream and cytoplasm. LogP quantifies this balance.
A LogP between 1 and 3 is generally ideal for oral drugs. Below 0, the molecule is too hydrophilic to cross membranes. Above 5, it is too lipophilic – it will dissolve poorly in water, bind excessively to plasma proteins, accumulate in fatty tissues, and often cause off-target toxicity. The LogP ≤ 5 cutoff in Lipinski's rules represents the upper boundary of acceptable lipophilicity.
Hydrogen Bond Donors and Acceptors: The Polarity Tax
Every hydrogen bond donor or acceptor on a molecule must be desolvated (stripped of its water shell) before the molecule can cross a lipid membrane. This desolvation costs energy. With five or fewer donors and ten or fewer acceptors, the energetic penalty is manageable. Beyond these limits, the cost of desolvation becomes prohibitive, and the molecule cannot efficiently partition into the membrane.
This is why highly polar molecules like sugars (many OH groups) are not orally bioavailable as drugs despite being small. Each hydroxyl group is both a donor and an acceptor, creating a polarity burden that prevents membrane crossing.
Checking Lipinski Properties with SciRouter
SciRouter's molecular properties endpoint calculates all four Lipinski parameters from a SMILES string in milliseconds. No software installation, no RDKit setup, no Python environment configuration. Just send a SMILES string and get back a complete property profile.
import os, requests
API_KEY = os.environ["SCIROUTER_API_KEY"]
BASE = "https://api.scirouter.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# Check Lipinski properties for caffeine
result = requests.post(f"{BASE}/chemistry/properties", headers=HEADERS, json={
"smiles": "Cn1c(=O)c2c(ncn2C)n(C)c1=O"
}).json()
print(f"Molecule: Caffeine")
print(f"Molecular Weight: {result['molecular_weight']:.1f} Da")
print(f"LogP: {result['logp']:.2f}")
print(f"HBD: {result['hbd']}")
print(f"HBA: {result['hba']}")
# Check each Lipinski rule
mw_ok = result["molecular_weight"] <= 500
logp_ok = result["logp"] <= 5
hbd_ok = result["hbd"] <= 5
hba_ok = result["hba"] <= 10
violations = sum([not mw_ok, not logp_ok, not hbd_ok, not hba_ok])
print(f"\nLipinski Violations: {violations}")
print(f"Drug-like: {'Yes' if violations <= 1 else 'No'}")For caffeine (Cn1c(=O)c2c(ncn2C)n(C)c1=O), you would see MW ~194.2, LogP ~-0.07, HBD 0, HBA 6 – comfortably within all Lipinski limits. This aligns with the fact that caffeine is one of the most readily absorbed oral drugs in existence.
Batch Analysis: Screen a Compound Library
When you need to evaluate an entire compound library, loop through your SMILES and collect the results. This is the standard workflow for filtering virtual screening hits or generative chemistry outputs.
import os, requests
API_KEY = os.environ["SCIROUTER_API_KEY"]
BASE = "https://api.scirouter.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
molecules = [
{"name": "Aspirin", "smiles": "CC(=O)Oc1ccccc1C(=O)O"},
{"name": "Ibuprofen", "smiles": "CC(C)Cc1ccc(cc1)C(C)C(=O)O"},
{"name": "Caffeine", "smiles": "Cn1c(=O)c2c(ncn2C)n(C)c1=O"},
{"name": "Metformin", "smiles": "CN(C)C(=N)NC(=N)N"},
{"name": "Atorvastatin","smiles": "CC(C)c1n(CC[C@@H](O)C[C@@H](O)CC(=O)[O-])c(-c2ccccc2)c(-c2ccc(F)cc2)c1C(=O)Nc1ccccc1"},
{"name": "Sorafenib", "smiles": "CNC(=O)c1cc(Oc2ccc(NC(=O)Nc3ccc(Cl)c(C(F)(F)F)c3)cc2)ccn1"},
]
print(f"{'Name':15s} {'MW':>7s} {'LogP':>6s} {'HBD':>4s} {'HBA':>4s} {'Violations':>10s} {'Status':>8s}")
print("-" * 62)
for mol in molecules:
r = requests.post(f"{BASE}/chemistry/properties",
headers=HEADERS, json={"smiles": mol["smiles"]}).json()
mw = r["molecular_weight"]
logp = r["logp"]
hbd = r["hbd"]
hba = r["hba"]
v = sum([mw > 500, logp > 5, hbd > 5, hba > 10])
status = "PASS" if v == 0 else f"WARN({v})"
print(f"{mol['name']:15s} {mw:7.1f} {logp:6.2f} {hbd:4d} {hba:4d} {v:10d} {status:>8s}")Top 10 FDA-Approved Drugs: A Lipinski Analysis
Let us examine how the ten best-selling prescription drugs in the United States score against Lipinski's rules. This analysis shows that most blockbuster drugs comfortably satisfy the Rule of Five, but there are instructive exceptions.
1. Adalimumab (Humira)
Humira is a monoclonal antibody, not a small molecule. Lipinski's rules do not apply to biologics. It is administered by injection, not orally. This illustrates the first and most important exception: the Rule of Five is strictly for oral small molecules.
2. Apixaban (Eliquis)
MW ~459.5, LogP ~1.7, HBD 1, HBA 7. Zero violations. Apixaban is a textbook Lipinski-compliant oral drug – small, moderately lipophilic, and with minimal hydrogen bonding.
3. Pembrolizumab (Keytruda)
Another monoclonal antibody. As with Humira, Lipinski's rules are irrelevant for biologics. Keytruda is administered intravenously.
4. Lenalidomide (Revlimid)
MW ~259.3, LogP ~-0.4, HBD 2, HBA 5. Zero violations. Lenalidomide is notably small and hydrophilic for an oncology drug, contributing to its excellent oral bioavailability of ~70%.
5. Rivaroxaban (Xarelto)
MW ~435.9, LogP ~1.5, HBD 1, HBA 7. Zero violations. Like apixaban, rivaroxaban exemplifies how modern anticoagulants are designed within Lipinski space for reliable oral dosing.
6. Ibrutinib (Imbruvica)
MW ~440.5, LogP ~3.0, HBD 1, HBA 6. Zero violations. Ibrutinib demonstrates that even kinase inhibitors – a drug class known for occasionally pushing Lipinski boundaries – can be designed within the rules.
7. Upadacitinib (Rinvoq)
MW ~380.4, LogP ~1.6, HBD 1, HBA 5. Zero violations. This JAK inhibitor is compact and well-optimized, with excellent oral bioavailability (~73%).
8. Atorvastatin (Lipitor)
MW ~558.6, LogP ~4.1, HBD 4, HBA 9. One violation (MW exceeds 500). Atorvastatin is one of the most prescribed drugs in history despite exceeding the molecular weight cutoff. Its oral bioavailability is only ~12%, which is lower than smaller statins, but its potency compensates. This is the classic example of a single Lipinski violation being acceptable when other properties are favorable.
9. Sorafenib (Nexavar)
MW ~464.8, LogP ~3.8, HBD 3, HBA 7. Zero violations. Sorafenib sits right at the edge of Lipinski space without crossing any boundaries.
10. Abiraterone (Zytiga)
MW ~349.5, LogP ~4.2, HBD 1, HBA 2. Zero violations. Abiraterone is administered as the acetate prodrug, and its small size and moderate lipophilicity enable efficient oral absorption.
Famous Exceptions: Drugs That Break the Rules
While most successful oral drugs are Lipinski-compliant, some important exceptions demonstrate that the rules are guidelines, not laws. Understanding when and why violations are tolerated helps calibrate your filtering strategy.
Cyclosporine A (MW ~1202, LogP ~2.9, HBD 5, HBA 23)
Cyclosporine massively violates the molecular weight and HBA rules. It is an orally available immunosuppressant, but its absorption relies on active transport mechanisms and formulation tricks (microemulsion). It is the exception that proves the rule: achieving oral bioavailability with a molecule this large requires extraordinary pharmaceutical engineering.
Paclitaxel (MW ~853, LogP ~3.0, HBD 4, HBA 14)
Paclitaxel violates MW and HBA limits. It is essentially not orally bioavailable and must be administered intravenously. Its Lipinski violations correctly predict its absorption challenges.
Venetoclax (MW ~868, LogP ~8.0, HBD 3, HBA 11)
Venetoclax violates three rules (MW, LogP, HBA) yet achieves oral bioavailability through amorphous solid dispersion formulation and food-enhanced absorption. It is dosed orally but requires careful formulation – exactly the kind of challenge Lipinski's rules warn about.
Beyond Lipinski: Extended Drug-Likeness Rules
Since 1997, several researchers have proposed refined or additional rules to complement Lipinski's original framework. Using multiple rule sets together gives a more complete picture of drug-likeness.
Veber's Rules (2002)
Daniel Veber and colleagues at GlaxoSmithKline found that two additional parameters strongly predict oral bioavailability in rats:
- Polar Surface Area (PSA) ≤ 140 angstroms squared: PSA measures the surface area occupied by polar atoms (O, N, and attached H). High PSA correlates with poor membrane permeability.
- Rotatable Bonds ≤ 10: Flexible molecules pay a larger entropic penalty when binding to a target and when crossing membranes. Rigid molecules with fewer than 10 rotatable bonds have better bioavailability on average.
Ghose Filter (1999)
Ghose and colleagues proposed tighter ranges specifically for drug-like compounds:
- LogP between -0.4 and 5.6
- Molecular weight between 160 and 480 Da
- Molar refractivity between 40 and 130
- Total atom count between 20 and 70
PAINS Filters (2010)
Pan-Assay Interference Compounds (PAINS) are structural motifs that cause false positives in high-throughput screening assays. They are not about oral bioavailability but about data quality. Common PAINS substructures include rhodanines, catechols, quinones, and certain Michael acceptors. Filtering PAINS out of your compound library prevents wasting resources on promiscuous compounds that appear active but are actually assay artifacts.
Applying Multiple Rule Sets with SciRouter
A modern drug-likeness filter should apply Lipinski, Veber, and optionally Ghose criteria together. Here is how to implement a multi-rule screening pipeline using the SciRouter API.
import os, requests
API_KEY = os.environ["SCIROUTER_API_KEY"]
BASE = "https://api.scirouter.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def check_drug_likeness(smiles: str, name: str = ""):
"""Apply Lipinski + Veber rules to a molecule."""
r = requests.post(f"{BASE}/chemistry/properties",
headers=HEADERS, json={"smiles": smiles}).json()
mw = r["molecular_weight"]
logp = r["logp"]
hbd = r["hbd"]
hba = r["hba"]
psa = r.get("tpsa", 0)
rotatable = r.get("rotatable_bonds", 0)
# Lipinski rules
lipinski_violations = sum([mw > 500, logp > 5, hbd > 5, hba > 10])
# Veber rules
veber_ok = psa <= 140 and rotatable <= 10
return {
"name": name,
"smiles": smiles,
"mw": mw,
"logp": logp,
"hbd": hbd,
"hba": hba,
"psa": psa,
"rotatable_bonds": rotatable,
"lipinski_violations": lipinski_violations,
"veber_compliant": veber_ok,
"drug_like": lipinski_violations <= 1 and veber_ok,
}
# Test with well-known drugs
drugs = [
("Aspirin", "CC(=O)Oc1ccccc1C(=O)O"),
("Ibuprofen", "CC(C)Cc1ccc(cc1)C(C)C(=O)O"),
("Caffeine", "Cn1c(=O)c2c(ncn2C)n(C)c1=O"),
("Metformin", "CN(C)C(=N)NC(=N)N"),
]
for name, smi in drugs:
result = check_drug_likeness(smi, name)
status = "Drug-like" if result["drug_like"] else "Not drug-like"
print(f"{result['name']:12s} MW={result['mw']:.0f} LogP={result['logp']:.1f} "
f"HBD={result['hbd']} HBA={result['hba']} PSA={result['psa']:.0f} "
f"RotB={result['rotatable_bonds']} -> {status}")Practical Tips for Drug-Likeness Filtering
After decades of applying Lipinski's rules in industrial drug discovery, the community has developed practical wisdom about how to use them effectively. Here are the most important lessons.
One Violation Is Usually Fine
Lipinski himself noted that violating one rule is often acceptable. The probability of poor absorption increases significantly only when two or more rules are violated simultaneously. Do not reject a promising compound just because its molecular weight is 510 Da. Focus on the total violation count.
LogP Is the Most Important Parameter
Among the four Lipinski parameters, LogP has the strongest correlation with clinical failure due to poor pharmacokinetics. Excessively lipophilic compounds are associated with toxicity, poor solubility, high metabolic clearance, and promiscuous off-target binding. If you had to pick one parameter to optimize, reduce LogP.
Context Matters
The appropriate drug-likeness filter depends on your therapeutic area and route of administration. CNS drugs need to cross the blood-brain barrier, requiring even tighter constraints (MW < 400, LogP 1–3, PSA < 90). Topical drugs can tolerate higher molecular weights. Intravenous drugs bypass oral absorption entirely, making Lipinski irrelevant.
Use Rules as Guardrails, Not Walls
The best medicinal chemists use Lipinski's rules as early-stage guardrails that keep optimization on track, not as hard cutoffs that eliminate promising candidates. If a compound violates one rule but has outstanding activity and selectivity, it deserves further evaluation – not immediate rejection.
Try It: Free Molecular Weight Calculator
SciRouter offers a free Molecular Weight Calculator that lets you paste a SMILES string and instantly see molecular weight, LogP, HBD, HBA, and other key properties. No API key required, no sign-up, no installation. It is the fastest way to check Lipinski compliance for a single molecule.
For programmatic access to the same calculations, the SciRouter API provides the Molecular Properties endpoint. Combined with ADMET Prediction, you can screen entire compound libraries for both drug-likeness and safety in a single pipeline.
Next Steps
Lipinski's Rule of Five is the starting point for evaluating drug candidates, not the finish line. After confirming drug-likeness, the next questions are: Can the molecule actually be synthesized? What are its ADMET properties? Does it bind the intended target?
Explore our Synthetic Accessibility Guide to learn how to check whether your drug-like molecules can be made in a lab. For ADMET profiling, see the ADMET Prediction Explained deep dive. And for a broader overview of computational drug design tools, our What Is Drug-Likeness? article covers the full landscape.
Create a free SciRouter account to start checking Lipinski properties programmatically. With 500 free API calls per month and the Python SDK, you can integrate drug-likeness filtering into any computational chemistry pipeline in minutes.