feat: rebrand openDAW → openDIAW.be

Rename all user-visible strings: HTML title, meta tags, about dialogs,
sample origin enum, README, serve-studio log prefix.

Internal package imports (@opendaw/*) preserved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kxkm
2026-03-21 21:40:21 +01:00
parent e3c615b671
commit 049547c822
19 changed files with 42 additions and 42 deletions
+14 -14
View File
@@ -1,6 +1,6 @@
<p align="center"> <p align="center">
<img src="https://raw.githubusercontent.com/andremichelle/openDAW/refs/heads/main/packages/app/studio/public/favicon.svg" height="120"/> <img src="https://raw.githubusercontent.com/andremichelle/openDAW/refs/heads/main/packages/app/studio/public/favicon.svg" height="120"/>
<h1 align="center">openDAW</h1> <h1 align="center">openDIAW.be</h1>
</p> </p>
<p align="center"> <p align="center">
@@ -9,7 +9,7 @@
<a href="https://github.com/andremichelle/opendaw" rel="nofollow"><img src="https://img.shields.io/github/stars/andremichelle/opendaw" alt="stars"></a> <a href="https://github.com/andremichelle/opendaw" rel="nofollow"><img src="https://img.shields.io/github/stars/andremichelle/opendaw" alt="stars"></a>
</p> </p>
**openDAW** is a next-generation web-based Digital Audio Workstation (DAW) designed to **democratize** music production **openDIAW.be** is a next-generation web-based Digital Audio Workstation (DAW) designed to **democratize** music production
and to **resurface the process of making music** by making **high-quality** creation tools accessible to everyone, with and to **resurface the process of making music** by making **high-quality** creation tools accessible to everyone, with
a strong focus on **education** and data-privacy. a strong focus on **education** and data-privacy.
@@ -23,11 +23,11 @@ a strong focus on **education** and data-privacy.
We are committed to transparency and community-driven development. We are committed to transparency and community-driven development.
The source code for openDAW is available under **AGPL v3 (or later)** The source code for openDIAW.be is available under **AGPL v3 (or later)**
### Built on Trust and Transparency ### Built on Trust and Transparency
**openDAW stands for radical simplicity and respect.** **openDIAW.be stands for radical simplicity and respect.**
- **No SignUp** - **No SignUp**
- **No Tracking** - **No Tracking**
@@ -51,8 +51,8 @@ operations of the app.
If you are interested in helping, here are areas where we need support: If you are interested in helping, here are areas where we need support:
1. **Y.JS Server + WebRTC File Sharing** - for live collaboration 1. **Y.JS Server + WebRTC File Sharing** - for live collaboration
2. **Offline App** — e.g. wrapping openDAW with [Tauri](https://tauri.app/) for a native desktop experience 2. **Offline App** — e.g. wrapping openDIAW.be with [Tauri](https://tauri.app/) for a native desktop experience
3. **PWA** — turning openDAW into a fully installable Progressive Web App with offline support 3. **PWA** — turning openDIAW.be into a fully installable Progressive Web App with offline support
4. **Timeline Track Management** — design and UX help for track layout, ordering, grouping, and interaction 4. **Timeline Track Management** — design and UX help for track layout, ordering, grouping, and interaction
We always appreciate help on open issues: https://github.com/andremichelle/openDAW/issues We always appreciate help on open issues: https://github.com/andremichelle/openDAW/issues
@@ -61,10 +61,10 @@ To discuss contributions, book a call: https://calendly.com/andremichelle/openda
--- ---
## Huge Shoutout To The Incredible openDAW Community! ## Huge Shoutout To The Incredible openDIAW.be Community!
To everyone who has contributed feedback, reported bugs, suggested improvements, or helped spread the word — thank you! To everyone who has contributed feedback, reported bugs, suggested improvements, or helped spread the word — thank you!
Your support is shaping openDAW into something truly powerful! Your support is shaping openDIAW.be into something truly powerful!
Thank Thank
you [@ccswdavidson](https://github.com/ccswdavidson), [@Chaosmeister](https://github.com/Chaosmeister), [@jeffreylouden](https://github.com/jeffreylouden), [@solsos](https://github.com/solsos), [@TheRealSyler](https://github.com/TheRealSyler), [@Trinitou](https://github.com/Trinitou), you [@ccswdavidson](https://github.com/ccswdavidson), [@Chaosmeister](https://github.com/Chaosmeister), [@jeffreylouden](https://github.com/jeffreylouden), [@solsos](https://github.com/solsos), [@TheRealSyler](https://github.com/TheRealSyler), [@Trinitou](https://github.com/Trinitou),
@@ -121,7 +121,7 @@ skyboundzoo, JHINZ, Mark Dammer, fork-kun, Martin Eigel
### Repositories ### Repositories
* [openDAW](https://github.com/andremichelle/opendaw) * [openDIAW.be](https://github.com/andremichelle/opendaw)
* [openDAW-headless (SDK)](https://github.com/andremichelle/opendaw-headless) * [openDAW-headless (SDK)](https://github.com/andremichelle/opendaw-headless)
* [openDAW-headless @naomiaro](https://github.com/naomiaro/opendaw-test) (openDAW-headless fork with more docs and * [openDAW-headless @naomiaro](https://github.com/naomiaro/opendaw-test) (openDAW-headless fork with more docs and
examples) examples)
@@ -233,12 +233,12 @@ participate, visit our [Contribute](https://opendaw.org/contribute) page.
## Links ## Links
* [opendaw.studio (prototype)](https://opendaw.studio) * [opendiaw.be (prototype)](https://opendiaw.be)
* [opendaw.org (website)](https://opendaw.org) * [opendaw.org (website)](https://opendaw.org)
* [openDAW on Discord](https://discord.opendaw.studio) * [openDAW on Discord](https://discord.opendiaw.be)
* [openDAW SDK](https://www.npmjs.com/org/opendaw) * [openDAW SDK](https://www.npmjs.com/org/opendaw)
* [LinkedIn](https://www.linkedin.com/company/opendaw-org/) * [LinkedIn](https://www.linkedin.com/company/opendaw-org/)
* [Instagram](https://www.instagram.com/opendaw.studio) * [Instagram](https://www.instagram.com/opendiaw.be)
## Contributions ## Contributions
@@ -254,12 +254,12 @@ participate, visit our [Contribute](https://opendaw.org/contribute) page.
## Dual-Licensing Model ## Dual-Licensing Model
openDAW is available **under two alternative license terms**: openDIAW.be is available **under two alternative license terms**:
| Option | When to choose it | Obligations | | Option | When to choose it | Obligations |
|---------------------------|----------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |---------------------------|----------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **A. AGPL v3 (or later)** | You are happy for the entire work that includes openDAW to be released under AGPL-compatible open-source terms. | Must distribute complete corresponding source code under AGPL.<br> Must keep copyright & licence notices.<br> Applies both to distribution **and** to public use via network/SaaS (§13).<br> May run openDAW privately in any software, open or closed (§0). | | **A. AGPL v3 (or later)** | You are happy for the entire work that includes openDAW to be released under AGPL-compatible open-source terms. | Must distribute complete corresponding source code under AGPL.<br> Must keep copyright & licence notices.<br> Applies both to distribution **and** to public use via network/SaaS (§13).<br> May run openDAW privately in any software, open or closed (§0). |
| **B. Commercial Licence** | You wish to incorporate openDAW into **closed-source** or otherwise licence-incompatible software or SaaS offerings. | Pay the agreed fee.<br> No copyleft requirement for your own source code.<br> Other terms as per the signed agreement. | | **B. Commercial Licence** | You wish to incorporate openDIAW.be into **closed-source** or otherwise licence-incompatible software or SaaS offerings. | Pay the agreed fee.<br> No copyleft requirement for your own source code.<br> Other terms as per the signed agreement. |
> **How to obtain the Commercial License** > **How to obtain the Commercial License**
> Email `andre.michelle@opendaw.org` with your company name, product description, and expected distribution volume. > Email `andre.michelle@opendaw.org` with your company name, product description, and expected distribution volume.
+7 -7
View File
@@ -11,24 +11,24 @@
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0"> <meta http-equiv="Expires" content="0">
<meta name="robots" content="noindex, nofollow"> <meta name="robots" content="noindex, nofollow">
<meta name="title" content="openDAW Studio Prototype"/> <meta name="title" content="openDIAW.be Studio"/>
<meta name="description" <meta name="description"
content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/> content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/>
<meta property="og:type" content="website"/> <meta property="og:type" content="website"/>
<meta property="og:url" content="https://opendaw.studio"/> <meta property="og:url" content="https://opendiaw.be"/>
<meta property="og:title" content="openDAW Studio Prototype"/> <meta property="og:title" content="openDIAW.be Studio"/>
<meta property="og:description" <meta property="og:description"
content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/> content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/>
<meta property="og:image" content="/images/meta.jpg"/> <meta property="og:image" content="/images/meta.jpg"/>
<meta property="twitter:card" content="summary_large_image"/> <meta property="twitter:card" content="summary_large_image"/>
<meta property="twitter:url" content="https://opendaw.studio"/> <meta property="twitter:url" content="https://opendiaw.be"/>
<meta property="twitter:title" content="openDAW Studio Prototype"/> <meta property="twitter:title" content="openDIAW.be Studio"/>
<meta property="twitter:description" <meta property="twitter:description"
content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/> content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/>
<meta property="twitter:image" content="/images/meta.jpg"/> <meta property="twitter:image" content="/images/meta.jpg"/>
<link rel="icon" type="image/x-icon" href="/favicon.svg"> <link rel="icon" type="image/x-icon" href="/favicon.svg">
<link rel="canonical" href="https://opendaw.studio"> <link rel="canonical" href="https://opendiaw.be">
<title>🎧openDAW.studio</title> <title>🎧openDIAW.be</title>
<style> <style>
html, body { html, body {
width: 100%; width: 100%;
+1 -1
View File
@@ -37,7 +37,7 @@ export namespace Mixdowns {
const {resolve, reject, promise} = Promise.withResolvers<void>() const {resolve, reject, promise} = Promise.withResolvers<void>()
const {status, error} = await Promises.tryCatch(Dialogs.show({ const {status, error} = await Promises.tryCatch(Dialogs.show({
headline: "Encode Mixdown", headline: "Encode Mixdown",
content: "openDAW will download FFmpeg (30MB) once to encode your mixdown unless you choose 'Wav'.", content: "openDIAW.be will download FFmpeg (30MB) once to encode your mixdown unless you choose 'Wav'.",
excludeOk: true, excludeOk: true,
buttons: [ buttons: [
{ {
@@ -14,7 +14,7 @@ export const populateStudioMenu = (service: StudioService) => {
return MenuItem.root() return MenuItem.root()
.setRuntimeChildrenProcedure(parent => { .setRuntimeChildrenProcedure(parent => {
parent.addMenuItem( parent.addMenuItem(
MenuItem.header({label: "openDAW", icon: IconSymbol.OpenDAW, color: Colors.green}), MenuItem.header({label: "openDIAW.be", icon: IconSymbol.OpenDAW, color: Colors.green}),
MenuItem.default({ MenuItem.default({
label: "Dashboard", label: "Dashboard",
shortcut: Global["workspace-screen-dashboard"].shortcut.format() shortcut: Global["workspace-screen-dashboard"].shortcut.format()
@@ -8,7 +8,7 @@ import {Errors} from "@opendaw/lib-std"
export namespace SampleDialogs { export namespace SampleDialogs {
export const showEditSampleDialog = async (sample: Sample): Promise<Sample> => { export const showEditSampleDialog = async (sample: Sample): Promise<Sample> => {
if (sample.origin === "openDAW") { if (sample.origin === "openDIAW.be") {
return Promise.reject("Cannot change sample from the cloud") return Promise.reject("Cannot change sample from the cloud")
} }
const {resolve, reject, promise} = Promise.withResolvers<Sample>() const {resolve, reject, promise} = Promise.withResolvers<Sample>()
@@ -62,7 +62,7 @@ export const NumberInput = ({
Events.subscribe(element, "copy", (event: ClipboardEvent) => { Events.subscribe(element, "copy", (event: ClipboardEvent) => {
event.preventDefault() event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({ event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW", app: "openDIAW.be",
content: "number", content: "number",
value: model.getValue() value: model.getValue()
})) }))
@@ -71,7 +71,7 @@ export const NumberInput = ({
const data = event.clipboardData?.getData("application/json") const data = event.clipboardData?.getData("application/json")
if (isDefined(data)) { if (isDefined(data)) {
const {status, value: json} = tryCatch(() => JSON.parse(data)) const {status, value: json} = tryCatch(() => JSON.parse(data))
if (status === "success" && json.app === "openDAW" && json.content === "number") { if (status === "success" && json.app === "openDIAW.be" && json.content === "number") {
event.preventDefault() event.preventDefault()
model.setValue(isDefined(guard) ? guard.guard(json.value) : json.value) model.setValue(isDefined(guard) ? guard.guard(json.value) : json.value)
} }
@@ -34,7 +34,7 @@ export const TextInput = ({lifecycle, model, className, maxChars}: Construct) =>
Events.subscribe(element, "copy", (event: ClipboardEvent) => { Events.subscribe(element, "copy", (event: ClipboardEvent) => {
event.preventDefault() event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({ event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW", app: "openDIAW.be",
content: "text", content: "text",
value: model.getValue() value: model.getValue()
})) }))
@@ -43,7 +43,7 @@ export const TextInput = ({lifecycle, model, className, maxChars}: Construct) =>
const data = event.clipboardData?.getData("application/json") const data = event.clipboardData?.getData("application/json")
if (isDefined(data)) { if (isDefined(data)) {
const json = JSON.parse(data) const json = JSON.parse(data)
if (json.app === "openDAW" && json.content === "text") { if (json.app === "openDIAW.be" && json.content === "text") {
event.preventDefault() event.preventDefault()
model.setValue(json.value) model.setValue(json.value)
} }
@@ -65,7 +65,7 @@ export const TimeCodeInput = ({lifecycle, model, className, negativeWarning, sig
Events.subscribe(element, "copy", (event: ClipboardEvent) => { Events.subscribe(element, "copy", (event: ClipboardEvent) => {
event.preventDefault() event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({ event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW", app: "openDIAW.be",
content: "timecode", content: "timecode",
value: model.getValue() value: model.getValue()
})) }))
@@ -75,7 +75,7 @@ export const TimeCodeInput = ({lifecycle, model, className, negativeWarning, sig
if (isDefined(data)) { if (isDefined(data)) {
const {status, value: json} = tryCatch(() => JSON.parse(data)) const {status, value: json} = tryCatch(() => JSON.parse(data))
if (status === "failure") {return} if (status === "failure") {return}
if (safeRead(json, "app") === "openDAW" && safeRead(json, "content") === "timecode") { if (safeRead(json, "app") === "openDIAW.be" && safeRead(json, "content") === "timecode") {
event.preventDefault() event.preventDefault()
model.setValue(json.value ?? 0) model.setValue(json.value ?? 0)
} }
@@ -303,7 +303,7 @@ export namespace Dialogs {
}, { }, {
text: "Report", text: "Report",
primary: true, primary: true,
onClick: () => window.open("https://github.com/andremichelle/openDAW/issues/new", "github") onClick: () => window.open("https://github.com/andremichelle/openDIAW.be/issues/new", "github")
}] : Arrays.empty()} }] : Arrays.empty()}
cancelable={false} cancelable={false}
error> error>
@@ -46,7 +46,7 @@ const NewProjectJson: DemoProjectJson = {
bundleSize: 0, bundleSize: 0,
metadata: { metadata: {
name: "New Project", name: "New Project",
artist: "openDAW", artist: "openDIAW.be",
description: "", description: "",
tags: ["clean slate"], tags: ["clean slate"],
created: "", created: "",
@@ -8,7 +8,7 @@ import {showTone3000Dialog} from "./Tone3000Dialog"
type ToneModel = { name: string, size: string, model_url: string } type ToneModel = { name: string, size: string, model_url: string }
type ToneResponse = { title: string, models: ReadonlyArray<ToneModel> } type ToneResponse = { title: string, models: ReadonlyArray<ToneModel> }
const AppId = "openDAW" const AppId = "openDIAW.be"
const SelectEndpoint = "https://www.tone3000.com/api/v1/select" const SelectEndpoint = "https://www.tone3000.com/api/v1/select"
const StorageKey = "tone3000_tone_url" const StorageKey = "tone3000_tone_url"
const StorageDoneKey = "tone3000_done" const StorageDoneKey = "tone3000_done"
+1 -1
View File
@@ -241,7 +241,7 @@ export const Manuals: ReadonlyArray<Manual> = [
files: [ files: [
{ {
type: "page", type: "page",
label: "How to create a device in openDAW?", label: "How to create a device in openDIAW.be?",
path: "/manuals/creating-a-device" path: "/manuals/creating-a-device"
}, },
{type: "page", label: "Tech Stack", path: "/manuals/tech-stack"} {type: "page", label: "Tech Stack", path: "/manuals/tech-stack"}
@@ -78,7 +78,7 @@ export const PreferencesPage: PageFactory<StudioService> = ({lifecycle, service}
}} appearance={{color: Colors.green}}>LOAD</Button> }} appearance={{color: Colors.green}}>LOAD</Button>
<Button lifecycle={lifecycle} onClick={() => StudioShortcutManager.toJSONString(contexts) <Button lifecycle={lifecycle} onClick={() => StudioShortcutManager.toJSONString(contexts)
.ifSome(jsonString => Files.save(new TextEncoder().encode(jsonString).buffer, .ifSome(jsonString => Files.save(new TextEncoder().encode(jsonString).buffer,
{suggestedName: "openDAW.shortcuts.json"}))} {suggestedName: "openDIAW.be.shortcuts.json"}))}
appearance={{color: Colors.green}}>SAVE</Button> appearance={{color: Colors.green}}>SAVE</Button>
</div> </div>
</div> </div>
@@ -29,7 +29,7 @@ export const SampleUploadPage: PageFactory<StudioService> = ({service}: PageCont
console.debug("sampleRate", sample_rate) console.debug("sampleRate", sample_rate)
console.debug("duration", duration) console.debug("duration", duration)
console.debug("bpm", bpm) console.debug("bpm", bpm)
await OpenSampleAPI.get().upload(wav, {name, bpm, sample_rate, duration, origin: "openDAW"}) await OpenSampleAPI.get().upload(wav, {name, bpm, sample_rate, duration, origin: "openDIAW.be"})
} catch (error) { } catch (error) {
if (error instanceof DOMException && error.name === "AbortError") { if (error instanceof DOMException && error.name === "AbortError") {
console.debug("Caught an AbortError") console.debug("Caught an AbortError")
@@ -9,5 +9,5 @@ export class ShadertoyMIDIOutput {
} }
static readonly Default = MidiDevices.createSoftwareMIDIOutput( static readonly Default = MidiDevices.createSoftwareMIDIOutput(
message => this.#notifier.notify(message), "Shadertoy", "openDAW-shadertoy") message => this.#notifier.notify(message), "Shadertoy", "openDIAW.be-shadertoy")
} }
@@ -5,7 +5,7 @@ export const SampleMetaData = z.object({
bpm: z.number(), bpm: z.number(),
duration: z.number(), duration: z.number(),
sample_rate: z.number(), sample_rate: z.number(),
origin: z.enum(["openDAW", "recording", "import"]), origin: z.enum(["openDIAW.be", "recording", "import"]),
custom: z.string().optional() custom: z.string().optional()
}) })
@@ -5,7 +5,7 @@ export const SoundfontMetaData = z.object({
size: z.number().int(), size: z.number().int(),
url: z.string(), url: z.string(),
license: z.string(), license: z.string(),
origin: z.enum(["openDAW", "import"]) origin: z.enum(["openDIAW.be", "import"])
}) })
export type SoundfontMetaData = z.infer<typeof SoundfontMetaData> export type SoundfontMetaData = z.infer<typeof SoundfontMetaData>
@@ -44,7 +44,7 @@ export class OpenSampleAPI implements SampleAPI {
return panic(json.error) return panic(json.error)
} }
const sample = Sample.parse(json) const sample = Sample.parse(json)
return Object.freeze({...sample, origin: "openDAW"}) return Object.freeze({...sample, origin: "openDIAW.be"})
} }
async load(uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]> { async load(uuid: UUID.Bytes, progress: Procedure<unitValue>): Promise<[AudioData, Sample]> {
@@ -82,7 +82,7 @@ export class OpenSampleAPI implements SampleAPI {
name, name,
duration: audioData.numberOfFrames / audioData.sampleRate, duration: audioData.numberOfFrames / audioData.sampleRate,
sample_rate: audioData.sampleRate, sample_rate: audioData.sampleRate,
origin: "openDAW" origin: "openDIAW.be"
}] as [AudioData, Sample] }] as [AudioData, Sample]
})) }))
} }
+1 -1
View File
@@ -33,4 +33,4 @@ https.createServer(options, (req, res) => {
res.setHeader("Content-Type", MIME[ext] || "application/octet-stream"); res.setHeader("Content-Type", MIME[ext] || "application/octet-stream");
res.writeHead(200); res.writeHead(200);
fs.createReadStream(filePath).pipe(res); fs.createReadStream(filePath).pipe(res);
}).listen(PORT, "0.0.0.0", () => console.log("[openDAW] HTTPS :" + PORT)); }).listen(PORT, "0.0.0.0", () => console.log("[openDIAW.be] HTTPS :" + PORT));