diff --git a/eslint.config.mjs b/eslint.config.mjs
index e7fcdc1cd..708609924 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -75,6 +75,13 @@ const config = tsLintConfig(
 			"@typescript-eslint/no-dynamic-delete": "off",
 			"@typescript-eslint/no-inferrable-types": "off",
 			"@typescript-eslint/no-floating-promises": "error",
+			"@typescript-eslint/consistent-type-imports": [
+				"error",
+				{
+					prefer: "type-imports",
+					fixStyle: "inline-type-imports",
+				},
+			],
 			"no-unused-vars": "off",
 			"unused-imports/no-unused-imports": "error",
 			"prefer-const": "error",
@@ -96,6 +103,10 @@ const config = tsLintConfig(
 				},
 			],
 			"import/no-cycle": "error",
+			"import/no-self-import": "error",
+			"import/no-duplicates": "error",
+			"import/no-named-default": "error",
+			"import/no-webpack-loader-syntax": "error",
 		},
 	}
 );
diff --git a/examples/grid/src/index.ts b/examples/grid/src/index.ts
index 31cc3d656..c13be2c8e 100644
--- a/examples/grid/src/index.ts
+++ b/examples/grid/src/index.ts
@@ -1,5 +1,5 @@
 import { DRPNode } from "@ts-drp/node";
-import { enableTracing, IMetrics, OpentelemetryMetrics } from "@ts-drp/tracer";
+import { enableTracing, type IMetrics, OpentelemetryMetrics } from "@ts-drp/tracer";
 
 import { env } from "./env";
 import { Grid } from "./objects/grid";
diff --git a/examples/grid/src/state.ts b/examples/grid/src/state.ts
index 73e43fc6a..f2cdee1b7 100644
--- a/examples/grid/src/state.ts
+++ b/examples/grid/src/state.ts
@@ -1,7 +1,7 @@
 import { DRPNode } from "@ts-drp/node";
-import { DRPObject } from "@ts-drp/object";
+import { type DRPObject } from "@ts-drp/object";
 
-import { Grid } from "./objects/grid";
+import { type Grid } from "./objects/grid";
 
 interface GridState {
 	node: DRPNode;
diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts
index 20c917973..368493399 100644
--- a/packages/logger/src/index.ts
+++ b/packages/logger/src/index.ts
@@ -1,4 +1,4 @@
-import { LoggerOptions } from "@ts-drp/types";
+import { type LoggerOptions } from "@ts-drp/types";
 import loglevel from "loglevel";
 import prefix from "loglevel-plugin-prefix";
 
diff --git a/packages/network/tests/network.test.ts b/packages/network/tests/network.test.ts
index 04e1564ad..b454f25ab 100644
--- a/packages/network/tests/network.test.ts
+++ b/packages/network/tests/network.test.ts
@@ -1,11 +1,16 @@
-import { GossipSub, MeshPeer } from "@chainsafe/libp2p-gossipsub";
-import { Connection, IdentifyResult, Libp2p, SubscriptionChangeData } from "@libp2p/interface";
+import { type GossipSub, type MeshPeer } from "@chainsafe/libp2p-gossipsub";
+import {
+	type Connection,
+	type IdentifyResult,
+	type Libp2p,
+	type SubscriptionChangeData,
+} from "@libp2p/interface";
 import { loadConfig } from "@ts-drp/node/src/config.js";
 import { Message } from "@ts-drp/types";
 import { raceEvent } from "race-event";
 import { beforeAll, describe, expect, test, afterAll } from "vitest";
 
-import { DRPNetworkNode, DRPNetworkNodeConfig, streamToUint8Array } from "../src/node.js";
+import { DRPNetworkNode, type DRPNetworkNodeConfig, streamToUint8Array } from "../src/node.js";
 
 describe("DRPNetworkNode can connect & send messages", () => {
 	const controller = new AbortController();
diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts
index 0ef441adb..8108cf19a 100644
--- a/packages/node/src/handlers.ts
+++ b/packages/node/src/handlers.ts
@@ -4,12 +4,12 @@ import { peerIdFromPublicKey } from "@libp2p/peer-id";
 import { Signature } from "@noble/secp256k1";
 import { streamToUint8Array } from "@ts-drp/network";
 import { type ACL, type DRPObject, HashGraph } from "@ts-drp/object";
-import { type Vertex } from "@ts-drp/types";
 import {
-	AggregatedAttestation,
-	Attestation,
+	type Vertex,
+	type AggregatedAttestation,
+	type Attestation,
 	AttestationUpdate,
-	DRPState,
+	type DRPState,
 	FetchState,
 	FetchStateResponse,
 	Message,
diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts
index 0ef259e58..f58a0890a 100644
--- a/packages/node/src/index.ts
+++ b/packages/node/src/index.ts
@@ -1,10 +1,10 @@
 import type { GossipsubMessage } from "@chainsafe/libp2p-gossipsub";
 import type { EventCallback, IncomingStreamData, StreamHandler } from "@libp2p/interface";
-import { KeychainConfig, Keychain } from "@ts-drp/keychain";
+import { type KeychainConfig, Keychain } from "@ts-drp/keychain";
 import { Logger } from "@ts-drp/logger";
 import { DRPNetworkNode, type DRPNetworkNodeConfig } from "@ts-drp/network";
 import { type ACL, type DRP, DRPObject } from "@ts-drp/object";
-import { IMetrics } from "@ts-drp/tracer";
+import { type IMetrics } from "@ts-drp/tracer";
 import { Message, MessageType, type LoggerOptions } from "@ts-drp/types";
 
 import { drpMessagesHandler } from "./handlers.js";
diff --git a/packages/node/src/logger.ts b/packages/node/src/logger.ts
index e4401ae87..d69f6133b 100644
--- a/packages/node/src/logger.ts
+++ b/packages/node/src/logger.ts
@@ -1,4 +1,4 @@
-import { ILogger } from "@ts-drp/logger";
+import { type ILogger } from "@ts-drp/logger";
 
 // TODO: replace with the actual logger in each place that need a logger this is just a hack by the mean time to fix the circular dependency
 export const log: ILogger = {
diff --git a/packages/node/src/operations.ts b/packages/node/src/operations.ts
index a61e2c44d..07c502960 100644
--- a/packages/node/src/operations.ts
+++ b/packages/node/src/operations.ts
@@ -1,6 +1,6 @@
-import { GossipsubMessage } from "@chainsafe/libp2p-gossipsub";
+import { type GossipsubMessage } from "@chainsafe/libp2p-gossipsub";
 import { type DRP, DRPObject, HashGraph } from "@ts-drp/object";
-import { IMetrics } from "@ts-drp/tracer";
+import { type IMetrics } from "@ts-drp/tracer";
 import { FetchState, Message, MessageType, Sync } from "@ts-drp/types";
 
 import { drpMessagesHandler, drpObjectChangesHandler } from "./handlers.js";
diff --git a/packages/node/tests/cli.test.ts b/packages/node/tests/cli.test.ts
index 4a70ce68b..732e0b76e 100644
--- a/packages/node/tests/cli.test.ts
+++ b/packages/node/tests/cli.test.ts
@@ -4,7 +4,7 @@ import path, { dirname } from "node:path";
 import { fileURLToPath } from "node:url";
 import { beforeAll, describe, expect, test } from "vitest";
 
-import { GenericRespone, SubscribeDRPRequest } from "../src/proto/drp/node/v1/rpc_pb.js";
+import { type GenericRespone, type SubscribeDRPRequest } from "../src/proto/drp/node/v1/rpc_pb.js";
 import * as run from "../src/run.js";
 
 const protoPath = path.resolve(
diff --git a/packages/object/src/finality/index.ts b/packages/object/src/finality/index.ts
index 044786872..7ecff641a 100644
--- a/packages/object/src/finality/index.ts
+++ b/packages/object/src/finality/index.ts
@@ -1,6 +1,6 @@
 import { bls } from "@chainsafe/bls/herumi";
 import { Logger } from "@ts-drp/logger";
-import { LoggerOptions, AggregatedAttestation, Attestation } from "@ts-drp/types";
+import { type LoggerOptions, type AggregatedAttestation, type Attestation } from "@ts-drp/types";
 import { fromString as uint8ArrayFromString } from "uint8arrays/from-string";
 
 import { BitSet } from "../hashgraph/bitset.js";
diff --git a/packages/object/src/hashgraph/index.ts b/packages/object/src/hashgraph/index.ts
index b88b67c8a..db07ad433 100644
--- a/packages/object/src/hashgraph/index.ts
+++ b/packages/object/src/hashgraph/index.ts
@@ -1,5 +1,11 @@
 import { Logger } from "@ts-drp/logger";
-import { LoggerOptions, Operation, Vertex, ActionType, SemanticsType } from "@ts-drp/types";
+import {
+	type LoggerOptions,
+	type Operation,
+	Vertex,
+	ActionType,
+	SemanticsType,
+} from "@ts-drp/types";
 
 import { BitSet } from "./bitset.js";
 import { linearizeMultipleSemantics } from "../linearize/multipleSemantics.js";
diff --git a/packages/object/src/index.ts b/packages/object/src/index.ts
index 44fa0e74e..1398cd62d 100644
--- a/packages/object/src/index.ts
+++ b/packages/object/src/index.ts
@@ -1,10 +1,10 @@
 import { Logger } from "@ts-drp/logger";
-import { IMetrics } from "@ts-drp/tracer";
+import { type IMetrics } from "@ts-drp/tracer";
 import {
-	DRPObjectBase,
+	type DRPObjectBase,
 	DRPState,
 	DRPStateEntry,
-	Operation,
+	type Operation,
 	type Vertex,
 	type LoggerOptions,
 } from "@ts-drp/types";
@@ -17,7 +17,7 @@ import type { ACL } from "./acl/interface.js";
 import { type FinalityConfig, FinalityStore } from "./finality/index.js";
 import { type Hash, HashGraph } from "./hashgraph/index.js";
 import {
-	ConnectObjectOptions,
+	type ConnectObjectOptions,
 	type DRP,
 	type DRPObjectCallback,
 	type DRPPublicCredential,
diff --git a/packages/object/src/interface.ts b/packages/object/src/interface.ts
index 57c268ade..c8978e1dd 100644
--- a/packages/object/src/interface.ts
+++ b/packages/object/src/interface.ts
@@ -1,5 +1,5 @@
-import { IMetrics } from "@ts-drp/tracer";
-import { Operation, SemanticsType, type LoggerOptions, type Vertex } from "@ts-drp/types";
+import { type IMetrics } from "@ts-drp/tracer";
+import { type Operation, type SemanticsType, type LoggerOptions, type Vertex } from "@ts-drp/types";
 
 import type { ResolveConflictsType } from "./hashgraph/index.js";
 import type { DRPObject } from "./index.js";
diff --git a/packages/object/src/linearize/multipleSemantics.ts b/packages/object/src/linearize/multipleSemantics.ts
index 8137b9638..c9945ccd7 100644
--- a/packages/object/src/linearize/multipleSemantics.ts
+++ b/packages/object/src/linearize/multipleSemantics.ts
@@ -1,4 +1,4 @@
-import { ActionType, Operation, Vertex } from "@ts-drp/types";
+import { ActionType, type Operation, type Vertex } from "@ts-drp/types";
 
 import { type Hash, type HashGraph } from "../hashgraph/index.js";
 import type { ObjectSet } from "../utils/objectSet.js";
diff --git a/packages/object/src/linearize/pairSemantics.ts b/packages/object/src/linearize/pairSemantics.ts
index 1b8f50fd2..1b8dc4f7d 100644
--- a/packages/object/src/linearize/pairSemantics.ts
+++ b/packages/object/src/linearize/pairSemantics.ts
@@ -1,4 +1,4 @@
-import { ActionType, Operation } from "@ts-drp/types";
+import { ActionType, type Operation } from "@ts-drp/types";
 
 import { type Hash, type HashGraph } from "../hashgraph/index.js";
 import type { ObjectSet } from "../utils/objectSet.js";
diff --git a/packages/object/tests/drpobject.test.ts b/packages/object/tests/drpobject.test.ts
index 040614c8e..5268c0e68 100644
--- a/packages/object/tests/drpobject.test.ts
+++ b/packages/object/tests/drpobject.test.ts
@@ -2,7 +2,7 @@ import { SetDRP } from "@ts-drp/blueprints/src/index.js";
 import { type Vertex, ActionType, SemanticsType } from "@ts-drp/types";
 import { beforeEach, describe, expect, it, test, vi } from "vitest";
 
-import { DRP, DRPObject, ObjectACL, ResolveConflictsType } from "../src/index.js";
+import { type DRP, DRPObject, ObjectACL, type ResolveConflictsType } from "../src/index.js";
 
 const acl = new ObjectACL({
 	admins: new Map([
diff --git a/packages/object/tests/hashgraph.bench.ts b/packages/object/tests/hashgraph.bench.ts
index 22f453d27..14d36c7e3 100644
--- a/packages/object/tests/hashgraph.bench.ts
+++ b/packages/object/tests/hashgraph.bench.ts
@@ -1,7 +1,7 @@
 import { MapDRP, SetDRP } from "@ts-drp/blueprints/src/index.js";
 import Benchmark from "benchmark";
 
-import { DRP, DRPObject, ObjectACL } from "../src/index.js";
+import { type DRP, DRPObject, ObjectACL } from "../src/index.js";
 
 const acl = new ObjectACL({
 	admins: new Map([["peer1", { secp256k1PublicKey: "pubKey1", blsPublicKey: "pubKey1" }]]),
diff --git a/packages/object/tests/hashgraph.test.ts b/packages/object/tests/hashgraph.test.ts
index 6c42d43e4..331841ae1 100644
--- a/packages/object/tests/hashgraph.test.ts
+++ b/packages/object/tests/hashgraph.test.ts
@@ -1,10 +1,18 @@
 import { MapConflictResolution, MapDRP } from "@ts-drp/blueprints/src/Map/index.js";
 import { SetDRP } from "@ts-drp/blueprints/src/Set/index.js";
-import { type Vertex, Operation, ActionType, SemanticsType } from "@ts-drp/types";
+import { type Vertex, type Operation, ActionType, SemanticsType } from "@ts-drp/types";
 import { beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
 
 import { ObjectACL } from "../src/acl/index.js";
-import { ACLGroup, DRP, DRPObject, DrpType, Hash, HashGraph, newVertex } from "../src/index.js";
+import {
+	ACLGroup,
+	type DRP,
+	DRPObject,
+	DrpType,
+	type Hash,
+	HashGraph,
+	newVertex,
+} from "../src/index.js";
 import { ObjectSet } from "../src/utils/objectSet.js";
 
 const acl = new ObjectACL({
diff --git a/packages/tracer/tests/index.spec.ts b/packages/tracer/tests/index.spec.ts
index a66d9315a..e1ee484ed 100644
--- a/packages/tracer/tests/index.spec.ts
+++ b/packages/tracer/tests/index.spec.ts
@@ -1,10 +1,10 @@
-import { Span } from "@opentelemetry/api";
+import { type Span } from "@opentelemetry/api";
 import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
 import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
 import { beforeEach, describe, expect, test, vi } from "vitest";
 
 import { disableTracing, enableTracing, flush, OpentelemetryMetrics } from "../src/index.js";
-import { IMetrics } from "../src/interface.js";
+import { type IMetrics } from "../src/interface.js";
 
 // Mock OpenTelemetry dependencies
 vi.mock("@opentelemetry/api", () => {
diff --git a/packages/types/src/interval-runner.ts b/packages/types/src/interval-runner.ts
index 0148bc4e6..f0358c22f 100644
--- a/packages/types/src/interval-runner.ts
+++ b/packages/types/src/interval-runner.ts
@@ -1,4 +1,4 @@
-import { LoggerOptions } from "./logger.js";
+import { type LoggerOptions } from "./logger.js";
 
 type AnyFnCallback<T, Args extends unknown[] = []> =
 	| (() => T)
diff --git a/packages/types/src/logger.ts b/packages/types/src/logger.ts
index ab1616e70..0eed007c9 100644
--- a/packages/types/src/logger.ts
+++ b/packages/types/src/logger.ts
@@ -1,4 +1,4 @@
-import loglevel from "loglevel";
+import type loglevel from "loglevel";
 
 export interface LoggerOptions {
 	level?: loglevel.LogLevelDesc;