diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 11534685..b2ff0d9d 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -49,7 +49,6 @@ jobs:
         if: matrix.os == 'windows-latest'
         uses: actions-rs/toolchain@v1
         with:
-          profile: minimal
           toolchain: stable-gnu
           target: x86_64-pc-windows-gnu
           override: true
@@ -65,12 +64,6 @@ jobs:
         with:
           command: build
           args: --all --no-default-features --features ${{ matrix.feature }}
-      # Freeup some space for Windows tests
-      - name: Clean target dir (Windows)
-        if: matrix.os == 'windows-latest'
-        uses: actions-rs/cargo@v1
-        with:
-          command: clean
       - uses: actions-rs/cargo@v1
         with:
           command: test
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 210d352f..06fc51e7 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -50,7 +50,6 @@ jobs:
         if: matrix.os == 'windows-latest'
         uses: actions-rs/toolchain@v1
         with:
-          profile: minimal
           toolchain: stable-gnu
           target: x86_64-pc-windows-gnu
           override: true
@@ -66,12 +65,6 @@ jobs:
         with:
           command: build
           args: --all --no-default-features --features ${{ matrix.feature }}
-      # Freeup some space for Windows tests
-      - name: Clean target dir (Windows)
-        if: matrix.os == 'windows-latest'
-        uses: actions-rs/cargo@v1
-        with:
-          command: clean
       - uses: actions-rs/cargo@v1
         with:
           command: test
diff --git a/simulations/Cargo.toml b/simulations/Cargo.toml
index 88ecdf10..13f15958 100644
--- a/simulations/Cargo.toml
+++ b/simulations/Cargo.toml
@@ -28,7 +28,7 @@ nomos-core = { path = "../nomos-core" }
 nomos-consensus = { path = "../nomos-services/consensus" }
 once_cell = "1.17"
 parking_lot = "0.12"
-polars = { version = "0.27", features = ["serde", "object", "json", "csv-file", "parquet", "dtype-struct"] }
+polars = { version = "0.27", features = ["serde", "object", "json", "csv-file", "parquet", "dtype-struct"], optional = true }
 rand = { version = "0.8", features = ["small_rng"] }
 rayon = "1.7"
 scopeguard = "1"
@@ -43,4 +43,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "tracing-log"]
 getrandom = { version = "0.2", features = ["js"] }
 
 [dev-dependencies]
-tempfile = "3.4"
\ No newline at end of file
+tempfile = "3.4"
+
+[features]
+polars = ["dep:polars"]
diff --git a/simulations/src/bin/app/main.rs b/simulations/src/bin/app/main.rs
index 302b83ec..ae1749ae 100644
--- a/simulations/src/bin/app/main.rs
+++ b/simulations/src/bin/app/main.rs
@@ -23,9 +23,9 @@ use simulations::node::carnot::{CarnotRecord, CarnotSettings, CarnotState};
 use simulations::node::{NodeId, NodeIdExt};
 use simulations::output_processors::Record;
 use simulations::runner::{BoxedNode, SimulationRunnerHandle};
-use simulations::streaming::{
-    io::IOSubscriber, naive::NaiveSubscriber, polars::PolarsSubscriber, StreamType,
-};
+#[cfg(feature = "polars")]
+use simulations::streaming::polars::PolarsSubscriber;
+use simulations::streaming::{io::IOSubscriber, naive::NaiveSubscriber, StreamType};
 // internal
 use simulations::{runner::SimulationRunner, settings::SimulationSettings};
 mod log;
@@ -163,6 +163,7 @@ where
             let settings = stream_settings.unwrap_io();
             runner.simulate_and_subscribe::<IOSubscriber<CarnotRecord>>(settings)?
         }
+        #[cfg(feature = "polars")]
         Some(StreamType::Polars) => {
             let settings = stream_settings.unwrap_polars();
             runner.simulate_and_subscribe::<PolarsSubscriber<CarnotRecord>>(settings)?
diff --git a/simulations/src/bin/app/overlay_node.rs b/simulations/src/bin/app/overlay_node.rs
index 7389d671..ad7f4efb 100644
--- a/simulations/src/bin/app/overlay_node.rs
+++ b/simulations/src/bin/app/overlay_node.rs
@@ -25,6 +25,7 @@ pub fn to_overlay_node<R: Rng>(
         simulations::streaming::StreamSettings::IO(_) => {
             simulations::streaming::SubscriberFormat::Csv
         }
+        #[cfg(feature = "polars")]
         simulations::streaming::StreamSettings::Polars(p) => p.format,
     };
     match &settings.overlay_settings {
diff --git a/simulations/src/node/carnot/timeout.rs b/simulations/src/node/carnot/timeout.rs
index c3fb67ba..0e5683c8 100644
--- a/simulations/src/node/carnot/timeout.rs
+++ b/simulations/src/node/carnot/timeout.rs
@@ -1,5 +1,8 @@
 use consensus_engine::View;
+#[cfg(feature = "polars")]
 use polars::export::ahash::HashMap;
+#[cfg(not(feature = "polars"))]
+use std::collections::HashMap;
 use std::time::Duration;
 
 pub(crate) struct TimeoutHandler {
diff --git a/simulations/src/streaming/mod.rs b/simulations/src/streaming/mod.rs
index 2ca6d79f..946cf940 100644
--- a/simulations/src/streaming/mod.rs
+++ b/simulations/src/streaming/mod.rs
@@ -11,6 +11,7 @@ use crate::output_processors::{Record, RecordType, Runtime};
 
 pub mod io;
 pub mod naive;
+#[cfg(feature = "polars")]
 pub mod polars;
 pub mod runtime_subscriber;
 pub mod settings_subscriber;
@@ -83,6 +84,7 @@ pub enum StreamType {
     #[default]
     IO,
     Naive,
+    #[cfg(feature = "polars")]
     Polars,
 }
 
@@ -93,6 +95,7 @@ impl FromStr for StreamType {
         match s.trim().to_ascii_lowercase().as_str() {
             "io" => Ok(Self::IO),
             "naive" => Ok(Self::Naive),
+            #[cfg(feature = "polars")]
             "polars" => Ok(Self::Polars),
             tag => Err(format!(
                 "Invalid {tag} streaming type, only [naive, polars] are supported",
@@ -116,6 +119,7 @@ impl<'de> serde::Deserialize<'de> for StreamType {
 pub enum StreamSettings {
     Naive(naive::NaiveSettings),
     IO(io::IOStreamSettings),
+    #[cfg(feature = "polars")]
     Polars(polars::PolarsSettings),
 }
 
@@ -140,6 +144,7 @@ impl StreamSettings {
         }
     }
 
+    #[cfg(feature = "polars")]
     pub fn unwrap_polars(self) -> polars::PolarsSettings {
         match self {
             StreamSettings::Polars(settings) => settings,