OOLOI.ORG
Menu

OOLOI

An Organism Evolved.

OVERVIEW

DOCUMENTATION

NEWSLETTER

It's All Greek to Me

2/3/2026

6 Comments

 
Picture
Open Settings, switch the locale. Every open window follows: menus, the About dialog, Settings itself. English to German to French to Danish, pausing on Greek. Then it repeats.

This is chrome – wiring things up, giving Ooloi a face.

The obvious next step seemed to be collaboration. The architecture has supported shared backends since day one; the collaboration ticket and ADR systematise how they are handled, add authentication, authorisation, piece invitations.

But you can't test the collaboration paradigm just on application settings. Theme preferences, locale, autosave interval – these are local. They don't live on a shared backend. To verify that the pattern works, you need an actual piece: something that lives on a server that one or more clients connect to.

So a sequence of work comes first.

Undo and redo for settings changes. Every setting change already records the old value alongside the new; the undo stack accumulates and replays inverse events. No piece dependency. This establishes the mechanism before anything more complex exists.

Then creating and opening pieces — not in a naïve single-user way, but written from the start for an environment where the backend may be shared. Even locally, the model has to reflect that reality.

Then undo and redo for piece content: a single authoritative stack on the server, shared across everyone editing simultaneously. The undo gesture in the frontend inspects which tier holds the more recent operation and routes accordingly.

Then the Piece Settings editor, with the Instrument Library window.

Here is where the collaboration pattern is actually demonstrated. Consider adjusting beam thickness or the default appearance of piano pedal extension lines: ordinary engraving decisions. Now add a collaborator with the same editor open on the same piece. Your changes appear in their view instantly. Theirs in yours. Both of you can undo, on the same data, with the same shared history.

This is not a special case requiring special handling. If the preceding layers are in place, this is what falls out of the existing architecture. But it should be done as early as possible, before additional layers complicate things, so now is the right time.
6 Comments
Roland Gurt
2/3/2026 17:46:00

Dear Peter, why is it that most programs need to be restarted when changing languages, while your Ooloi can do it instantaniously? Best regards and congrats on all the progress!

Reply
Peter Bengtson
2/3/2026 18:16:37

Dear Roland,

Most applications require a restart because the language is effectively baked into the UI at startup. Strings are loaded once and components are constructed with those values. Changing the locale would therefore require rebuilding the entire interface, so restarting is the simplest solution.

In Ooloi the UI is event-driven throughout. The locale is just part of application state. When it changes, every open component is notified and re-resolves its text using the current locale. It is less a special trick than a consequence of how the frontend is structured from the beginning.

Best,
Peter

Reply
Magnus Johansson
2/3/2026 21:35:31

"This is chrome – wiring things up, giving Ooloi a face."

Is this the same chrome that is used in Mozilla Firefox?

Reply
Peter Bengtson
2/3/2026 21:44:28

No – different “chrome”.

In frontend terminology, “chrome” refers to the non-content parts of an application: window bars, menus, buttons, dialogues. The surrounding frame rather than the document itself.

In that sense, it is simply the visible casing around the engine.

Best,
Peter

Reply
Magnus Johansson
3/3/2026 16:53:15

Thanks for the explanation, Peter. Where do the translations come from?

Reply
Peter Bengtson
3/3/2026 18:24:51

The current translations are AI-generated, to verify that the localisation infrastructure works end to end, not as final wording. They will go through human translators before anything like a release.

The system uses standard GNU gettext .po files (see ADR 0039), so the workflow will be familiar to you from Igor, though the infrastructure here is cleaner.

Japanese was an interesting early test: register and politeness levels matter far more there than in Germanic languages. Only humans can get the tonality fully right, though.

Best, Peter

Reply



Leave a Reply.

    Author

    Peter Bengtson –
    Cloud architect, Clojure advocate, concert organist, opera composer. Craft over commodity. Still windsurfing through parentheses.

    Search

    Archives

    February 2026
    January 2026
    December 2025
    November 2025
    October 2025
    September 2025
    August 2025
    July 2025
    June 2025
    April 2025
    March 2025
    September 2024
    August 2024
    July 2024

    Categories

    All
    Accidentals
    Alfred Korzybski
    Architecture
    Benchmarks
    Clojure
    CLOS
    Common Lisp
    DDD
    Death Of Igor Engraver
    Documentation
    Donald E Knuth
    Dorico
    Dynamic Programming
    Finale
    FrankenScore
    Franz Kafka
    Frontend
    Functional Programming
    Generative AI
    GRPC
    Igor Engraver
    Jacques Derrida
    JVM
    License
    LilyPond
    Lisp
    Localisation
    MIDI
    MPL 2.0
    MuseScore
    MusicXML
    Ooloi
    Ortography
    Pitches
    Playback
    Plugins
    Python
    QuickDraw GX
    Rendering
    Rhythm
    Rich Hickey
    Road Map
    Scheme
    Semiotics
    Sibelius
    Site
    Skia
    Sponsorship
    UI
    Umberto Eco
    Vertigo
    VST/AU
    Wednesday Addams

    RSS Feed

Home
​Overview
Documentation
About
Contact
Newsletter
Ooloi is an open-source desktop music notation system for musicians who need stable, precise engraving and the freedom to notate complex music without workarounds. Scores and parts are handled consistently, remain responsive at scale, and support collaborative work without semantic compromise. They are not tied to proprietary formats or licensing.
​
Ooloi is currently under development. No release date has been announced.


  • Home
  • Overview
    • Background and History
    • Project Goals
    • Introduction for Musicians
    • Introduction for Programmers
    • Technical Comparison
  • Documentation
  • About
  • Contact
  • Home
  • Overview
    • Background and History
    • Project Goals
    • Introduction for Musicians
    • Introduction for Programmers
    • Technical Comparison
  • Documentation
  • About
  • Contact