Juggling - credits, sources and an honest account of what is and is not documented ================================================================================= WHAT THIS IS ------------ An independent reimplementation, written from published descriptions of siteswap notation and of juggling physics. It is not a copy of any existing juggling program and contains no code from one. Juggling Lab, Jongl and JuggleMaster are the well-known juggling simulators. Juggling Lab's DOCUMENTATION is cited below for its parameter definitions and defaults - the dwell, the beat rate, the standard hand style - because it is the only place those are written down numerically. None of its code was read or used. The renderer here is hand-written WebGL with no library. Siteswap is a notation, not a product, and nobody owns it. The named patterns and their siteswaps are credited to the sources listed below. WHO INVENTED THE NOTATION - AND WHY THIS APP DOES NOT PICK A WINNER ------------------------------------------------------------------ Wikipedia's "Siteswap" article credits three groups working separately: Paul Klimek in Santa Cruz in 1981; Bruce Tiemann and Bengt Magnusson at Caltech; and Michael Day, Colin Wright and Adam Chalcraft in Cambridge. Wikipedia's "Juggling notation" article credits only Magnusson and Tiemann, in 1985. The two accounts contradict each other on both the people and the year, and no source opened for this build resolves it, so the app states both. Siteswap was also not the first juggling notation: one was proposed by Dave Storer in 1978, and the first printed juggling diagram was Jeff Walker's in 1982. Claude Shannon is credited with the first ladder diagram around 1981, printed only in 2010. SOURCES ------- S1 Wikipedia, "Siteswap". Full plain-text extract via the MediaWiki API, 2026-09-13. https://en.wikipedia.org/wiki/Siteswap S2 Wikipedia, "Juggling", section "Mathematics" - Shannon's juggling theorem and the counting result. https://en.wikipedia.org/wiki/Juggling S3 Wikipedia, "Juggling notation". https://en.wikipedia.org/wiki/Juggling_notation S4 Wikipedia pattern articles: "Box (juggling)", "Cascade (juggling)", "Fountain (juggling)", "Shower (juggling)", "Flash (juggling)", "Mills' Mess", "List of siteswaps". S5 Juggling Lab documentation - https://jugglinglab.org/html/sspanel.html and https://jugglinglab.org/html/animinfo.html . A reference implementation's documented parameters and defaults, not a standard; every item citing it is marked "qualified". S6 Ehrenborg, R. and Readdy, M. A., "Juggling and applications to q-analogues", Discrete Mathematics 157 (1996) 107-125. The FPSAC 1994 proceedings PDF was downloaded and read at https://fpsac-archive.github.io/FPSAC94/ARTICLES/16Ehrenborg.pdf S7 Wikipedia, "Juggling ball" - prop dimensions. An encyclopedia article about props; there is no standard to cite, so every dimension from it is marked "qualified". S8 IJA Numbers Championships Rules, read in full 2026-09-13. https://festival.juggle.org/ija-numbers-championships-rules/ (the obvious juggle.org paths for this document all 404; it lives on the festival subdomain) S9 Wikipedia, "Juggling world records", and the JISCON rules. JISCON is defunct. S10 The Library of Juggling, https://libraryofjuggling.com/ - per-trick pages. A well-regarded hobbyist reference, not a governing body; marked "qualified". S11 General reference not specific to juggling: CGPM standard gravity 9.80665 m/s^2 and textbook projectile kinematics. Marked "qualified" so the tally is not flattered. S12 This engine, re-measured by tools-harness.js, tools-oracle.js and tools-normals.js. S13 Sources named by the material above that could NOT be read - see the section below. PROVENANCE TALLY ---------------- 91 entries: DOCUMENTED 47, qualified 16, MEASURED 10, DERIVED 7, RECONSTRUCTED 10, CALIBRATED 1. "qualified" means documented, but of something adjacent - a hobbyist reference rather than a governing body, a reference implementation's default rather than a standard, or general physics rather than a juggling measurement. They are counted separately on purpose; folding them into DOCUMENTED would flatter the tally. The full list is in js/provenance.js and on the page under "How this was built"; tools-harness-page.js recounts it from the shipped file and checks the numbers printed here and in index.html against it. WHAT IS FAITHFUL ---------------- - Siteswap notation, vanilla, synchronous and multiplex, including the star abbreviation (S1). - The validity test, stated as published (S1), and the general state-cycle criterion that covers all three flavours (S1), restated in a refereed paper as a permutation condition (S6). - The object count as the average of the throw values (S1), and that an integer average is not sufficient - 543 is the published counterexample (S1). - The slide property for synchronous patterns, with its published worked example (S1). - The counting theorem: period d with at most n objects gives n^d sequences (S6, S2). - The named patterns and their siteswaps (S1, S4, S10). - Dwell measured in beats, range 0.0 to 2.0, default 1.3; typical beat rates 3.0 to 5.5 per second; 1 throws thrown early and caught late; the standard hand style of throwing 10 cm from the midline and catching 32.5 cm from it (all S5, all qualified). - The flash and the qualify as goals, in the IJA's and JISCON's own terms (S8, S9). - Juggling ball sizes and masses as ranges, not as a specification, because none exists (S7, S8). WHAT THIS APP DECIDED FOR ITSELF -------------------------------- - Every colour. The figure, its proportions, its two-bone arms, the scooping carry of a held ball and the outward sweep of an empty hand. Hand height of 1.02 m. - The three cameras, and the rule that the camera moves back when a pattern throws higher than the frame rather than the throws being shortened. - The timing window a throw has to be keyed inside, and that a missed window ends the run. - The third goal, a run of ten throws per object. The flash and the qualify are documented; this one is not. - A floor of 0.25 beats on the shortest flight this app will draw. The BEHAVIOUR of shifting a 1 early is documented; this number is not. - Refusing to parse a pattern that mixes synchronous and asynchronous notation, which the notation itself permits. That is a limit of this build, not of siteswap. - Drawing a 2 as a small self-throw rather than a hold. The notation genuinely cannot say which - a published FAQ says so outright, about the multiplex [23]. THINGS THE PUBLISHED MATERIAL GETS WRONG, OR DOES NOT DECIDE ------------------------------------------------------------ 1. The usual "iff" is narrower than it looks. "A sequence can be juggled exactly when i -> (i + s_i) mod n is a permutation of Z_n" is correct for vanilla siteswap and wrong for synchronous patterns: the box, (4,2x)(2x,4), is a real three-object pattern whose digit string 4224 fails the test. Over the 14,762 synchronous patterns enumerated for this build, the test applied to the digit string gets 1,484 wrong. It is not well-typed for multiplex at all, and over 9,723 enumerated multiplex patterns there are 684 where no collapse to a single digit per beat gives the right answer. 2. The integer average is not a second condition. It follows from the permutation test: a permutation of Z_n fixes the sum of the landing sites modulo n. The converse is false. 3. The published slide property, read literally, rejects six juggleable patterns. Wikipedia's formula builds the second slid sequence by taking each value from the neighbouring throw but deciding whether to shift it by a beat from its OWN throw's crossing flag. Both readings give the one published worked example, (8x,4x)(4,4) -> 9344 and 5744, because there the two throws of each pair carry the same flag. Enumerating all 14,762 synchronous patterns separates them: read literally the formula subtracts one from a 0 and produces a throw of -1, wrongly rejecting (0,2x)(2x,0), (0,2x)(2x,4), (0,2x)(4x,2) and their three rotations - every one of them a pattern with a 0 opposite a crossing throw. Taking the flag from the throw the value comes from repairs all six and disagrees with the simulation nowhere. 4. Six rows of Wikipedia's "List of siteswaps" state an object count or a period that the same article's own average rule contradicts: 93, 642, 7333, 56414, 615150 and 7161616. The wikitext of that article also carries visible vandalism. None of this app's catalogue comes from it. 5. The formula "flight = s - 2 x dwell_ratio" is folklore. It is widely repeated, and appears in no source that could be opened. The documented parameter is a dwell in beats, so this app uses flight = s - dwell. 6. Most famous tricks are not distinct siteswaps. Mills' Mess, Juggler's Tennis and the three-ball half-shower are all siteswap 3. Siteswap explicitly does not describe arm paths and this app does not draw them, so those entries look exactly like a cascade. They are listed anyway, labelled, because omitting them would imply the notation distinguishes them. 7. "Box" is ambiguous: at least three siteswaps are published under that name. This app uses (4,2x)(2x,4) and says so. 441 is the half-box, not the box. 8. There is no governing body for any of this. Two organisations publish rules - the IJA's Numbers Championships rules, which are live, and JISCON's, which are frozen and whose body is defunct - and both were read for this build. Neither says one word about siteswap, throw heights, ball dimensions or pattern names. No body specifies a ball: the published rules require only that an object be roughly spherical with no aerodynamic lift. Anything claiming an official juggling specification for those things is wrong. 9. Only a = 10 is spelled out for the letter values. b = 11 onward is the obvious continuation and is used here without a source that states it. SOURCES THAT COULD NOT BE READ ------------------------------ - Beek, P. J. and Lewbel, A., "The Science of Juggling", Scientific American (1995). The citation behind Shannon's theorem, the counting result and the square-root relation as the encyclopedia presents them. Its host no longer resolves; the archived copy is an image-only scan with no text layer. Every claim traced to it here is quoted at second hand. - Polster, B., "The Mathematics of Juggling", Springer (2003). Paywalled. The standard book-length treatment; page numbers other sources attribute to it are unverified here. - Buhler, J., Eisenbud, D., Graham, R. and Wright, C., "Juggling drops and descents", American Mathematical Monthly 101 (1994). Authors and title confirmed from S6's bibliography; volume, year and pages are the standard citation and were not checked. - The WJF's competition rules. Only its home page was opened, which describes the body as a global governing body - a self-description. Recorded as unchecked, not as "publishes nothing". The ISJF and the European Juggling Association were not checked either. - www.siteswap.org, still linked from Wikipedia, redirects to an empty response. HOW IT WAS TESTED ----------------- Every sequence of period 1 to 7 over the digits 0 to 9 - 11,111,110 of them - was decided two completely separate ways: the permutation test, and a search for a periodic orbit in a state machine that has no modulus and no digit sum in it. They never disagree; 86,916 can be juggled. A further 69,904 sequences over the letter values, 14,762 synchronous patterns and 9,723 multiplex patterns were decided the same way, with a slower object-by-object simulation as a third opinion on the smaller spaces and the published slide property as a fourth on the synchronous ones. 25 deliberate mutations of the shipped engine are each caught by that battery; four rewrites that provably cannot change the answer are each left alone by it; and the battery is asserted to pass the UNMUTATED engine before any mutant verdict is believed. That last assertion earned its keep: the first version of this build's continuous-time check failed on the plain five-ball cascade, and would otherwise have "caught" every mutant while testing nothing. LICENCE ------- MIT, for the software. See LICENSE.txt. Not affiliated with the IJA, the WJF, or any juggling organisation.