diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index f134436405..c5881179f8 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -3,7 +3,6 @@
 <!-- START doctoc generated TOC please keep comment here to allow auto update -->
 <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 
-
 - [Getting started](#getting-started)
   - [Useful Commands](#useful-commands)
 - [Workflow](#workflow)
@@ -153,10 +152,7 @@ These changes are required to setup internal tooling and package publishing.
 -  "files": [
 -    "lib"
 -  ],
-+  "jsnext:main": "dist/es/index.js",
-+  "main": "dist/commonjs/index.js",
-+  "module": "dist/es/index.js",
-+  "types": "dist/es/index.d.ts",
++  "main": "src/index.ts",
 +  "sideEffects": false,
 +  "files": [
 +    "dist"
@@ -174,6 +170,8 @@ These changes are required to setup internal tooling and package publishing.
 
 You can also use `gulp bundle:package` to bundle your package with UMD.
 
+The `main` field is locally set to point to the source to help project references work. It will be updated before publish to point to `dist/commonjs/index.js`. `module` and `jsnext:main` (`dist/es/index.js`) and `types` (`dist/es/index.d.ts`) will also be added. See `scripts/tasks/publishPrepareTask.ts` for details. (Having `types` present earlier with its final value causes problems resolving project references.)
+
 #### Create `tsconfig.json`
 
 If your package uses TypeScript, please also create a new `tsconfig.json` and place it in `packages/__DIRECTORY_NAME__`. An example config:
diff --git a/build/tsconfig.common.json b/build/tsconfig.common.json
index b19551ccc6..af762b0def 100644
--- a/build/tsconfig.common.json
+++ b/build/tsconfig.common.json
@@ -3,14 +3,6 @@
     "module": "commonjs",
     "target": "es5",
     "lib": ["es2015", "dom"],
-    "baseUrl": "../",
-    "paths": {
-      "@fluentui/docs": ["docs"],
-      "@fluentui/e2e": ["e2e"],
-      "@fluentui/internal-tooling": ["build"],
-      "@fluentui/perf": ["perf"],
-      "@fluentui/*": ["packages/*/src"]
-    },
     "types": ["node", "jest"],
     "typeRoots": ["../types", "../node_modules/@types"],
     "jsx": "react",
diff --git a/build/tsconfig.docs.json b/build/tsconfig.docs.json
index 93fc104626..aec2c150cd 100644
--- a/build/tsconfig.docs.json
+++ b/build/tsconfig.docs.json
@@ -1,13 +1,24 @@
 {
   "extends": "./tsconfig.common.json",
   "compilerOptions": {
+    // "composite": true,
     "module": "esnext",
+    "baseUrl": "../",
     "paths": {
-      "@fluentui/*": ["packages/*/src"],
       "docs/*": ["docs/*"],
       "src/*": ["packages/react/src/*"],
       "test/*": ["packages/react/test/*"]
     }
   },
-  "include": ["../docs/src", "../packages/react/src", "../types"]
+  "include": ["../docs/src", "../types"]
+  // "references": [
+  //   { "path": "../packages/ability-attributes" },
+  //   { "path": "../packages/accessibility" },
+  //   { "path": "../packages/code-sandbox" },
+  //   { "path": "../packages/docs-components" },
+  //   { "path": "../packages/react" },
+  //   { "path": "../packages/react-component-event-listener" },
+  //   { "path": "../packages/react-component-ref" },
+  //   { "path": "../packages/styles" }
+  // ]
 }
diff --git a/build/tsconfig.e2e.json b/build/tsconfig.e2e.json
index d344c4a473..c4d43b8db3 100644
--- a/build/tsconfig.e2e.json
+++ b/build/tsconfig.e2e.json
@@ -1,7 +1,8 @@
 {
   "extends": "./tsconfig.common.json",
   "compilerOptions": {
-    "module": "esnext"
+    "module": "esnext",
+    "allowSyntheticDefaultImports": true
   },
-  "include": ["../packages/react/src", "../e2e", "../types"]
+  "include": ["../e2e", "../types"]
 }
diff --git a/build/tsconfig.test.json b/build/tsconfig.test.json
deleted file mode 100644
index 89985ae7f9..0000000000
--- a/build/tsconfig.test.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "extends": "./tsconfig.common.json",
-  "compilerOptions": {
-    "module": "esnext"
-  },
-  "include": ["../packages", "../docs/src", "../types"]
-}
diff --git a/docs/package.json b/docs/package.json
index 4a6d0b9394..69f32e011c 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -4,6 +4,14 @@
   "private": true,
   "license": "MIT",
   "dependencies": {
+    "@fluentui/ability-attributes": "^0.43.0",
+    "@fluentui/accessibility": "^0.43.0",
+    "@fluentui/code-sandbox": "^0.43.0",
+    "@fluentui/docs-components": "^0.43.0",
+    "@fluentui/react": "^0.43.0",
+    "@fluentui/react-component-event-listener": "^0.43.0",
+    "@fluentui/react-component-ref": "^0.43.0",
+    "@fluentui/styles": "^0.43.0",
     "color": "^3.1.0",
     "copy-to-clipboard": "^3.2.0",
     "faker": "^4.1.0",
diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json
index 280fa8b251..db26086b63 100644
--- a/e2e/tsconfig.json
+++ b/e2e/tsconfig.json
@@ -1,8 +1,3 @@
 {
-  "extends": "../build/tsconfig.common.json",
-  "compilerOptions": {
-    "module": "esnext",
-    "allowSyntheticDefaultImports": true
-  },
-  "include": ["../packages/react/src", "../e2e", "../types"]
+  "extends": "../build/tsconfig.e2e.json"
 }
diff --git a/just.config.ts b/just.config.ts
new file mode 100644
index 0000000000..4b0d014079
--- /dev/null
+++ b/just.config.ts
@@ -0,0 +1,4 @@
+import { task } from 'just-scripts'
+import { publishPrepareTask } from './scripts/tasks/publishPrepareTask'
+
+task('publish:prepare', publishPrepareTask)
diff --git a/package.json b/package.json
index 2b58901b95..922159810f 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
     "prettier:fix": "prettier --write \"**/*.{ts,tsx}\"",
     "precommit": "lint-staged",
     "postcommit": "git update-index --again",
-    "prerelease": "yarn ci && cross-env NODE_ENV=production yarn build",
+    "prerelease": "yarn ci && cross-env NODE_ENV=production yarn build && just-scripts publish:prepare",
     "postrelease": "yarn deploy:docs",
     "release:major": "yarn prerelease && lerna publish major && yarn postrelease",
     "release:minor": "yarn prerelease && lerna publish minor && yarn postrelease",
diff --git a/packages/ability-attributes/package.json b/packages/ability-attributes/package.json
index 2b73a20d93..0bf9b4eb68 100644
--- a/packages/ability-attributes/package.json
+++ b/packages/ability-attributes/package.json
@@ -14,10 +14,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/ability-attributes",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "publishConfig": {
     "access": "public"
   },
@@ -27,6 +25,5 @@
     "clean": "gulp bundle:package:clean",
     "schema": "allyschema -c \"process.env.NODE_ENV !== 'production'\" schema.json > ./src/schema.ts"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/accessibility/package.json b/packages/accessibility/package.json
index 738605ea76..af69dc6bf1 100644
--- a/packages/accessibility/package.json
+++ b/packages/accessibility/package.json
@@ -17,10 +17,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/accessibility",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "publishConfig": {
     "access": "public"
   },
@@ -31,6 +29,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/code-sandbox/package.json b/packages/code-sandbox/package.json
index 9b93d5e637..de26c87893 100644
--- a/packages/code-sandbox/package.json
+++ b/packages/code-sandbox/package.json
@@ -14,10 +14,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/code-sandbox",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "@fluentui/react": "*",
     "react": "^16.8.0",
@@ -31,6 +29,5 @@
     "build": "gulp bundle:package:no-umd",
     "clean": "gulp bundle:package:clean"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/digest/package.json b/packages/digest/package.json
index d12998a7f3..6c54d487e3 100644
--- a/packages/digest/package.json
+++ b/packages/digest/package.json
@@ -2,7 +2,7 @@
   "name": "@fluentui/digest",
   "version": "0.43.0",
   "private": true,
-  "main": "lib/digest.js",
+  "main": "src/digest.ts",
   "module": "lib/digest.js",
   "license": "MIT",
   "bin": {
diff --git a/packages/digest/tsconfig.json b/packages/digest/tsconfig.json
index e76052b460..896142caf0 100644
--- a/packages/digest/tsconfig.json
+++ b/packages/digest/tsconfig.json
@@ -1,12 +1,13 @@
 {
   "compilerOptions": {
+    "composite": true,
     "outDir": "lib",
     "lib": ["es2015", "dom"],
     "jsx": "react",
     "moduleResolution": "node",
     "declaration": true,
     "skipLibCheck": true,
-    "types": ["node", "react"],
+    "types": ["node"],
     "baseUrl": ".",
     "allowSyntheticDefaultImports": true,
     "paths": {
diff --git a/packages/docs-components/package.json b/packages/docs-components/package.json
index d5e29d4e0e..29aac52a5a 100644
--- a/packages/docs-components/package.json
+++ b/packages/docs-components/package.json
@@ -15,10 +15,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/docs-components",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "prettier": "^1.19.1",
     "react": "^16.8.0",
@@ -32,6 +30,5 @@
     "build": "gulp bundle:package:no-umd",
     "clean": "gulp bundle:package:clean"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/perf-test/tsconfig.json b/packages/perf-test/tsconfig.json
index 6b7b72dc5a..5cef9c265f 100644
--- a/packages/perf-test/tsconfig.json
+++ b/packages/perf-test/tsconfig.json
@@ -1,10 +1,11 @@
 {
   "extends": "../../build/tsconfig.docs.json",
   "compilerOptions": {
+    "composite": true,
     "rootDir": "src",
     "outDir": "lib",
     "types": ["node", "jest", "expect-puppeteer", "jest-environment-puppeteer"]
   },
   "include": ["src"],
-  "references": []
+  "references": [{ "path": "../digest" }]
 }
diff --git a/packages/react-bindings/package.json b/packages/react-bindings/package.json
index 2a2e24cdef..b2ea6ae2fd 100644
--- a/packages/react-bindings/package.json
+++ b/packages/react-bindings/package.json
@@ -21,10 +21,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/react-bindings",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "react": "^16.8.0",
     "react-dom": "^16.8.0"
@@ -39,6 +37,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react-bindings/tsconfig.json b/packages/react-bindings/tsconfig.json
index fb067461e1..9f61f4b4b5 100644
--- a/packages/react-bindings/tsconfig.json
+++ b/packages/react-bindings/tsconfig.json
@@ -10,11 +10,5 @@
     "strictNullChecks": true
   },
   "include": ["src", "test"],
-  "references": [
-    { "path": "../accessibility" },
-    { "path": "../state" },
-    { "path": "../styles" },
-    { "path": "../react-component-event-listener" },
-    { "path": "../react-component-ref" }
-  ]
+  "references": [{ "path": "../accessibility" }, { "path": "../state" }, { "path": "../styles" }]
 }
diff --git a/packages/react-component-event-listener/package.json b/packages/react-component-event-listener/package.json
index 8098f24e28..01d69fb681 100644
--- a/packages/react-component-event-listener/package.json
+++ b/packages/react-component-event-listener/package.json
@@ -16,10 +16,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/react-component-event-listener",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "react": "^16.8.0",
     "react-dom": "^16.8.0"
@@ -34,6 +32,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react-component-nesting-registry/package.json b/packages/react-component-nesting-registry/package.json
index 9bf2d562e1..710b3c4869 100644
--- a/packages/react-component-nesting-registry/package.json
+++ b/packages/react-component-nesting-registry/package.json
@@ -16,10 +16,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/react-component-nesting-registry",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "react": "^16.8.0",
     "react-dom": "^16.8.0"
@@ -34,6 +32,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react-component-ref/package.json b/packages/react-component-ref/package.json
index f236c65c19..c757623f37 100644
--- a/packages/react-component-ref/package.json
+++ b/packages/react-component-ref/package.json
@@ -18,10 +18,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/react-component-ref",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "react": "^16.8.0",
     "react-dom": "^16.8.0"
@@ -36,6 +34,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react-proptypes/package.json b/packages/react-proptypes/package.json
index b2c198db68..2d745710a7 100644
--- a/packages/react-proptypes/package.json
+++ b/packages/react-proptypes/package.json
@@ -17,10 +17,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/react-proptypes",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "publishConfig": {
     "access": "public"
   },
@@ -31,6 +29,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react/package.json b/packages/react/package.json
index 4dc17aeb2a..693b145074 100644
--- a/packages/react/package.json
+++ b/packages/react/package.json
@@ -39,10 +39,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react#readme",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "peerDependencies": {
     "react": "^16.8.0",
     "react-dom": "^16.8.0"
@@ -57,6 +55,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json
index 61bd5687e9..e9a03cf5c8 100644
--- a/packages/react/tsconfig.json
+++ b/packages/react/tsconfig.json
@@ -3,20 +3,21 @@
   "compilerOptions": {
     "composite": true,
     "outDir": "dist/dts",
+    "baseUrl": ".",
     "paths": {
-      "docs/*": ["docs/*"],
-      "src/*": ["packages/react/src/*"],
-      "test/*": ["packages/react/test/*"]
+      "docs/*": ["../..docs/*"],
+      "src/*": ["./src/*"],
+      "test/*": ["./test/*"]
     }
   },
   "include": ["src", "test"],
   "references": [
     { "path": "../accessibility" },
-    { "path": "../styles" },
     { "path": "../react-bindings" },
     { "path": "../react-component-event-listener" },
     { "path": "../react-component-nesting-registry" },
     { "path": "../react-component-ref" },
-    { "path": "../react-proptypes" }
+    { "path": "../react-proptypes" },
+    { "path": "../styles" }
   ]
 }
diff --git a/packages/state/package.json b/packages/state/package.json
index dc070e337d..7f2a7cfa31 100644
--- a/packages/state/package.json
+++ b/packages/state/package.json
@@ -15,10 +15,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/state",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "publishConfig": {
     "access": "public"
   },
@@ -27,6 +25,5 @@
     "build": "gulp bundle:package:no-umd",
     "clean": "gulp bundle:package:clean"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/packages/styles/package.json b/packages/styles/package.json
index 51ad1d7e8a..e6eb04db44 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -17,10 +17,8 @@
     "dist"
   ],
   "homepage": "https://github.com/microsoft/fluent-ui-react/tree/master/packages/styles",
-  "jsnext:main": "dist/es/index.js",
   "license": "MIT",
-  "main": "dist/commonjs/index.js",
-  "module": "dist/es/index.js",
+  "main": "src/index.ts",
   "publishConfig": {
     "access": "public"
   },
@@ -31,6 +29,5 @@
     "test": "gulp test",
     "test:watch": "gulp test:watch"
   },
-  "sideEffects": false,
-  "types": "dist/es/index.d.ts"
+  "sideEffects": false
 }
diff --git a/scripts/config/typescript/tsconfig.stardust-ui.json b/scripts/config/typescript/tsconfig.stardust-ui.json
deleted file mode 100644
index 45145e52ca..0000000000
--- a/scripts/config/typescript/tsconfig.stardust-ui.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "compilerOptions": {
-    "module": "commonjs",
-    "target": "es5",
-    "lib": ["es2015", "dom"],
-    "types": ["node", "jest"],
-    "jsx": "react",
-    "importHelpers": true,
-    "moduleResolution": "node",
-    "sourceMap": true,
-    "allowJs": false,
-    "noImplicitReturns": true,
-    "noImplicitThis": false,
-    "noImplicitAny": false,
-    "strictNullChecks": false,
-    "noUnusedLocals": true,
-    "esModuleInterop": true
-  }
-}
diff --git a/scripts/tasks/publishPrepareTask.ts b/scripts/tasks/publishPrepareTask.ts
index fcddc8f199..4c52213c5b 100644
--- a/scripts/tasks/publishPrepareTask.ts
+++ b/scripts/tasks/publishPrepareTask.ts
@@ -8,11 +8,23 @@ export function publishPrepareTask() {
   const allInfo = getAllPackageInfo()
 
   for (const info of Object.values(allInfo)) {
-    if (info.packageJson.main && info.packageJson.main.startsWith('src/index')) {
+    if (info.packageJson.main && info.packageJson.main.startsWith('src/')) {
       const newPackageJson = {
         ...info.packageJson,
-        main: info.packageJson.main.replace('src/', 'lib/').replace(/\.tsx?/, '.js'),
       }
+
+      if (fs.existsSync(path.join(info.packagePath, 'just.config.ts'))) {
+        newPackageJson.main = info.packageJson.main.replace('src/', 'lib/').replace(/\.tsx?/, '.js')
+      } else {
+        const entry = info.packageJson.main.replace('src/', 'dist/es/').replace(/\.tsx?/, '.js')
+        Object.assign(newPackageJson, {
+          main: entry.replace('/es/', '/commonjs/'),
+          module: entry,
+          'jsnext:main': entry,
+          types: entry.replace('.js', '.d.ts'),
+        })
+      }
+
       fs.writeFileSync(
         path.join(root, info.packagePath, 'package.json'),
         `${JSON.stringify(newPackageJson, null, 2)}\n`,
diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json
new file mode 100644
index 0000000000..d46dcba57f
--- /dev/null
+++ b/scripts/tsconfig.json
@@ -0,0 +1,3 @@
+{
+  "extends": "./config/typescript/tsconfig.common.json"
+}