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">
<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 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>
</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
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.
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
**openDAW stands for radical simplicity and respect.**
**openDIAW.be stands for radical simplicity and respect.**
- **No SignUp**
- **No Tracking**
@@ -51,8 +51,8 @@ operations of the app.
If you are interested in helping, here are areas where we need support:
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
3. **PWA** — turning openDAW into a fully installable Progressive Web App with offline support
2. **Offline App** — e.g. wrapping openDIAW.be with [Tauri](https://tauri.app/) for a native desktop experience
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
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!
Your support is shaping openDAW into something truly powerful!
Your support is shaping openDIAW.be into something truly powerful!
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),
@@ -121,7 +121,7 @@ skyboundzoo, JHINZ, Mark Dammer, fork-kun, Martin Eigel
### 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 @naomiaro](https://github.com/naomiaro/opendaw-test) (openDAW-headless fork with more docs and
examples)
@@ -233,12 +233,12 @@ participate, visit our [Contribute](https://opendaw.org/contribute) page.
## Links
* [opendaw.studio (prototype)](https://opendaw.studio)
* [opendiaw.be (prototype)](https://opendiaw.be)
* [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)
* [LinkedIn](https://www.linkedin.com/company/opendaw-org/)
* [Instagram](https://www.instagram.com/opendaw.studio)
* [Instagram](https://www.instagram.com/opendiaw.be)
## Contributions
@@ -254,12 +254,12 @@ participate, visit our [Contribute](https://opendaw.org/contribute) page.
## 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 |
|---------------------------|----------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **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**
> 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="Expires" content="0">
<meta name="robots" content="noindex, nofollow">
<meta name="title" content="openDAW Studio Prototype"/>
<meta name="title" content="openDIAW.be Studio"/>
<meta name="description"
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:url" content="https://opendaw.studio"/>
<meta property="og:title" content="openDAW Studio Prototype"/>
<meta property="og:url" content="https://opendiaw.be"/>
<meta property="og:title" content="openDIAW.be Studio"/>
<meta property="og:description"
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="twitter:card" content="summary_large_image"/>
<meta property="twitter:url" content="https://opendaw.studio"/>
<meta property="twitter:title" content="openDAW Studio Prototype"/>
<meta property="twitter:url" content="https://opendiaw.be"/>
<meta property="twitter:title" content="openDIAW.be Studio"/>
<meta property="twitter:description"
content="openDAW is a next-gen web-based digital audio workstation designed to democratize music production."/>
<meta property="twitter:image" content="/images/meta.jpg"/>
<link rel="icon" type="image/x-icon" href="/favicon.svg">
<link rel="canonical" href="https://opendaw.studio">
<title>🎧openDAW.studio</title>
<link rel="canonical" href="https://opendiaw.be">
<title>🎧openDIAW.be</title>
<style>
html, body {
width: 100%;
+1 -1
View File
@@ -37,7 +37,7 @@ export namespace Mixdowns {
const {resolve, reject, promise} = Promise.withResolvers<void>()
const {status, error} = await Promises.tryCatch(Dialogs.show({
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,
buttons: [
{
@@ -14,7 +14,7 @@ export const populateStudioMenu = (service: StudioService) => {
return MenuItem.root()
.setRuntimeChildrenProcedure(parent => {
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({
label: "Dashboard",
shortcut: Global["workspace-screen-dashboard"].shortcut.format()
@@ -8,7 +8,7 @@ import {Errors} from "@opendaw/lib-std"
export namespace SampleDialogs {
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")
}
const {resolve, reject, promise} = Promise.withResolvers<Sample>()
@@ -62,7 +62,7 @@ export const NumberInput = ({
Events.subscribe(element, "copy", (event: ClipboardEvent) => {
event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW",
app: "openDIAW.be",
content: "number",
value: model.getValue()
}))
@@ -71,7 +71,7 @@ export const NumberInput = ({
const data = event.clipboardData?.getData("application/json")
if (isDefined(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()
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) => {
event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW",
app: "openDIAW.be",
content: "text",
value: model.getValue()
}))
@@ -43,7 +43,7 @@ export const TextInput = ({lifecycle, model, className, maxChars}: Construct) =>
const data = event.clipboardData?.getData("application/json")
if (isDefined(data)) {
const json = JSON.parse(data)
if (json.app === "openDAW" && json.content === "text") {
if (json.app === "openDIAW.be" && json.content === "text") {
event.preventDefault()
model.setValue(json.value)
}
@@ -65,7 +65,7 @@ export const TimeCodeInput = ({lifecycle, model, className, negativeWarning, sig
Events.subscribe(element, "copy", (event: ClipboardEvent) => {
event.preventDefault()
event.clipboardData?.setData("application/json", JSON.stringify({
app: "openDAW",
app: "openDIAW.be",
content: "timecode",
value: model.getValue()
}))
@@ -75,7 +75,7 @@ export const TimeCodeInput = ({lifecycle, model, className, negativeWarning, sig
if (isDefined(data)) {
const {status, value: json} = tryCatch(() => JSON.parse(data))
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()
model.setValue(json.value ?? 0)
}
@@ -303,7 +303,7 @@ export namespace Dialogs {
}, {
text: "Report",
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()}
cancelable={false}
error>
@@ -46,7 +46,7 @@ const NewProjectJson: DemoProjectJson = {
bundleSize: 0,
metadata: {
name: "New Project",
artist: "openDAW",
artist: "openDIAW.be",
description: "",
tags: ["clean slate"],
created: "",
@@ -8,7 +8,7 @@ import {showTone3000Dialog} from "./Tone3000Dialog"
type ToneModel = { name: string, size: string, model_url: string }
type ToneResponse = { title: string, models: ReadonlyArray<ToneModel> }
const AppId = "openDAW"
const AppId = "openDIAW.be"
const SelectEndpoint = "https://www.tone3000.com/api/v1/select"
const StorageKey = "tone3000_tone_url"
const StorageDoneKey = "tone3000_done"
+1 -1
View File
@@ -241,7 +241,7 @@ export const Manuals: ReadonlyArray<Manual> = [
files: [
{
type: "page",
label: "How to create a device in openDAW?",
label: "How to create a device in openDIAW.be?",
path: "/manuals/creating-a-device"
},
{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>
<Button lifecycle={lifecycle} onClick={() => StudioShortcutManager.toJSONString(contexts)
.ifSome(jsonString => Files.save(new TextEncoder().encode(jsonString).buffer,
{suggestedName: "openDAW.shortcuts.json"}))}
{suggestedName: "openDIAW.be.shortcuts.json"}))}
appearance={{color: Colors.green}}>SAVE</Button>
</div>
</div>
@@ -29,7 +29,7 @@ export const SampleUploadPage: PageFactory<StudioService> = ({service}: PageCont
console.debug("sampleRate", sample_rate)
console.debug("duration", duration)
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) {
if (error instanceof DOMException && error.name === "AbortError") {
console.debug("Caught an AbortError")
@@ -9,5 +9,5 @@ export class ShadertoyMIDIOutput {
}
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(),
duration: z.number(),
sample_rate: z.number(),
origin: z.enum(["openDAW", "recording", "import"]),
origin: z.enum(["openDIAW.be", "recording", "import"]),
custom: z.string().optional()
})
@@ -5,7 +5,7 @@ export const SoundfontMetaData = z.object({
size: z.number().int(),
url: z.string(),
license: z.string(),
origin: z.enum(["openDAW", "import"])
origin: z.enum(["openDIAW.be", "import"])
})
export type SoundfontMetaData = z.infer<typeof SoundfontMetaData>
@@ -44,7 +44,7 @@ export class OpenSampleAPI implements SampleAPI {
return panic(json.error)
}
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]> {
@@ -82,7 +82,7 @@ export class OpenSampleAPI implements SampleAPI {
name,
duration: audioData.numberOfFrames / audioData.sampleRate,
sample_rate: audioData.sampleRate,
origin: "openDAW"
origin: "openDIAW.be"
}] 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.writeHead(200);
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));