Spec status: LOCKED, 11 September 2026. This scope was due to lock on 9 September, day 14 of the campaign. It was held open two extra days because a backer raised a real problem with section 7.1 and the fix changed the design. It is now final.
If you have already backed this, you can withdraw for a full refund up to 18 September 2026, seven days from the lock, if the final scope is not what you thought you were funding.
What changed on 9 September: the export no longer asks you to pick one role up front and filter everything to it. Parts are now worked out song by song, charts assigned to no role are treated as available to everyone, and you are only asked to choose on songs that genuinely offer you more than one part. See section 7.1.
Getting a setlist from Back On Stage into forScore currently means downloading charts one at a time and importing them one at a time. For a twenty-song set with players on different parts, that is not a two-minute job.
The setlist is already organised inside Back On Stage. The export is where the organisation stops. Several bands have raised this same friction independently, which is what got it scoped.
This is buildable, and it is smaller than it sounds.
forScore publishes an open, documented, plain-XML setlist format that any third party is allowed to generate. It is not a reverse-engineered binary. There is no SDK to license, no partnership required, no proprietary container to reproduce.
And PDFs can be embedded directly inside the file. That was the open question, and the answer is favourable: the format has an optional data attribute that takes Base64-encoded PDF bytes. So a single .4ss file can carry the setlist order and every chart, and the musician taps it once.
Source: forScore Developers / File Types, the "Open Setlist (4SS) Format" section.
forScore has two different things both called .4ss:
| What it is | Can we generate it? | |
|---|---|---|
Export .4ss |
The proprietary bundle forScore itself produces when a user shares a setlist. Contains scores as PDFs or 4SC containers with annotations, versions, metadata. | No. Undocumented, not published for third parties. Not attempted. |
Open Setlist .4ss (forScore 12.0+) |
A documented XML format with the same extension, designed explicitly so third-party apps can build setlists. | Yes. This is what gets built. |
forScore's own documentation is explicit that these are not the same file and are not interchangeable. Any scoping that misses this distinction will produce a wildly wrong estimate.
<?xml version="1.0" encoding="UTF-8" ?>
<forScore kind="setlist" version="1.0" title="My New Setlist">
<score title="Score Title" path="filename.pdf" data="..." />
<placeholder title="A New Placeholder" />
</forScore>
Root element must be forScore with kind="setlist" and version="1.0". title is the setlist name. The score element is the one that matters, with placeholder used for songs that have no chart.
| Attribute | Value | Required | Notes |
|---|---|---|---|
path |
Filename of the score | Yes | The chart filename, sanitised |
title |
Fallback name shown if the file cannot be resolved | No | Always sent. This is the graceful-degradation path, and omitting it means an entry can be silently dropped rather than showing as a gap. |
data |
Base64-encoded PDF data, written to path
|
No | Always sent. Requires forScore 14.3+. |
bookmark elements have no equivalent concept in Back On Stage setlists and are out of scope.
A musician exports their own book for a gig, as a single self-contained file.
That sentence carries three decisions, all settled. The export is self-serve by the musician rather than generated and distributed by the bandleader. Parts are worked out song by song, with the musician asked to choose only where a song genuinely offers them more than one chart. And it produces one file with the XML setlist plus every selected chart embedded as Base64 in the data attribute.
Every musician who needs to open the file must be on forScore 14.3 or later.
There is no fallback path in this build. A setlist-only variant that works on forScore 12.0+ was considered and deliberately parked in order to keep this scope tight, so if your players are on an older version, this feature will not work for them.
This is the single most important thing to confirm with your band.
Encouragingly little. Back On Stage already holds everything required.
| forScore needs | Back On Stage already has | Transformation |
|---|---|---|
| Setlist name | Setlist title on the gig | Direct, XML-escape it |
| Ordered list of songs | Setlist items with sort order | Direct, preserve order |
| Which charts belong to this musician | Charts assigned to roles, the roles a musician is booked for, and charts assigned to no role | Per song, build the candidate set, then auto-select, prompt, or emit a placeholder |
path (filename) |
Chart PDF filename on the song record | Sanitise: strip path separators, enforce .pdf, handle duplicates |
title fallback |
Song title | Direct, XML-escape it |
data (PDF bytes) |
The chart PDF in storage | Fetch, Base64-encode, inline |
The existing "Download All PDFs" feature is the proof that the hard part is already solved. It already resolves a setlist to its ordered charts and streams the bytes. The new work is substantially "take that same resolved list, choose one chart per song, and write XML around it instead of zipping it."
placeholder carrying the song title, so the set order stays intact and you see the gap rather than losing the song entirely. Never silently dropped.path to avoid collisions on its end, which would then make our XML reference the wrong file for later entries. Deduplicated before writing.data attribute is PDF only.Base64 inflates payload by roughly a third, and the whole thing is a single XML file that both the server and the iPad have to hold.
Exporting one chart per song helps here, since a musician carries their own book rather than the whole band's. It does not solve it: on material where every player reads from the same chart, one musician's export is the same size as everybody's.
| Setlist size | Raw PDFs | Base64 payload | Verdict |
|---|---|---|---|
| 15 songs @ 500KB | 7.5 MB | ~10 MB | Fine |
| 40 songs @ 500KB | 20 MB | ~27 MB | Workable |
| 40 songs @ 2MB | 80 MB | ~107 MB | Past the ceiling |
| 100 songs @ 2MB | 200 MB | ~267 MB | Well past the ceiling |
Built in from day one:
The export refuses, and says exactly why. The message names the specific charts pushing the file over the limit, so the problem is actionable rather than mysterious, and points the musician at the existing ZIP download, from which charts can be imported into forScore manually.
That is a deliberate choice over the alternatives. Silently reducing PDF quality is the kind of thing a musician discovers mid-performance. Splitting into several sequential files removes the single-tap benefit that is the entire point of the feature. Refusing clearly, with a working manual path already available, is the honest answer.
.4ss generator, streaming, with the selected charts embedded..4ss or .4sc bundles..4sb backup and archive generation.These were the genuinely undecided points. The reasoning is published here so it can be argued with rather than just accepted, and section 7.1 below is what happened when a backer took that invitation seriously. This spec locked on 11 September 2026 and these decisions are now final. Backers to date can withdraw for a full refund up to 18 September 2026.
Decision: parts are worked out song by song, and you are only asked to choose where a song is genuinely ambiguous. Revised 9 September 2026 after a backer challenge.
Back On Stage supports separate charts per instrument, while forScore's setlist model expects one score per entry.
The original answer, now superseded: you picked one role once, up front, and every song was filtered to it. A backer pointed out the flaw, and he was right. Real libraries are not that tidy. Charts sit against no role at all, players double on the same gig, and a single up-front role choice either buries the unassigned charts or hands you a set full of gaps. It also asks you to make a decision before you can see which songs it actually affects.
For each song independently, your candidate charts are every chart assigned to a role you are booked for, plus every chart assigned to no role. Unassigned charts are treated as available to everyone, because in practice that is what a lead sheet or a full score is.
Then, per song:
placeholder carrying the song title, so the set order survives and the gap is visible.Selection happens once, up front, before generation starts, so you answer everything in one pass rather than being interrupted repeatedly.
The remembered-choice shortcut exists because the common case is a doubler facing the same trumpet-or-flugelhorn decision on thirty songs out of forty. Without it, a correct design becomes an unusable one at exactly the library sizes this feature is for. It is offered rather than assumed, and it is always overridable, because the whole point of asking is that you know something the data does not.
Routing parts automatically by role. Quietly makes a decision on your behalf and gets it wrong for anyone doubling, with no signal that a choice was even made.
Sending every part to everyone. Recreates the exact pile of irrelevant PDFs this feature exists to eliminate.
A single up-front role choice. The superseded answer above. Simpler to build, and wrong for any library with unassigned charts in it, which is most of them.
Decision: refuse, and name the charts causing it.
The export stops, explains why, identifies the specific charts pushing it over, and points at the existing ZIP download as the manual path into forScore.
Rejected alternatives, and why: automatic quality reduction hides a change to the thing a musician is reading from, which is unacceptable in performance. Splitting into several files defeats the single-tap purpose of the feature. Refusing clearly is worse in the moment and better in every other respect, and there is already a working fallback in the product.
Decision: the musician viewing the setlist, self-serve, from their own side of Back On Stage.
In practice this means every musician on the gig, each pulling their own part when they want it. Export is reachable from both the Gig Sheet and the Setlist (Performance Mode) screen, which are the two places a musician is already looking before a gig.
This removes the bandleader from the loop entirely. Nobody has to remember to send anything, nobody is waiting on anyone, and a late substitute added the day before can pull their own book the moment they are booked.
| Phase | Deliverable |
|---|---|
| 0 | Proof spike: hand-build one .4ss with three embedded charts and open it on a real iPad. Validates the 14.3 behaviour against real chart files before anything else is committed. |
| 1 | Generator with embedded charts, streaming, per-song candidate resolution, internal only |
| 2 | Size guard, the refusal message, and the ZIP fallback path |
| 3 | Musician-side export on the Gig Sheet and Performance Mode, including the per-song selection flow and the remembered-choice shortcut |
| 4 | Beta with a small group of forScore-heavy bands |
| 5 | General release |
Format details verified against forScore's published developer documentation, 2026-08-13. Section 7.1 revised 2026-09-09. Spec locked 2026-09-11.
Sources: forScore Developers / File Types ยท forScore Compatible File Types