diff --git a/packages/core/index.mjs b/packages/core/index.mjs
index 49b7de19..bb45275b 100644
--- a/packages/core/index.mjs
+++ b/packages/core/index.mjs
@@ -4,10 +4,10 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-export * from './controls.mjs';
+import controls from './controls.mjs';
export * from './euclid.mjs';
import Fraction from './fraction.mjs';
-export { Fraction };
+export { Fraction, controls };
export * from './hap.mjs';
export * from './pattern.mjs';
export * from './signal.mjs';
diff --git a/repl/src/App.jsx b/repl/src/App.jsx
index a89c7a8f..54510857 100644
--- a/repl/src/App.jsx
+++ b/repl/src/App.jsx
@@ -4,7 +4,6 @@ Copyright (C) 2022 Strudel contributors - see .
*/
-import controls from '@strudel.cycles/core/controls.mjs';
import { evalScope, evaluate } from '@strudel.cycles/eval';
import { CodeMirror, cx, flash, useHighlighting, useRepl, useWebMidi } from '@strudel.cycles/react';
import { cleanupDraw, cleanupUi, Tone } from '@strudel.cycles/tone';
@@ -15,6 +14,7 @@ import * as tunes from './tunes.mjs';
import { prebake } from './prebake.mjs';
import * as WebDirt from 'WebDirt';
import { resetLoadedSamples, getAudioContext } from '@strudel.cycles/webaudio';
+import { controls } from '@strudel.cycles/core';
import { createClient } from '@supabase/supabase-js';
import { nanoid } from 'nanoid';
@@ -26,7 +26,7 @@ const supabase = createClient(
evalScope(
Tone,
- controls,
+ controls, // sadly, this cannot be exported from core direclty
{ WebDirt },
import('@strudel.cycles/core'),
import('@strudel.cycles/tone'),