Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Changelog

## 1.0.0 (2026-07-02)


### Features

* add electron-log with daily rotation and wire closeDb on quit ([fd7b4fb](https://github.com/StreamlineRadio/Streamline/commit/fd7b4fbda121e7b39e32ca0db25286472035195c))
* add MessageChannelMain audio port and PCM receiver ([36ac148](https://github.com/StreamlineRadio/Streamline/commit/36ac148d5d910137638637fdded95fb769e84b8c))
* add project skeleton and configurations ([51dbb5b](https://github.com/StreamlineRadio/Streamline/commit/51dbb5b942f077bc13f0a3c54023c17ed036234b))
* **app:** wire up status bar, hotkeys, first-run, and default F1-F5/Space bindings ([2a5a2d8](https://github.com/StreamlineRadio/Streamline/commit/2a5a2d85ffd6080f777b5d57edb499162a28591d))
* **audio:** implement AudioWorklet tap processor with ping-pong ring buffer ([bf95be1](https://github.com/StreamlineRadio/Streamline/commit/bf95be13399defb914189b8964c52f019460d667))
* **build:** add postinstall script and externals for better-sqlite3 ([f129233](https://github.com/StreamlineRadio/Streamline/commit/f1292331f784a100ff58670806bea13eaa498a8b))
* **db:** add Drizzle schema, migrations, and DB connection ([8056291](https://github.com/StreamlineRadio/Streamline/commit/8056291418ac89180123dca5da1a3b0fa7b0a2f5))
* **deck,queue:** add deck settings panel and queue folder-picker button ([76d3d52](https://github.com/StreamlineRadio/Streamline/commit/76d3d522773c08533c048d7afa0114ed59c57dd5))
* **deck,queue:** cover art, queue columns, stable ETA, autoplay, file metadata ([067e179](https://github.com/StreamlineRadio/Streamline/commit/067e17939ca411da3a8d35a3393b238cca67602d))
* **deck:** add audio playback, waveform display, dB meter, and fade-out ([dd81352](https://github.com/StreamlineRadio/Streamline/commit/dd813525a18e00cfbef2169b4195ab7a7be637d3))
* **deck:** deck & queue module redesign ([cc285bb](https://github.com/StreamlineRadio/Streamline/commit/cc285bb4017885ce484102b6c0029fd63c197e4c))
* **deck:** fade 3s, unload on end, fix waveforms, song drag-drop ([e8aaaa7](https://github.com/StreamlineRadio/Streamline/commit/e8aaaa75c0af5e7af59cdafb95f6f787299b1077))
* **encoders:** add encoder management UI with start/stop and status tracking ([7f30776](https://github.com/StreamlineRadio/Streamline/commit/7f30776804b7fdff76bdde014a09b27f5615132f))
* **encoders:** add FFmpeg encoder process manager with backoff and IPC handlers ([6a6e9b6](https://github.com/StreamlineRadio/Streamline/commit/6a6e9b6c9b14470f029e46e3d4a7e50fa26b5ec6))
* **encoders:** redesign module + extract reusable component library ([3ad8218](https://github.com/StreamlineRadio/Streamline/commit/3ad821825f1e33c89dd4e858d87688089832cddf))
* **first-run:** add default layout builder and first-run setup ([e0ce0a1](https://github.com/StreamlineRadio/Streamline/commit/e0ce0a1e2c013bdd3624f3680bc18b0098258def))
* **hotkeys:** add per-instance hotkey store and keyboard binder ([7914d6b](https://github.com/StreamlineRadio/Streamline/commit/7914d6b2110499feabc88fe1198cc91d187b3e8d))
* **ipc:** add global handler cleanup to prevent duplicate registrations ([ee903cd](https://github.com/StreamlineRadio/Streamline/commit/ee903cdfc50432f6005a6132805da4fdb1a853bf))
* **library:** add worker_threads scanner with music-metadata and IPC handlers ([ad86ae2](https://github.com/StreamlineRadio/Streamline/commit/ad86ae20ce407c62fe54c85b26ace214d20950e6))
* **local-output:** add output device selector and volume control ([3e528e9](https://github.com/StreamlineRadio/Streamline/commit/3e528e9c9622a73bbeff184974d33f23013fcdcf))
* **main:** confirm quit while on air ([#79](https://github.com/StreamlineRadio/Streamline/issues/79)) ([4465f66](https://github.com/StreamlineRadio/Streamline/commit/4465f66fa0d3e820dbd374edaf32810191f82396))
* **metadata:** add deck metadata selection with z-index tiebreaker ([519e8e2](https://github.com/StreamlineRadio/Streamline/commit/519e8e2f21e3ddb0b89758dda59a1cee77b52e97))
* **microphone:** add mic capture with push-to-talk, lock, and gain ramp ([75b1944](https://github.com/StreamlineRadio/Streamline/commit/75b19441e21ce1cb4f382071e4786e62a510d31a))
* **microphone:** redesigned microphone module, added DbMeter ([aa6ca8b](https://github.com/StreamlineRadio/Streamline/commit/aa6ca8bd8872157eee1e0901d402f12a55376863))
* **mixer:** add master bus with soft-clip and tap worklet connection ([08698fd](https://github.com/StreamlineRadio/Streamline/commit/08698fd0a34f458c09e4b93d8d6bafacc2164dd1))
* **modules:** add instance store and debounced layout persistence ([12a786b](https://github.com/StreamlineRadio/Streamline/commit/12a786b3457666f67f5f1816efcef23ab955b15a))
* **modules:** add module manifest, registry, event bus, and context factory ([82838b6](https://github.com/StreamlineRadio/Streamline/commit/82838b66afd6e988c4e766bf6ba0dd5822fac226))
* nightly releases + channel-aware updater ([#21](https://github.com/StreamlineRadio/Streamline/issues/21)) ([b360912](https://github.com/StreamlineRadio/Streamline/commit/b360912ea8429b4670a784ae38edd1335de30481))
* queue-driven deck autoplay ([#19](https://github.com/StreamlineRadio/Streamline/issues/19)) ([3fed40d](https://github.com/StreamlineRadio/Streamline/commit/3fed40d4d117e9734210fc452bfc2cacd1a07399))
* **queue:** add OS file drag-drop and + Song button ([7918a4f](https://github.com/StreamlineRadio/Streamline/commit/7918a4f07e525bbba68721c71bfb3e7699c023d0))
* **queue:** add queue module with drag-to-reorder and pure rotation algorithm ([21364b6](https://github.com/StreamlineRadio/Streamline/commit/21364b677fb710d5ab78bee9bfc463834f59b275))
* **queue:** multi-queue preload cache, preload-N setting, manual preload ([#76](https://github.com/StreamlineRadio/Streamline/issues/76)) ([160bd22](https://github.com/StreamlineRadio/Streamline/commit/160bd22ba74fcbb15d16d9dac3245d0ccc861e44))
* **renderer:** add AudioContext singleton and MessagePort receiver ([c944e98](https://github.com/StreamlineRadio/Streamline/commit/c944e986f30281ac579cd71e9fa74ede4fe34243))
* **shared:** add module contract, IPC API, PCM message, and IPC channel types ([4af1929](https://github.com/StreamlineRadio/Streamline/commit/4af19293ad2cb01bd6f8a6ae07e98b8e56593c9a))
* **shared:** add Song, EncoderConfig, Layout, Hotkey, and Library types ([8503720](https://github.com/StreamlineRadio/Streamline/commit/850372015bb9cb0738b014f3953b98c5cd4abec4))
* **ui:** add interact.js window manager with drag, resize, z-index, and title rename ([d4f33bb](https://github.com/StreamlineRadio/Streamline/commit/d4f33bbbee69a5af9855d779c1d4f7c911a1dfdd))
* **ui:** add status bar, on-air indicator, and toast notification system ([e6be92c](https://github.com/StreamlineRadio/Streamline/commit/e6be92c604fabfd6f837e7d0c51d9b87665afd23))
* **ui:** disable text selection globally, re-enable for form fields ([22c7e59](https://github.com/StreamlineRadio/Streamline/commit/22c7e59cf7f6cc2d9f3486efd6519c3bdf2c5ec9))
* **ui:** revamp toasts - semantic colors, success type, icons, animations & countdown ([#44](https://github.com/StreamlineRadio/Streamline/issues/44)) ([#78](https://github.com/StreamlineRadio/Streamline/issues/78)) ([2966695](https://github.com/StreamlineRadio/Streamline/commit/2966695788e253a893f6285ee92d097a77d0067f))
* wire full IPC control plane with typed handlers for all subsystems ([366e167](https://github.com/StreamlineRadio/Streamline/commit/366e167c9a669105608aa5ba123bf714a0d034b3))


### Bug Fixes

* add hash validation to LIBRARY_LOAD_WAVEFORM handler ([39a41f3](https://github.com/StreamlineRadio/Streamline/commit/39a41f33cd6a3f8ca5c5ce16138fea9ed6555440))
* **audio-port:** recreate MessageChannel on each renderer reload ([7f5f9c9](https://github.com/StreamlineRadio/Streamline/commit/7f5f9c97b9d6266a7d986961f83f9edb16205cb6))
* **audio:** bypass contextBridge for MessagePort transfer via DOM event ([7fd3e65](https://github.com/StreamlineRadio/Streamline/commit/7fd3e65f4318f67400a76971cecca6fb1fea92eb))
* **audio:** use sampleRate global and add PcmMessage sync comment in tap-processor ([b22e12c](https://github.com/StreamlineRadio/Streamline/commit/b22e12cf2b672545b7625f10c4ea8269dc6534d1))
* **build:** load audio worklet via Vite ?url import instead of hardcoded path ([f86607b](https://github.com/StreamlineRadio/Streamline/commit/f86607bf0ea0a23b6fe826859ab726be8ee3f2c0))
* **build:** replace ESM-only vite-plugin-static-copy with inline plugin ([101c6da](https://github.com/StreamlineRadio/Streamline/commit/101c6da9f1c351a93b84ec2331b62376412630a6))
* change dropoutCount to let and increment on missing encoder consumer ([68b3720](https://github.com/StreamlineRadio/Streamline/commit/68b37205284fb027765a8d9eb6487fe2159acb7e))
* **crossfader:** cleanup rAF, wire setVolume, fix duration units and direction ([7327378](https://github.com/StreamlineRadio/Streamline/commit/732737803e494ff452696a85914df0ac76e492d5))
* **db:** add closeDb, fix nullable booleans, add cascade delete, copy migrations via Vite ([9a74c65](https://github.com/StreamlineRadio/Streamline/commit/9a74c659db52ef1cb3da768c5666ce74638e04aa))
* **DbMeter:** changed DbMeter color to be static with red on top only if the sound is really loud ([bc23dd5](https://github.com/StreamlineRadio/Streamline/commit/bc23dd51324362e81c9f55832bacefacf3fab0f4))
* **deck-audio:** prevent stale onended from unloading after seek ([6ebe70d](https://github.com/StreamlineRadio/Streamline/commit/6ebe70d02d87037022561c1bd27c4a4763a207c5))
* **deck:** fix buffer detach, stale stop, fade reset, frame-rate decay, stereo peaks ([79befb9](https://github.com/StreamlineRadio/Streamline/commit/79befb95e4531dd9f3f501a070176a27f83f8ccf))
* **deck:** set song on file drop, disable controls when empty, show logo ([712942f](https://github.com/StreamlineRadio/Streamline/commit/712942f725a09fcf62e265ab0fa2b573fba16ef9))
* **electron:** copy hoisted native modules and force ABI rebuild when packaging ([#23](https://github.com/StreamlineRadio/Streamline/issues/23)) ([7cb1947](https://github.com/StreamlineRadio/Streamline/commit/7cb1947e4a47ca3ecf79952f27d5ed35d69e777b))
* **encoders:** reject Hz-typed input in the sample-rate combo ([7382bc3](https://github.com/StreamlineRadio/Streamline/commit/7382bc3b53811bfe840b1a00f6892a88aac36aa0))
* **encoders:** strip Svelte reactive Proxy before IPC transfer ([8f7cb0a](https://github.com/StreamlineRadio/Streamline/commit/8f7cb0a5c24b50f6aabe17fffb2c3a53ce56988a))
* **hotkeys:** skip hotkey processing when focus is in an editable element ([2611ffe](https://github.com/StreamlineRadio/Streamline/commit/2611ffe9eb4f7722d8cfe144926edb88c3c2a043))
* **layout:** load full layout with instances on startup and snapshot before IPC save ([399629c](https://github.com/StreamlineRadio/Streamline/commit/399629cfa1ec5cf4df11a145489d3fcf0be61d04))
* **library:** mark songs missing in db when file is deleted ([644a549](https://github.com/StreamlineRadio/Streamline/commit/644a549718f296f6dc0b402316eb2fcb9a18b583))
* **local-output:** targeted disconnect, safe play(), changeDevice error handling ([8b72872](https://github.com/StreamlineRadio/Streamline/commit/8b72872f255f5401ecf4e3384ddf631932676ec4))
* **local-output:** try AudioContext.setSinkId before audioEl fallback ([83a616a](https://github.com/StreamlineRadio/Streamline/commit/83a616ad00f6b57cf1873607ee05c5432168dc84))
* merge encoder, queue, deck, and local-output fixes ([96b30a6](https://github.com/StreamlineRadio/Streamline/commit/96b30a67552bf02e100c2c639ef1d3bda1679af1))
* **microphone:** fix race condition, unhandled rejections, and gain ramp ([08c6b72](https://github.com/StreamlineRadio/Streamline/commit/08c6b721052234fbcb5d37c17508f7a2dc4c6ea2))
* **microphone:** make hear-yourself toggle actually control self-monitoring ([#32](https://github.com/StreamlineRadio/Streamline/issues/32)) ([5644094](https://github.com/StreamlineRadio/Streamline/commit/56440945af65a3dcc3d9b0f88f620f16766a2ce6))
* **microphone:** stop hold-to-talk ping ring from stealing clicks ([#80](https://github.com/StreamlineRadio/Streamline/issues/80)) ([b1e1510](https://github.com/StreamlineRadio/Streamline/commit/b1e1510eceb4de04016126555da5a925f536e7a5))
* **mic:** route self-monitor through monitor bus ([#67](https://github.com/StreamlineRadio/Streamline/issues/67)) ([#77](https://github.com/StreamlineRadio/Streamline/issues/77)) ([10d8bee](https://github.com/StreamlineRadio/Streamline/commit/10d8bee97bc3ba51e88e3fc1e65e4cb01c3f8bf7))
* **mixer:** remove unused softClipEnabled variable and getter ([2dd5961](https://github.com/StreamlineRadio/Streamline/commit/2dd59615bc21a2d726e862ebd3e598c4977c047c))
* **modules:** remove dead off() from event bus, fix non-null assertion, add test reset ([0ab05a8](https://github.com/StreamlineRadio/Streamline/commit/0ab05a8228f231de65e6f891e4f345bad288add9))
* **modules:** use SvelteMap for reactive instances, fix effect timer cleanup ([86b52de](https://github.com/StreamlineRadio/Streamline/commit/86b52dec3a1d5e43ad8c1189489dfcd615444349))
* preload next track to eliminate playout gaps ([#69](https://github.com/StreamlineRadio/Streamline/issues/69)) ([2293099](https://github.com/StreamlineRadio/Streamline/commit/2293099657c90a33124df4df02921178ab17d600))
* **preload:** read transferred MessagePort from event.ports, not callback arg ([1849d68](https://github.com/StreamlineRadio/Streamline/commit/1849d683f0811c54294ada8b44fd6eebc99f8971))
* prune log files to keep last 14 on startup ([5b2a5a0](https://github.com/StreamlineRadio/Streamline/commit/5b2a5a04db0153480bc1fcdbc5b18f0f2d668c12))
* **queue:** clearItems function, immutable sort, reset dragIndex on outer drop ([e8cd1db](https://github.com/StreamlineRadio/Streamline/commit/e8cd1dba8a72ff00753936bc11a3af02039d9ac8))
* remove spurious space in package:linux targets list ([e7ec5cc](https://github.com/StreamlineRadio/Streamline/commit/e7ec5cc32024191ab82abf73fed9739637a1f76d))
* **renderer:** resolve Svelte reactivity and a11y compiler warnings ([e31f8f0](https://github.com/StreamlineRadio/Streamline/commit/e31f8f018da158f6adf030ebb66a43543180a080))
* **renderer:** type sendPcm payload as PcmMessage and close previous port before reassign ([92ed77c](https://github.com/StreamlineRadio/Streamline/commit/92ed77c832d97824b6390cb13abef36c6ee65fda))
* **shared:** remove duplicate system channels, add hotkey channels, improve exhaustiveness test ([40aa3d4](https://github.com/StreamlineRadio/Streamline/commit/40aa3d47e5a0e0e886a1e98b515e7015833deaf8))
* **ui:** prevent window resizing from modal interactions ([aa5192e](https://github.com/StreamlineRadio/Streamline/commit/aa5192ec31bfeccbb83c5529d44c690c1dbdd2fc))
* **ui:** remove redundant Layout cast in WindowManager ([4d47a17](https://github.com/StreamlineRadio/Streamline/commit/4d47a17165e17c545fafc1b89108e2a2cd3d184f))
* validate openExternal URLs, guard waveform hash, fix macOS quit behavior ([3a92008](https://github.com/StreamlineRadio/Streamline/commit/3a92008c75baf148180a0fa235e8ad7bd9c0a9dd))
* **windows:** enforce min-width/min-height to prevent scrollbars ([4449f36](https://github.com/StreamlineRadio/Streamline/commit/4449f36ab0b4f1d05b3515680fc721f37d27dd77))
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "streamline",
"version": "0.0.1",
"version": "1.0.0",
"private": true,
"scripts": {
"rebuild:native": "pnpm --filter streamline exec electron-rebuild -f -w better-sqlite3",
Expand Down