Skip to content

Releases: mateusrdp/oxiguitar

OxiGuitar 0.10.0

OxiGuitar 0.10.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Oct 02:38
8472ec8

Which files do I need?

Two downloads: the program for your system, and the plugins it opens files with (without them OxiGuitar opens nothing).

System The program The plugins
Windows 10 and 11 (x86_64) OxiGuitar-0.10.0-windows-x86_64.zip OxiGuitar-plugins-basic-0.10.0-windows-x86_64.zip
Windows on ARM OxiGuitar-0.10.0-windows-arm64.zip OxiGuitar-plugins-basic-0.10.0-windows-arm64.zip
macOS (Apple Silicon and Intel) OxiGuitar-0.10.0-macos-universal.dmg OxiGuitar-plugins-basic-0.10.0-macos-universal.zip
Debian, Ubuntu (x86_64; arm64 for ARM) oxiguitar_0.10.0_amd64.deb oxiguitar-plugins-basic_0.10.0_amd64.deb
Fedora (x86_64; aarch64 for ARM) oxiguitar-0.10.0-1.x86_64.rpm oxiguitar-plugins-basic-0.10.0-1.x86_64.rpm
Any other Linux (x86_64; aarch64 for ARM) OxiGuitar-0.10.0-x86_64.AppImage OxiGuitar-plugins-basic-0.10.0-linux-x86_64.zip

Unzip the plugins into your plugin folder (where it is); the .deb and .rpm put them in place themselves. A Linux desktop without Wayland needs the X11 build instead of the program above: the files named oxiguitar-x11 or OxiGuitar-x11. Installing explains each step, and SHA256SUMS holds every file's checksum.

A second release for testers of milestone M4: recorded guitars, basses and drums. The SoundFont plugin plays SFZ instruments, and the manual names the free sets we recommend. Still to come before v1.0: amp modelling (NAM) and WAV export. Plugin interface 1.3 is unchanged: plugins built for 0.9 load as they are.

Added

  • The SoundFont plugin plays SFZ instruments (M4 slice 5), the format of the best free recorded guitars, basses and drum kits, through a sampler of our own: every note on its exact frame, velocity layers, round robins, key switches, choke groups (a closed hi-hat stops the open one), release samples, loops, envelopes, filters and LFOs, the samples (WAV, FLAC, Ogg Vorbis) whole in memory at their own bit depth and read with a high-quality interpolator. Bends, slides and vibrato move an SFZ note's pitch as far as they need. The SoundFont plugin's settings window lists SFZ instruments; one plays only where you pick it.
  • SFZ tracks play the score's effects: hammer-ons, pull-offs and legato slides play a set's recorded hammer-ons where it has them (Black and Green Guitars) and otherwise carry on the ringing string; palm mutes, dead and ghost notes use a set's recorded articulations where OxiGuitar knows them (Karoryfer's Black and Green Guitars and Black and Blue Basses), and drum kits laid out their own way play General MIDI's drums at their keys (SM Drums, Naked Drums, the open hi-hat of Karoryfer's kits).
  • The manual's Better sounds page names the recorded sets we recommend, all free: Karoryfer's Black and Green Guitars and Black and Blue Basses (CC0) and the MuldjordKit drums by Lars Muldjord and the DrumGizmo team (CC BY 4.0), with where to download them safely. The Hear it page and README have them playing a band, the bass, the drums and guitar techniques.

Changed

  • The SoundFont plugin's settings window picks a set for Electric guitars and Acoustic guitars apart (an SFZ guitar is one or the other); a pick made for Guitars in 0.9 holds for both. Banjos and the other fretted instruments now go with Everything else.
  • The plugin developer guide and its template plugin build against the SDK of v0.9.0 (interface 1.3), which needs Rust 1.99.

OxiGuitar 0.9.0

OxiGuitar 0.9.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 07:23
8121fcf

Which files do I need?

Two downloads: the program for your system, and the plugins it opens files with (without them OxiGuitar opens nothing).

System The program The plugins
Windows 10 and 11 (x86_64) OxiGuitar-0.9.0-windows-x86_64.zip OxiGuitar-plugins-basic-0.9.0-windows-x86_64.zip
Windows on ARM OxiGuitar-0.9.0-windows-arm64.zip OxiGuitar-plugins-basic-0.9.0-windows-arm64.zip
macOS (Apple Silicon and Intel) OxiGuitar-0.9.0-macos-universal.dmg OxiGuitar-plugins-basic-0.9.0-macos-universal.zip
Debian, Ubuntu (x86_64; arm64 for ARM) oxiguitar_0.9.0_amd64.deb oxiguitar-plugins-basic_0.9.0_amd64.deb
Fedora (x86_64; aarch64 for ARM) oxiguitar-0.9.0-1.x86_64.rpm oxiguitar-plugins-basic-0.9.0-1.x86_64.rpm
Any other Linux (x86_64; aarch64 for ARM) OxiGuitar-0.9.0-x86_64.AppImage OxiGuitar-plugins-basic-0.9.0-linux-x86_64.zip

Unzip the plugins into your plugin folder (where it is); the .deb and .rpm put them in place themselves. A Linux desktop without Wayland needs the X11 build instead of the program above: the files named oxiguitar-x11 or OxiGuitar-x11. Installing explains each step, and SHA256SUMS holds every file's checksum.

A release for testers of milestone M4, the player: OxiGuitar plays scores in the window, out of the box on Windows, macOS and Linux with the system's own sound set or better ones you add, with the cursor on the beat being heard, the practice tools and each track's mixer. Still to come before v1.0: amp modelling (NAM), SFZ sound sets and WAV export. Plugin interface 1.3 is frozen with this release.

Added

  • The player's timeline (M4 slice 1, oxiguitar-play): a score as it plays, with repeats, alternate endings, D.C., D.S., codas and Fine in Guitar Pro's order, tempo changes (gradual ones exactly), swing and triplet feel, every note's start and end in seconds with its velocity and every effect (bends, the whammy bar, slides, hammer-ons, ties, let ring, grace notes, strums, tremolo picking, trills, harmonics, dead, ghost and palm-muted notes, vibrato, fades), the metronome and a bar of count-in. oxiguitar-cli events FILE prints it. Nothing plays it yet: the sound comes in the next slices.
  • Plugin interface 1.3, its first part (M4 slice 2): a plugin can have a settings window, opened from Tools → Plugins with its Settings… button; add its own section to a track's Properties… (for the tracks it cares about), whose settings OxiGuitar saves beside the score in FILE.oxg (song.gp3.oxg), since no score format holds them, and undoes with the rest of the dialog; end a footer message with a link that opens in your browser (https only); and get folders: its own data and cache folders, and the soundfonts and nam folders beside plugins, which OxiGuitar creates when a plugin asks for them. oxiguitar-cli convert carries the .oxg file to the new file. The SDK re-exports serde_json.
  • The player's engine (M4 slice 2, oxiguitar-play): it plays the timeline on its frames, at 25 to 200 % speed without changing pitch, with loops, seeking, the count-in and the metronome, mixes the tracks (volume, pan, mute, solo) and keeps the clock the cursor will follow. Plugin interface 1.3 gains instruments and effects on the audio thread, and the contract suite checks each one: notes start on time, and nothing allocates (or, on Linux, makes a system call) while it renders.
  • OxiGuitar can make sound: audio-device plugins for PipeWire and ALSA (Linux), WASAPI (Windows) and Core Audio (macOS), in the basic plugins, and oxiguitar-cli play FILE, which plays a score from the terminal (from a bar, looping bars, at 25 to 200 % speed, with the count-in and the metronome) through the installed instruments. The instrument that plays real sounds, the SoundFont plugin, comes next; until then nothing installed plays a score.
  • The SoundFont plugin (M4 slice 3, in the basic plugins): it plays every track with a SoundFont 2 sound set through rustysynth, the one in your soundfonts folder (beside plugins) or else the largest your system has, each string of a guitar on a channel of its own, every note within 0.15 ms of its time. On Debian, Ubuntu and Fedora the oxiguitar-plugins-basic package now recommends a General MIDI sound set (fluid-soundfont-gm). It plays SoundFont 3 files too (decoded once and kept in its cache folder) and DLS files, so Windows' and macOS's own sets play out of the box. Its settings window (Tools → Plugins…, SoundFont, Settings…) picks a set for guitars, basses, drums and everything else. The first time it plays with only your system's sets, the footer says so, once, with a link to the manual's new Better sounds page.
  • The SoundFont plugin plays the effects: bends, the whammy bar and slides as pitch bend on their string, vibrato, hammer-ons and pull-offs carrying on the ringing string, palm mutes and dead notes damped, harmonics (with General MIDI's guitar harmonics on clean guitars), slap and pop on basses, swells and fades.
  • oxiguitar-cli play FILE --wav OUT plays a score into a WAV file instead of a sound card.
  • The player in the window (M4 slice 4): the Player tab plays the open score from the caret (Space, as in Guitar Pro 8), plays the selection and stops at its end, pauses (the caret stays on the beat heard), stops (the caret goes back where playing began), rewinds, loops the selection or the whole song, counts in a bar, clicks a metronome, plays at 25 to 200 % without changing pitch, and has a master level and the choice of output (kept for next time). Ctrl + Left and Right move a bar. The mixer in each Tracks row (volume, pan, mute, solo) changes the sound as it plays, and the track overview's playhead follows it. Sounds are made ready when a file opens, so Play doesn't wait. While the score plays it can't be edited: pause it to edit (Mateus, 25 Oct 2026). With no instrument, no sound set or no audio output, the controls are greyed out and the footer says what to get.
  • The playback cursor: a line moving with the sound and the beat being heard boxed, in blue, computed from the sound card's clock on every frame the screen shows; the page turns to keep it in sight. Paused, it stays with the caret. A click on a track's overview moves the playback there. The visual metronome flashes on each beat, brighter on the bar's first.
  • The manual's Hear it page: a band, bends, strums and drums as OxiGuitar plays them with good free sound sets; README shows them, with screenshots (Mateus, 26 Oct 2026).
  • The manual's Playing a score page, and the rest of Better sounds: choosing a set for each instrument, and FreePats' electric guitars (CC0) as the first recorded guitars to get, with the raw DI bank for the amp modelling to come. The listening workflow renders the reference songs with each of those banks too.
  • Plugin interface 1.3 gains the cpu condition: a plugin file can name the processor features its code needs (avx2, fma…), so a faster build ships beside a plain one of the same plugin; a processor without them uses the plain one, and where both can run the faster is used. Only manifests asking for 1.3 may use it, so no older OxiGuitar ever loads such a build blindly.
  • The engine limits its output to −1 dBFS, without adding latency, so loud songs no longer clip; the usual master level is about +6 dB, in the window and in oxiguitar-cli play.
  • The SDK's Piece::pitch: the whole array of pitch points, so an instrument can follow a note's curve from one call to the next.
  • Help → About asks for donations: a Donate with PayPal button, which opens the page in your browser, and a QR code (Mateus, 25 Oct 2026). OxiGuitar still connects nowhere itself: the browser does, and only when you click.

Changed

  • Releases attach one zip of our plugins for each system (and the oxiguitar-plugins-basic .deb and .rpm) instead of every plugin as a file of its own, and the release notes open with which two files each system needs (Mateus, 21 Oct 2026).
  • OxiGuitar downloads nothing, not even at your request: better sound sets (from the player, M4), models and plugins are files you put in a folder, and the manual says what to get and where (Mateus, 21 Oct 2026). The plans for a download button for SoundFonts are dropped.
  • Building OxiGuitar needs Rust 1.99, from rustup rather than a distribution's package (Mateus, 24 Oct 2026). Plugins built with the SDK of v0.5.0 still need only 1.97.

OxiGuitar 0.5.0

OxiGuitar 0.5.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Oct 04:36
3b38c25

Milestone M3 (the editor) is complete: OxiGuitar edits everything TuxGuitar does, and more, and saves as .gp and .gp5. Plugin interface 1.2 is frozen with this release.

Added

  • Writing Guitar Pro 5 files (.gp5; M3 slice 7): the Guitar Pro 5 plugin now writes as well as reads (plugin interface 1.2), and Save and Save As… write .gp5, so a .gp5 file is saved as itself. Version 5.10, which Guitar Pro 5 and every later version, and TuxGuitar, open. What it can't hold is named with the first bar and track, as for .gp (FMT-3): extra staves and more than two voices, tuplets beyond the common ones, double dots, free time, section letters, tempo names and gradual tempos, left-hand tapping, text beyond 255 characters or Windows-1252, and more. Drums, tracks without strings and the second round trip are exact. Over the corpus, all 104 files are written and read back equal or with their loss named: 96 exactly and 8 with named losses, and every Guitar Pro 5 file of it comes back exactly (cargo test -p oxiguitar-formats --test gp5_round_trip). The editing gates run for .gp5 too, and fixtures/guitar-pro-check/ holds every reference song as .gp5 as well as .gp, for checking in Guitar Pro.
  • Effects (M3 slice 6): every effect of Guitar Pro's tablature (TAB-1) from its key and the palette's Effects group, on the note on the caret's string or the caret's beat, or on every note or beat selected; pressed again, it comes off. Guitar Pro 8's keys (X dead note, O ghost, ; and : accents, ! staccato, H hammer-on, S legato slide, V vibrato, P and Shift + P palm mute, I let ring, Y and Ctrl + Alt + Y harmonics, N trill, " tremolo picking, ) and $ tapping and slap, ( left-hand tapping, < fade in, G and Ctrl + Alt + G grace notes, Ctrl + D and Ctrl + U brushes, Shift + D and Shift + U pick strokes, Ctrl + Alt + W wide vibrato), and ours: T tapping, Alt + S shift slide, Shift + S slide out downwards, Alt + P pinch harmonic, Alt + T tapped harmonic (Mateus, 20 Oct 2026). Effects with a value start at a default: a trill with the next fret up in sixteenths, tremolo picking in thirty-seconds, a brush over a sixteenth, harmonics 12 up; grace notes are thirty-seconds. The palette's dynamics set the beat's dynamic. The tools light up for the caret's note and beat, and the palette's tools beyond TAB-1 say they come in M5. Every effect is held to the editing gates: random runs undo to the original, and saved as .gp read back equal.
  • The bend editor (B, or the palette's Bend) and the whammy bar's (Ctrl + Alt + V): a type (Bend, Bend and release, Release, Prebend…; Dive, Dip, Return…), a pitch from ¼ tone to 3 tones, and the curve's points dragged on a grid of twelfths of the note by quarter tones, in the shape .gp files hold.
  • The palette's Raise and Lower by a Semitone, Multiple Ties and Section tools work.
  • Chord diagrams (M3 slice 6): the chord dialog (A, the palette's Chord and Chords, Edit → Chord…) with Guitar Pro 8's builder (root, type, extension, alterations, bass), the name it makes, and the ways to play the chord on the track's strings, easiest first; a grid to place notes, which names the chord they make; the track's chords to pick again. On a rest, a chord puts its notes in. The Inspector shows the beat's chord.
  • Text above a beat (Shift + T, the palette's Text, Edit → Text…).
  • The Song tab, beside the Inspector (M3 slice 6): the score's title, artist, subtitle, album, words, music, copyright, transcriber, notices and instructions, in Guitar Pro 8's order, each set as one step to undo.
  • The palette's search field (Ctrl + F): only the tools whose names hold the words typed.
  • Lyrics typed on the page, as in MuseScore (Mateus, 21 Oct 2026): Ctrl + T on a note opens a field under it; Space and hyphen go to the next note, Backspace in an empty field to the one before, Up and Down to another verse (five, as Guitar Pro), Enter or Escape end. Each syllable is one step to undo, and the lyrics stay as Guitar Pro writes them.
  • The Inspector shows and changes the note on the caret's string and its beat (M3 slice 6): its effects as tickboxes, and the values the keys start at a default: accent, slides in and out, harmonic and its interval, trill speed and fret, left- and right-hand fingering, dynamic, tremolo speed, grace note, brush and its speed, pick stroke, tapping, slapping or popping; Edit… opens the bend and whammy-bar editor. Each change is one step to undo, and every one is in the editing gates.
  • Tracks (M3 slice 5): a right-click on a track's name gives its menu, with Properties…, Transpose…, Add Track, Duplicate, Move Up, Move Down and Delete… (after a question). The track dialog (also Edit → Track Properties…) sets the name and short name, instrument, strings (3 to 10), tuning as a key and a pattern (Standard, Drop, Open D style, Open G style) or any notes, capo and frets, as one change; changing the strings keeps the notes' pitches or their frets, and a question says how many notes no string can play before leaving them out. Tunings are named compactly at the top of the page ("Tuning: Drop D"). Shown tracks stay shown when tracks are added, deleted or moved.
  • Transposition (M3 slice 5), by semitones or by steps of the key, keeping the fingering or finding new frets near the old ones: the selection or the caret's beat (right-click on the page, or Edit → Transpose Selection…), a track (its menu), or every track with its key signatures (Tools → Transpose…). Drum tracks are never transposed.
  • A right-click on the page gives the selection's commands: Transpose…, Bar…, Track Properties…, Cut, Copy and Paste. Outside the selection it first moves the caret there.
  • Only the caret's voice is drawn in full ink; the other voices are greyed, on screen only (Mateus, 20 Oct 2026).
  • The Inspector shows the caret's bar: for each voice, how many beats it holds against the time signature, in the signature's own unit ("3½ of 4"), whether it is full, short or too long and by how much, and how many beats were entered; and on which beat the caret's beat starts (Mateus, 20 Oct 2026). The Inspector now starts open.
  • A double-click on a time signature opens the Bar dialog for its bar.
  • Copy, cut and paste (M3 slice 4), OxiGuitar's own: beats copy within a voice and bars across tracks, Ctrl + V inserts at the caret, and Special Paste (Ctrl + Shift + V) pastes several times or replaces. Between drum and pitched tracks only the rhythm carries over. Edit → Go to Section moves the caret to a section.
  • Bars and tuplets (M3 slice 4): Insert inserts a bar and Ctrl + Delete deletes bars; [ and ] open and close repeats, | puts a bar in free time, / makes triplets, and Custom N-tuplet takes any grouping. The Bar dialog (Ctrl + T, Ctrl + K, D, or the palette's bar tools) sets a bar's time and key signature, clef, tempo, feel, repeats with a count, alternate endings, section, directions, double bar line and free time as one change; signatures, clefs and feel hold until the next change.
  • More note entry (M3 slice 3): on the standard staff a click gives the caret a line or space, Up and Down move it, and Enter puts a note there in the bar's key (on a guitar, on the string where its fret is lowest, nearest the caret's). File → New (Ctrl + N) starts a score of one bar with a steel-string guitar, and Right at the end of a score adds a bar. Alt + 1 to 4 move the beat to another voice, Ctrl + Shift + Delete clears beats, and the Edit menu gains Insert Beat, Delete Beats, Clear Beats, Clear Bar, Move Beat Left and Right, Move Beat to Voice and Remove Unused Voices.
  • Entering notes (M3 slice 3), with Guitar Pro 8's keys: 0 to 9 put a fret on the caret's string (two digits in a row make one fret), R a rest, − and + a longer or shorter note, Shift + . and Ctrl + . one or two dots, L and Shift + L ties, Backspace deletes a note, Shift + Delete a beat, Ctrl + Insert inserts one, Alt + Shift + Up and Down move a note a semitone, Alt + Up and Down to the next string at the same pitch. After a short voice's last beat the caret has one more place, where typing adds a beat; typing in a voice the bar doesn't have starts it. The palette's note values, Rest, dots and Tie work and show the caret's beat. Every edit is one undoable change; tied notes follow the note they continue. Gates: random runs of edits over every fixture undo to the original and redo to the end, the edited score saved as .gp reads back equal, and a typed note shows on screen within 100 ms on the 300-bar band song (27 ms here). The manual's Editing page has a new section, Entering notes.
  • Writing Guitar Pro 7 and 8 files (.gp), the editor's save format (M3 slice 2): the Guitar Pro 7–8 plugin now writes as well as reads, in the shape Guitar Pro 7.6 saves, claiming no particular version. Every track gets a sound from Guitar Pro's own library, drum tracks Guitar Pro's drum kit, and every chord diagram its chord spelled out from its name, which Guitar Pro needs. What a .gp file can't hold is named, with the first bar and track where it happens (FMT-3). A .gp file read and written comes back exactly; in the corpus, 50 of 104 files of every Guitar Pro version come back exactly and the rest name their losses, chiefly different dynamics on the notes of one beat (Guitar Pro 7 has one per beat).
  • File → Save (Ctrl + S) and Save As… (Ctrl + Shift + S), and Save on the toolbar. Save keeps a file's own format unless that format can't hold everything in the score, or no installed plugin writes it; then the score is saved beside it as .gp, the fullest format OxiGuitar writes, after asking (Mateus, 19 Oct 2026). Before writing a file that loses part of the score, a question lists what, with the first bar and track (FMT-3), and, when the file the score came from is written over, what OxiGuitar couldn't keep when it opened it (FMT-2). Opening another file, quitting or closing the window with unsaved changes asks whether to save them. The window's title shows the file's name, marked...
Read more

OxiGuitar 0.2.0

OxiGuitar 0.2.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Oct 07:14
17d505c

Milestone M2 (the plugin system and the window shell) is complete. OxiGuitar is now a small core with plugins: every file format is a plugin, and the program alone opens nothing, so install the basic plugins beside it (the user manual's "Installing"). Plugin interface 1 is frozen from this release: plugins built for it keep loading in later versions. Writing your own plugin: the plugin developer guide (https://mateusrdp.github.io/oxiguitar/plugin-guide/), its template, and the SDK (oxiguitar-plugin, taken from this repository at the tag v0.2.0). The window shows where the editor and the player are going: the editor's palette and each track's mixer, greyed out until they arrive.

Added

  • A plugin that fails is withdrawn for the rest of the session, and OxiGuitar carries on as if it weren't installed (Mateus, 19 Oct 2026): a plugin that can't start, crashes, or breaks the interface's contract (an answer that can't be read or wasn't asked for, tab contents that can't be shown) loses its formats, tabs, services, instruments and events; a file it would have read goes to the next plugin that recognises it, and a service is chosen again among the others. The footer says so once, as an error, its tabs leave the window, and the plugin manager shows it as stopped working, and why. An error a plugin answers with is not a failure: a widget event it refuses is a warning in the footer, and the tab keeps its contents.

  • The plugin developer guide (M2 slice 7), docs/plugins/, published beside the user manual at https://mateusrdp.github.io/oxiguitar/plugin-guide/: what a plugin is and isn't, the .oxp file and its manifest key by key, the SDK, formats (signatures, untrusted data, the score, import logs, losses), tabs (every widget, the canvas's display list, the pointer), events and the open score, services, instruments, settings, testing with cargo test, oxiguitar-plugin-test and oxiguitar-cli, building for every system, where users put the file, and the interface's versions. Its examples are the template's own code.

  • The template plugin, docs/plugins/template/, to copy: a crate of its own that reads and writes a small text tab format (.extab), adds a Statistics tab in the right area (the notes on each string of a track, as a small chart to click; a toggle remembered in settings.json; score events), and a note-names service; it takes the SDK and the contract suite from this repository at the release's tag; its cargo test runs the contract suite on its .oxp file, and its GitHub workflow builds the file for all six targets and attaches them to a release. CI builds a plugin from it the guide's way on Linux, Windows and macOS, as part of ci-success.

  • The window shows what's coming (M2 slice 6). The left panel holds the editor's palette, open from the start: every tool of Guitar Pro 8's editing palette, 132 in its six groups (voices and modes, bar, note, effects, notation, automation), each as an icon drawn by our renderer from Bravura's symbols, the interface font, lines and curves, centred on its ink, greyed out until the editor with a tooltip giving its name. Groups fold away with a click on their heading. Each track's row in the Tracks tab gains its mixer: mute and solo buttons drawn like the notation buttons, a volume slider and a pan knob, showing what the file sets, greyed out until an output plugin is installed.

  • The test builds (Actions → Test builds) carry the test plugin apart, oxiguitar-test-plugin-<system>, with a README saying where to put it, for trying plugin tabs and events by hand.

  • debian/: both packages, oxiguitar and oxiguitar-plugins-basic, built the way Debian builds them (dh-cargo, dpkg-buildpackage, -dbgsym packages), in sid with no network, by the Debian workflow, which also runs lintian on them and installs them into a clean sid. The source is scripts/debian/source.sh's: HEAD without our Noto Sans, which comes from fonts-noto-core (Built-Using), plus the crates in a vendor component until Debian has them all (docs/debian.md).

  • Manual pages for oxiguitar and oxiguitar-cli (assets/linux/man/), installed by the .deb and .rpm. Each .deb gains a Debian-format changelog.gz and md5sums, and the release workflow runs lintian from Debian sid on every .deb (scripts/package/lintian.sh): errors and warnings fail the release, but for the two tags about the contact being the issue tracker.

  • The crates against Debian (scripts/debian/crate-audit.py, the Debian workflow): every crate the Linux programs and the basic plugins are built from, both builds and both processors, checked against the librust-*-dev packages of Debian unstable, weekly and on every change to Cargo.lock. The report is the run's summary; it fails nothing.

  • The core and the basic plugins are packaged apart (M2 slice 5). No core package holds a plugin any more: the .deb and .rpm (both builds), the AppImages, the Windows zips and the .dmg are the program alone, and the core Suggests oxiguitar-plugins-basic (.deb and .rpm, into /usr/lib/oxiguitar/plugins/, for either Linux build). Every system also gets OxiGuitar-plugins-basic-VERSION-SYSTEM-ARCH.zip, the plugins with a README naming the plugin folders, and every plugin is attached to the release on its own for every target (oxiguitar-gp5-VERSION-linux-x86_64.oxp …). The release tests that each core package alone opens nothing and opens a Guitar Pro file once the plugins are added, and the draft release checks it has every package before it is made. Manual: "Installing" has the plugins.

  • Two Linux builds (M2 slice 4): the Wayland build, the default and the main one, as the packages oxiguitar and OxiGuitar-….AppImage, and the X11 build, deprecated from the start, as oxiguitar-x11 (which Provides, Conflicts with and Replaces oxiguitar) and OxiGuitar-x11-….AppImage. Each carries only its own display system's code (oxiguitar-app features wayland and x11; CI checks it with scripts/check-display-crates.sh). Wayland comes first (Mateus, 19 Oct 2026; ADR 0009): Slint is pinned to 1.17.1, Debian unstable's, because Slint 1.18's clipboard always carries X11 code and goes through XWayland on GNOME, while 1.17.1 uses the window's own Wayland connection; the Wayland build holds no X11 crate at all. A build started in a session it can't use says which build to install instead. Plugins' display conditions follow the build. NET-5 and the package tests start the Wayland build in a headless Weston (scripts/package/in-wayland.sh).

  • The plugin manager says plainly when a restart is needed: a plugin can't be unloaded while OxiGuitar runs, so a plugin unticked while in use is marked as staying in use until OxiGuitar restarts, the window shows "Restart OxiGuitar to apply these changes" while any change waits, and the footer says it too.

  • The plugin manager (M2 slice 3), part of the program: Tools → Plugins… opens a window of its own listing every plugin file in the plugin folders, with its name, version, folder and file, and what became of it (loaded, not loaded yet, disabled, not used because another file holds the same plugin, or why it can't be used). A tickbox enables or disables each plugin from the next start, written to disabled in settings.json. It only lists and switches: it never downloads, copies, installs or removes a file. oxiguitar --safe-mode starts with no plugin used at all, while the manager still lists them, and Help → About lists the plugin folders in the order they are searched.

  • Plugins' tabs in the window (M2 slice 3): each plugin tab joins the panel its manifest names, after OxiGuitar's own, and shows the plugin's widgets drawn with the window's own buttons, tickboxes, sliders, fields, drop-downs and lists, and its canvases drawn by our renderer at the screen's pixel density, as large as the room allows, following Dark Interface. A thread of their own asks the plugins and draws the canvases, so the window never waits for a plugin, and drags a plugin hasn't answered yet are merged. The app tells plugins when a score is opened or changed (a tool), and hands the open score to plugins that ask, shared rather than copied.

  • Plugin tabs and pushed events (M2 slice 3; plugin interface 1.1, added at the end of every enum, so 1.0 plugins keep working). A plugin declares tabs in its manifest (an id, a title, one of the window's four areas) and fills them with standard widgets (labels, buttons, toggles, sliders, fields, drop-downs, lists) that the core draws in its own style, plus canvases it draws itself with a display list (lines, rectangles, paths, text placed with the core's fonts, colours by role) and receives pointer events on in its own units. Contents the core can't show are refused with a sentence saying why. A plugin subscribes to events (score opened, changed or closed; selection; playback position); the host pushes them in order on a thread of its own that sleeps until there is something to deliver, so nothing polls, and a slow plugin gets the latest position rather than a backlog. Plugins can ask for the open score and for their tab to be redrawn. The SDK gains Tab and Plugin::tab/event, Host::score/redraw, and check verifies every tab's contents; the contract suite checks tabs, widgets, canvases and events through a plugin's file, and the test plugin has two tabs and every event. oxiguitar-display's wire feature turns a canvas into the core's display list, and the fuzz target plugin_tab draws any answer a plugin could give.

  • The Guitar Pro format plugins (M2): gp3.oxp, gp4.oxp, gp5.oxp, gpx.oxp and gp.oxp, one per format, each a thin crate over oxiguitar-formats carrying only its own reader (from 475 KB for Guitar Pro 3 to 796 KB for Guitar Pro 7–8, which alone holds the ZIP code). Each recognises its files from the signatures in its manifest, without being loaded. They read every Guitar Pro file exactly as the readers did inside the ...

Read more

OxiGuitar 0.1.0

OxiGuitar 0.1.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Oct 01:48
db2f046

Milestone M1 (the viewer) is complete. This is OxiGuitar's first tagged release: open a Guitar Pro 3–8 file and view it in standard notation, tablature, or both.

Added

  • Neighbouring dynamics keep apart: like chord names, each marking stays under its beat and the music opens up so it ends before the next one (ppp and pp on quarter notes touched).

  • Release packages (.github/workflows/release.yml, scripts in scripts/package/): a portable .exe in a zip for Windows, an AppImage, a .deb and an .rpm for Linux, each for x86_64 and ARM64, and a universal .dmg for macOS, none code-signed. A v* tag builds them into a draft release with SHA256SUMS; started by hand, they stay under the run for 14 days. Each package is installed and started in CI: the .deb on Debian sid, the .rpm on Fedora, the AppImage on Ubuntu. The .deb, .rpm and .dmg register the Guitar Pro file types OxiGuitar opens (.gp, .gpx, .gp5, .gp4, .gp3; UI-4) with the placeholder icon as the file icon; the .exe carries the icon and its name and version for Explorer and Task Manager. Every package includes THIRD-PARTY-LICENSES.html, generated from Cargo.lock with cargo-about.

  • Directions are engraved on their own line above the top staff: segno and coda signs (and their doubles) at the start of their bar; Fine, D.C., D.S. and their "al Coda", "al Double Coda" and "al Fine" forms, and "To Coda" with its sign, ending at the end of their bar.

  • The user manual, published on GitHub Pages (https://mateusrdp.github.io/oxiguitar/, source in docs/manual/, built with mdBook by the "Manual" workflow): installing, opening files, the four layouts, tracks and notation buttons, score and interface zoom, dark page and dynamics, Infer Key Signatures, PDF export, keyboard and mouse. On macOS, interface zoom now uses ⌘ like the menus' shortcuts.

  • Release packages (.github/workflows/release.yml, scripts in scripts/package/): a portable .exe in a zip for Windows, an AppImage, a .deb and an .rpm for Linux, each for x86_64 and ARM64, and a universal .dmg for macOS, none code-signed. A v* tag builds them into a draft release with SHA256SUMS; started by hand, they stay under the run for 14 days, each downloadable as the package file itself rather than a zip. Each package is installed and started in CI: the .deb on Debian sid, the .rpm on Fedora, the AppImage on Ubuntu. The .deb, .rpm and .dmg register the Guitar Pro file types OxiGuitar opens (.gp, .gpx, .gp5, .gp4, .gp3; UI-4) with the placeholder icon as the file icon; the .exe carries the icon and its name and version for Explorer and Task Manager. Every package includes THIRD-PARTY-LICENSES.html, generated from Cargo.lock with cargo-about.

  • scripts/install-desktop-entry.sh also registers the Guitar Pro file types, and takes an AppImage as the program.

  • The speed budget (M1): a 300-bar, 8-track file opens in under a second, from reading the file to the first tiles. A test opens a generated score as dense and as long as a real Guitar Pro 7 file the way the window does (0.18 s, or 0.23 s with all eight tracks shown), and CI's "Speed budget" job holds release builds to it. See docs/testing.md.

  • oxiguitar-testgen: test scores written in a short text notation and saved as Guitar Pro 7 files, starting with the speed budget's eight-track band song. Test code only.

  • Fuzzing of every file reader (M1): cargo-fuzz targets for Guitar Pro 3–5, Guitar Pro 6, Guitar Pro 7 and 8, the GPIF XML, and any file through format detection (fuzz/), seeded from the public fixtures. The "Fuzz" workflow runs each for four minutes on pull requests that touch a reader, and for six hours per reader when started by hand. M1's target is six hours per reader without a crash (lowered from 24); the first run met it on 16 October 2026, with no crash, hang or out-of-memory input in any reader.

  • Visual regression tests (M1): fifty generated reference scores, kept in fixtures/reference/ as Guitar Pro 7 files with the pictures they engrave to, read back through the reader, engraved and compared with a tolerance on every CI target. Failures leave the drawn picture and a picture of the differences, uploaded by CI. OXIGUITAR_BLESS=1 writes new pictures after an intended change. See docs/testing.md.

  • oxiguitar-formats reads Guitar Pro 6 (.gpx) and Guitar Pro 7 and 8 (.gp) files: the BCFZ/BCFS and ZIP containers and the GPIF score inside, with an import log of anything not carried over yet. Which notation each track shows (standard, tablature) comes from the file. All 15 GPX and GP files in the test corpus open; alphaTab reads the same notes from every one of them, bar for bar.

  • Guitar Pro 6 tied notes with a stale fret take the fret of the note they continue; flat "bends" that Guitar Pro 7 writes on tied notes are dropped.

  • Public test songs in Guitar Pro 6 and 7 format (fixtures/gp/oxiguitar-test-song.gpx and .gp), checked against the Guitar Pro 5 reader on the same music.

  • Corpus tests (cargo test --release -p oxiguitar-formats --test corpus) that read every GPX and GP file and compare six songs saved in two formats; they run only where corpus/files/ holds the private corpus.

  • docs/formats/guitar-pro-6-8.md: what we learned about the containers and GPIF.

  • Section markers keep their rehearsal letter (Guitar Pro 7 and 8); oxiguitar-cli info shows it as [A] "Intro".

  • oxiguitar-layout, the engraver: turns a score into one display list per page in the Page layout (VIEW-3). Standard notation and tablature share columns bar by bar (VIEW-1), and several tracks line up in one score (VIEW-4). It draws clefs, key and time signatures with key changes and cancelling naturals, notes, chords, rests, accidentals that follow the key within a bar, ledger lines, stems and beams by voice, flags, dots, ties, tuplets, repeats, volta brackets, double and final bar lines, sections, tempo, chord names, beat text, bar numbers, and the score header with credits and tuning (VIEW-6). Tablature-only tracks show their rhythm around the tab (VIEW-2), and drum tracks use a drum staff with the General MIDI kit. Spacing follows duration and widens where symbols would touch; systems are stretched to the line, an overfull bar is squeezed, and a system taller than the page is engraved with a smaller staff (NOT-1, NOT-2, NOT-4).

  • oxiguitar-cli render <file> --png PREFIX --pdf FILE: engraves a score into PNG pages and a PDF, light or dark (--dark), with a choice of tracks (--tracks 1,3 or all).

  • Engraving tests: public fixtures, damaged scores, a 300-bar 8-track score (engraved in well under half a second), and every Guitar Pro file of the private corpus with all its tracks, checking that everything lands on the page and every glyph exists in the fonts (cargo test --release -p oxiguitar-layout --test engrave).

  • docs/design/engraving.md: how the engraver works, and what it does not draw yet.

  • CI shows failing tests as an annotation on the pull request.

  • Effects and marks in the engraving (TAB-1, NOT-3):

    • Between notes: hammer-ons and pull-offs (arcs with H/P), slides between notes and into or out of them, bends and releases with their amounts.
    • Along the music: vibrato, trills, palm mute, let ring, harmonic kinds, tap/slap/pop, w/bar, fade in, pick strokes.
    • On notes: natural harmonics (diamond heads, <12> on tab), ghost notes in parentheses, accents and staccato, tremolo strokes, strums.
    • Grace notes before their main note.
    • Dynamics where the marking changes.
    • Lyrics under the staff, with room made for each syllable.

    Marks that run along the music get lanes of their own above the tablature, so they never collide.

  • Chord diagrams of the chords used, in the score header (VIEW-6).

  • oxiguitar-tools and the Tools menu's first tool, Infer Key Signatures: for scores that leave every bar in C major, as most tabs do, it sets key signatures from the notes, with key changes where the music modulates, and leaves chromatic music in C. It runs only when the user asks; the engraver shows what the file says. Every tool has the same small shape, so plugins can add tools in M5. oxiguitar-cli tools lists the tools and render --tool ID applies one.

  • --no-dynamics hides dynamics markings (Options::dynamics in oxiguitar-layout).

  • Characters the text font lacks, such as ♯ and ♭ in chord names, come from the music font.

  • Tuplets that do not take the usual time are marked with their ratio, such as 5:3; the usual ones keep their single number.

  • Tempo marks are shown only where the tempo changes, and never on top of each other.

  • In the score header, the tuning goes under the credits when the two would meet.

  • Track names at the start of each system when several tracks are shown: full names on the first system, short names after, as in Guitar Pro's multitrack view.

  • The other three staff layouts (VIEW-3), checked against the Guitar Pro 8 user guide: Vertical (lines fill the window's width, one long sheet), Horizontal (every bar on one line) and Parchment (page-width lines with no page breaks, Guitar Pro 8's Page – Scroll). oxiguitar-cli render --layout NAME [--width PT]; long sheets are cut into PNGs of at most 8192 pixels.

  • Letter paper beside A4 (--paper letter). PDFs are always in pages, whatever the layout.

  • The desktop app, oxiguitar (crate oxiguitar-app, Slint), the first version of the viewer. File → Open (or oxiguitar FILE) opens any Guitar Pro 3–8 file; the score is drawn in tiles on a worker thread, so the window never waits. View → Layout (Page, Vertical, Horizontal, Parchment), Dark Page and Dynamics; the track list (F8) shows any set of tracks; the score-zoom slider (25–400 %) and interface zoom (Ctrl + wheel, Ctrl + + / − / 0); the Tools menu with Infer Key Signatures, greyed out with its reason when it cannot run; File → Export PDF… of the shown tracks on A4 or Letter (EXP-1); errors and tool repo...

Read more