# tek [![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page) a music making program for your terminal ![Screenshot](https://codeberg.org/unspeaker/tek/attachments/549efab7-f46b-438b-9508-cd499d044b41) ## what it does Tek is a [MIDI](https://en.wikipedia.org/wiki/MIDI) sequencer, sampler, and plugin host for the Linux terminal. It's written in [Rust](https://www.rust-lang.org/), and targets [JACK](https://jackaudio.org/) (or [Pipewire](https://www.pipewire.org/)'s JACK implementation). > [!NOTE] > > I've been dreaming of this project for a decade, and finally had the experience and peace of mind > to start building it in late May 2024. > > I quickly reached the limit of how much of the UI I can write imperatively, > so I started refactoring... and refactoring... and refactoring... you know > how it is. ## project status for roadmap, see https://codeberg.org/unspeaker/tek/milestones > [!NOTE] > > As of 2024-12-25, the release window has been open since 2024-12-10. > [6 alpha/beta versions have been published on the Releases page](https://codeberg.org/unspeaker/tek/releases). > [!NOTE] > > I still want to tag the first working prototypes (as seen in the demos published in the > [tek channel at basspistol's peertube](https://v.basspistol.org/c/tek/videos)) as `0.1.0`— > once I've identified the appropriate commit! [^0]: (Especially if you know how to host LV2 plugin UIs in `winit`; or how to relink abandoned Win32 VST2s into LV2 or CLAP monoliths 😁) ## design goals ### lightweight My goal is to have a pop-up scratchpad for musical ideas that doesn't get in the way of building upon them. Kind of like [Ableton](https://www.ableton.com/) — but for free systems, and without all the bloat! ### flexible Besides Ableton, I'm also inspired by the workflow of trackers and various old-school hardware sequencers (of which I've broken several). I've found that every existing music-making tool takes me about 80% of the way to the music I want to make. And so, after a decade of fucking around, I've decided it's finally time to make good on my old dream to build the instrument that will take me 100% there. ### programmable A secondary goal is to make my music making environment extensible, programmable, and interoperable; the intended project format is an [S-expression](https://en.wikipedia.org/wiki/S-expression)-based notation ([EDN](https://en.wikipedia.org/wiki/Clojure#Extensible_Data_Notation), [Steel](https://github.com/mattwparas/steel), or similar... though I've also been looking for an excuse to embed a [Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) 😏) ## getting started ### requirements * Linux * JACK or Pipewire * a terminal supporting 24-bit colors (I use `kitty`) ### recommended * MIDI controller * Samples * LV2 plugins ### installation #### arch linux [tek](https://codeberg.org/unspeaker/tek) is available as a package in the AUR. You can install it using an AUR helper (e.g. `paru`): ```sh paru -S tek ``` ### downloads See the [releases page](https://codeberg.org/unspeaker/tek/releases). ### building from source You need a Rust toolchain and various system libraries. You can obtain the former using `rustup` and the latter using `nix-shell`. From there, use the commands in the `Justfile`, e.g.: ```sh just arranger ``` ## usage > [!WARNING] > > The following applies to `tek 0.1.0`. I will update it as part of the `0.2.0` release. ### Overview Tek is inspired by "clip launching" workflows as exemplified by Ableton Live, Bitwig Studio, Ardour, and probably others. The main view consists of three sections: * The **arranger view** corresponds to Ableton's Session and Arrangement views. It allows you to put together a musical composition as a sequence of **phrases**, playing simultaneously across multiple **tracks**. * The **sequencer view** allows you to edit phrases, which consist of MIDI events. * The **chain view** allows you to add **devices** to each track. Devices determine how a given phrase will sound. Currently, there are two devices implemented: **sampler** and **plugin**. > [!NOTE] > Use `Tab` to switch focus between views. Use `Enter` to exclusively focus the highlighted view, > and `Esc` to unfocus it. When a view is focused, use the `Arrow Keys` and `Enter` to navigate. > Use `;` (semicolon) to open the command palette, which will list the remaining keybindings. --- > [!NOTE] > Your moral support means a lot to me. > Feel free to [contact me on Mastodon](https://mastodon.social/@unspeaker)![^0] > > Love, > 🤫 > (a rogue knowledge worker in a cyberpunk dystopia)