├── .github └── workflows │ └── zola.yml ├── .gitignore ├── README.md ├── config.toml ├── content ├── _index.md ├── about.md ├── crates.toml ├── formats.toml └── resources.toml ├── sass ├── _colors.scss └── main.scss ├── static ├── .gitkeep ├── CNAME └── media │ ├── designed-dark.svg │ ├── designed.svg │ └── logo.png ├── templates ├── articles │ ├── index.html │ └── page.html ├── contributors │ ├── list.html │ └── single.html ├── crates │ ├── list.html │ └── single.html ├── index.html ├── layout.html ├── macros.html ├── rss.xml └── topics │ ├── list.html │ └── single.html └── themes └── .gitkeep /.github/workflows/zola.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | pull_request: 6 | jobs: 7 | build_and_deploy: 8 | runs-on: ubuntu-latest 9 | if: github.ref == 'refs/heads/master' 10 | steps: 11 | - name: 'Checkout' 12 | uses: actions/checkout@master 13 | - name: 'Build and deploy' 14 | uses: shalzz/zola-deploy-action@master 15 | env: 16 | PAGES_BRANCH: gh-pages 17 | BUILD_DIR: . 18 | TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | public 2 | .DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust Audio 2 | 3 | This repository contains the code powering https://rust.audio. This website contains information on audio development with the Rust programming language. 4 | 5 | ## Developing & contributing 6 | 7 | Contributions are welcome. This repository uses the [Zola static site generator](https://github.com/getzola/zola). Please check [here](https://www.getzola.org/documentation/getting-started/overview/) for basic Zola documentation. 8 | 9 | ### Conventions 10 | 11 | When possible, try to content conventions from other items on the site. Most important things should be documented in the `toml` or `md` file. Don't worry too much about getting everything right! 12 | 13 | ### Site Layout 14 | 15 | - About rust.audio is in `content/about.md` 16 | - Formats describing e.g. `VST` vs `CLAP` are in `content/formats.toml`. 17 | - Audio resource links are in `resources.toml`. 18 | 19 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | # The URL the site will be built for 2 | base_url = "https://rust.audio" 3 | 4 | # Whether to automatically compile all Sass files in the sass directory 5 | compile_sass = true 6 | generate_rss = true 7 | 8 | # Whether to do syntax highlighting 9 | # Theme can be customised by setting the `highlight_theme` variable to a theme supported by Gutenberg 10 | highlight_code = true 11 | highlight_theme = "ir-white" 12 | 13 | # Whether to build a search index to be used later on by a JavaScript library 14 | build_search_index = true 15 | 16 | title = "Rust Audio" 17 | 18 | taxonomies = [ 19 | ] 20 | 21 | [extra] 22 | logo = "/media/logo.png" 23 | discourse_url = "https://rust-audio.discourse.group/" 24 | repos_url = "https://api.github.com/orgs/RustAudio/repos" 25 | discord_server_id = "590254806208217089" 26 | discord_invite = "https://discord.gg/8qW6q2k" -------------------------------------------------------------------------------- /content/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ -------------------------------------------------------------------------------- /content/about.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | 4 | [rust.audio](https://rust.audio) is a collection of resources dedicated to the development of audio applications in the Rust programming language. These topics vary from general DSP, to synthesis, to plugins and associated crates. -------------------------------------------------------------------------------- /content/crates.toml: -------------------------------------------------------------------------------- 1 | [[crates]] 2 | key = "fundsp" 3 | source = "crates" 4 | tags = ["DSP"] 5 | 6 | [[crates]] 7 | key = "cpal" 8 | source = "crates" 9 | tags = ["devices"] 10 | 11 | [[crates]] 12 | key = "coremidi" 13 | source = "crates" 14 | tags = ["MIDI"] 15 | 16 | [[crates]] 17 | key = "wrl/baseplug" 18 | source = "github" 19 | tags = ["frameworks","VST2"] 20 | 21 | [[crates]] 22 | key = "RustAudio/baseview" 23 | source = "github" 24 | tags = ["windowing","GUI"] 25 | 26 | [[crates]] 27 | key = "robbert-vdh/nih-plug" 28 | source = "github" 29 | tags = ["frameworks","VST3","CLAP"] 30 | 31 | [[crates]] 32 | key = "glowcoil/clap-sys" 33 | source = "github" 34 | tags = ["bindings","CLAP"] 35 | 36 | [[crates]] 37 | key = "RustyDAW/rusty-daw-io" 38 | source = "github" 39 | tags = ["devices"] 40 | 41 | [[crates]] 42 | key = "RustyDAW/creek" 43 | source = "github" 44 | tags = ["streaming"] 45 | 46 | [[crates]] 47 | key = "MeadowlarkDAW/Meadowlark" 48 | source = "github" 49 | tags = ["DAWs"] 50 | 51 | [[crates]] 52 | key = "WeirdConstructor/HexoSynth" 53 | source = "github" 54 | tags = ["synthesizer", "plugin"] 55 | 56 | [[crates]] 57 | key = "vizia/vizia" 58 | source = "github" 59 | tags = ["GUI", "frameworks"] 60 | 61 | [[crates]] 62 | key = "chaosprint/glicol" 63 | source = "github" 64 | tags = ["languages", "DSP"] 65 | 66 | [[crates]] 67 | key = "rodio" 68 | source = "crates" 69 | tags = ["playback"] 70 | 71 | [[crates]] 72 | key = "kira" 73 | source = "crates" 74 | tags = ["games", "playback"] 75 | 76 | [[crates]] 77 | key = "awedio" 78 | source = "crates" 79 | tags = ["playback", "embedded"] 80 | 81 | [[crates]] 82 | key = "rubato" 83 | source = "crates" 84 | tags = ["resampling", "DSP"] 85 | 86 | [[crates]] 87 | key = "realfft" 88 | source = "crates" 89 | tags = ["FFT", "DSP"] 90 | 91 | [[crates]] 92 | key = "jack" 93 | source = "crates" 94 | tags = ["devices"] 95 | 96 | [[crates]] 97 | key = "alisomay/libpd-rs" 98 | source = "github" 99 | tags = ["languages", "DSP"] 100 | 101 | [[crates]] 102 | key = "rustfft" 103 | source = "crates" 104 | tags = ["FFT", "DSP"] 105 | 106 | [[crates]] 107 | key = "hound" 108 | source = "crates" 109 | tags = ["streaming", "frameworks"] 110 | 111 | -------------------------------------------------------------------------------- /content/formats.toml: -------------------------------------------------------------------------------- 1 | # Audio plugin formats 2 | 3 | # Format for specifying a format 🤔 4 | # 5 | # ``` 6 | # [[formats]] 7 | # 8 | # # Human readable format name 9 | # name = "MyFormatName" 10 | # 11 | # # Link to the homepage 12 | # link = "https://example.com" 13 | # 14 | # # Short synopsis of the format 15 | # description = "This format was designed for Plan9 computers only" 16 | # 17 | # # The license of the format 18 | # license = { name = "MIT", url = "https://example.com/license.html" } 19 | # 20 | # # Optionally, list crates that work with this format 21 | # crates = [ 22 | # { name = "plan9-plug", url = "https://example.com/mycoolsite/plan9-plugin" }, 23 | # ] 24 | # 25 | # # Optionally, list additional resources on this format 26 | # resources = [ 27 | # { name = "My link docs name", url = "http://example.com/docs" }, 28 | # ] 29 | # ``` 30 | 31 | [[formats]] 32 | name = "VST" 33 | link = "https://steinbergmedia.github.io/vst3_dev_portal/pages/index.html" 34 | description = "VST can refer to several different versions of the VST format by Steinberg. VST2 was one of the most common standards, but is now unlicensed. Instead, VST3 is recommended and is generally supported in most DAWs. Note that the Rust vst3-sys crate currently relies on GPLv3 code." 35 | license = { name = "GPLv3 or Proprietary", url = "https://developer.steinberg.help/pages/viewpage.action?pageId=9797944" } 36 | crates = [ 37 | { name = "vst", url = "https://github.com/RustAudio/vst-rs" }, 38 | { name = "vst3-sys", url = "https://github.com/RustAudio/vst3-sys" }, 39 | ] 40 | resources = [] 41 | 42 | [[formats]] 43 | name = "AudioUnit" 44 | link = "https://developer.apple.com/documentation/audiounit/" 45 | description = "AudioUnit (AU) is only available on Apple platforms. AU v2 is simlar to VST, and AU v3 follows an Apple framework approach, which is harder to implement without Apple tools. Currently, no Rust libraries implement the AudioUnit standard." 46 | license = { name = "Proprietary", url = "https://developer.apple.com/licensing-trademarks/audio-units/" } 47 | resources = [ 48 | { name = "Rust CoreAudio - AudioUnit struct documentation", url = "http://rustaudio.github.io/coreaudio-rs/coreaudio/audio_unit/struct.AudioUnit.html" }, 49 | { name = "Rust CoreAudio - Possibility of creating AU plugins", url = "https://github.com/RustAudio/coreaudio-rs/issues/52" }, 50 | { name = "Rust CoreAudio - AudioUnit implementation", url = "https://github.com/RustAudio/coreaudio-rs/blob/master/src/audio_unit/mod.rs" }, 51 | { name = "DPlug - AudioUnit implemented in DLang", url = "https://github.com/AuburnSounds/Dplug/tree/master/au/dplug/au" }, 52 | ] 53 | 54 | [[formats]] 55 | name = "LV2" 56 | link = "https://lv2plug.in/" 57 | description = "LV2 is only supported on Linux with a few exceptions. One interesting feature is that all LV2 plugin hosts and plugins are backwards compatible with previous versions." 58 | license = { name = "ISC", url = "https://gitlab.com/lv2/lv2/-/blob/master/COPYING" } 59 | crates = [ 60 | { name = "rust-lv2", url = "https://github.com/RustAudio/rust-lv2" }, 61 | { name = "lv2rs", url = "https://github.com/Janonard/lv2rs" }, 62 | ] 63 | resources = [ 64 | { name = "LV2 Crate implementation and Design on rust.audio", url = "https://rust-audio.discourse.group/t/lv2-crate-implementation-and-design/71/2" }, 65 | ] 66 | 67 | [[formats]] 68 | name = "CLAP" 69 | link = "https://cleveraudio.org/" 70 | description = "CLAP is a relatively new plugin format with permissive licensing. It does not currently have wide support outside of Bitwig." 71 | license = { name = "MIT", url = "https://github.com/free-audio/clap/blob/main/LICENSE" } 72 | crates = [{ name = "clap-lv2", url = "https://github.com/glowcoil/clap-sys" }] 73 | -------------------------------------------------------------------------------- /content/resources.toml: -------------------------------------------------------------------------------- 1 | # Resources format 2 | # 3 | # ``` 4 | # [[resources]] 5 | # 6 | # A descriptive but short name for the resource 7 | # name = "My resource name" 8 | # 9 | # # Link directly to the resource named 10 | # url = "http://www.example.com/dsp.html" 11 | # 12 | # # Avoid creating new categories unless completely necessary 13 | # category = "general" 14 | # ``` 15 | 16 | [[resources]] 17 | name = "The Scientist and Engineer's Guide to Digital Signal Processing" 18 | url = "http://www.dspguide.com/" 19 | category = "general" 20 | 21 | [[resources]] 22 | name = "MIT OpenCourseWare: 6.003 Signals and Systems 1" 23 | url = "https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-003-signals-and-systems-fall-2011/" 24 | category = "general" 25 | 26 | [[resources]] 27 | name = "MIT OpenCourseWare: 6.007 Signals and Systems 2" 28 | url = "https://ocw.mit.edu/resources/res-6-007-signals-and-systems-spring-2011/" 29 | category = "general" 30 | 31 | [[resources]] 32 | name = "Audio doghouse" 33 | url = "https://www.objc.io/issues/24-audio/audio-dog-house/" 34 | category = "general" 35 | 36 | [[resources]] 37 | name = "Alias-Free Digital Synthesis of Classic Analog Waveforms (whitepaper)" 38 | url = "https://ccrma.stanford.edu/~stilti/papers/blit.pdf" 39 | category = "bandlimited synthesis" 40 | 41 | [[resources]] 42 | name = "Stefan Stenzel - The amazing usefulness of band limited impulse trains" 43 | url = "https://www.youtube.com/watch?v=lpM4Tawq-XU" 44 | category = "bandlimited synthesis" 45 | 46 | [[resources]] 47 | name = "Interval Tree" 48 | url = "https://en.wikipedia.org/wiki/Interval_tree" 49 | category = "structures and algorithms" 50 | 51 | [[resources]] 52 | name = "Finger Tree" 53 | url = "https://en.wikipedia.org/wiki/Finger_tree" 54 | category = "structures and algorithms" 55 | 56 | [[resources]] 57 | name = "Radix Tree" 58 | url = "https://en.wikipedia.org/wiki/Radix_tree" 59 | category = "structures and algorithms" 60 | 61 | [[resources]] 62 | name = "Persistent Vector" 63 | url = "https://hypirion.com/musings/understanding-persistent-vector-pt-1) (Clojure)" 64 | category = "structures and algorithms" 65 | 66 | [[resources]] 67 | name = "Immutable data structures" 68 | url = "https://www.youtube.com/watch?v=ZsryQp0UAC8) (C++)" 69 | category = "structures and algorithms" 70 | 71 | [[resources]] 72 | name = "Xiph.org digital show-and-tell: Exploring sample rate and bit depth" 73 | url = "https://xiph.org/video/vid2.shtml" 74 | category = "misc" 75 | -------------------------------------------------------------------------------- /sass/_colors.scss: -------------------------------------------------------------------------------- 1 | $border: #e1d8dd; 2 | $background: #ffffff; 3 | $background-low: #f3f3f3; 4 | $primary: #09184f; 5 | $accent: #0529ab; 6 | $contrast: darken($primary, 10); 7 | $contrast-low: lighten(desaturate($primary, 70), 20); 8 | $shadow: 0px 0px 3px 0px #1110121a; -------------------------------------------------------------------------------- /sass/main.scss: -------------------------------------------------------------------------------- 1 | @import 'colors'; 2 | 3 | .animated-border { 4 | height: 4px; 5 | background: linear-gradient(90deg, #562D6A 0%, #AB3D6A 25%, #562D6A 50%, #AB3D6A 75%, #562D6A 100%); 6 | background-size: 200% 200%; 7 | animation: BorderAnimation 2s linear infinite; 8 | opacity: 0.3; 9 | } 10 | 11 | @keyframes BorderAnimation { 12 | 0% { 13 | background-position: 0% 0% 14 | } 15 | 16 | 100% { 17 | background-position: 100% 0% 18 | } 19 | } 20 | 21 | #slideout-menu { 22 | touch-action: none; 23 | display: fixed; 24 | bottom: 100000px; 25 | } 26 | 27 | nav { 28 | display: flex; 29 | align-items: center; 30 | gap: 1rem; 31 | img { 32 | height: 40px; 33 | } 34 | padding: 1rem; 35 | h3 {margin: 0;} 36 | a { 37 | display: flex; 38 | align-items: center; 39 | gap: 1rem; 40 | } 41 | } 42 | 43 | body { 44 | font-size: 18px; 45 | line-height: 1.5; 46 | font-family: Arial, Helvetica, sans-serif; 47 | background: $background; 48 | margin: 0; 49 | margin-bottom: 8em; 50 | a {text-decoration: none; } 51 | } 52 | 53 | .button { 54 | background: $primary; 55 | font-weight: 700; 56 | padding: 0.5em 1em; 57 | border-radius: 1000px; 58 | color: $background; 59 | display: inline-block; 60 | &:hover { 61 | background: lighten($primary, 5); 62 | } 63 | &:active { 64 | background: lighten($primary, 10); 65 | } 66 | } 67 | 68 | .filters { 69 | margin-bottom: 1em; 70 | } 71 | 72 | .tags { 73 | text-transform: capitalize; 74 | display: flex; 75 | flex-wrap: wrap; 76 | gap: 0.3em; 77 | align-items: flex-start; 78 | } 79 | 80 | .tag { 81 | background: $background-low; 82 | font-weight: 600; 83 | padding: 0.1em 0.6em; 84 | border-radius: 1000px; 85 | color: $contrast-low; 86 | display: inline-block; 87 | border: 1px solid $border; 88 | font-size: 0.8rem; 89 | vertical-align: baseline; 90 | i{height: 0; svg{width:16px}} 91 | cursor: pointer; 92 | &:hover { 93 | background: darken($background-low, 5); 94 | } 95 | &:active { 96 | background: darken($background-low, 10); 97 | } 98 | } 99 | 100 | .tag.toggled { 101 | background: $accent; 102 | border: 1px solid rgba(255, 255, 255, 0.5); 103 | color: $background; 104 | } 105 | 106 | i{ 107 | vertical-align: middle; 108 | svg { 109 | width: 24px; 110 | } 111 | } 112 | 113 | .container { 114 | max-width: 800px; 115 | width: 100%; 116 | margin: 0 auto; 117 | padding: 0 1rem; 118 | box-sizing: border-box; 119 | } 120 | 121 | .container-full { 122 | width: 100%; 123 | box-sizing: border-box; 124 | padding: 0 1rem; 125 | 126 | } 127 | 128 | .hide-small { 129 | @media screen and (max-width: 700px) { 130 | display: none; 131 | } 132 | } 133 | 134 | hr { 135 | border: 1px solid $border; 136 | margin: 3em 0; 137 | } 138 | 139 | h1,h2,h3,h4,h5,h6,pre { 140 | margin: 0.2em 0; 141 | } 142 | 143 | h1 { font-size: 3rem; } 144 | h2 { font-size: 2.5rem; } 145 | h3 { font-size: 2rem; } 146 | h4 { font-size: 1.5rem; } 147 | h5 { font-size: 1rem; } 148 | h6 { font-size: 0.75rem; } 149 | 150 | article { 151 | h1 { font-size: 2.5rem; } 152 | h2 { font-size: 2rem; } 153 | h3 { font-size: 1.5rem; } 154 | h4 { font-size: 1.2rem; } 155 | h5 { font-size: 0.8rem; } 156 | h6 { font-size: 0.6rem; } 157 | } 158 | 159 | article { 160 | pre { 161 | white-space: pre-wrap; 162 | word-break: break-word; 163 | } 164 | 165 | >blockquote { 166 | &:before { 167 | content: "◈"; 168 | vertical-align: -0.1em; 169 | } 170 | p { 171 | display: inline; 172 | } 173 | } 174 | } 175 | 176 | p, 177 | ul, 178 | li { 179 | a { 180 | text-decoration: none; 181 | font-weight: normal; 182 | } 183 | } 184 | 185 | section { 186 | margin: 4em 0; 187 | } 188 | 189 | .crates { 190 | display: grid; 191 | grid-template-columns: 1fr 1fr 1fr 1fr; 192 | @media screen and (max-width: 960px) { 193 | grid-template-columns: 1fr 1fr 1fr; 194 | } 195 | @media screen and (max-width: 720px) { 196 | grid-template-columns: 1fr 1fr; 197 | } 198 | @media screen and (max-width: 500px) { 199 | grid-template-columns: 1fr; 200 | } 201 | h4 { 202 | margin: 0; 203 | } 204 | .crate { 205 | border-top: 1px $border solid; 206 | display: flex; 207 | flex-direction: column; 208 | padding: 1em; 209 | gap: 0.4em 1em; 210 | .details { 211 | display: flex; 212 | gap: 0.5em; 213 | align-items: center; 214 | } 215 | p, pre { 216 | margin: 0; 217 | font-size: 0.8em; 218 | line-height: 1.4; 219 | } 220 | 221 | } 222 | } -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RustAudio/website/c2036237be42a0ef8699ad8e1b193ab12d0ccfbc/static/.gitkeep -------------------------------------------------------------------------------- /static/CNAME: -------------------------------------------------------------------------------- 1 | rust.audio -------------------------------------------------------------------------------- /static/media/designed-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/media/designed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/media/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RustAudio/website/c2036237be42a0ef8699ad8e1b193ab12d0ccfbc/static/media/logo.png -------------------------------------------------------------------------------- /templates/articles/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 | {% endblock content %} -------------------------------------------------------------------------------- /templates/articles/page.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 |
6 |

{{ page.title }}

7 | {{ page.content | safe }} 8 |
9 | 10 | {% if config.extra.discourse_url %} 11 |
12 |
13 |
14 | 27 | {% endif %} 28 | 29 | {% endblock content %} -------------------------------------------------------------------------------- /templates/contributors/list.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 | {% endblock content %} -------------------------------------------------------------------------------- /templates/contributors/single.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 |
6 | {# get associated contributors page #} 7 | {% set contributor = get_page(path="contributors/" ~ term.name ~ ".md") %} 8 |

{{ contributor.title }}

9 | {{ contributor.content | safe }} 10 | 11 | {% if contributor.extra.github %} 12 | GitHub 13 | {% endif %} 14 | 15 | {# display pages #} 16 |
17 | {{ m::show_taxonomy_pages(term=term) }} 18 |
19 |
20 | {% endblock content %} -------------------------------------------------------------------------------- /templates/crates/list.html: -------------------------------------------------------------------------------- 1 | {% extends "topics/list.html" %} -------------------------------------------------------------------------------- /templates/crates/single.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 |
6 | {#% set info = load_data(url="https://crates.io/api/v1/crates/" ~ term.name, format="json") %#} 7 | {% set info = load_data(url="https://crates.io/api/v1/crates/winapi", format="json") %} 8 |

{{ term.name }}

9 | {# assign a shorter variable to info.crate for sanity #} 10 | {% set c = info.crate %} 11 |
12 | {% if c.description %} 13 |

{{c.description}}

14 | {% endif %} 15 | 16 | {% if c.updated_at %} 17 |

Updated at {{c.updated_at | date(format="%Y-%m-%d %H:%M%Z")}}

18 | {% endif %} 19 | 20 | {% if c.documentation %} 21 |

22 | 23 | Documentation 24 | 25 |

26 | {% endif %} 27 |
28 | 29 |
30 | {{ m::show_taxonomy_pages(term=term) }} 31 |
32 |
33 | {% endblock content %} -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 | 6 | {# Header #} 7 | 14 | 15 | {# About #} 16 |
17 |

About

18 | {# Get about page content from the `about.md` file in content #} 19 | {% set about = get_page(path="about.md") %} 20 | {{ about.content | safe }} 21 |
22 | 23 |
24 |

Community

25 |
26 |
27 |

Discord

28 |

Join Rust Audio on Discord to keep up with audio development within the Rust ecosystem, get help with 29 | DSP, collaborate on projects, and everything in-between. 30 |
31 | Join 32 | Discord 33 |

34 |
35 | 36 | 38 | 39 |
40 |
41 | 42 |
43 | 44 | {# Crates #} 45 | 46 | 47 |
48 |
49 |

Audio crates

50 |
51 |
52 |
53 | {% set crates = load_data(path="content/crates.toml") %} 54 | {% for source, crates in crates.crates | group_by(attribute="source") %} 55 | 56 | {% for crate in crates %} 57 | 58 | {# Obtain API data #} 59 | {% if source == "github" %} 60 | {# Get github API page to pull information #} 61 | {% set data = load_data(url="https://api.github.com/repos/"~crate.key, format="json") %} 62 | {% set name = data.name %} 63 | {% set description = data.description %} 64 | {% set url = data.svn_url %} 65 | {# {% set keywords = data.topics %} #} 66 | 67 | {% elif source == "crates" %} 68 | {# Get crates API page to pull information #} 69 | {% set data = load_data(url="https://crates.io/api/v1/crates/"~crate.key, format="json") %} 70 | {% set name = data.crate.name %} 71 | {% set description = data.crate.description %} 72 | {% set url = "https://crates.io/crates/"~name %} 73 | {# {% set keywords = data.crate.keywords %} #} 74 | 75 | {% endif %} 76 | 77 |
78 | 79 |

80 |
{{ name }}
81 |

82 |
83 |

{{ description }}

84 | 85 |
86 | {% for tag in crate.tags %} 87 | {{tag}} 88 | {% endfor %} 89 |
90 | {#
91 |
{{ crate.stargazers_count }} ☆
92 |
#} 93 |
94 | {% endfor %} 95 | {% endfor %} 96 |
97 | 98 | {#
99 | {% set crates = load_data(url=config.extra.repos_url, format="json") %} 100 | {% for crate in crates | sort(attribute="updated_at") | reverse %} 101 |
102 | 103 |
104 |
{{ crate.name }}
105 |
106 |
107 |
108 |
{{ crate.stargazers_count }} ☆
109 |
110 |
111 | {% endfor %} 112 |
#} 113 | See all 114 | audio 115 | crates ➜ 116 |
117 |
118 | 119 | {# Resources #} 120 |
121 |

Resources

122 | 123 |
124 |

Audio plugin formats

125 | {% set formats = load_data(path="content/formats.toml") %} 126 | {% for format in formats.formats %} 127 |

128 | 129 |
{{format.name}}
130 |
131 |

132 | 133 | 134 | 135 | {% if format.license.url %}{% endif %} 136 | {{format.license.name}} 137 | {% if format.license.url %} 138 | {% endif %} 139 | 140 | 141 |

{{format.description}}

142 | 143 | {% if format.resources %} 144 |

Resources

145 | 152 | {% endif %} 153 | 154 | {% if format.crates %} 155 |

Crates

156 | 163 | {% endif %} 164 | 165 | 166 | {% endfor %} 167 |
168 |
169 |
170 |

DSP resources

171 | {% set resources = load_data(path="content/resources.toml") %} 172 | {% for group, resources in resources.resources | group_by(attribute="category") %} 173 |

{{group | capitalize}}

174 | 181 | {% endfor %} 182 |
183 |
184 | 185 | 265 | 266 | {% endblock content %} -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ config.title }} 9 | 10 | 12 | 13 | {# In case we need some specific script or something #} 14 | {% block extra_head %} 15 | {% endblock extra_head %} 16 | 17 | 18 | 19 | {% block content %}{% endblock content %} 20 | {% block extra_body %}{% endblock extra_body %} 21 | {% block footer %}{% endblock footer %} 22 | 23 | 24 | -------------------------------------------------------------------------------- /templates/macros.html: -------------------------------------------------------------------------------- 1 | {# An easy way to keep consistent links that work with the fixed header #} 2 | {% macro hash_link(name) %} 3 |
4 | {% endmacro %} 5 | 6 | {# Tachyons can be somewhat verbose, so a Button element isn't a bad choice. #} 7 | {% macro button(href="#", title="Button", icon=false, color="blue") %} 8 | 10 | 11 | {{ title }} 12 | 13 | {% if icon %} 14 | 15 | {{ icon }} 16 | 17 | {% endif %} 18 | 19 | {% endmacro %} 20 | -------------------------------------------------------------------------------- /templates/rss.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ config.title }} 4 | {{ config.base_url }} 5 | {{ config.description }} 6 | Gutenberg 7 | {{ config.default_language }} 8 | 9 | {{ last_build_date | date(format="%a, %d %b %Y %H:%M:%S %z") }} 10 | {% set articles = get_section(path="articles/_index.md") %} 11 | {% for page in articles.pages %} 12 | 13 | {{ page.title }} 14 | {{ page.date | date(format="%a, %d %b %Y %H:%M:%S %z") }} 15 | {{ page.permalink }} 16 | {{ page.permalink }} 17 | {% if page.summary %}{{ page.summary }}{% else %}{{ page.content }}{% endif %} 18 | 19 | {% endfor %} 20 | 21 | -------------------------------------------------------------------------------- /templates/topics/list.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 | {% endblock content %} -------------------------------------------------------------------------------- /templates/topics/single.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% import "macros.html" as m %} 3 | 4 | {% block content %} 5 |
6 |

{{ term.name }}

7 |
8 | {{ m::show_taxonomy_pages(term=term) }} 9 |
10 |
11 | {% endblock content %} -------------------------------------------------------------------------------- /themes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RustAudio/website/c2036237be42a0ef8699ad8e1b193ab12d0ccfbc/themes/.gitkeep --------------------------------------------------------------------------------