Macrame cord length calculator
A medium-density piece 80 long with 20 of fringe and 10 for the dowel needs 470 per working strand. Choose loose, medium, dense or extra-dense knotting and cut once without running short. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Finished length
- 80
- Knot density
- Medium
- Fringe length
- 20
- Mounting allowance
- 10
- Working strands
- 4
- Filler strands
- 2
- Multiplier
- 5.5
- Waste percent
- 0
- Waste factor
- 1
- Body length
- 440
A macrame cord length calculator turns a finished project length and a named knot density into the one number every plant hanger, wall hanging, and keychain needs before you unspool a cone: how long to cut each working strand. Enter the knotted body length in inches or centimetres, pick loose, medium, dense, or extra-dense packing, and optionally add fringe, a mounting wrap for a dowel or ring, a waste percent, and how many working and filler cords you will hang. The tool multiplies finished length by the published workshop factor for that density, adds the unknotted tail and the top wrap, then scales by waste so you cut once and do not run short mid-sinnet. Plant hangers, half-hitch panels, and berry-knot belts all share that same cut-length question.
What finished length and knot density mean for a working strand
Finished length is the knotted body you want after the piece is mounted and the fringe is still uncut: the hanging drop of a plant hanger below the ring, or the panel height of a wall hanging between the dowel and the start of the tail. It is not the length of the cone and not the length of a single unknotted cord. Knot density is how tightly those knots pack along that body.
Workshop handouts and modern macrame books publish the same working-cord rule of thumb this calculator encodes: a loose piece with long square-knot sinnets and lots of negative space uses about four times the finished length per working strand; a medium everyday hanger or panel uses five and a half times; a dense mix of tight square knots and frequent double half hitches uses seven times; extra-dense berry knots, gathering knots, or packed clove-hitch rows use eight and a half times. Those multipliers sit on top of the body only.
Fringe is added once, after the multiply, because the tail is not knotted. Mounting allowance is added once as well: the extra you need to fold a lark's head over a dowel, wrap a ring, or tie onto a branch. Filler cords, also called holding or core cords, run straight through square knots and do not wrap, so they use one times finished length plus the same fringe and mounting rather than the working multiplier.
Mixing those two families in one cut list is the usual reason a first hanger runs short on working cords while leftover filler sits on the table. Teachers and shop classes care about the rejection path as much as the happy path: a zero finished length is not a real body, and a density string that is not one of the four named packs is not a plan you can cut.
What you can do with it
Plant hanger cut lists
Makers enter the hanging drop, pick medium or dense packing, add fringe and a ring wrap, then cut four working strands and two filler strands from the returned lengths.
Wall hangings and half-hitch panels
Designers scale a sketched panel height at dense or extra-dense clove-hitch packing so every working cord is long enough for packed rows without splicing mid-panel.
FAQ
How much macrame cord should I cut per working strand?
Multiply the finished knotted length by the density factor (4× loose, 5.5× medium, 7× dense, 8.5× extra dense), then add fringe and the mounting wrap. This tool also scales by an optional waste percent and by how many working and filler strands you will cut.
What is the difference between working cords and filler cords?
Working cords wrap and therefore use the density multiplier. Filler (holding or core) cords run straight through square knots and use only one times finished length plus the same fringe and mounting.
Which knot density should I pick for my macrame project?
Loose uses 4 times the finished length per working strand and suits long square-knot sinnets with open space. Medium uses 5.5 times, dense 7 and extra-dense 8.5, so the tighter the knots pack, the more cord each strand eats.
How much cord do I need in total for the whole piece?
Multiply each cut by the number of strands. In the example, 4 working strands at 470 and 2 filler strands at 110 need 2100 in total, because fillers run straight and only use the finished length plus fringe and mounting.
Should I add a waste margin when cutting macrame cord?
You can add 0 to 50 percent. The margin is applied after the knotted body, fringe and mounting wrap are added together, so every strand gets the same proportional extra and you do not run short in the middle of a sinnet.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/hobby/craft-macrame-cord \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"finished_length":80,"knot_density":"medium"}'const res = await fetch("https://api.kit.forhosting.com/hobby/craft-macrame-cord", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"finished_length": 80,
"knot_density": "medium"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/craft-macrame-cord",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"finished_length": 80,
"knot_density": "medium"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/craft-macrame-cord", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"finished_length":80,"knot_density":"medium"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"finished_length":80,"knot_density":"medium"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/craft-macrame-cord", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"finished_length": 80,
"knot_density": "medium"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.craft_macrame_cord",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_abs | 1000000000000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Zero or negative finished length and unknown densities are rejected with invalid_input rather than inventing a cut list.
How to call the API and what the response contains
Failed validation is never billed. POST a JSON body with finished_length as a required strictly positive finite number and knot_density as one of loose, medium, dense, or extra_dense. Optional fringe_length and mounting_allowance default to zero and must be zero or positive when sent. Optional working_strands defaults to one so the primary result is cut length per working strand; optional filler_strands defaults to zero. Optional waste_percent is a cutting margin from zero to fifty applied after the body plus fringe plus mounting. Aliases include length, project_length, and body_length for the finished measure; density, knot_style, and tightness for the pack; fringe, tail_length, and ends for the tail; mounting, dowel_allowance, wrap, and larks_head for the top extra; working_cords, strands, and cords for the wrapping count; filler_cords, holding_cords, and core_cords for the straight cores; and waste, extra_percent, and allowance_percent for the margin. Absolute values of lengths must stay within one trillion so intermediate products remain finite in IEEE double precision on the Worker and in the browser. On success the body echoes rounded inputs, sets multiplier to the published factor, body_length to finished length times that factor, cut_length to the per-working-strand cut after waste, filler_cut_length to the per-filler cut, total_working_cord and total_filler_cord to the scaled families, total_cord to their sum, formula to a compact equation string, message to a short English summary, and steps to ordered substitution lines you can assert in tests. Pricing is a flat $0.002 per successful request with unit item.
Practical planning tips, units, plant hangers, and related searches
Keep one linear unit for the whole request. If you design in centimetres, enter finished length, fringe, and mounting in centimetres; if you think in inches, stay in inches. The calculator does not convert units. Measure finished length on a similar piece you already like, or on a sketched drop from hook to pot rim, then pick the density that matches how much open space your pattern leaves. Prefer this capability when you already know the finished drop and how tightly you will knot and only need the cut list; if you need yarn from stitch gauge, use a yarn tool instead. When you are unsure, start at medium and add a small waste percent rather than jumping to extra_dense, which over-cuts a sparse design. Lark's-head mounting on a thin ring often needs only a few units of extra; a thick branch or a wrapped dowel needs more—measure the path around the support and send that as mounting_allowance instead of guessing inside the multiplier. Count working cords and filler cords from the pattern diagram: a classic four-working plus two-filler hanger is working_strands four and filler_strands two. Pair examples when teaching: eighty units at medium with twenty of fringe and ten of mounting yields four hundred seventy per working strand; twenty-four units at dense with defaults yields one hundred sixty-eight per strand; finished_length zero demonstrates the hard invalid_input path. This landing targets people searching for a macrame cord length calculator, how much macrame cord to cut, working strand cut length, or knot density cord planner. It is not a crochet yarn estimator, not a knitting row counter, and not a full pattern generator. Failed tasks that return invalid_input do not consume prepaid balance. Round-trip checks are easy: multiply finished length by the published factor for the chosen density, add fringe and mounting, then confirm the product equals cut_length when waste is zero.
Integration use cases
Class kits and craft apps
Teachers and hobby apps pin golden cut lengths plus a deliberate zero-length rejection so students and clients always see the same deterministic cord plan.
Technical questions
Which knot density should I pick?
Use loose for sparse sinnets with open space, medium for a typical hanger or panel, dense for tight square knots plus frequent double half hitches, and extra_dense for berry knots, gathering, or packed clove-hitch rows.
What happens when finished_length is zero or knot_density is unknown?
The request is rejected with invalid_input. Non-positive finished length and densities outside loose, medium, dense, and extra_dense are not a valid cut plan.
What does the macrame cord length calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.