Skip to content

docs(releases): finish the 1.9.0 notes, load real MusicXML and Capella demos, fix Capella import - #3002

Merged
Danielku15 merged 14 commits into
developfrom
feature/1.9-release-notes-and-landing-demos
Oct 31, 2026
Merged

Danielku15 merged 14 commits into
developfrom
feature/1.9-release-notes-and-landing-demos

Conversation

@Danielku15

Copy link
Copy Markdown
Member

Note

AI-authored disclosure (alphatab-ai-authored-v1)

Portions of this content were authored by an AI agent. The agent has read
AGENTS.md and the human submitter accepts responsibility for
compliance with the rules in that document.

Issues

No issue: 1.9.0 release preparation by the maintainer (release notes and website content). The maintainer asked for the Capella importer fix to go into this PR directly, as a minimal fix to make Capella import usable again; full Capella support is planned for 1.10.0.

Proposed changes

1.9.0 release notes (website/docs/releases/release1_9.mdx)

The notes did not cover the PRs merged since they were last updated:

All internal links and anchors were checked against next.alphatab.net: 104 pages and 73 anchors. The check rules out the host's fallback page, which is served with HTTP 200. PR, commit and user links were checked against GitHub.

Capella import (CapellaParser.ts)

Every .capx file failed with "No compatible importer found for file", in 1.8.4 too. The parser called Beat.updateDurations() before the beat was added to its voice and before its notes were read, so the full-bar rest check (Beat.isFullBarRest) dereferenced the missing voice. Chords now compute their duration after their notes are parsed, rests after they are added to their voice. CapellaImporter.test.ts is the first Capella test: a grand-staff file with lyrics, and inline CapXML with whole notes, full-bar rests and a half-bar rest. Both tests fail without the fix.

Landing page demos

The file tabs are there to show alphaTab loading different formats, but two of them loaded Guitar Pro files:

  • prelude.musicxml now loads Bach_Prelude_BWV999.musicxml: the same four bars as Bach_Prelude_BWV999.gp, as one guitar part with a treble-8vb notation staff and a TAB staff. It validates against the MusicXML 4.0 schema. Imported, it matches the .gp in every pitch, duration, tie, string and fret.
  • The former etude.capx tab (which loaded Drums.gp5) is now twinkle.capx and loads twinkle-mozart.capx: the K. 265 theme from twinkle-mozart.musicxml on a piano grand staff with lyrics. It validates against the CapXML 3.0.3 schema; the newer official schemas contain errors and do not compile. The Capella feature page loads it too, instead of a Guitar Pro file.

Both pieces are public domain.

Landing page content

  • The showcase data no longer carries the outreach consent markers and their TODO comments.
  • The platforms card no longer announces iOS.

Verification

  • CapellaImporter.test.ts passes. The full suite and the C# and Kotlin tests were not run locally.
  • The site typechecks, and the changed MDX pages compile.
  • Both new demo files were imported and rendered with alphaTab and compared visually with their source files.

Checklist

  • I consent that this change becomes part of alphaTab under its current or any future open source license
  • This PR is linked to an accepted issue (see above)
  • Changes are implemented
  • New tests were added
  • I have read AGENTS.md if an AI helped draft any part of this PR

AI authorship disclosure

  • No AI agent authored any part of this PR (description, code, tests, or commit messages)
  • An AI agent contributed to this PR. The AI-authored disclosure block
    (alphatab-ai-authored-v1) is present at the top of this body, and I have
    personally reviewed every change and can explain each one

Further details

  • This is a breaking change
  • Docs / release notes updated in website/

Enum members, settings categories and the alphaTex syntax terms were
anchored with plain HTML ids, which Docusaurus does not collect, so the
build reported over a hundred broken anchors that resolve in the
browser. They are now rendered through Link, which registers the id.
The exporter guide and the 1.7 release notes pointed at anchors that do
not exist. Broken anchors now fail the build like broken links.
Publish and Release already build and deploy the website after the web
packages, including dry runs. The standalone Website workflow built
against whatever the dist-tags served and could deploy a website whose
packages were not published yet.
The ui and react packages are part of the monorepo, so the CI and
website jobs no longer probe for them before installing and building.
The deploy is live; whether a run deploys is decided by the website and
dry run inputs of the publish workflows and by the website environments.
…lent

The feature demos built on AlphaTabProvider turned the player on but had
no control to start it, so pages loaded the synthesizer and SoundFont
without a way to play. Demos about rendering, import, export and layout
no longer enable the player; the alphaTex live preview and the range
selection demo get a shared play/pause button.
…usicXML file

The tab was labelled prelude.musicxml but loaded the Guitar Pro file.
Bach_Prelude_BWV999.musicxml holds the same four bars as
Bach_Prelude_BWV999.gp: one guitar part with a treble-8vb notation staff
and a TAB staff, validated against the MusicXML 4.0 schema.
…tions

Every .capx file failed with "No compatible importer found for file":
the parser called Beat.updateDurations() before the beat was added to
its voice and before its notes were read, so the full-bar rest check
dereferenced the missing voice. Chords now compute their duration after
the notes are parsed, rests after they are added to the voice.
…apella page

The capx tab loaded Drums.gp5. twinkle-mozart.capx holds the K. 265
theme of twinkle-mozart.musicxml on a piano grand staff with lyrics,
validated against the CapXML 3.0.3 schema.
…Kotlin ports

The transpiler does not support array destructuring, which the new
Capella test used. On Kotlin the parser also read its lateinit voice
state before the first voice assigned it; it now starts with an empty
state that counts as a completed bar, as the unset value did in
JavaScript.
@Danielku15
Danielku15 merged commit 7204510 into develop Oct 31, 2026
11 checks passed
@Danielku15
Danielku15 deleted the feature/1.9-release-notes-and-landing-demos branch October 31, 2026 20:54
@Danielku15
Danielku15 restored the feature/1.9-release-notes-and-landing-demos branch October 31, 2026 20:56
@Danielku15
Danielku15 deleted the feature/1.9-release-notes-and-landing-demos branch October 31, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant