# Introducing pluguzu, a plugin to run Tidal natively in a DAW

**URL:** <https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758>\
**Category:** Announcements\
**Created:** [30 June 2025 14:46 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758 "2025-06-30T14:46:02Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [30 June 2025 14:46 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/1 "2025-06-30T14:46:02Z")

</div>

Hello folks,

I'd like to share with you [pluguzu](https://codeberg.org/TristanCacqueray/pluguzu), a CLAP/VST plugin featuring a text editor to write Tidal patterns from the comfort of your DAW. It's still the early days, but I think it's already quite usable and I'd love to get your feedback!

I think it would be neat to have a portable binary build, so that you could setup Tidal by just copying the plugin binary, and there are other items in the roadmap that might tickle your fancy:)

Cheers o/  
-Tristan

---

<div class="post-metadata">

**Author:** ![Leamucho](https://uzu.lurk.org/user_avatar/uzu.lurk.org/leamucho/32/2321_2.png) [@Leamucho](https://uzu.lurk.org/u/Leamucho)\
**Post date:** [7 July 2025 04:51 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/2 "2025-07-07T04:51:58Z")

</div>

Tristan really nice project!!!  
just to be sure of what I read on your CodeBerg, the VST or clap isn't available right away, one must compile it, right? Is it Linux only? I think those repositories can be installed also on windows, but wanted you to point me out in the right direction...

Thanks for sharing your work!

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [20 July 2025 12:10 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/3 "2025-07-20T12:10:01Z")

</div>

Thanks! Yes that's right, the plugin must be built from source. Here is an issue about adding support for the other platform: [#6 - Mac build - TristanCacqueray/pluguzu - Codeberg.org](https://codeberg.org/TristanCacqueray/pluguzu/issues/6)

---

<div class="post-metadata">

**Author:** ![staxl](https://uzu.lurk.org/user_avatar/uzu.lurk.org/staxl/32/1717_2.png) [@staxl](https://uzu.lurk.org/u/staxl)\
**Post date:** [28 July 2025 09:09 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/4 "2025-07-28T09:09:05Z")

</div>

Pretty amazing idea! Looking forward to what's to come :))

---

<div class="post-metadata">

**Author:** ![Colton\_Dumont](https://uzu.lurk.org/user_avatar/uzu.lurk.org/colton_dumont/32/2112_2.png) [@Colton\_Dumont](https://uzu.lurk.org/u/Colton_Dumont)\
**Post date:** [8 September 2025 23:53 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/5 "2025-09-08T23:53:46Z")

</div>

Can’t describe how into this I am. My entire system right now is centered around piping midi into Bitwig, so having a dedicated plugin that hosts TidalCycles sounds incredible. Super excited to see how this project develops!

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [9 September 2025 06:52 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/6 "2025-09-09T06:52:45Z")

</div>

Thank you for the kind words, makes me excited to develop this project!

Here is a quick update: it looks like the plugin framework I picked (DPF) doesn’t have a consistent transport implementation across platforms, see: [#4 - Timer going backwards - TristanCacqueray/pluguzu - Codeberg.org](https://codeberg.org/TristanCacqueray/pluguzu/issues/4) and issue #7. I suspect this happens because DPF supports many plugin formats and perhaps it is not much used to implement a sequencer type of plugin (see upstream issue [getTimePosition() returns the same value between two runs · Issue #503 · DISTRHO/DPF · GitHub](https://github.com/DISTRHO/DPF/issues/503) ). It’s a bit unfortunate because the plugin works well on my setup (REAPER / Linux x86). Thus I’m investigating switching to another framework called nih-plug and I just pushed a prototype in the rust-nih branch. So far it seems to work well and the transport provides a convenient `pos_beats` helper to get the current bar fraction which appears to be more reliable. I hope to have a working implementation shortly and it would be good to validate if that fixes the issue #7 related to Bitwig.

Also, with regards to distribution, I reported the static link issue to GHC [#26390: Can't build native-static foreign library on Linux x86\_64 · Issues · Glasgow Haskell Compiler / GHC · GitLab](https://gitlab.haskell.org/ghc/ghc/-/issues/26390) and I can now build a portable binary which should enable installing pluguzu without requiring a build from source with the Haskell/Rust toolchains.

Cheers o/

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [13 September 2025 19:09 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/7 "2025-09-13T19:09:25Z")

</div>

I merged the rewrite to nih-plug and egui through [https://codeberg.org/TristanCacqueray/pluguzu/pulls/9](https://codeberg.org/TristanCacqueray/pluguzu/pulls/9)

As an extra feature, I added support for source events location highlight in the editor thanks to the `deltaMini` helper from tidal! I think it looks fabulous, please give it a try!

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [20 September 2025 12:58 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/8 "2025-09-20T12:58:03Z")

</div>

I am presently working on integrating the original [dirt](https://codeberg.org/uzu/dirt) sampler so that pluguzu can play sounds out of the box. For example, here is the binding I created: [dirt.rs](https://codeberg.org/TristanCacqueray/pluguzu/src/branch/dirt/src/dirt.rs).

This is very exiting because pluguzu is now fully usable standalone. It can still be hosted inside a DAW, but the app alone is quite fun too, so I think I'll update the project description to something like "standalone live coding text editor".

If you can give it a try, I would love to get your feedback. The branch still need a bit of work before being merged, like to show sample loading errors, and to build the libdirt automatically. But I am looking forward making a release shortly.

I would like to thanks @yaxu , as pluguzu would not have been possible without his creations. I particularly enjoyed the design of dirt, and how easy it was to get it running inside nih-plug. I think I'll eventually make the libdirt binding standalone too so that it can be integrated in other engines.

Cheers o/

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [25 September 2025 18:56 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/9 "2025-09-25T18:56:52Z")

</div>

All the changes are now merged, and provided a Rust and Haskell toolchain, running `make && make install` now produce the following standalone binaries:

```haskell
[+] Installed STANDALONE: ~/.local/bin/pluguzu
[+] Installed CLAP: ~/.clap/pluguzu.clap
[+] Installed VST3: ~/.vst3/pluguzu.vst3

```

With the audio samples management and the events' highlight, I had to tweak the core logic to ensure a smooth audio callback, and based on a local benchmark, pluguzu seems to work fine up to 200k events per four bars, e.g. with such code:

```haskell
stack [
  fast "50000" $ n "c3",
  s "tok*4"
]

```

… beyond that, the rendering may take too long and starve the cpu.

I think the implementation is accurate timing wise, but I'm still on the look out for synchronization issues with the external clock. For example, reading the bar position may have some (sub millisecond) micro jitters, and perhaps more work is needed to ensure perfect accuracy. When that happens, a warning is printed, and I'd love to gather more data when that occurs.

Also the code editor, provided by egui, is usable, but perhaps a different toolkit can be used, or even a terminal emulator to run vim/emacs might be possible...

Finally, I'd love to improve the dirt sampler by backporting the missing features from superdirt/superdough, and it would be nice to support the new mondo notation too. But that would be a story for another day!

Feel free to [open an issue](https://codeberg.org/TristanCacqueray/pluguzu/issues/new) if pluguzu doesn't work for you!  
Take care:)

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [21 October 2025 08:06 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/10 "2025-10-21T08:06:33Z")

</div>

Pluguzu now supports the new mondo notation, for which I managed to parse into Tidal patterns through the new [tidal-mondo](https://codeberg.org/uzu/tidal/pulls/1233) package. This is more flexible than using tidal-parse, as it lets us support custom expression like let bindings. I'm excited by this new development as it brings Tidal and Strudel closer, for example we can now have sound selection pattern like `bd:<1 2>`, along with the local function chaining feature, e.g. `s [bd (sd # delay .5)]`.

I'm also working on integrating the new [dough](https://codeberg.org/uzu/dough) synthesizer to replace dirt: [pluguzu#13](https://codeberg.org/TristanCacqueray/pluguzu/pulls/13). This is also very exciting as it enables playing melody out of the box using the basic oscillators, and I'm looking forward adding sample based pitch modulation to play instruments like a piano.

Cheers!

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [1 November 2025 13:33 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/11 "2025-11-01T13:33:01Z")

</div>

The changes to support the dough engine are now merged! In order to re-use the strudel soundmaps locally, I proposed to use a configuration files to indicate the local directory that way: [pluguzu.json](https://codeberg.org/TristanCacqueray/uzu-samples/src/branch/main/pluguzu.json).

Cheers!

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [27 January 2026 20:48 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/12 "2026-01-27T20:48:21Z")

</div>

Hello, happy new year!

Here is a change to simplify pluguzu by using a fixed cycle count instead of continuous arcs over the whole project. Previously, the events were rendered as needed, and while it allowed the patterns to play infinitely, this was complicated to do efficiently. This also caused annoying delays when seeking quickly, especially with multiple instances running in parallel. So what I'm proposing to do is to process the events statically for a fixed duration and loop over them.

This prompted me to revisit the cycle position implementation to match the host transport, and the new code now properly support bpm modulation by using a tolerance threshold to make the sliding range continuous. This part remain complicated and I wonder if it wouldn't be better to use a midi sync instead when available.

Anyway, I'm looking forward to integrate this modification, and I'd be happy to get feedback before merging the PR:

> **[Implement fixed cycle count](https://codeberg.org/TristanCacqueray/pluguzu/pulls/19)**
>
> This change simplifies pluguzu by using a fixed cycle count instead of continuous arc over the whole project. Previously, the events were rendered as needed, and while it allowed the patterns to play infinitely, this was complicated to do...

Take care:)

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [18 February 2026 10:00 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/13 "2026-02-18T10:00:11Z")

</div>

Hello folks,

I tinkered with implementing a MIDI based triggering system to start the cycle on external note events, like the OP1 "finger sequencer" or the shaperbox "midi trigger mode". At first, I made this feature so that we can control the start of the cycle using a MIDI lane. This was necessary after the recent fixed cycle implementation. But I now realize that there are two main usage for pluguzu:

- Synchronized to an external transport, e.g. a DAW, where the transport can seek to arbitrary location. In that case, it is necessary to perform the events from a static loop (using a fixed cycle count) to avoid re-rendering the events during playback.
- Standalone with the internal transport, where the time goes strictly forward. In that case, it is fine to render the events continuously, without fixing the cycle count.

Thus, I re-worked one more time the transport implementation to handle both cases, including the option to trigger the pattern using MIDI events:

> **[Implement midi trigger](https://codeberg.org/TristanCacqueray/pluguzu/pulls/21)**
>
> This PR enables triggering individual pattern using MIDI events, similar to the OP1's finger sequencer. For example:
> 
> \`\`\`mondo
> $ s bd # pI mt 0
> $ s sd # pI mt 2
> \`\`\`
> 
> … will play \`bd\` on C note-on, and \`sd\` on D note-on.
> 
> TODO:
> \- \[\] sort sound events...

This is a bit tedious, but I think its worthy and the result is quite fun to play with. For now, this change adds basic support for the `mt` pattern modifier to select which events are played when a note-on event is received. Next, I'd like to figure out how to quantize the trigger starting time, to help keep the patterns somewhat synced. Then it should also be possible to have a global midi trigger, that could offset the notes pitch, I guess a bit like what the OPZ is doing...

The feature seems to be working as expected, and it's quite fun to remix patterns using a midi keyboard, but I'll play test it for a while and review it again before merging. After that, I think it will be time to make the first release and publish a video/manual to explain how to use pluguzu.

As usual, I'd be happy to get feedback and discuss future development, like perhaps implementing a different editor while keeping the transport logic...  
Anyway, that's it for today, take care!  
-Tristan

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [8 June 2026 06:50 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/14 "2026-06-08T06:50:41Z")

</div>

I forgot to share a little demo of pluguzu in action:) [plugzu – Tristan's Zettelkasten](https://midirus.com/video/2026-03-01-plugzu)

This is featuring the mondo notation and the dough sampler inside my REAPER.

Take care!

---

<div class="post-metadata">

**Author:** ![staxl](https://uzu.lurk.org/user_avatar/uzu.lurk.org/staxl/32/1717_2.png) [@staxl](https://uzu.lurk.org/u/staxl)\
**Post date:** [10 June 2026 14:03 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/15 "2026-06-10T14:03:59Z")

</div>

oh wow, this is nice! congrats!

---

<div class="post-metadata">

**Author:** ![guillaume-leo](https://uzu.lurk.org/user_avatar/uzu.lurk.org/guillaume-leo/32/2216_2.png) [@guillaume-leo](https://uzu.lurk.org/u/guillaume-leo)\
**Post date:** [10 June 2026 14:10 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/16 "2026-06-10T14:10:13Z")

</div>

That looks really cool, I'm sure having tidal in any DAW would expand so much possibilities ! Hope to see a windows release one day 🙂

---

<div class="post-metadata">

**Author:** ![Dexter\_U.S](https://uzu.lurk.org/user_avatar/uzu.lurk.org/dexter_u.s/32/3684_2.png) [@Dexter\_U.S](https://uzu.lurk.org/u/Dexter_U.S)\
**Post date:** [21 October 2026 07:24 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/17 "2026-10-21T07:24:17Z")

</div>

I did a windows build of it since I found it while I was searching for live music languages. I also did an experiment changing the editor over to code mirror 6 to see if I could add sliders in the text view later like strudel has. That one is named zen master (forked off the main). I added a feature where it gives you a warning on the bottom of the screen if you do not have the sample because I didn't distribute those.

source

[Dexter-us/pluguzu-windows-vst3: Windows x64 VST3 port of Pluguzu, with a GitHub Actions build workflow.](https://github.com/Dexter-us/pluguzu-windows-vst3/tree/main)

compiled version might be under actions for awhile but I also have it on my patreon because github will erase some files after a period of time.

---

<div class="post-metadata">

**Author:** ![tristanC](https://uzu.lurk.org/user_avatar/uzu.lurk.org/tristanc/32/3010_2.png) [@tristanC](https://uzu.lurk.org/u/tristanC)\
**Post date:** [21 October 2026 14:15 UTC](https://uzu.lurk.org/t/introducing-pluguzu-a-plugin-to-run-tidal-natively-in-a-daw/5758/18 "2026-10-21T14:15:36Z")

</div>

Well done, I'd be happy to integrate fixes and changes like the warning on missing samples!

Were you able to add sliders? I think this requires more work in the tidal FFI to expose external values.
