FFA is a very general tournament building block that you can take in many directions (only a few of which are commonly explored).
The result always consists of FFA matches; matches that expect multiple players/teams competing at once in a free for all, and these matches are bracketed like an elimination tournament. Beyond that, however, you have free reigns. Match sizes can vary from round to round, you can define an end round that has multiple matches, and you can have every remaining player in one match for some or all rounds. Endless possibilities.

You must specify precisely the required group size for each round and how many to advance.
This is really the hardest part of an FFA elimination. There are essentially endless possibilities, and we will allow very exotic and adventurous ones as long as they are playable, non-trivial, and leave the next round sensible.

// 8 players in 1 match of 8

var ffa =newFFA(8);

ffa.matches;

[{ id:{ s:1, r:1, m:1}, p:[1,2,3,4,5,6,7,8]}]

// 16 players in matches of 4 each round, top 2 advances between each

var ffa =newFFA(16,{ sizes:[4,4,4], advancers:[2,2]});

ffa.matches;

[{ id:{ s:1, r:1, m:1}, p:[1,5,12,16]},

{ id:{ s:1, r:1, m:2}, p:[2,6,11,15]},

{ id:{ s:1, r:1, m:3}, p:[3,7,10,14]},

{ id:{ s:1, r:1, m:4}, p:[4,8,9,13]},

{ id:{ s:1, r:2, m:1}, p:[0,0,0,0]},// semi 1

{ id:{ s:1, r:2, m:2}, p:[0,0,0,0]},// semi 2

{ id:{ s:1, r:3, m:1}, p:[0,0,0,0]}]// final

// 15 players in groups of 5, limited so that the top 2 from each match can be picked

var ffa =newFFA(15,{ sizes:[5], limit:6});

ffa.matches;

[{ id:{ s:1, r:1, m:1}, p:[1,4,7,12,15]},

{ id:{ s:1, r:1, m:2}, p:[2,5,8,11,14]},

{ id:{ s:1, r:1, m:3}, p:[3,6,9,10,13]}]

// 32 player groupstage replacement - 4 matches of size 8

var ffa =newFFA(32,{ sizes:[8]});// may have to tiebreak without limits

Note that the last example is so common it has been created as a subclass in masters. Subclassing is easy, and if you find yourself reusing certain patters, you should create one after reading the tournament implementors guide.

Call ffa.score(id, [player0Score, player1Score, ...]) as for every match played.
The ffa.unscorable(id, scoreArray) will tell you whether the score is valid. Read the entry in the tournament commonalities doc. In addition to the normal scoring restrictions there is an additional one for FFA:

Individual ties are only allowed as long as we can discriminate between the last advancer and the first non-advancers. If these two scores are identical, the ambiguity is disallowed and .score() will return false (equivalently unscorable() will tell you this).

Note that this is artificial, and if you have no way of enforcing this, you will have to manually adjust the match score to account for ties. FFA will not allow you to enter ambiguous scores at the limit point.

Note that if you would like automatic tiebreakers created when ties occur, rather than enforcing the limit with code, try the ffa-tb module instead.