diff --git a/.gitignore b/.gitignore
index 463640d1c54941e7495cc28ecac7ad8b9857c031..00527a78c9bdc2caf93fcb0f767c62b392d34b52 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,9 @@
 # compiled output
 /dist
 /tmp
-/out-tsc
-# Only exists if Bazel was run
-/bazel-out
+libs/**/*.d.ts
+libs/**/*.js
+libs/**/*js.map
 
 # dependencies
 /node_modules
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d555b1518c93cf008b3aa31156a980cd194178fb..1060d3f3e469abdea329d7ef842b0da9b1594410 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -93,6 +93,7 @@ Publish npm:
   needs:
     - Audit
     - Build
+    - Build Node Image
     - Init
     - Lint
   script:
diff --git a/.npmignore b/.npmignore
index a63b6caa9751e78bf3926d3c1508f0148abfb3ff..c1e0b52e030985618274f58ed954576158acebaf 100644
--- a/.npmignore
+++ b/.npmignore
@@ -5,7 +5,8 @@
 !DISCLAIMER.md
 !LICENSE.md
 !README.md
+!code.json
 
-!dist/**
+!libs/**/*.d.ts
+!libs/**/*.js*
 !package.json
-!scripts/**
diff --git a/src/aws/models/index.ts b/libs/aws/index.ts
similarity index 100%
rename from src/aws/models/index.ts
rename to libs/aws/index.ts
diff --git a/src/aws/models/run-nshmp-haz/dynamo-db-item.ts b/libs/aws/run-nshmp-haz/dynamo-db-item.ts
similarity index 100%
rename from src/aws/models/run-nshmp-haz/dynamo-db-item.ts
rename to libs/aws/run-nshmp-haz/dynamo-db-item.ts
diff --git a/src/aws/models/run-nshmp-haz/index.ts b/libs/aws/run-nshmp-haz/index.ts
similarity index 100%
rename from src/aws/models/run-nshmp-haz/index.ts
rename to libs/aws/run-nshmp-haz/index.ts
diff --git a/src/aws/models/run-nshmp-haz/job-status.model.ts b/libs/aws/run-nshmp-haz/job-status.model.ts
similarity index 100%
rename from src/aws/models/run-nshmp-haz/job-status.model.ts
rename to libs/aws/run-nshmp-haz/job-status.model.ts
diff --git a/src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts b/libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts
similarity index 100%
rename from src/aws/models/run-nshmp-haz/run-nshmp-haz-config.ts
rename to libs/aws/run-nshmp-haz/run-nshmp-haz-config.ts
diff --git a/src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts b/libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
similarity index 62%
rename from src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts
rename to libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
index b6a5b8e0ebdd9ffd64ac7b922ddf0c59e81fe710..b173b898e4e7e0a5676ba7efebd1305a0d02c670 100644
--- a/src/aws/models/run-nshmp-haz/run-nshmp-haz-response.ts
+++ b/libs/aws/run-nshmp-haz/run-nshmp-haz-response.ts
@@ -1,7 +1,7 @@
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
+import {Response} from '../../nshmp-ws-utils';
 import {RunNshmpHazHttpPostConfig} from './run-nshmp-haz-config';
 
-export type RunNshmpHazResponse = nshmpWsUtils.Response<
+export type RunNshmpHazResponse = Response<
   RunNshmpHazHttpPostConfig,
   RunNshmpHazResponseData
 >;
diff --git a/src/index.ts b/libs/index.ts
similarity index 65%
rename from src/index.ts
rename to libs/index.ts
index 0fbb98fdd6bdca45d6e78fa99ec47c4efbe744e3..7ff5ba8680eae8a259ba08d814632d128069f0b0 100644
--- a/src/index.ts
+++ b/libs/index.ts
@@ -1,8 +1,8 @@
-export * as nshmpAws from './aws';
-export * as nshmpLeaflet from './leaflet';
+export * as aws from './aws';
+export * as leaflet from './leaflet';
 export * as nshmpHaz from './nshmp-haz';
 export * as nshmpLib from './nshmp-lib';
 export * as nshmpWs from './nshmp-ws';
 export * as nshmpWsStatic from './nshmp-ws-static';
 export * as nshmpWsUtils from './nshmp-ws-utils';
-export * as nshmpPlotly from './plotly';
+export * as plotly from './plotly';
diff --git a/libs/leaflet/index.ts b/libs/leaflet/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0e71ca286b3bf0af09a4df5ea71fa3a3a470d205
--- /dev/null
+++ b/libs/leaflet/index.ts
@@ -0,0 +1,4 @@
+/* Export Leaflet package */
+
+export * from './map.utils';
+export * from './map-baselayer.model';
diff --git a/src/leaflet/models/map-baselayer.model.ts b/libs/leaflet/map-baselayer.model.ts
similarity index 100%
rename from src/leaflet/models/map-baselayer.model.ts
rename to libs/leaflet/map-baselayer.model.ts
diff --git a/src/leaflet/utils/map.utils.ts b/libs/leaflet/map.utils.ts
similarity index 98%
rename from src/leaflet/utils/map.utils.ts
rename to libs/leaflet/map.utils.ts
index 1cfa0d452b87beb439ebe3ecc185d25396cb0552..7bad7780434df68753899a97beb3f4d29481d4de 100644
--- a/src/leaflet/utils/map.utils.ts
+++ b/libs/leaflet/map.utils.ts
@@ -1,7 +1,7 @@
 import * as L from 'leaflet';
 
-import {Location} from '../../nshmp-lib';
-import {MapBaseLayer} from '../models';
+import {Location} from '../nshmp-lib/geo';
+import {MapBaseLayer} from './map-baselayer.model';
 
 /** Location transform */
 export type LocationTransform = (location: Location) => Location;
diff --git a/libs/nshmp-haz/index.ts b/libs/nshmp-haz/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..053782820d709344d80f255a7bf1413fdcf137fd
--- /dev/null
+++ b/libs/nshmp-haz/index.ts
@@ -0,0 +1,2 @@
+/* Export nshmp package */
+export * from './www';
diff --git a/src/nshmp-haz/models/www/constraint.model.ts b/libs/nshmp-haz/www/constraint.model.ts
similarity index 100%
rename from src/nshmp-haz/models/www/constraint.model.ts
rename to libs/nshmp-haz/www/constraint.model.ts
diff --git a/src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts b/libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
similarity index 83%
rename from src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts
rename to libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
index 3c97b4637a26a081cc2625aada0f5a83ca647f21..7f548e9cbb2c947e6e420a841a53a2baf9b23845 100644
--- a/src/nshmp-haz/models/www/disagg-service/disagg-response.model.ts
+++ b/libs/nshmp-haz/www/disagg-service/disagg-response.model.ts
@@ -1,11 +1,9 @@
-import {Imt} from '../../../../nshmp-lib';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
+import {Imt} from '../../../nshmp-lib/gmm';
+import {Response} from '../../../nshmp-ws-utils';
+import {Parameter, Server} from '../../../nshmp-ws-utils/metadata';
 import {HazardRequestData} from '../hazard-service/hazard-response.model';
 
-export type DisaggResponse = nshmpWsUtils.Response<
-  DisaggRequestData,
-  DisaggResponseData
->;
+export type DisaggResponse = Response<DisaggRequestData, DisaggResponseData>;
 
 export enum DataType {
   GMM = 'GMM',
@@ -24,7 +22,7 @@ export interface DisaggResponseMetadata {
   mlabel: string;
   εlabel: string;
   εbins: EBin[];
-  server: nshmpWsUtils.metadata.Server;
+  server: Server;
 }
 
 export interface EBin {
@@ -39,7 +37,7 @@ export interface DisaggResponseData {
 }
 
 export interface DisaggResponseDataValues {
-  imt: nshmpWsUtils.metadata.Parameter;
+  imt: Parameter;
   data: DisaggComponentData[];
 }
 
diff --git a/src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts b/libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
similarity index 72%
rename from src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts
rename to libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
index dd4085b2ff246a0e323a2e94b204b130ae2f854c..8e95caa634be7c72f777db0220f44911f4f6557b 100644
--- a/src/nshmp-haz/models/www/disagg-service/disagg-usage.model.ts
+++ b/libs/nshmp-haz/www/disagg-service/disagg-usage.model.ts
@@ -1,5 +1,5 @@
-import {Response} from '../../../../nshmp-ws-utils';
-import {DoubleParameter} from '../../../../nshmp-ws-utils/models/metadata';
+import {Response} from '../../../nshmp-ws-utils';
+import {DoubleParameter} from '../../../nshmp-ws-utils/metadata';
 import {HazardRequestMetadata} from '../hazard-service';
 
 export type DisaggUsage = Response<string, DisaggRequestMetadata>;
diff --git a/src/nshmp-haz/models/www/disagg-service/index.ts b/libs/nshmp-haz/www/disagg-service/index.ts
similarity index 100%
rename from src/nshmp-haz/models/www/disagg-service/index.ts
rename to libs/nshmp-haz/www/disagg-service/index.ts
diff --git a/src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts b/libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
similarity index 85%
rename from src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts
rename to libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
index 1db487da2a98177d300c3dbea569551d02ff8ac7..e999031086a3f08e4dafa6740199950ff27482f4 100644
--- a/src/nshmp-haz/models/www/hazard-service/hazard-response.model.ts
+++ b/libs/nshmp-haz/www/hazard-service/hazard-response.model.ts
@@ -1,10 +1,11 @@
-import {XySequence} from '../../../../nshmp-lib/models/data';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
+import {XySequence} from '../../../nshmp-lib/data';
+import {Response} from '../../../nshmp-ws-utils';
+import {Parameter, Server} from '../../../nshmp-ws-utils/metadata';
 
 /**
  * The hazard calculation response.
  */
-export type HazardCalcResponse = nshmpWsUtils.Response<
+export type HazardCalcResponse = Response<
   HazardRequestData,
   HazardResponseData
 >;
@@ -39,7 +40,7 @@ export interface HazardResponseData {
  *    /-/blob/master/src/main/java/gov/usgs/earthquake/nshmp/www/services/HazardService.java
  */
 export interface HazardResponse {
-  imt: nshmpWsUtils.metadata.Parameter;
+  imt: Parameter;
   data: HazardCurve[];
 }
 
@@ -52,7 +53,7 @@ export interface HazardResponse {
 export interface HazardResponseMetadata {
   xlabel: string;
   ylabel: string;
-  server: nshmpWsUtils.metadata.Server;
+  server: Server;
 }
 
 /*
diff --git a/src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts b/libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
similarity index 51%
rename from src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts
rename to libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
index e272e9478d6cbebd48eeabc2d609d2e2e7b2702e..07c2376a431f460710ea7ff28e126220c91ff2f6 100644
--- a/src/nshmp-haz/models/www/hazard-service/hazard-usage.model.ts
+++ b/libs/nshmp-haz/www/hazard-service/hazard-usage.model.ts
@@ -1,13 +1,11 @@
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
+import {Response} from '../../../nshmp-ws-utils';
+import {DoubleParameter} from '../../../nshmp-ws-utils/metadata';
 import {SourceModel} from '../source-model.model';
 
 /**
  * The hazard service usage response.
  */
-export type HazardUsageResponse = nshmpWsUtils.Response<
-  string,
-  HazardRequestMetadata
->;
+export type HazardUsageResponse = Response<string, HazardRequestMetadata>;
 
 /**
  * Base source model metadata.
@@ -20,7 +18,7 @@ export interface HazardModelMetadata {
  * The hazard service usage request metadata.
  */
 export interface HazardRequestMetadata extends HazardModelMetadata {
-  latitude: nshmpWsUtils.metadata.DoubleParameter;
-  longitude: nshmpWsUtils.metadata.DoubleParameter;
-  vs30: nshmpWsUtils.metadata.DoubleParameter;
+  latitude: DoubleParameter;
+  longitude: DoubleParameter;
+  vs30: DoubleParameter;
 }
diff --git a/src/nshmp-haz/models/www/hazard-service/index.ts b/libs/nshmp-haz/www/hazard-service/index.ts
similarity index 100%
rename from src/nshmp-haz/models/www/hazard-service/index.ts
rename to libs/nshmp-haz/www/hazard-service/index.ts
diff --git a/src/nshmp-haz/models/www/index.ts b/libs/nshmp-haz/www/index.ts
similarity index 86%
rename from src/nshmp-haz/models/www/index.ts
rename to libs/nshmp-haz/www/index.ts
index 79a5596f31dee72f679d2a19c9bca8d9539c4f25..433f135901c4351cae16733d00cd87511184059a 100644
--- a/src/nshmp-haz/models/www/index.ts
+++ b/libs/nshmp-haz/www/index.ts
@@ -2,6 +2,7 @@
 export * from './constraint.model';
 export * as disaggService from './disagg-service';
 export * as hazardService from './hazard-service';
+export * as nshmService from './nshm-service';
 export * as sourceLogicTreesService from './source-logic-trees-service';
 export * from './source-model.model';
 export * from './xy-data-group.model';
diff --git a/libs/nshmp-haz/www/nshm-service/index.ts b/libs/nshmp-haz/www/nshm-service/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b1c316a1a1c253c203671f34613d6a15137bd21a
--- /dev/null
+++ b/libs/nshmp-haz/www/nshm-service/index.ts
@@ -0,0 +1 @@
+export * from './nshm-usage.model';
diff --git a/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts b/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..467773809896c7a88b9a3893f51e054d85293463
--- /dev/null
+++ b/libs/nshmp-haz/www/nshm-service/nshm-usage.model.ts
@@ -0,0 +1,11 @@
+import {NshmId} from '../../../nshmp-lib/nshm';
+import {Response} from '../../../nshmp-ws-utils';
+
+export type NshmUsage = Response<string, NshmMetadata[]>;
+
+export interface NshmMetadata {
+  model: NshmId;
+  project: string;
+  tag: string;
+  url: string;
+}
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/index.ts b/libs/nshmp-haz/www/source-logic-trees-service/index.ts
similarity index 100%
rename from src/nshmp-haz/models/www/source-logic-trees-service/index.ts
rename to libs/nshmp-haz/www/source-logic-trees-service/index.ts
diff --git a/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1759eb778e44d35ee7041516d90ec93bc57c48d1
--- /dev/null
+++ b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-response.ts
@@ -0,0 +1,11 @@
+import {Tree} from '../../../nshmp-lib/model';
+import {Response} from '../../../nshmp-ws-utils';
+
+export type SourceLogicTreesResponse = Response<
+  SourceLogicTreesRequestData,
+  Tree
+>;
+
+export interface SourceLogicTreesRequestData {
+  id: number;
+}
diff --git a/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts
new file mode 100644
index 0000000000000000000000000000000000000000..800e4d633002a952aff208cde522a6612e6c46af
--- /dev/null
+++ b/libs/nshmp-haz/www/source-logic-trees-service/source-logic-trees-usage.ts
@@ -0,0 +1,9 @@
+import {SettingGroup} from '../../../nshmp-lib/model';
+import {Response} from '../../../nshmp-ws-utils';
+import {HazardModelMetadata} from '../hazard-service';
+
+export type SourceLogicTreesUsage = Response<string, SourceLogicTreesMetadata>;
+
+export interface SourceLogicTreesMetadata extends HazardModelMetadata {
+  trees: SettingGroup[];
+}
diff --git a/src/nshmp-haz/models/www/source-model.model.ts b/libs/nshmp-haz/www/source-model.model.ts
similarity index 73%
rename from src/nshmp-haz/models/www/source-model.model.ts
rename to libs/nshmp-haz/www/source-model.model.ts
index faa984b95dcf489fddc86c187082676715e7d0a5..077ae33a38b800d3a4f31dbbd97781cf6757a68a 100644
--- a/src/nshmp-haz/models/www/source-model.model.ts
+++ b/libs/nshmp-haz/www/source-model.model.ts
@@ -1,5 +1,5 @@
-import {Gmm} from '../../../nshmp-lib/models/gmm';
-import {metadata} from '../../../nshmp-ws-utils';
+import {Gmm} from '../../nshmp-lib/gmm';
+import {metadata} from '../../nshmp-ws-utils';
 
 /**
  * Source model.
diff --git a/src/nshmp-haz/models/www/xy-data-group.model.ts b/libs/nshmp-haz/www/xy-data-group.model.ts
similarity index 75%
rename from src/nshmp-haz/models/www/xy-data-group.model.ts
rename to libs/nshmp-haz/www/xy-data-group.model.ts
index e57af8730f9f95a2c7d1142bc544f25589c98b74..e2ec020d607092c2f7ae9d9f832c2a89f67e2970 100644
--- a/src/nshmp-haz/models/www/xy-data-group.model.ts
+++ b/libs/nshmp-haz/www/xy-data-group.model.ts
@@ -1,4 +1,4 @@
-import {XySequence} from '../../../nshmp-lib/models/data';
+import {XySequence} from '../../nshmp-lib/data';
 
 export interface XyDataGroup<T> {
   label: string;
diff --git a/src/nshmp-lib/models/calc/exceedance-model.util.ts b/libs/nshmp-lib/calc/exceedance-model.util.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/exceedance-model.util.ts
rename to libs/nshmp-lib/calc/exceedance-model.util.ts
diff --git a/src/nshmp-lib/models/calc/index.ts b/libs/nshmp-lib/calc/index.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/index.ts
rename to libs/nshmp-lib/calc/index.ts
diff --git a/src/nshmp-lib/models/calc/maths.util.ts b/libs/nshmp-lib/calc/maths.util.ts
similarity index 100%
rename from src/nshmp-lib/models/calc/maths.util.ts
rename to libs/nshmp-lib/calc/maths.util.ts
diff --git a/src/nshmp-lib/models/data/index.ts b/libs/nshmp-lib/data/index.ts
similarity index 100%
rename from src/nshmp-lib/models/data/index.ts
rename to libs/nshmp-lib/data/index.ts
diff --git a/src/nshmp-lib/models/data/uncertainty-model.model.ts b/libs/nshmp-lib/data/uncertainty-model.model.ts
similarity index 100%
rename from src/nshmp-lib/models/data/uncertainty-model.model.ts
rename to libs/nshmp-lib/data/uncertainty-model.model.ts
diff --git a/src/nshmp-lib/models/data/xy-sequence.model.ts b/libs/nshmp-lib/data/xy-sequence.model.ts
similarity index 100%
rename from src/nshmp-lib/models/data/xy-sequence.model.ts
rename to libs/nshmp-lib/data/xy-sequence.model.ts
diff --git a/src/nshmp-lib/models/geo/basin.model.ts b/libs/nshmp-lib/geo/basin.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/basin.model.ts
rename to libs/nshmp-lib/geo/basin.model.ts
diff --git a/src/nshmp-lib/models/geo/index.ts b/libs/nshmp-lib/geo/index.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/index.ts
rename to libs/nshmp-lib/geo/index.ts
diff --git a/src/nshmp-lib/models/geo/region.model.ts b/libs/nshmp-lib/geo/region.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/region.model.ts
rename to libs/nshmp-lib/geo/region.model.ts
diff --git a/src/nshmp-lib/models/geo/site.model.ts b/libs/nshmp-lib/geo/site.model.ts
similarity index 100%
rename from src/nshmp-lib/models/geo/site.model.ts
rename to libs/nshmp-lib/geo/site.model.ts
diff --git a/src/nshmp-lib/models/gmm/gmm-input.model.ts b/libs/nshmp-lib/gmm/gmm-input.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/gmm-input.model.ts
rename to libs/nshmp-lib/gmm/gmm-input.model.ts
diff --git a/src/nshmp-lib/models/gmm/gmm.model.ts b/libs/nshmp-lib/gmm/gmm.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/gmm.model.ts
rename to libs/nshmp-lib/gmm/gmm.model.ts
diff --git a/src/nshmp-lib/models/gmm/imt.model.ts b/libs/nshmp-lib/gmm/imt.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/imt.model.ts
rename to libs/nshmp-lib/gmm/imt.model.ts
diff --git a/src/nshmp-lib/models/gmm/index.ts b/libs/nshmp-lib/gmm/index.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/index.ts
rename to libs/nshmp-lib/gmm/index.ts
diff --git a/src/nshmp-lib/models/gmm/nehrp-site-class.model.ts b/libs/nshmp-lib/gmm/nehrp-site-class.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/nehrp-site-class.model.ts
rename to libs/nshmp-lib/gmm/nehrp-site-class.model.ts
diff --git a/src/nshmp-lib/models/gmm/rate-type.model.ts b/libs/nshmp-lib/gmm/rate-type.model.ts
similarity index 100%
rename from src/nshmp-lib/models/gmm/rate-type.model.ts
rename to libs/nshmp-lib/gmm/rate-type.model.ts
diff --git a/libs/nshmp-lib/index.ts b/libs/nshmp-lib/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ea7990591fc28ac6414ec304867c89bd22e7328d
--- /dev/null
+++ b/libs/nshmp-lib/index.ts
@@ -0,0 +1,5 @@
+export * as calc from './calc';
+export * as data from './data';
+export * as geo from './geo';
+export * as model from './model';
+export * as nshm from './nshm';
diff --git a/libs/nshmp-lib/model/index.ts b/libs/nshmp-lib/model/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..624e47ba71395fc9abfd2b82a5c85942c59c81e6
--- /dev/null
+++ b/libs/nshmp-lib/model/index.ts
@@ -0,0 +1,4 @@
+export * from './mfd';
+export * from './models';
+export * from './source-type';
+export * from './tectonic-setting';
diff --git a/src/nshmp-lib/models/model/mfd.ts b/libs/nshmp-lib/model/mfd.ts
similarity index 73%
rename from src/nshmp-lib/models/model/mfd.ts
rename to libs/nshmp-lib/model/mfd.ts
index 629dc0bc7728d8877f5471a7da868f959d718123..31e91f7786badf96dec7d70ebec1834c6350f5e0 100644
--- a/src/nshmp-lib/models/model/mfd.ts
+++ b/libs/nshmp-lib/model/mfd.ts
@@ -9,7 +9,7 @@ export enum MfdType {
   SINGLE = 'SINGLE',
 }
 
-export interface GutenbergRichter extends Properties {
+export interface GutenbergRichter extends MfdProperties {
   a: number;
   b: number;
   Δm: number;
@@ -19,14 +19,14 @@ export interface GutenbergRichter extends Properties {
 
 export interface Mfd {
   data: XySequence;
-  props: Properties;
+  props: MfdProperties;
 }
 
-export interface Properties {
+export interface MfdProperties {
   type: MfdType;
 }
 
-export interface Single extends Properties {
+export interface Single extends MfdProperties {
   m: number;
   rate: number;
 }
diff --git a/src/nshmp-lib/models/model/models.ts b/libs/nshmp-lib/model/models.ts
similarity index 100%
rename from src/nshmp-lib/models/model/models.ts
rename to libs/nshmp-lib/model/models.ts
diff --git a/src/nshmp-lib/models/model/source-type.ts b/libs/nshmp-lib/model/source-type.ts
similarity index 100%
rename from src/nshmp-lib/models/model/source-type.ts
rename to libs/nshmp-lib/model/source-type.ts
diff --git a/src/nshmp-lib/models/model/tectonic-setting.ts b/libs/nshmp-lib/model/tectonic-setting.ts
similarity index 100%
rename from src/nshmp-lib/models/model/tectonic-setting.ts
rename to libs/nshmp-lib/model/tectonic-setting.ts
diff --git a/libs/nshmp-lib/nshm/index.ts b/libs/nshmp-lib/nshm/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1fe78514152683771520ec541d08b05eb177af5d
--- /dev/null
+++ b/libs/nshmp-lib/nshm/index.ts
@@ -0,0 +1,2 @@
+export * from './nshm.model';
+export * from './nshm-region.model';
diff --git a/src/nshmp-lib/models/nshm-region.model.ts b/libs/nshmp-lib/nshm/nshm-region.model.ts
similarity index 100%
rename from src/nshmp-lib/models/nshm-region.model.ts
rename to libs/nshmp-lib/nshm/nshm-region.model.ts
diff --git a/src/nshmp-lib/models/nshm.model.ts b/libs/nshmp-lib/nshm/nshm.model.ts
similarity index 100%
rename from src/nshmp-lib/models/nshm.model.ts
rename to libs/nshmp-lib/nshm/nshm.model.ts
diff --git a/src/nshmp-ws-static/models/index.ts b/libs/nshmp-ws-static/index.ts
similarity index 100%
rename from src/nshmp-ws-static/models/index.ts
rename to libs/nshmp-ws-static/index.ts
diff --git a/src/nshmp-ws-static/models/static-hazard-response.model.ts b/libs/nshmp-ws-static/static-hazard-response.model.ts
similarity index 69%
rename from src/nshmp-ws-static/models/static-hazard-response.model.ts
rename to libs/nshmp-ws-static/static-hazard-response.model.ts
index 23b27b784d5fd3323bd7d2b615024389f2f3d42b..a05c9a1bf6a8a052e250d6459b9cfda050b8209a 100644
--- a/src/nshmp-ws-static/models/static-hazard-response.model.ts
+++ b/libs/nshmp-ws-static/static-hazard-response.model.ts
@@ -1,22 +1,23 @@
-import {XySequence} from '../../nshmp-lib';
-import * as nshmpWsUtils from '../../nshmp-ws-utils';
+import {XySequence} from '../nshmp-lib/data';
+import {Response} from '../nshmp-ws-utils';
+import {Parameter} from '../nshmp-ws-utils/metadata';
 
-export type StaticHazardResponse = nshmpWsUtils.Response<
+export type StaticHazardResponse = Response<
   StaticRequestData,
   StaticResponseData<HazardResponseMetadata>[][]
 >;
 
-export type StaticHazardResponseSiteClass = nshmpWsUtils.Response<
+export type StaticHazardResponseSiteClass = Response<
   StaticRequestDataSiteClass,
   StaticResponseData<HazardResponseMetadata>[]
 >;
 
-export type StaticGroundMotionResponse = nshmpWsUtils.Response<
+export type StaticGroundMotionResponse = Response<
   StaticRequestData,
   StaticResponseData<GroundMotionResponseMetadata>[]
 >;
 
-export type StaticGroundMotionResponseSiteClass = nshmpWsUtils.Response<
+export type StaticGroundMotionResponseSiteClass = Response<
   StaticRequestData,
   StaticResponseData<GroundMotionResponseMetadata>
 >;
@@ -41,7 +42,7 @@ export interface StaticResponseMetadata {
 }
 
 export interface HazardResponseMetadata extends StaticResponseMetadata {
-  imt: nshmpWsUtils.metadata.Parameter;
+  imt: Parameter;
 }
 
 export interface GroundMotionResponseMetadata extends StaticResponseMetadata {
diff --git a/src/nshmp-ws-static/models/static-hazard-usage.model.ts b/libs/nshmp-ws-static/static-hazard-usage.model.ts
similarity index 81%
rename from src/nshmp-ws-static/models/static-hazard-usage.model.ts
rename to libs/nshmp-ws-static/static-hazard-usage.model.ts
index 89c71af1347b7d935215cf0b204bd7475afeeb25..43c24c216f1e5dc8a9ab651d8fc5cabd12c3698c 100644
--- a/src/nshmp-ws-static/models/static-hazard-usage.model.ts
+++ b/libs/nshmp-ws-static/static-hazard-usage.model.ts
@@ -1,10 +1,7 @@
-import * as nshmpWsUtils from '../../nshmp-ws-utils';
-import {DoubleParameter, Parameter} from '../../nshmp-ws-utils/models/metadata';
+import {Response} from '../nshmp-ws-utils';
+import {DoubleParameter, Parameter} from '../nshmp-ws-utils/metadata';
 
-export type StaticHazardUsage = nshmpWsUtils.Response<
-  string,
-  StaticHazardUsageResponse
->;
+export type StaticHazardUsage = Response<string, StaticHazardUsageResponse>;
 
 export interface StaticHazardUsageResponse {
   description: string;
diff --git a/src/nshmp-ws-utils/models/index.ts b/libs/nshmp-ws-utils/index.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/index.ts
rename to libs/nshmp-ws-utils/index.ts
diff --git a/src/nshmp-ws-utils/models/metadata/double-parameter.model.ts b/libs/nshmp-ws-utils/metadata/double-parameter.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/double-parameter.model.ts
rename to libs/nshmp-ws-utils/metadata/double-parameter.model.ts
diff --git a/src/nshmp-ws-utils/models/metadata/enum-parameter.ts b/libs/nshmp-ws-utils/metadata/enum-parameter.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/enum-parameter.ts
rename to libs/nshmp-ws-utils/metadata/enum-parameter.ts
diff --git a/src/nshmp-ws-utils/models/metadata/index.ts b/libs/nshmp-ws-utils/metadata/index.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/index.ts
rename to libs/nshmp-ws-utils/metadata/index.ts
diff --git a/src/nshmp-ws-utils/models/metadata/parameter.model.ts b/libs/nshmp-ws-utils/metadata/parameter.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/parameter.model.ts
rename to libs/nshmp-ws-utils/metadata/parameter.model.ts
diff --git a/src/nshmp-ws-utils/models/metadata/server.model.ts b/libs/nshmp-ws-utils/metadata/server.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/server.model.ts
rename to libs/nshmp-ws-utils/metadata/server.model.ts
diff --git a/src/nshmp-ws-utils/models/metadata/string-parameter.model.ts b/libs/nshmp-ws-utils/metadata/string-parameter.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/metadata/string-parameter.model.ts
rename to libs/nshmp-ws-utils/metadata/string-parameter.model.ts
diff --git a/src/nshmp-ws-utils/models/response.model.ts b/libs/nshmp-ws-utils/response.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/response.model.ts
rename to libs/nshmp-ws-utils/response.model.ts
diff --git a/src/nshmp-ws-utils/models/service-error.model.ts b/libs/nshmp-ws-utils/service-error.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/service-error.model.ts
rename to libs/nshmp-ws-utils/service-error.model.ts
diff --git a/src/nshmp-ws-utils/models/status.model.ts b/libs/nshmp-ws-utils/status.model.ts
similarity index 100%
rename from src/nshmp-ws-utils/models/status.model.ts
rename to libs/nshmp-ws-utils/status.model.ts
diff --git a/src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts b/libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
similarity index 64%
rename from src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts
rename to libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
index 5807b6597ac7f2aeab690f630283f2ac304379d4..dc967302fe4b4be75a1e165214240a5bd566ecaa 100644
--- a/src/nshmp-ws/models/fault-sections-service/fault-sections-response.model.ts
+++ b/libs/nshmp-ws/fault-sections-service/fault-sections-response.model.ts
@@ -1,10 +1,10 @@
 import {FeatureCollection} from 'geojson';
 
-import {NshmId} from '../../../nshmp-lib';
-import {RateType} from '../../../nshmp-lib/models/gmm';
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
+import {RateType} from '../../nshmp-lib/gmm';
+import {NshmId} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
 
-export type FaultSectionsResponse = nshmpWsUtils.Response<
+export type FaultSectionsResponse = Response<
   FaultSectionRequestData,
   FeatureCollection
 >;
diff --git a/src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts b/libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
similarity index 63%
rename from src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts
rename to libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
index 62ae37480f5ff7fa74b1409ca3c77a5230ca7d70..b55636e7d7fad896721493cf85645df84af26ac2 100644
--- a/src/nshmp-ws/models/fault-sections-service/fault-sections-usage.model.ts
+++ b/libs/nshmp-ws/fault-sections-service/fault-sections-usage.model.ts
@@ -1,6 +1,6 @@
-import {NshmId} from '../../../nshmp-lib/models/nshm.model';
-import {Response} from '../../../nshmp-ws-utils';
-import {StringParameter} from '../../../nshmp-ws-utils/models/metadata';
+import {NshmId} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
+import {StringParameter} from '../../nshmp-ws-utils/metadata';
 
 export type FaultSectionUsage = Response<string, FaultSectionMetadataResponse>;
 
diff --git a/src/nshmp-ws/models/fault-sections-service/index.ts b/libs/nshmp-ws/fault-sections-service/index.ts
similarity index 100%
rename from src/nshmp-ws/models/fault-sections-service/index.ts
rename to libs/nshmp-ws/fault-sections-service/index.ts
diff --git a/src/nshmp-ws/models/gmm-services/gmm-response.model.ts b/libs/nshmp-ws/gmm-services/gmm-response.model.ts
similarity index 61%
rename from src/nshmp-ws/models/gmm-services/gmm-response.model.ts
rename to libs/nshmp-ws/gmm-services/gmm-response.model.ts
index 4e9b978ab5331f92171f26891195dac3af334641..00c0c79dfc13f86192842df3dcba9befce7efd29 100644
--- a/src/nshmp-ws/models/gmm-services/gmm-response.model.ts
+++ b/libs/nshmp-ws/gmm-services/gmm-response.model.ts
@@ -1,18 +1,15 @@
-import {Constraint, Series, XyDataGroup} from '../../../nshmp-haz';
-import {Gmm, GmmInput, Imt} from '../../../nshmp-lib/models/gmm';
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
+import {Constraint, Series, XyDataGroup} from '../../nshmp-haz';
+import {Gmm, GmmInput, Imt} from '../../nshmp-lib/gmm';
+import {Response} from '../../nshmp-ws-utils';
 
-export type GmmSpectraResponse = nshmpWsUtils.Response<
-  GmmRequestData,
-  GmmResponseData
->;
+export type GmmSpectraResponse = Response<GmmRequestData, GmmResponseData>;
 
-export type GmmDistanceResponse = nshmpWsUtils.Response<
+export type GmmDistanceResponse = Response<
   GmmRequestDataDistance,
   GmmResponseData
 >;
 
-export type GmmMagnitudeResponse = nshmpWsUtils.Response<
+export type GmmMagnitudeResponse = Response<
   GmmRequestDataMagnitude,
   GmmResponseData
 >;
diff --git a/src/nshmp-ws/models/gmm-services/gmm-usage.model.ts b/libs/nshmp-ws/gmm-services/gmm-usage.model.ts
similarity index 83%
rename from src/nshmp-ws/models/gmm-services/gmm-usage.model.ts
rename to libs/nshmp-ws/gmm-services/gmm-usage.model.ts
index ca50b0e4febc6b3025c5616bd9398cd4237089fc..2399171ae703bf7000fa877e8b1271788cc6509b 100644
--- a/src/nshmp-ws/models/gmm-services/gmm-usage.model.ts
+++ b/libs/nshmp-ws/gmm-services/gmm-usage.model.ts
@@ -1,28 +1,23 @@
-import * as nshmpWsUtils from '../../../nshmp-ws-utils';
+import {Response} from '../../nshmp-ws-utils';
+import {
+  EnumParameter,
+  EnumParameterValues,
+} from '../../nshmp-ws-utils/metadata';
 
 /**
  * Marker interface for gmm usage from nshmp-ws.
  */
-export type GmmSpectraUsage = nshmpWsUtils.Response<
-  string,
-  GmmSpectraUsageResponse
->;
+export type GmmSpectraUsage = Response<string, GmmSpectraUsageResponse>;
 
 /**
  * Marker interface for gmm/distance and gmm/hw-fw usage.
  */
-export type GmmDistanceUsage = nshmpWsUtils.Response<
-  string,
-  GmmDistanceUsageResponse
->;
+export type GmmDistanceUsage = Response<string, GmmDistanceUsageResponse>;
 
 /**
  * Marker interface for gmm/distance and gmm/hw-fw usage.
  */
-export type GmmMagnitudeUsage = nshmpWsUtils.Response<
-  string,
-  GmmMagnitudeUsageResponse
->;
+export type GmmMagnitudeUsage = Response<string, GmmMagnitudeUsageResponse>;
 
 /**
  * Gmm usage response in Response object.
@@ -133,7 +128,7 @@ export interface GmmSpectraUsageParameters extends GmmUsageParameters {
  * gmm/distance usage parameters.
  */
 export interface GmmDistanceUsageParameters extends GmmUsageParameters {
-  imt: nshmpWsUtils.metadata.EnumParameter<nshmpWsUtils.metadata.EnumParameterValues>;
+  imt: EnumParameter<EnumParameterValues>;
   rMin: GmmUsageParameter;
   rMax: GmmUsageParameter;
 }
@@ -142,7 +137,7 @@ export interface GmmDistanceUsageParameters extends GmmUsageParameters {
  * gmm/magnitude usage parameters.
  */
 export interface GmmMagnitudeUsageParameters extends GmmUsageParameters {
-  imt: nshmpWsUtils.metadata.EnumParameter<nshmpWsUtils.metadata.EnumParameterValues>;
+  imt: EnumParameter<EnumParameterValues>;
   mMin: GmmUsageParameter;
   mMax: GmmUsageParameter;
   distance: GmmUsageParameter;
diff --git a/src/nshmp-ws/models/gmm-services/index.ts b/libs/nshmp-ws/gmm-services/index.ts
similarity index 100%
rename from src/nshmp-ws/models/gmm-services/index.ts
rename to libs/nshmp-ws/gmm-services/index.ts
diff --git a/src/nshmp-ws/models/index.ts b/libs/nshmp-ws/index.ts
similarity index 72%
rename from src/nshmp-ws/models/index.ts
rename to libs/nshmp-ws/index.ts
index c40636271299e932201040341d36e5a6585f4ea1..0dcc3371c741f9f9f4b3bd846cae84c5113d5837 100644
--- a/src/nshmp-ws/models/index.ts
+++ b/libs/nshmp-ws/index.ts
@@ -1,3 +1,3 @@
 export * as faultSectionsService from './fault-sections-service';
-export * as gmmServices from './gmm-services';
+export * as gmmService from './gmm-services';
 export * as utilitiesService from './utilities-service';
diff --git a/src/nshmp-ws/models/utilities-service/index.ts b/libs/nshmp-ws/utilities-service/index.ts
similarity index 100%
rename from src/nshmp-ws/models/utilities-service/index.ts
rename to libs/nshmp-ws/utilities-service/index.ts
diff --git a/src/nshmp-ws/models/utilities-service/test-sites-response.ts b/libs/nshmp-ws/utilities-service/test-sites-response.ts
similarity index 59%
rename from src/nshmp-ws/models/utilities-service/test-sites-response.ts
rename to libs/nshmp-ws/utilities-service/test-sites-response.ts
index c4b79db86a27d84387e9d934f9284613801a6088..4c544e3eff93bf8c734008eda6ad096fe05d9809 100644
--- a/src/nshmp-ws/models/utilities-service/test-sites-response.ts
+++ b/libs/nshmp-ws/utilities-service/test-sites-response.ts
@@ -1,4 +1,4 @@
-import {NshmRegion} from '../../../nshmp-lib/models/nshm-region.model';
+import {NshmRegion} from '../../nshmp-lib/nshm';
 
 export interface TestSitesProperties {
   title: string;
diff --git a/src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts b/libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
similarity index 59%
rename from src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts
rename to libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
index 8579bfaa0b831d3c6271a650669684c1bc79e6a5..461da0e0104fed54d44f9e791e4b2c21333b4cbd 100644
--- a/src/nshmp-ws/models/utilities-service/test-sites-usage.model.ts
+++ b/libs/nshmp-ws/utilities-service/test-sites-usage.model.ts
@@ -1,6 +1,6 @@
-import {NshmRegion} from '../../../nshmp-lib/models/nshm-region.model';
-import {Response} from '../../../nshmp-ws-utils';
-import {StringParameter} from '../../../nshmp-ws-utils/models/metadata';
+import {NshmRegion} from '../../nshmp-lib/nshm';
+import {Response} from '../../nshmp-ws-utils';
+import {StringParameter} from '../../nshmp-ws-utils/metadata';
 
 export type TestSitesUsage = Response<string, TestSitesMetadataResponse>;
 
diff --git a/libs/plotly/index.ts b/libs/plotly/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cd96c0e4b22208fe4063ebbfd2af10504826570f
--- /dev/null
+++ b/libs/plotly/index.ts
@@ -0,0 +1,6 @@
+/* Export Plotly package */
+export * from './plotly-config.model';
+export * from './plotly-layout.model';
+export * from './plotly-legend.model';
+export * from './plotly-plot.model';
+export * from './plotly-utils';
diff --git a/src/plotly/models/plotly-config.model.ts b/libs/plotly/plotly-config.model.ts
similarity index 100%
rename from src/plotly/models/plotly-config.model.ts
rename to libs/plotly/plotly-config.model.ts
diff --git a/src/plotly/models/plotly-layout.model.ts b/libs/plotly/plotly-layout.model.ts
similarity index 100%
rename from src/plotly/models/plotly-layout.model.ts
rename to libs/plotly/plotly-layout.model.ts
diff --git a/src/plotly/models/plotly-legend.model.ts b/libs/plotly/plotly-legend.model.ts
similarity index 100%
rename from src/plotly/models/plotly-legend.model.ts
rename to libs/plotly/plotly-legend.model.ts
diff --git a/src/plotly/models/plotly-plot.model.ts b/libs/plotly/plotly-plot.model.ts
similarity index 100%
rename from src/plotly/models/plotly-plot.model.ts
rename to libs/plotly/plotly-plot.model.ts
diff --git a/src/plotly/utils/plotly-utils.ts b/libs/plotly/plotly-utils.ts
similarity index 100%
rename from src/plotly/utils/plotly-utils.ts
rename to libs/plotly/plotly-utils.ts
diff --git a/package-lock.json b/package-lock.json
index ebc34ff255a4dc5d916f220353f0db90251cb1aa..8ec5bd1a7ab1f874c1f0b62cb9c0098d1ee74f36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,16 +10,16 @@
       "license": "CC0-1.0",
       "dependencies": {
         "@types/d3-format": "^3.0.1",
-        "@types/leaflet": "^1.8.0",
+        "@types/leaflet": "^1.9.0",
         "@types/plotly.js": "^1.54.22",
         "change-case": "^4.1.2",
         "d3-format": "^3.1.0",
         "geojson": "^0.5.0",
         "leaflet": "^1.9.2",
-        "plotly.js": "^2.14.0"
+        "plotly.js": "^2.16.1"
       },
       "devDependencies": {
-        "@types/node": "^18.8.2",
+        "@types/node": "^18.11.9",
         "eslint-plugin-simple-import-sort": "^8.0.0",
         "gts": "^3.1.1",
         "husky": "^8.0.1",
@@ -480,9 +480,9 @@
       "dev": true
     },
     "node_modules/@types/leaflet": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.8.0.tgz",
-      "integrity": "sha512-+sXFmiJTFdhaXXIGFlV5re9AdqtAODoXbGAvxx02e5SHXL3ir7ClP5J7pahO8VmzKY3dth4RUS1nf2BTT+DW1A==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz",
+      "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==",
       "dependencies": {
         "@types/geojson": "*"
       }
@@ -500,9 +500,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "18.8.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz",
-      "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "node_modules/@types/normalize-package-data": {
@@ -3900,9 +3900,9 @@
       }
     },
     "node_modules/plotly.js": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.14.0.tgz",
-      "integrity": "sha512-bv3Re8FmgVJOyIFidAc24mbKLZQ/y/xEFWoFhJMAIpl9pPrB9I6OjAv/gYCKEraWj4VTK5nAPAOGnjcDjodf2g==",
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.1.tgz",
+      "integrity": "sha512-83BJWgbXSjeEl31+zq66ZzU/QWfd/CItzGm5mtYeWHWHyoOcCzHDW4I+QgkicGq0ntLZ2PfEb0fjM0qMzGGXVw==",
       "dependencies": {
         "@plotly/d3": "3.8.0",
         "@plotly/d3-sankey": "0.7.2",
@@ -5937,9 +5937,9 @@
       "dev": true
     },
     "@types/leaflet": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.8.0.tgz",
-      "integrity": "sha512-+sXFmiJTFdhaXXIGFlV5re9AdqtAODoXbGAvxx02e5SHXL3ir7ClP5J7pahO8VmzKY3dth4RUS1nf2BTT+DW1A==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.0.tgz",
+      "integrity": "sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==",
       "requires": {
         "@types/geojson": "*"
       }
@@ -5957,9 +5957,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "18.8.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz",
-      "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==",
+      "version": "18.11.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz",
+      "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==",
       "dev": true
     },
     "@types/normalize-package-data": {
@@ -8678,9 +8678,9 @@
       "dev": true
     },
     "plotly.js": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.14.0.tgz",
-      "integrity": "sha512-bv3Re8FmgVJOyIFidAc24mbKLZQ/y/xEFWoFhJMAIpl9pPrB9I6OjAv/gYCKEraWj4VTK5nAPAOGnjcDjodf2g==",
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.16.1.tgz",
+      "integrity": "sha512-83BJWgbXSjeEl31+zq66ZzU/QWfd/CItzGm5mtYeWHWHyoOcCzHDW4I+QgkicGq0ntLZ2PfEb0fjM0qMzGGXVw==",
       "requires": {
         "@plotly/d3": "3.8.0",
         "@plotly/d3-sankey": "0.7.2",
diff --git a/package.json b/package.json
index 277b28ea626b05ca5003c6227e6cceb39abedfc8..40fc8a95f3a3ac7ff7689f48e3468bffcbb283a1 100644
--- a/package.json
+++ b/package.json
@@ -2,8 +2,8 @@
   "name": "@ghsc/nshmp-web-utils",
   "version": "0.1.0",
   "description": "nshmp web utilities",
-  "types": "dist/src/index.d.ts",
-  "main": "dist/src/index.js",
+  "types": "libs/index.d.ts",
+  "main": "libs/index.js",
   "author": {
     "name": "Brandon Clayton",
     "email": "bclayton@usgs.gov"
@@ -20,16 +20,16 @@
   },
   "dependencies": {
     "@types/d3-format": "^3.0.1",
-    "@types/leaflet": "^1.8.0",
+    "@types/leaflet": "^1.9.0",
     "@types/plotly.js": "^1.54.22",
     "change-case": "^4.1.2",
     "d3-format": "^3.1.0",
     "geojson": "^0.5.0",
     "leaflet": "^1.9.2",
-    "plotly.js": "^2.14.0"
+    "plotly.js": "^2.16.1"
   },
   "devDependencies": {
-    "@types/node": "^18.8.2",
+    "@types/node": "^18.11.9",
     "eslint-plugin-simple-import-sort": "^8.0.0",
     "gts": "^3.1.1",
     "husky": "^8.0.1",
diff --git a/src/aws/index.ts b/src/aws/index.ts
deleted file mode 100644
index e9644dae478c707b7fbcbeb77dcead2c98ee2412..0000000000000000000000000000000000000000
--- a/src/aws/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/leaflet/index.ts b/src/leaflet/index.ts
deleted file mode 100644
index b28c1779202cb2de55e6a1b8fde9d76af0fd6dc7..0000000000000000000000000000000000000000
--- a/src/leaflet/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Export Leaflet package */
-
-export * from './models';
-export * from './utils/map.utils';
diff --git a/src/leaflet/models/index.ts b/src/leaflet/models/index.ts
deleted file mode 100644
index 0a1a5ba32c55693948d77f66f2a0c3172194bb33..0000000000000000000000000000000000000000
--- a/src/leaflet/models/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Export nshmp package */
-export * from './map-baselayer.model';
diff --git a/src/nshmp-haz/index.ts b/src/nshmp-haz/index.ts
deleted file mode 100644
index b4404b0b141ab9cb9576828da9579d9d8f7c39ee..0000000000000000000000000000000000000000
--- a/src/nshmp-haz/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Export nshmp package */
-export * from './models/www';
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts b/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts
deleted file mode 100644
index 839f2e4a8b3075369c61e02ee7e78a19a34b9ff2..0000000000000000000000000000000000000000
--- a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-response.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import {Tree} from '../../../../nshmp-lib/models/model/models';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-
-export type SourceLogicTreesResponse = nshmpWsUtils.Response<
-  SourceLogicTreesRequestData,
-  Tree
->;
-
-export interface SourceLogicTreesRequestData {
-  id: number;
-}
diff --git a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts b/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts
deleted file mode 100644
index 00f17e5a9051c9b53ce10d6d32690789a9e306c1..0000000000000000000000000000000000000000
--- a/src/nshmp-haz/models/www/source-logic-trees-service/source-logic-trees-usage.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import {SettingGroup} from '../../../../nshmp-lib/models/model/models';
-import * as nshmpWsUtils from '../../../../nshmp-ws-utils';
-import {HazardModelMetadata} from '../hazard-service';
-
-export type SourceLogicTreesUsage = nshmpWsUtils.Response<
-  string,
-  SourceLogicTreesMetadata
->;
-
-export interface SourceLogicTreesMetadata extends HazardModelMetadata {
-  trees: SettingGroup[];
-}
diff --git a/src/nshmp-lib/index.ts b/src/nshmp-lib/index.ts
deleted file mode 100644
index e05f6dbbd31d5214a4d77c4eab5b132fb0b24693..0000000000000000000000000000000000000000
--- a/src/nshmp-lib/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export * from './models/calc';
-export * from './models/data';
-export * from './models/geo';
-export * from './models/gmm';
-export * from './models/model';
-export * as model from './models/model';
-export * from './models/nshm.model';
-export * from './models/nshm-region.model';
diff --git a/src/nshmp-lib/models/model/index.ts b/src/nshmp-lib/models/model/index.ts
deleted file mode 100644
index 5b2056930e565d859f8ab63f3e7ca531e9df2796..0000000000000000000000000000000000000000
--- a/src/nshmp-lib/models/model/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * as mfd from './mfd';
-export * as models from './models';
-export * as sourceType from './source-type';
-export * as tectonicSettings from './tectonic-setting';
diff --git a/src/nshmp-ws-static/index.ts b/src/nshmp-ws-static/index.ts
deleted file mode 100644
index e9644dae478c707b7fbcbeb77dcead2c98ee2412..0000000000000000000000000000000000000000
--- a/src/nshmp-ws-static/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/nshmp-ws-utils/index.ts b/src/nshmp-ws-utils/index.ts
deleted file mode 100644
index e9644dae478c707b7fbcbeb77dcead2c98ee2412..0000000000000000000000000000000000000000
--- a/src/nshmp-ws-utils/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/nshmp-ws/index.ts b/src/nshmp-ws/index.ts
deleted file mode 100644
index e9644dae478c707b7fbcbeb77dcead2c98ee2412..0000000000000000000000000000000000000000
--- a/src/nshmp-ws/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './models';
diff --git a/src/plotly/index.ts b/src/plotly/index.ts
deleted file mode 100644
index 621f4f1993a86e6dbf7cd890091fb9516e7e4fc6..0000000000000000000000000000000000000000
--- a/src/plotly/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Export Plotly package */
-export * from './models/plotly-config.model';
-export * from './models/plotly-layout.model';
-export * from './models/plotly-legend.model';
-export * from './models/plotly-plot.model';
-export * from './utils/plotly-utils';
diff --git a/tsconfig.json b/tsconfig.json
index b49355e805d920f17ba308a88e7b55842b422d05..9993f29964561c4a39746cd6702739c5f0c750be 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,11 +2,11 @@
   "extends": "./node_modules/gts/tsconfig-google.json",
   "compilerOptions": {
     "rootDir": ".",
-    "outDir": "./dist/",
+    "outDir": ".",
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
     "lib": ["es2018", "DOM"]
   },
   "exclude": ["node_modules", "tmp", "dist"],
-  "include": ["src"]
+  "include": ["libs"]
 }