diff --git a/.gitignore b/.gitignore
index be3d44f6d5fe02e8517f34a02305161496d55de9..9b06c6b1d2000ef1f32d00778b7082175bf8b419 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,4 @@ Cargo.lock
 
 /target
 /res/roms.prop
-/examples/*/target
+/frontends/*/target
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 28d50c7570bf528b34be105ebecbb858c36767a4..de0765a43f18cec9830c579a1c85de0ed5c7983b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -43,18 +43,18 @@ build-wasm:
     - rustup override set $RUST_VERSION
     - rustc --version
     - cargo install wasm-pack
-    - wasm-pack build --release --target=web --out-dir=examples/web/lib -- --features wasm
-    - cd examples/web && npm install && npm run build
+    - wasm-pack build --release --target=web --out-dir=frontends/web/lib -- --features wasm
+    - cd frontends/web && npm install && npm run build
   artifacts:
     paths:
-      - examples/web/dist
-      - examples/web/lib
+      - frontends/web/dist
+      - frontends/web/lib
     expire_in: 1 day
 
 deploy-netlify-preview:
   stage: deploy
   script:
-    - cd examples/web/dist
+    - cd frontends/web/dist
     - cp -rp ../static/* .
     - npm_config_yes=true npx --package=netlify-cli netlify deploy --dir=.
   dependencies:
@@ -65,7 +65,7 @@ deploy-netlify-preview:
 deploy-netlify-prod:
   stage: deploy
   script:
-    - cd examples/web/dist
+    - cd frontends/web/dist
     - cp -rp ../static/* .
     - npm_config_yes=true npx --package=netlify-cli netlify deploy --dir=. --prod
   dependencies:
@@ -76,7 +76,7 @@ deploy-netlify-prod:
 deploy-cloudfare-master:
   stage: deploy
   script:
-    - cd examples/web/dist
+    - cd frontends/web/dist
     - cp -rp ../static/* .
     - npm_config_yes=true npx wrangler pages publish . --project-name=boytacean --branch master
   dependencies:
@@ -87,7 +87,7 @@ deploy-cloudfare-master:
 deploy-cloudfare-stable:
   stage: deploy
   script:
-    - cd examples/web/dist
+    - cd frontends/web/dist
     - cp -rp ../static/* .
     - npm_config_yes=true npx wrangler pages publish . --project-name=boytacean --branch stable
   dependencies:
@@ -98,7 +98,7 @@ deploy-cloudfare-stable:
 deploy-cloudfare-prod:
   stage: deploy
   script:
-    - cd examples/web/dist
+    - cd frontends/web/dist
     - cp -rp ../static/* .
     - npm_config_yes=true npx wrangler pages publish . --project-name=boytacean --branch prod
   dependencies:
@@ -120,7 +120,7 @@ deploy-npm:
   stage: deploy
   script:
     - echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
-    - cd examples/web/lib && npm publish
+    - cd frontends/web/lib && npm publish
   dependencies:
     - build-wasm
   only:
diff --git a/Cargo.toml b/Cargo.toml
index 7c19d0f64eb38d90ecf6f9afdd8b77af2f36ab7b..667af38302611c39241a846a9df6f4fd2bafdca7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -26,5 +26,5 @@ opt-level = 3
 [workspace]
 members = [
     ".",
-    "examples/sdl",
+    "frontends/sdl",
 ]
diff --git a/README.md b/README.md
index b7d28c825f15e23f268063a41b092ab688211f26..2fc10a883909cae6cc4fbcc7090084484843e65b 100644
--- a/README.md
+++ b/README.md
@@ -44,8 +44,8 @@ wasm-pack build --release --target=nodejs -- --features wasm
 
 ```bash
 cargo install wasm-pack
-wasm-pack build --release --target=web --out-dir=examples/web/lib -- --features wasm
-cd examples/web
+wasm-pack build --release --target=web --out-dir=frontends/web/lib -- --features wasm
+cd frontends/web
 npm install && npm run build
 cd dist && python3 -m http.server
 ```
diff --git a/examples/sdl/Cargo.toml b/frontends/sdl/Cargo.toml
similarity index 100%
rename from examples/sdl/Cargo.toml
rename to frontends/sdl/Cargo.toml
diff --git a/examples/sdl/src/data.rs b/frontends/sdl/src/data.rs
similarity index 100%
rename from examples/sdl/src/data.rs
rename to frontends/sdl/src/data.rs
diff --git a/examples/sdl/src/main.rs b/frontends/sdl/src/main.rs
similarity index 100%
rename from examples/sdl/src/main.rs
rename to frontends/sdl/src/main.rs
diff --git a/examples/sdl/src/util.rs b/frontends/sdl/src/util.rs
similarity index 100%
rename from examples/sdl/src/util.rs
rename to frontends/sdl/src/util.rs
diff --git a/examples/web/.gitignore b/frontends/web/.gitignore
similarity index 100%
rename from examples/web/.gitignore
rename to frontends/web/.gitignore
diff --git a/examples/web/.parcelrc b/frontends/web/.parcelrc
similarity index 100%
rename from examples/web/.parcelrc
rename to frontends/web/.parcelrc
diff --git a/examples/web/.prettierrc b/frontends/web/.prettierrc
similarity index 100%
rename from examples/web/.prettierrc
rename to frontends/web/.prettierrc
diff --git a/examples/web/gb.ts b/frontends/web/gb.ts
similarity index 100%
rename from examples/web/gb.ts
rename to frontends/web/gb.ts
diff --git a/examples/web/index.css b/frontends/web/index.css
similarity index 100%
rename from examples/web/index.css
rename to frontends/web/index.css
diff --git a/examples/web/index.html b/frontends/web/index.html
similarity index 100%
rename from examples/web/index.html
rename to frontends/web/index.html
diff --git a/examples/web/index.ts b/frontends/web/index.ts
similarity index 100%
rename from examples/web/index.ts
rename to frontends/web/index.ts
diff --git a/examples/web/package.json b/frontends/web/package.json
similarity index 100%
rename from examples/web/package.json
rename to frontends/web/package.json
diff --git a/examples/web/palettes.tsx b/frontends/web/palettes.tsx
similarity index 100%
rename from examples/web/palettes.tsx
rename to frontends/web/palettes.tsx
diff --git a/examples/web/react/app.css b/frontends/web/react/app.css
similarity index 100%
rename from examples/web/react/app.css
rename to frontends/web/react/app.css
diff --git a/examples/web/react/app.tsx b/frontends/web/react/app.tsx
similarity index 100%
rename from examples/web/react/app.tsx
rename to frontends/web/react/app.tsx
diff --git a/examples/web/react/components/button-container/button-container.css b/frontends/web/react/components/button-container/button-container.css
similarity index 100%
rename from examples/web/react/components/button-container/button-container.css
rename to frontends/web/react/components/button-container/button-container.css
diff --git a/examples/web/react/components/button-container/button-container.tsx b/frontends/web/react/components/button-container/button-container.tsx
similarity index 100%
rename from examples/web/react/components/button-container/button-container.tsx
rename to frontends/web/react/components/button-container/button-container.tsx
diff --git a/examples/web/react/components/button-increment/button-increment.css b/frontends/web/react/components/button-increment/button-increment.css
similarity index 100%
rename from examples/web/react/components/button-increment/button-increment.css
rename to frontends/web/react/components/button-increment/button-increment.css
diff --git a/examples/web/react/components/button-increment/button-increment.tsx b/frontends/web/react/components/button-increment/button-increment.tsx
similarity index 100%
rename from examples/web/react/components/button-increment/button-increment.tsx
rename to frontends/web/react/components/button-increment/button-increment.tsx
diff --git a/examples/web/react/components/button-switch/button-switch.tsx b/frontends/web/react/components/button-switch/button-switch.tsx
similarity index 100%
rename from examples/web/react/components/button-switch/button-switch.tsx
rename to frontends/web/react/components/button-switch/button-switch.tsx
diff --git a/examples/web/react/components/button/button.css b/frontends/web/react/components/button/button.css
similarity index 100%
rename from examples/web/react/components/button/button.css
rename to frontends/web/react/components/button/button.css
diff --git a/examples/web/react/components/button/button.tsx b/frontends/web/react/components/button/button.tsx
similarity index 100%
rename from examples/web/react/components/button/button.tsx
rename to frontends/web/react/components/button/button.tsx
diff --git a/examples/web/react/components/canvas/canvas.css b/frontends/web/react/components/canvas/canvas.css
similarity index 100%
rename from examples/web/react/components/canvas/canvas.css
rename to frontends/web/react/components/canvas/canvas.css
diff --git a/examples/web/react/components/canvas/canvas.tsx b/frontends/web/react/components/canvas/canvas.tsx
similarity index 100%
rename from examples/web/react/components/canvas/canvas.tsx
rename to frontends/web/react/components/canvas/canvas.tsx
diff --git a/examples/web/react/components/display/display.css b/frontends/web/react/components/display/display.css
similarity index 100%
rename from examples/web/react/components/display/display.css
rename to frontends/web/react/components/display/display.css
diff --git a/examples/web/react/components/display/display.tsx b/frontends/web/react/components/display/display.tsx
similarity index 100%
rename from examples/web/react/components/display/display.tsx
rename to frontends/web/react/components/display/display.tsx
diff --git a/examples/web/react/components/display/minimise.svg b/frontends/web/react/components/display/minimise.svg
similarity index 100%
rename from examples/web/react/components/display/minimise.svg
rename to frontends/web/react/components/display/minimise.svg
diff --git a/examples/web/react/components/footer/footer.css b/frontends/web/react/components/footer/footer.css
similarity index 100%
rename from examples/web/react/components/footer/footer.css
rename to frontends/web/react/components/footer/footer.css
diff --git a/examples/web/react/components/footer/footer.tsx b/frontends/web/react/components/footer/footer.tsx
similarity index 100%
rename from examples/web/react/components/footer/footer.tsx
rename to frontends/web/react/components/footer/footer.tsx
diff --git a/examples/web/react/components/index.ts b/frontends/web/react/components/index.ts
similarity index 100%
rename from examples/web/react/components/index.ts
rename to frontends/web/react/components/index.ts
diff --git a/examples/web/react/components/info/info.css b/frontends/web/react/components/info/info.css
similarity index 100%
rename from examples/web/react/components/info/info.css
rename to frontends/web/react/components/info/info.css
diff --git a/examples/web/react/components/info/info.tsx b/frontends/web/react/components/info/info.tsx
similarity index 100%
rename from examples/web/react/components/info/info.tsx
rename to frontends/web/react/components/info/info.tsx
diff --git a/examples/web/react/components/keyboard-chip8/keyboard-chip8.css b/frontends/web/react/components/keyboard-chip8/keyboard-chip8.css
similarity index 100%
rename from examples/web/react/components/keyboard-chip8/keyboard-chip8.css
rename to frontends/web/react/components/keyboard-chip8/keyboard-chip8.css
diff --git a/examples/web/react/components/keyboard-chip8/keyboard-chip8.tsx b/frontends/web/react/components/keyboard-chip8/keyboard-chip8.tsx
similarity index 100%
rename from examples/web/react/components/keyboard-chip8/keyboard-chip8.tsx
rename to frontends/web/react/components/keyboard-chip8/keyboard-chip8.tsx
diff --git a/examples/web/react/components/keyboard-gb/keyboard-gb.css b/frontends/web/react/components/keyboard-gb/keyboard-gb.css
similarity index 100%
rename from examples/web/react/components/keyboard-gb/keyboard-gb.css
rename to frontends/web/react/components/keyboard-gb/keyboard-gb.css
diff --git a/examples/web/react/components/keyboard-gb/keyboard-gb.tsx b/frontends/web/react/components/keyboard-gb/keyboard-gb.tsx
similarity index 100%
rename from examples/web/react/components/keyboard-gb/keyboard-gb.tsx
rename to frontends/web/react/components/keyboard-gb/keyboard-gb.tsx
diff --git a/examples/web/react/components/link/link.css b/frontends/web/react/components/link/link.css
similarity index 100%
rename from examples/web/react/components/link/link.css
rename to frontends/web/react/components/link/link.css
diff --git a/examples/web/react/components/link/link.tsx b/frontends/web/react/components/link/link.tsx
similarity index 100%
rename from examples/web/react/components/link/link.tsx
rename to frontends/web/react/components/link/link.tsx
diff --git a/examples/web/react/components/modal/close.svg b/frontends/web/react/components/modal/close.svg
similarity index 100%
rename from examples/web/react/components/modal/close.svg
rename to frontends/web/react/components/modal/close.svg
diff --git a/examples/web/react/components/modal/modal.css b/frontends/web/react/components/modal/modal.css
similarity index 100%
rename from examples/web/react/components/modal/modal.css
rename to frontends/web/react/components/modal/modal.css
diff --git a/examples/web/react/components/modal/modal.tsx b/frontends/web/react/components/modal/modal.tsx
similarity index 100%
rename from examples/web/react/components/modal/modal.tsx
rename to frontends/web/react/components/modal/modal.tsx
diff --git a/examples/web/react/components/overlay/overlay.css b/frontends/web/react/components/overlay/overlay.css
similarity index 100%
rename from examples/web/react/components/overlay/overlay.css
rename to frontends/web/react/components/overlay/overlay.css
diff --git a/examples/web/react/components/overlay/overlay.tsx b/frontends/web/react/components/overlay/overlay.tsx
similarity index 100%
rename from examples/web/react/components/overlay/overlay.tsx
rename to frontends/web/react/components/overlay/overlay.tsx
diff --git a/examples/web/react/components/overlay/sunglasses.png b/frontends/web/react/components/overlay/sunglasses.png
similarity index 100%
rename from examples/web/react/components/overlay/sunglasses.png
rename to frontends/web/react/components/overlay/sunglasses.png
diff --git a/examples/web/react/components/pair/pair.css b/frontends/web/react/components/pair/pair.css
similarity index 100%
rename from examples/web/react/components/pair/pair.css
rename to frontends/web/react/components/pair/pair.css
diff --git a/examples/web/react/components/pair/pair.tsx b/frontends/web/react/components/pair/pair.tsx
similarity index 100%
rename from examples/web/react/components/pair/pair.tsx
rename to frontends/web/react/components/pair/pair.tsx
diff --git a/examples/web/react/components/panel-split/panel-split.css b/frontends/web/react/components/panel-split/panel-split.css
similarity index 100%
rename from examples/web/react/components/panel-split/panel-split.css
rename to frontends/web/react/components/panel-split/panel-split.css
diff --git a/examples/web/react/components/panel-split/panel-split.tsx b/frontends/web/react/components/panel-split/panel-split.tsx
similarity index 100%
rename from examples/web/react/components/panel-split/panel-split.tsx
rename to frontends/web/react/components/panel-split/panel-split.tsx
diff --git a/examples/web/react/components/paragraph/paragraph.css b/frontends/web/react/components/paragraph/paragraph.css
similarity index 100%
rename from examples/web/react/components/paragraph/paragraph.css
rename to frontends/web/react/components/paragraph/paragraph.css
diff --git a/examples/web/react/components/paragraph/paragraph.tsx b/frontends/web/react/components/paragraph/paragraph.tsx
similarity index 100%
rename from examples/web/react/components/paragraph/paragraph.tsx
rename to frontends/web/react/components/paragraph/paragraph.tsx
diff --git a/examples/web/react/components/registers-gb/registers-gb.css b/frontends/web/react/components/registers-gb/registers-gb.css
similarity index 100%
rename from examples/web/react/components/registers-gb/registers-gb.css
rename to frontends/web/react/components/registers-gb/registers-gb.css
diff --git a/examples/web/react/components/registers-gb/registers-gb.tsx b/frontends/web/react/components/registers-gb/registers-gb.tsx
similarity index 100%
rename from examples/web/react/components/registers-gb/registers-gb.tsx
rename to frontends/web/react/components/registers-gb/registers-gb.tsx
diff --git a/examples/web/react/components/section/section.css b/frontends/web/react/components/section/section.css
similarity index 100%
rename from examples/web/react/components/section/section.css
rename to frontends/web/react/components/section/section.css
diff --git a/examples/web/react/components/section/section.tsx b/frontends/web/react/components/section/section.tsx
similarity index 100%
rename from examples/web/react/components/section/section.tsx
rename to frontends/web/react/components/section/section.tsx
diff --git a/examples/web/react/components/tiles/tiles.css b/frontends/web/react/components/tiles/tiles.css
similarity index 100%
rename from examples/web/react/components/tiles/tiles.css
rename to frontends/web/react/components/tiles/tiles.css
diff --git a/examples/web/react/components/tiles/tiles.tsx b/frontends/web/react/components/tiles/tiles.tsx
similarity index 100%
rename from examples/web/react/components/tiles/tiles.tsx
rename to frontends/web/react/components/tiles/tiles.tsx
diff --git a/examples/web/react/components/title/title.css b/frontends/web/react/components/title/title.css
similarity index 100%
rename from examples/web/react/components/title/title.css
rename to frontends/web/react/components/title/title.css
diff --git a/examples/web/react/components/title/title.tsx b/frontends/web/react/components/title/title.tsx
similarity index 100%
rename from examples/web/react/components/title/title.tsx
rename to frontends/web/react/components/title/title.tsx
diff --git a/examples/web/react/components/toast/toast.css b/frontends/web/react/components/toast/toast.css
similarity index 100%
rename from examples/web/react/components/toast/toast.css
rename to frontends/web/react/components/toast/toast.css
diff --git a/examples/web/react/components/toast/toast.tsx b/frontends/web/react/components/toast/toast.tsx
similarity index 100%
rename from examples/web/react/components/toast/toast.tsx
rename to frontends/web/react/components/toast/toast.tsx
diff --git a/examples/web/react/structs.ts b/frontends/web/react/structs.ts
similarity index 100%
rename from examples/web/react/structs.ts
rename to frontends/web/react/structs.ts
diff --git a/examples/web/res/bike.svg b/frontends/web/res/bike.svg
similarity index 100%
rename from examples/web/res/bike.svg
rename to frontends/web/res/bike.svg
diff --git a/examples/web/res/bolt.svg b/frontends/web/res/bolt.svg
similarity index 100%
rename from examples/web/res/bolt.svg
rename to frontends/web/res/bolt.svg
diff --git a/examples/web/res/brightness.svg b/frontends/web/res/brightness.svg
similarity index 100%
rename from examples/web/res/brightness.svg
rename to frontends/web/res/brightness.svg
diff --git a/examples/web/res/bug.svg b/frontends/web/res/bug.svg
similarity index 100%
rename from examples/web/res/bug.svg
rename to frontends/web/res/bug.svg
diff --git a/examples/web/res/close.svg b/frontends/web/res/close.svg
similarity index 100%
rename from examples/web/res/close.svg
rename to frontends/web/res/close.svg
diff --git a/examples/web/res/colours.svg b/frontends/web/res/colours.svg
similarity index 100%
rename from examples/web/res/colours.svg
rename to frontends/web/res/colours.svg
diff --git a/examples/web/res/dialpad.svg b/frontends/web/res/dialpad.svg
similarity index 100%
rename from examples/web/res/dialpad.svg
rename to frontends/web/res/dialpad.svg
diff --git a/examples/web/res/icon.png b/frontends/web/res/icon.png
similarity index 100%
rename from examples/web/res/icon.png
rename to frontends/web/res/icon.png
diff --git a/examples/web/res/info.svg b/frontends/web/res/info.svg
similarity index 100%
rename from examples/web/res/info.svg
rename to frontends/web/res/info.svg
diff --git a/examples/web/res/marker.svg b/frontends/web/res/marker.svg
similarity index 100%
rename from examples/web/res/marker.svg
rename to frontends/web/res/marker.svg
diff --git a/examples/web/res/maximise.svg b/frontends/web/res/maximise.svg
similarity index 100%
rename from examples/web/res/maximise.svg
rename to frontends/web/res/maximise.svg
diff --git a/examples/web/res/minimise.svg b/frontends/web/res/minimise.svg
similarity index 100%
rename from examples/web/res/minimise.svg
rename to frontends/web/res/minimise.svg
diff --git a/examples/web/res/pause.svg b/frontends/web/res/pause.svg
similarity index 100%
rename from examples/web/res/pause.svg
rename to frontends/web/res/pause.svg
diff --git a/examples/web/res/play.svg b/frontends/web/res/play.svg
similarity index 100%
rename from examples/web/res/play.svg
rename to frontends/web/res/play.svg
diff --git a/examples/web/res/reset.svg b/frontends/web/res/reset.svg
similarity index 100%
rename from examples/web/res/reset.svg
rename to frontends/web/res/reset.svg
diff --git a/examples/web/res/storm.png b/frontends/web/res/storm.png
similarity index 100%
rename from examples/web/res/storm.png
rename to frontends/web/res/storm.png
diff --git a/examples/web/res/sunglasses.png b/frontends/web/res/sunglasses.png
similarity index 100%
rename from examples/web/res/sunglasses.png
rename to frontends/web/res/sunglasses.png
diff --git a/examples/web/res/thunder.png b/frontends/web/res/thunder.png
similarity index 100%
rename from examples/web/res/thunder.png
rename to frontends/web/res/thunder.png
diff --git a/examples/web/res/upload.svg b/frontends/web/res/upload.svg
similarity index 100%
rename from examples/web/res/upload.svg
rename to frontends/web/res/upload.svg
diff --git a/examples/web/static/_headers b/frontends/web/static/_headers
similarity index 100%
rename from examples/web/static/_headers
rename to frontends/web/static/_headers
diff --git a/examples/web/static/robots.txt b/frontends/web/static/robots.txt
similarity index 100%
rename from examples/web/static/robots.txt
rename to frontends/web/static/robots.txt
diff --git a/examples/web/tsconfig.json b/frontends/web/tsconfig.json
similarity index 100%
rename from examples/web/tsconfig.json
rename to frontends/web/tsconfig.json
diff --git a/examples/web/util.ts b/frontends/web/util.ts
similarity index 100%
rename from examples/web/util.ts
rename to frontends/web/util.ts