Crochet Weaver

by EvanLyu
5
4
3
2
1
Score: 50/100

Description

Crochet Weaver renders crochet stitch charts from text patterns inside Obsidian notes. It works locally in Markdown code blocks and does not make network requests.

Reviews

No reviews yet.

Stats

1
stars
78
downloads
0
forks
29
days
8
days
8
days
5
total PRs
0
open PRs
0
closed PRs
5
merged PRs
0
total issues
0
open issues
0
closed issues
21
commits

Latest Version

9 days ago

Changelog

[1.3.0]

Added

  • A walkthrough for having an AI write the pattern, in all four READMEs, up front rather than buried in the developer notes: copy the skill from Settings, paste it into a chat, paste your pattern, paste the block back into a note, and check the counts the progress panel reports against the source's own "(N)". With a worked example, and what to do when the assistant says something cannot be converted.

  • Eight more worked examples in examples/demo.md: the three round styles drawn side by side from the same rounds; a whole amigurumi ball, increases through decreases, and a flat triangle; the same round in single and double crochet, showing how the ring grows with the stitch; a granny square; post, popcorn, cluster and crossed stitches each in context, plus a picot edging and a crab-stitch border; mid-round color changes; the three repeat forms including a bare rep; and what to do with a closed 3D shape that cannot be read as one chart. Every block in the READMEs and the demo is parsed and laid out as part of checking this release.

  • The AI reference is now a skill. docs/ai-pattern-authoring*.md has become skills/crochet-weaver-pattern/SKILL.md (plus .zh-TW, .zh-CN, .ja): the same reference, reshaped as a skill — YAML frontmatter naming it and saying when to use it, a short "when to use" and "how to work through it" up front, then the full syntax reference and checklist. Paste it into a chat, point an agent at it, or drop the folder into .claude/skills/ for Claude Code; it needs nothing else from the repo. The settings row is now "Copy the pattern skill", and the bundled copy is generated (npm run generate-skill) from the files rather than kept in step by hand, with a test that fails on a stale bundle.

  • Four more interface languages: 한국어, Deutsch, Français and Español, alongside the existing English, 繁體中文, 简体中文 and 日本語. Every string is translated in all eight — including all 46 stitch names, so the readable pattern text reads as punto bajo, feste Masche, maille serrée or 짧은뜨기 rather than sc — and Obsidian's own language is followed automatically where it is one of them. The AI pattern-authoring reference stays in the original four; the other four are handed the English one, which is what an AI reads best anyway.

  • Somewhere to say something: the settings page ends with a "Questions and feedback" row — a button that opens the plugin's GitHub issues, one that starts an email to [email protected], and one that copies that address for anywhere without a mail client. The address is in the row's description too, and is searchable from Obsidian's settings search.

  • Traditional Japanese round charts (style: japanese in frontmatter, or the new global "Round chart style" setting): draws type: round charts the way Japanese pattern books do — one continuous spiral guide winds through the rounds (real crochet-in-the-round is a single spiralling line, not stacked closed rings), stepping out to the next round at each starting seam, and each round numbered in red at that seam, which drifts diagonally with the increases exactly like a printed chart.

    The seam is room of its own, kept clear of stitches: from the side the round closes on it holds the slip stitch that joined it, then the step out to the next round, then the round number, then the chain that opens the next round — each with its own slot, and the round's stitches spaced to leave the whole of it free. So the number always sits just to the opening side of the step (its left, on a seam near the top of the chart), never with a symbol drawn over it, and never nudged out of line to dodge one. The step itself is measured in px of arc rather than in degrees and anchored on its own round's seam at both ends, so it stays a short near-radial jog — about 80° to the ring at every radius, instead of flattening toward a slant on the outer rounds. Both of its corners are rounded off, so a round change reads as one S — a bend off the band, a straight run across, a bend onto the next — rather than two hard turns.

    What the seam has to hold includes what the round's shaping reaches out to. A decrease is drawn down onto the stitches it closed over, and those sit either side of the one it makes — so a round that opens or closes with a decrease draws its ∧ out past its own first or last stitch. That reach is measured from where the round below really is and asked for along with everything else, both when the ring is sized and when the gap is reserved, so the mark can no longer be drawn across the round number or the step.

    And that room stays one width all the way out. A round number does not get bigger as a chart does, so the seam has no reason to either — but ancestry hands a round the angles of the round below, seam gap and all, and the same wedge of the turn is more and more arc the further out it is drawn: the seam fanned open into a widening corridor, a stitch wide at the middle of a chart and three or four at its edge. Each round now spreads its stitches into that surplus instead, measured from the point opposite the seam (which does not move) so the stitches beside the seam give way and the ones away from it keep the angle their ancestry gave them. A chart's seam reads as one channel from the center out, and its round numbers as one straight line beside it.

    The cost is a fifth of a stitch: that is how far a round may slide against the one below it to close its seam, on top of what it may already move to even out crowding. It is spent beside the seam and nowhere else, it decays to nothing over a run of plain rounds (a hundredth of a stitch per round on a straight-sided tube), and it never accumulates into a stitch sitting off the one it is worked into.

  • Increases and decreases you can read stitch by stitch, in traditional Japanese round charts. The chart is now built on a stitch graph: every stitch has an identity and records which previous-round stitch(es) it is worked into, taken from the pattern's own operations rather than guessed back from stitch counts (6 stitches becoming 7 says an increase happened, not where). Everything downstream follows from that graph:

    • Shaping is drawn as printed charts draw it: a symbol of its own round, in line with the plain stitches, never a mark floating in the gap between two rounds. An inc is a V whose point sits on its round's inner edge, in line with the stitch it is worked into, and whose two arms open out to the round's outer edge — one per stitch it makes, where the next round is worked. A dec (or scNtog) is the ∧: feet on each stitch it closed over, point standing above them. Nothing is a stock glyph — each mark is sized to its round's band and leans toward the stitches it belongs to — it opens far enough to reach across the stitches it belongs to but never so far that it stops reading as a V, and a mark whose round can't follow its ancestry can't spike off to one side.

    • A round is positioned from its ancestry, not spread out on its own: plain stitches sit over their parent, an increase's pair straddles the stitch below them, and a decrease sits between the stitches it merged (across the 0°/360° seam too, where averaging two raw angles would put it on the opposite side of the chart). Working order is a hard constraint — no spacing pass may ever reorder stitches — followed by a minimum gap so symbols can't collide; whatever slack is left over is shared between the plain stitches near the shaping, which is what lets a lopsided round gradually even itself out over the rounds above it instead of all at once.

      An increase's two stitches take less room than two spread stitches would — that closeness is what makes the V read as one symbol worked into one place — so the gaps beside them are wider, and ancestry alone hands that unevenness on to every round above unchanged. Each round now closes it up a little instead: its stitches drift toward the midpoint of their neighbours, by at most a fifth of a stitch per round, so the wide gap after an increase shrinks over the rounds above it and the columns lean back to even. A stitch is held exactly where its ancestry put it whenever its position is what carries the correspondence — one an increase or decrease of its own round produced, and one the next round works shaping into, since the V or ∧ drawn there is aimed at where the stitch sits.

    • Increase/decrease highlighting (highlight: on) accents the shaping symbol itself, since the stitches an increase makes are ordinary single crochets.

    • Ordinary one-to-one stitches are not arbitrarily grouped or packed: every stitch prefers the stitch below it. A round written as [2 sc, inc] x 6 still reads as six wedges because its six increases follow the six stitches they are worked into, not because the chart bunches each repeat up. A round that neither writes repeats nor shapes follows the round below stitch for stitch. When fixed-spacing clearance requires a minimum-movement projection, corrected bearings reconcile inward only through ancestry that covers every preceding-round source exactly once; a deliberately partial or repeatedly used source is a boundary, so the current round clears itself without pulling an earlier stitch or V out of shape.

    • The mapping is complete and checkable in both directions: the first round records the center ring it is worked into (rather than "no source"), every stitch records the next-round stitches worked into it, and validateStitchGraph() reports skipped or twice-used stitches, stitches worked into nothing, and stitches no later round picks up — as facts about the pattern, found before anything is drawn, instead of a chart that just looks odd. Free-form rounds keep those recorded sources as preferred targets rather than replacing them with an unrelated evenly spaced ring.

  • Writing a round the way patterns actually write it. The pattern language now reads several forms it used to reject outright:

    • rep: [2 sc, inc] rep 6, rep6, x6 and x 6 all mean the same thing. A bare rep — what a written pattern means by "around" / "to end of round" — repeats until the round below is used up, worked out from that round rather than from a number you have to compute yourself (R2: ch, [2 sc, inc] rep, slst over a 6-stitch round is 2 repeats, since each go works into 3). A decrease inside the repeat counts as the two stitches it works into. If the round below doesn't divide evenly by one repeat, or a bare rep has no round before it, the chart says so with the numbers involved instead of guessing a count and drawing a wrong chart.
    • The chain a round opens with: R2: ch, 6 sc, sl st used to fail to parse. The leading ch is now kept in the pattern and drawn at the round's seam, and so is a mr written as a step (R1: mr, ch, sc6, slst) rather than as an in MR anchor. Neither they nor the closing sl st count toward the round's stitch total, and the next round works into neither — they're instructions, not stitches of the fabric. A chain or slip stitch in the middle of a round is still a real stitch and still counts.
    • A stitch count on either side of the name: 6 sc, sc6 and sc 6 are the same. Names that contain digits (dc2tog, tr5cl) are still read as one stitch, and dc12 is still twelve doubles.
    • Every spelling of a slip stitch: sl st, slst, sl-st and sl_st all normalize to the one stitch.
  • "Increase and decrease color" setting: the accent color used when increase/decrease highlighting is on (highlight: on, or the global setting) is now configurable instead of fixed, next to the existing chart-marker color.

  • A third round-chart style, continuous (style: continuous, or the "Round chart style" setting), sharing the Japanese style's layout but spelling the correspondence out instead of printing it: every stitch keeps its own symbol — including both stitches an increase makes — and lines are drawn from an increase's or decrease's stitches to the stitch below they are worked into, each end landing on a real stitch. Handy for checking a pattern, or for reading a chart without already knowing the printed symbols. An hdc2tog/dc2tog-family decrease keeps its own printed symbol in both styles, and in continuous gains a line to each stitch it closed over — which the symbol alone can't tell you.

    The default radial style still spreads each round's stitches evenly and draws the stock inc/dec glyphs, unchanged.

  • Pattern-book lace motifs and direct written-note forms. Multiline round bodies, trailing punctuation, counted and non-counting beginning chains, written joins, slip-stitch repositioning, current-round turn, typed targets such as next ch-1 sp and center dc of next 5-dc shell, quantity motifs, implicit skips, picots, V spaces, and prior-round/range repeats can now be represented without first rewriting the source into artificial shorthand. Chain spaces and shell children remain real, targetable graph positions, while progress totals follow their written stitch-count weight. lace: on hides structural round guides and numbers, enlarges symbols, and opens chain runs into lace geometry; sector can print a wedge, with wholeRounds keeping selected center rounds complete.

Changed

  • The three round-chart styles are named for what they draw, in the frontmatter style key and in the settings dropdown: radial (放射式 — each round's stitches spread evenly from the centre, the old standard), japanese (傳統日式 — the traditional pattern-book chart, the old book), and continuous (連續式 — the same layout with every stitch drawn and joined to the round below, the old linked). Charts and saved settings written with the old names keep working and keep meaning the same thing; nothing needs editing.

  • The settings page is grouped and ordered by what each setting changes, with a short note at the top saying that everything there is a default a chart can override for itself. The groups run from what changes every chart to what is set once and left alone: chart appearance (round style, scale, stroke, ring spacing, background grid), highlights and colors, the progress tool and its panels, blank-grid defaults, and general (the plugin's language, and the AI pattern-authoring reference to copy) last. The pre-1.13 fallback renderer now builds its rows from the same definitions the declarative settings API is given, so the two can no longer disagree about wording, options or order.

  • Every chart is sized from the symbols it draws, not from its stitch count. A stitch used to be assumed to take one fixed slot wherever it appeared, which is true of a single crochet and of nothing taller: a round of doubles was drawn on a ring shorter than the symbols on it needed, a three-chain turn was squeezed into the room one chain takes, and both came out overlapping. Now every size is measured from what is actually on the chart:

    • A round's ring is as long as its own symbols plus what its seam holds, so 12 dc in MR gets a bigger ring than 12 sc in MR and a round opening with ch 3 gets room for three chains.
    • A flat chart's stitch pitch and row height follow its widest and tallest symbol (one pitch per chart, so its columns still line up); a spiral advances by each step's own symbols, so a (5 dc) shell moves it five stitches on rather than one.
    • A group's stitches fan out by their own widths at the radius they are drawn on, instead of by a fixed angle that was too tight on a small round and too loose on a large one.
    • The seam's slots come from the same place: a chain takes a chain's width, a slip stitch a slip stitch's, and the round number as much room as its digits need — 10 more than 1.
    • A shaping V or ∧ opens at most as wide as the stitches it spans really are, so a 3-together may open wider than a 2-together, and neither sprawls.
    • The first round, the innermost guide line and a chain-ring center are placed off each other rather than off fixed radii, so nothing is drawn over the ring the first round is worked into.

    Charts of single crochet — most amigurumi — are unchanged, since a single crochet is what the old fixed sizes were tuned for.

  • Round-chart symbols always face outward, and the "Symbol rotation" setting is gone. It offered a choice between rotating symbols with the round and keeping them upright, but only one of those reads correctly: a stitch's symbol has a top (where the next round is worked) and a bottom (where it is worked into), and on a round chart that means facing away from the center. Upright symbols made BLO/FLO in particular point the wrong way for most of the chart — the loop bar is drawn on the side of the stitch the loop is on, so it has to turn with the stitch. Existing charts need no change; the rotation frontmatter key is ignored.

  • Progress counts now use written stitch-count weight. Counted beginning-chain replacements contribute their replacement stitch, ordinary mid-round chains contribute each written chain, and joins, repositioning, turns, skips, picot embellishments, and non-counting setup chains contribute zero. Existing saved positions that exceed a recalculated row total are clamped safely while completed-row progress is retained.

Fixed

  • Dense fixed-spacing round charts no longer overlap, hide, or resize stitches. An explicit spacing remains the exact distance between every pair of rounds, and every round keeps the symbol size resolved from the user's setting. The chart measures all rounds before placement and, when a later round needs more circumference, raises only the first round's absolute radius enough to fit the densest configured-size symbols, joins, and seam packet. Clearance uses deterministic minimum movement and never drops a stitch.

  • Increase/decrease ancestry remains aligned after collision correction. Increase children stay balanced around their real parent and produce readable V marks; decreases remain between all of their sources. Corrections propagate inward only across complete one-to-one source coverage, so free-form partial placement, repeated sources, grouped motifs, and extreme later rounds cannot stretch earlier shaping into spikes or detach later stitches from the displayed V endpoints.

  • Japanese seams and round numbers stay clear at every radius and in partial charts. The number/separator packet uses measured digit, join, chain, and symbol footprints, keeps at least 10px side clearance when geometry permits, follows only a continuously collision-free path, and stops before the final stitch and closing join. Charts beginning at R4, R16, or any other round keep their numbers on the opening side of the separator rather than assuming the chart begins at the center.

  • Japanese centers and first rounds are compact and correctly oriented. The first stitch worked into the center stays at twelve o'clock, an all-increase second round opens into near-isosceles V marks, and the seam uses available room without rotating those stitches away from their parents. A Japanese magic-ring center is rendered as ; an explicit chain ring remains a ring of chain symbols rather than the unverified abbreviation .

README file from

Github

Crochet Weaver

English | 繁體中文 | 简体中文 | 日本語

Crochet Weaver renders crochet stitch charts from text patterns inside Obsidian notes. It works locally in Markdown code blocks and does not make network requests.

Features

  • Render crochet code blocks as themed SVG stitch charts.
  • Support flat rows, concentric rounds, and continuous spirals.
  • Use common crochet symbols for chains, single crochet, half double crochet, double crochet, treble stitches, slip stitch, increases, decreases, bobbles, popcorns, and post stitches.
  • Add row-level blo / flo markers and round anchors such as magic ring or chain ring.
  • Chart lace the way it is written: say where a stitch goes (5 dc in next ch-2 sp, sc in center dc of next 7-dc shell), and shells fan from the space they are worked into, chain runs are drawn as the curve they hang in, and V-stitches, picots, joins, turns and "repeat R11-R14" rounds are read as written.
  • Keep every graph-driven stitch on its real ancestry while numbered round changes stay clear inside their measured seam.
  • Render crochet-tool blocks as a readable row checklist with stitch counts, progress controls, and a per-row stitch counter.
  • Embed the progress tool or a read-only pattern-text list directly next to a crochet chart (tool: on / text: on), so you never have to paste the same pattern into two code blocks.
  • Highlight the current row and target stitch on the chart itself when the progress tool is embedded, in a configurable color.
  • Mark yarn color changes with a color <name> step, mid-row or per-round — the chart flags each switch with a small colored ring (without repainting the stitches themselves), and the tool/text panels spell it out as "change to <color>".
  • Show pattern text in a fully translated, readable style (readable: on) instead of raw shorthand — e.g. 短針6 instead of 6 sc — in any of the eight interface languages.
  • Pan and scroll charts that are larger than their note pane instead of squeezing them to fit — drag with the mouse, or use native touch/trackpad scrolling; a chart that overflows opens centered.
  • Copy the AI pattern-authoring reference from Settings, in any of four languages, ready to paste into an AI chat for help converting or writing patterns.
  • Store all progress locally in the plugin data file.
  • Fully localized UI in eight languages: English, Traditional Chinese, Simplified Chinese, Japanese, Korean, German, French, and Spanish.

Quick Start

See examples/demo.md for every feature in this README exercised in one note — chart types, every stitch, row modifiers, the row connector line, error handling, the progress tool (including its readable text style and yarn color changes), panel positioning, and a real pattern conversion.

Add a crochet code block to a note:

---
type: round
scale: 1.25
highlight: on
---
R1: 6 sc in MR
R2: [sc, inc] x 6
R3: [2 sc, inc] x 6, sl st

Chart + progress tool, one source of truth

Add tool: on to embed the interactive progress tool (row checklist, stitch counter) right next to the chart — no separate crochet-tool block needed:

---
id: coaster-small
type: round
tool: on
---
R1: 6 sc in MR
R2: [sc, inc] x 6
R3: [2 sc, inc] x 6, sl st

Prefer a plain, non-interactive shorthand list next to the chart instead? Use text: on:

---
type: round
text: on
---
R1: 6 sc in MR
R2: [sc, inc] x 6

You can still use a standalone crochet-tool block if you only want the checklist, without a chart:

---
id: coaster-small
type: round
---
R1: 6 sc in MR
R2: [sc, inc] x 6
R3: [2 sc, inc] x 6, sl st

Use an explicit id when you want progress to survive edits to the pattern text. It must contain 1–80 ASCII letters, digits, _, or -; an omitted or invalid id falls back to a local hash of the block content, so editing the block can reset progress.

Let an AI write the pattern for you

You do not have to learn the syntax to use the plugin. Hand an AI assistant the crochet-weaver-pattern skill once, then give it any written pattern — from a book, a PDF, a shop listing, or your own shorthand — and paste back what it returns.

  1. Copy the skill. Settings → Crochet Weaver → Copy the pattern skill, and press the button for the language you want (English, 繁體中文, 简体中文, 日本語).

  2. Start a chat with any assistant (Claude, ChatGPT, whichever you use) and paste the skill in as the first message. It is self-contained: nothing else has to be installed or fetched.

  3. Paste your pattern and ask for a chart. For example:

    Here is the pattern for the head of an amigurumi bunny. Convert it into one Crochet Weaver crochet block, type: round, with the progress tool on.

    R1: 6 sc in magic ring (6) R2: inc in each st around (12) R3: (sc, inc) around (18) R4–R6: sc around (18) R7: (sc, dec) around (12)

  4. Paste the block it returns into a note, in Reading or Live Preview mode:

    ```crochet
    ---
    type: round
    tool: on
    id: bunny-head
    ---
    R1: 6 sc in MR
    R2: [inc] x 6
    R3: [sc, inc] x 6
    R4: 18 sc
    R5: 18 sc
    R6: 18 sc
    R7: [sc, dec] x 6
    ```
    
  5. Check it before you crochet it. The chart and the row list are generated from what the assistant wrote, so read the stitch counts in the progress panel against the source's own (N) numbers. If a row is off, say so in the chat — the skill tells the assistant how counting works, so "R7 should end on 12 stitches" is usually enough to get a fix.

Using Claude Code? Drop skills/crochet-weaver-pattern/ into your project's or your home .claude/skills/ folder and the skill loads itself whenever you paste a crochet pattern.

If something can't be converted, the assistant is told to say so rather than guess — an unsupported stitch, or an instruction that has no chart meaning. Those are worth reading; a silently "working" chart that drops a stitch is worse than a note that says it could not.

Pattern Syntax

Frontmatter

Crochet blocks may start with flat YAML-like frontmatter:

---
type: flat | round | spiral
id: optional-progress-id
scale: 1.5
stroke: 2
spacing: 40
highlight: on
style: radial | japanese | continuous
lace: on | off
sector: on | degrees
wholeRounds: positive-integer
grid: on | off
rounds: positive-integer
rows: positive-integer
columns: positive-integer
tool: on | off
text: on | off
readable: on | off
position: right | left | below
---

Global plugin settings are used by default where an option has one. Valid frontmatter values override those settings for one chart; invalid values fall back to the corresponding global default or are ignored for presentation-only options such as sector. The lace, sector, grid-guide, and panel options are explained in their sections below.

Rows

Rows can use either label form:

R1: 10 ch
Row 2: sc, hdc, dc

Supported row modifiers:

R1: blo, 6 sc in MR
R2: flo, 6 sc in ch ring
  • blo: mark the whole row or round as back-loop-only.
  • flo: mark the whole row or round as front-loop-only.
  • in MR: add a magic-ring center anchor for round or spiral charts.
  • in ch ring: add a chain-ring center anchor.

Stitches

Supported stitch names, following standard US chart notation — 46 in total:

Symbol Category Description
ch Basic Chain
sc Basic Single crochet
hdc Basic Half double crochet
dc Basic Double crochet
tr Basic Treble crochet
dtr Basic Double treble crochet
sl st Basic Slip stitch
MR Basic Magic ring
picot Basic Ch-3 picot
rsc Basic Reverse single crochet (crab stitch)
inc Shaping Increase (2 sc in one stitch)
dec Shaping Decrease (sc2tog shorthand)
sc2tog, sc3tog Shaping Single crochet 2/3 together
hdc2toghdc5tog Shaping Half double crochet 2–5 together
dc2togdc5tog Shaping Double crochet 2–5 together
fpsc, fphdc, fpdc, fptr Post stitch Front post sc/hdc/dc/tr
bpsc, bphdc, bpdc, bptr Post stitch Back post sc/hdc/dc/tr
xhdc, xdc, xtr Crossed 1-stitch crossed hdc/dc/tr
hdc2cl, hdc3cl, hdc5cl Cluster/puff 2/3/5-hdc cluster (puff)
dc2cl, dc3cl, dc5cl Cluster/puff 2/3/5-dc cluster
tr2cl, tr3cl, tr5cl Cluster/puff 2/3/5-tr cluster
bobble Cluster/puff Generic bobble/puff
popcorn Popcorn 5-dc popcorn
hdc popcorn Popcorn 5-hdc popcorn
tr popcorn Popcorn 5-tr popcorn

N-into-one increases and shells have no dedicated names — see the Groups example below.

Quantity prefixes are supported:

R1: 10 ch, 6 sc

Repeats use square brackets, written x 6 or rep 6 — both mean the same:

R2: [sc, inc] x 6
R2: [sc, inc] rep 6

A bare rep repeats the group until the round below is used up, so you don't have to count:

R1: mr, ch, sc6, slst
R2: ch, [2 sc, inc] rep, slst

Each go at [2 sc, inc] works into three stitches and R1 has six, so that is two goes. If the round below doesn't divide evenly the chart says so rather than guessing.

A stitch's count can go either side of its name — 6 sc, sc6 and sc 6 are the same — and a slip stitch may be written sl st, slst, sl-st or sl_st.

A round's opening chain and closing slip stitch are drawn at the seam. The join always counts zero. A beginning chain counts as the one stitch it replaces when written as ch 3 (counts as dc), or when an unannotated chain is joined at its top; ch 1 (does not count as a st) and a chain joined elsewhere count zero.

Groups use parentheses and render as a fan from one stitch position — this is also how N-into-one increases and shells are written (there are no dedicated 2dc-in-1 names; (dc, dc) or (5 dc) draws exactly that chart symbol):

R3: (dc, ch, dc), sc, (5 dc)

Lace and motifs

A lace pattern says where each stitch goes instead of counting along the round below, and Crochet Weaver reads that directly:

---
type: round
style: japanese
---
R1: MR, ch 3 (counts as dc), 23 dc in MR,
    sl st to top of beginning ch-3. (24 dc)

R2: ch 1 (does not count as a st),
    sc in same st, ch 1,
    [sc in next dc, ch 1] x23,
    sl st to first sc.
    (24 sc + 24 ch-1 sp = 48 sts)

R3: sl st into next ch-1 sp,
    ch 3, 2 dc in same ch-1 sp,
    sc in next ch-1 sp,
    [3 dc in next ch-1 sp,
     sc in next ch-1 sp] x11,
    sl st to top of beginning ch-3.
    (12 reps, 4 sts per rep)

R4: turn,
    [V2 in next sc, ch 1,
     sc in center dc of next 3-dc shell,
     picot, ch 1] x12,
    sl st to join.
Written What it means
in next dc / in next ch-2 sp / in next picot the next place of that kind, passing over whatever is in between
in same st / in same ch-1 sp the place the step before used — its stitches join that motif
in center dc of next 7-dc shell the middle stitch of the next 7-double shell
5 dc in next ch-2 sp one shell of five, worked into one space and drawn as a fan
V2 / V3 (dc, ch 2, dc) / (dc, ch 3, dc) into one place, with a space of its own
ch 3 (counts as dc) the beginning chain stands in for a stitch
sl st into next ch-1 sp move across to that space; nothing is worked into it yet
turn written first: this round is worked the other way round
R15-R18: repeat R11-R14. expands into real rounds before the chart is drawn

Add lace: on to the frontmatter to have the chart printed the way a book prints lace: no lines drawn around the rounds, no round numbers, and the symbols drawn larger against the openwork. It changes only what is drawn around the pattern, never what the pattern is.

Add wholeRounds: 4 alongside it to draw the first four rounds entire and fan out only after them — the middle of a piece is where the pattern is still being set up, so a book draws it whole. Rounds sit as far apart as their own stitches are tall — a round of single crochets closer than a round of double trebles — unless a chart or the settings names a spacing. Add sector: 90 (or sector: on, which means 90) to draw one wedge of the chart instead of the whole circle — a round of twelve identical motifs says everything it has to say in one slice of itself, which is how a book prints it. The whole chart is still worked out; the wedge is what gets drawn, starting at the seam, and a motif that falls on the edge is kept whole rather than sliced in half.

A run of chains between two stitches becomes one chain space the next round can work into, and every chain of it is still drawn and countable. An unannotated beginning chain counts as the stitch it replaces when the round closes to the top of it — so a pattern written this way needs nothing added to it.

Lace is drawn by the japanese and continuous round styles, which place every stitch from what it is worked into; radial spreads a round evenly, as it always has.

Color changes

A color <name> step (a CSS color name or #hex code) marks where a pattern switches yarn — mid-row, or at the start of a row/round:

R6: 8 sc, color white, 8 sc, color black, 8 sc

It applies to every stitch from that point on — through the rest of the row and every later row — until another color step changes it; there's no "reset to no color" token. The stitch symbols stay the chart's normal theme color; instead, the first stitch of each new color gets a small hollow ring in that color, and the progress tool / pattern-text panels spell it out as "change to <color>".

Chart Types

Flat

type: flat renders rows in an alternating flat-row layout.

---
type: flat
---
R1: 10 ch
R2: 10 sc
R3: 10 dc

Round

type: round renders each row as a concentric round. A trailing sl st is treated as a join and is excluded from round stitch-count spacing.

---
type: round
---
R1: 6 sc in MR
R2: [sc, inc] x 6, sl st

style: japanese switches a round chart to Japanese-pattern-book styling: a continuous spiral guide winds through the rounds (as crochet-in-the-round really is one spiralling line), stepping out to the next round at each starting seam, with each round numbered in red at that seam. An in MR center is printed as ; an in ch ring center keeps the chain-stitch ovals that form the ring rather than using the unverified abbreviation .

Shaping is drawn the way the books do it: as a symbol of its own round, in line with the plain stitches. An inc is a V whose point sits on the round's inner edge at its parent and whose two arms end at the actual positions of the two child stitches. A dec (or an scNtog) is the : its feet lean toward the stitches it closed over and its point stands above them; unusually wide decreases are compacted so the mark stays readable. Nothing floats in the gap between two rounds, and every endpoint continues to describe real stitch ancestry.

Underneath, every stitch is placed from the previous-round stitch it is worked into, and records it: an ordinary stitch keeps its unique parent's angle exactly, an increase's two stitches balance around their shared source, and a decrease sits between all of its sources. With automatic spacing (spacing omitted), a crowded round grows to the smallest radius where those parent-derived angles fit. With an explicit spacing, every round-to-round gap stays exactly that size. Before placement, the densest round may raise the first round's absolute radius just enough for every configured-size symbol and seam to fit; all later radii still differ by exactly the configured spacing. Exact parent angles are retained whenever symbols fit; if inherited targets collide, a deterministic minimum-movement pass restores working order and clearance without applying a local per-round scale. Corrected bearings reconcile inward only while each earlier-round source is covered exactly once. A round that deliberately selects only some sources, or wraps across a source more than once, is an ancestry boundary: it resolves its own clearance without pulling an earlier V or stitch out of shape. Every stitch therefore keeps the size resolved from the user's setting across all rounds. These rules are based on measured geometry rather than a particular round, stitch type, count, or pattern phrase; they keep balanced V marks and never delete a stitch.

style: continuous uses that same layout and spells the correspondence out instead of printing it: every stitch keeps its own symbol — including both stitches an increase makes — and lines are drawn from them to the stitch below they are worked into. Useful for checking a pattern, or for reading a chart when you don't already know the book symbols.

In both, ordinary one-to-one stitches are never arbitrarily grouped or packed: each prefers the stitch below it. A round written as a repeat — [2 sc, inc] x 6 — still reads as six wedges, because its six increases follow the six stitches they are worked into. A round that neither writes repeats nor shapes — the straight sides of a basket, R9: 40 sc — copies the round below. A free-form round that deliberately skips places still uses every recorded source as its preferred target; if fixed-spacing clearance requires projection, that correction stops at a partial or repeatedly used ancestry boundary instead of dragging the earlier round or replacing the mapping with unrelated even spacing.

The first stitch worked into the center ring stays at twelve o'clock. Round numbers start just to its right and target another half degree toward twelve o'clock on each outer round, forming a subtle inward guide instead of a rigid spoke. The seam reserves room for its join, step, number, and opening chain when geometry permits; 10px side clearance is a minimum, while configured round spacing is exact. Any additional ancestry-derived seam room remains available, and the number/separator packet moves only inside that measured surplus—it stops before the final stitch instead of rotating the stitches to reach its preferred bearing. The layout follows the continuously clear path from the measured seam slot toward the preferred bearing and stops at the first collision, so a number remains on the opening side of its separator and wholly before its closing join even when clear space exists beyond them. This uses measured digit and symbol footprints and works the same when a partial chart begins at R4, R16, or any other round.

The default style: radial keeps the original evenly spread layout with the stock inc/dec glyphs; the global Round chart style setting changes the default for all charts.

---
type: round
style: japanese
---
R1: 6 sc in MR
R2: [inc] x 6
R3: [sc, inc] x 6
R4: [2 sc, inc] x 6

Spiral

type: spiral renders all rows along a single continuous spiral.

---
type: spiral
---
R1: 6 sc in MR
R2: [sc, inc] x 6
R3: [2 sc, inc] x 6

Blank Drafting Grid

crochet-grid renders a blank grid for sketching a new design by hand — no stitches, no progress tracking, just guide geometry.

shape: polar
rounds: 6
columns: 12
  • shape: polar (default) draws rounds concentric ring circles and columns evenly spaced radial spokes.

  • shape: rect draws a rows by columns rectangular mesh instead:

    shape: rect
    rows: 8
    columns: 8
    
  • scale, stroke, and spacing behave the same as they do for crochet charts; spacing sets the ring gap for polar or the cell size for rect.

  • Run the Insert blank crochet grid command to insert a starter block pre-filled with your grid defaults.

Grid Guide Overlay

Unlike the standalone blank grid above, a grid: on key on a real crochet block draws a faint reference guide behind your actual chart, aligned to its real geometry — useful for seeing "which round am I on" at a glance, especially alongside the embedded progress tool.

---
type: round
grid: on
---
R1: 6 sc in MR
R2: [inc] x 6
R3: [sc, inc] x 6
R4: [2 sc, inc] x 6, sl st
  • type: round / type: spiral: one guide ring per round, at that round's real radius (spiral rings approximate "round N" as the radius reached by the end of row N, since a spiral has no discrete rounds). Guide spokes default to the last round's stitch count, evenly spaced by angle.
  • type: flat: a row/column mesh sized to the chart's real row height and stitch width — a reference frame, not a guarantee every stitch past row 0 sits exactly on an intersection (rows alternate direction).
  • By default the guide matches the pattern's own extent — no extra config needed. Add rounds: (round/spiral) or rows: (flat) and/or columns: to extend the guide beyond the real pattern (e.g., to preview how many more rounds a design might need); these can only extend the guide, never shrink it below the real extent.
  • Turn it on for every chart by default with the Show background grid guide setting.

Embedding the Progress Tool or Pattern Text

A crochet block's tool and text frontmatter keys (or their matching global settings) let the chart carry its own progress panel, so the pattern only ever needs to be written once:

  • tool: on — embeds the full interactive progress tool (row checklist, progress bar, weighted per-row stitch counter with add / subtract / reset, previous/complete/reset controls).
  • text: on — embeds a read-only shorthand list of the rows (label, normalized steps, stitch count), with no progress tracking or buttons. Useful if you just want the notation next to the picture.
  • If both are truthy, tool wins (it already shows everything text would).
  • position: right | left | below controls where the panel sits relative to the chart. right (default) and left sit side by side and wrap to a stacked layout on narrow widths; below always stacks.

Progress Tool

Whether embedded (tool: on) or standalone (crochet-tool block), the progress tool tracks two levels of detail:

  • Row/round progress — click a row to jump to it, or use Previous / Complete round / Reset. A segmented bar shows how many rows are done.
  • Stitch counter — for the current row, tap the + button once per pattern unit (e.g., +2 for an inc). Reaching the row's full stitch count automatically completes that row and resets the counter to zero, so you can keep tapping straight through row boundaries. The button corrects an overcount, and a reset button clears the current row's count without touching row progress. Going back a round, completing a round, resetting, or clicking a row all reset the stitch counter for the new current row.

When the tool is embedded next to its chart (tool: on), the chart highlights your current position live: the current row gets a subtle wash, and the exact next stitch gets a stronger highlight, both in the color set by Chart tool current-position color. Standalone crochet-tool blocks and text: on panels have no chart to highlight, so they don't show this.

Settings

Open the plugin settings tab to configure global defaults:

  • Language: follow Obsidian or choose one of eight — English, Traditional Chinese, Simplified Chinese, Japanese, Korean, German, French, or Spanish. Stitch names and every message are translated in all of them; the AI pattern-authoring reference is written in the first four.
  • Chart scale: chart display scale.
  • Symbol stroke width: SVG stroke width.
  • Round spacing: spacing between round or spiral rings.
  • Highlight increases and decreases: accent inc and dec stitches.
  • Increase and decrease color: the color those symbols are drawn in when the highlight above is on.
  • Chart tool current-position color: color used to highlight the current row/stitch on a chart with an embedded progress tool.
  • Show progress tool by default: embed the progress tool on every crochet chart unless overridden per chart with tool: on/off.
  • Show pattern text by default: embed the read-only pattern text on every crochet chart unless overridden per chart with text: on/off.
  • Pattern text style: show raw shorthand or fully translated readable stitch names, overridable per chart with readable: on/off.
  • Panel position: default position (right / left / below) for an embedded tool or text panel, overridable per chart with position:.
  • Show background grid guide: draw the round/row reference guide behind every crochet chart by default, overridable per chart with grid: on/off.
  • Round chart style: radial (evenly spread stitches), japanese (round separators, parent-placed stitches, printed V/∧ shaping, and round numbers), or continuous (same layout, every stitch drawn and joined by lines to the round below).
  • Grid default shape: polar or rect default for new crochet-grid blocks.
  • Grid default rounds: default ring count for a polar grid.
  • Grid default columns: default column/spoke count for a grid block.
  • Grid default rows: default row count for a rect grid.

Settings marked "overridable per chart" can be set with the matching frontmatter key (scale, stroke, spacing, highlight, style, tool, text, position, grid). chartMarkerColor is global-only. crochet-grid blocks use their own config keys (shape, rounds, columns, rows, plus scale/stroke/spacing); the grid guide overlay on a real crochet chart adds rounds/rows/columns on top of that chart's own frontmatter, always as an extension of its real extent.

Safety Limits

Crochet Weaver validates parsed charts before layout expansion. Extremely large row counts, stitch counts, repeats, nesting depth, or total render items are rejected with an inline error instead of freezing the Obsidian preview.

Current limits:

  • Maximum rows: 200
  • Maximum stitch quantity: 1000
  • Maximum repeat count: 500
  • Maximum total rendered stitches: 5000
  • Maximum nesting depth: 8
  • Maximum grid rounds: 40 (applies to both crochet-grid blocks and a crochet chart's grid: on guide rounds: override)
  • Maximum grid columns: 72 (same scope as above)
  • Maximum grid rows: 40 (same scope as above)

Privacy

Crochet Weaver runs locally inside Obsidian.

  • No telemetry.
  • No network requests.
  • No vault scanning.
  • Pattern text is parsed only from the rendered code block.
  • Progress (row and stitch) is stored locally in the plugin data.json file.

Development

Install dependencies:

npm install

Run tests:

npm test

Build the plugin:

npm run build

Lint the project:

npm run lint

The parser is generated from src/pattern/grammar.peggy into src/pattern/parser.ts. Do not edit the generated file by hand.

The pattern skill

The knowledge an assistant needs lives in skills/crochet-weaver-pattern/SKILL.md plus .zh-TW, .zh-CN and .ja versions. See Let an AI write the pattern for you for the workflow. When you edit a SKILL file, run npm run generate-skill so the copy bundled into the plugin (src/skill-content.ts) matches; the build, tests and lint all run it first, and a test compares the two byte for byte.

Manual Install

Build the plugin, then copy these files into your vault plugin folder:

<Vault>/.obsidian/plugins/crochet-weaver/
  manifest.json
  main.js
  styles.css

Reload Obsidian and enable Crochet Weaver in Settings -> Community plugins.

Release

  1. Update manifest.json and package.json to the same SemVer version.
  2. Update versions.json so the plugin version maps to the minimum Obsidian app version.
  3. Run npm test, npm run build, and npm run lint.
  4. Create a Git tag that exactly matches the manifest version, without a leading v.
  5. Publish a GitHub release with manifest.json, main.js, and styles.css as release assets.