diff --git a/packages/website/docs/Functions.mdx b/packages/website/docs/Functions.mdx
new file mode 100644
index 00000000..6a0683cd
--- /dev/null
+++ b/packages/website/docs/Functions.mdx
@@ -0,0 +1,136 @@
+---
+sidebar_position: 7
+---
+
+import { SquiggleEditor } from '@quri/squiggle-components'
+
+# Squiggle Functions Reference
+
+## Distributions
+
+### Normal distribution
+
+The `normal(mean, sd)` function creates a normal distribution with the given mean
+and standard deviation.
+
+
+
+### Uniform distribution
+
+The `uniform(low, high)` function creates a uniform distribution between the
+two given numbers:
+
+
+
+
+### Lognormal distribution
+
+The `lognormal(mu, sigma)` returns the log of a normal distribution with parameters
+mu and sigma. The log of lognormal(mu, sigma) is a normal distribution with parameters
+mean mu and standard deviation sigma.
+
+
+
+An alternative format is also available. The "to" notation creates a lognormal
+distribution with a 90% confidence interval between the two numbers. We add
+this convinience as lognormal distributions are commonly used in practice
+
+
+
+Furthermore, it's also possible to create a lognormal from it's actual mean
+and standard deviation, using `lognormalFromMeanAndStdDev`:
+
+
+
+
+### Beta distribution
+
+The `beta(a, b)` function creates a beta distribution with parameters a and b:
+
+
+
+### Exponential distribution
+
+The `exponential(mean)` function creates an exponential distribution with the given
+mean.
+
+
+
+
+### The Triangular distribution
+
+The `triangular(a,b,c)` function creates a triangular distribution with lower
+bound a, mode b and upper bound c:
+
+
+
+### Multimodal distriutions
+
+The multimodal function combines 2 or more other distributions to create a weighted
+combination of the two. The first positional arguments represent the distributions
+to be combined, and the last argument is how much to weigh every distribution in the
+combination.
+
+
+
+It's possible to create discrete distributions using this method:
+
+
+
+As well as mixed distributions:
+
+
+
+## Other Functions
+
+### PDF of a distribution
+The `pdf(distribution, x)` function returns the density of a distribution at the
+given point x:
+
+
+
+
+### Inverse of a distribution
+
+The `inv(distribution, prob)` gives the value x or which the probability for all values
+lower than x is equal to prob. It is the inverse of `cdf`
+
+
+
+### CDF of a distribution
+
+The `cdf(distribution,x)` gives the cumulative probability of the distribution
+or all values lower than x. It is the inverse of `inv`:
+
+
+
+### Mean of a distribution
+The `mean(distribution)` function gives the mean (expected value) of a distribution:
+
+
+
+### Sampling a distribution
+The `sample(distribution)` samples a given distribution:
+
+
+
+### Exponential Scaling
+
+The `scaleExp(distribution, factor)` function scales a distribution's PDF exponentially
+in the y axis.
+
+
+
+### Multiply Scaling
+
+The `scaleMultiply(distribution, factor)` function scales a distribution's PDF by multiplication
+in the y axis.
+
+
+
+### Log scaling
+
+The `scaleLog(distribution, factor)` function scales a distribution's PDF by the log
+function in the y axis
+
+
diff --git a/packages/website/docs/Future-Features.md b/packages/website/docs/Future-Features.md
index 969bdf59..6370602e 100644
--- a/packages/website/docs/Future-Features.md
+++ b/packages/website/docs/Future-Features.md
@@ -1,5 +1,5 @@
---
-sidebar_position: 3
+sidebar_position: 4
---
# Future Features
@@ -79,3 +79,32 @@ Right now, Monte Carlo simulations are totally random. It would be nicer to be a
## Fixes
- Discrete distributions are particularly buggy. Try ``mm(1,2,3,4,5,6,7,8,9,10) .* (5 to 8)``
+
+## New Functions
+
+### Distributions
+```
+cauchy() //todo
+pareto() //todo
+metalog() //todo
+```
+
+Possibly change mm to mix, or mx(). Also, change input format, maybe to mx([a,b,c], [a,b,c]).
+
+
+### Functions
+```
+samples(distribution, n) //todo
+toPdf(distribution) //todo
+toCdf(distribution) //todo
+toHash(distribution) //todo. Make hash of content, like, {xs:[], ys:[]}
+trunctate(distribution, leftValue, rightValue) //todo
+leftTrunctate(distribution, leftValue) //todo
+rightTrunctate(distribution, rightValue) //todo
+distributionFromSamples(array, params) //todo
+distributionFromPoints() //todo
+distributionFromHash() //todo
+```
+
+
+
diff --git a/packages/website/docs/Introduction.md b/packages/website/docs/Introduction.md
new file mode 100644
index 00000000..ecfe7f02
--- /dev/null
+++ b/packages/website/docs/Introduction.md
@@ -0,0 +1,10 @@
+---
+sidebar_position: 1
+---
+
+# Squiggle
+
+Squiggle is a language for writing calculations under uncertainty. It has use
+cases in forecasting and writing better evaluations.
+
+The best way to get started with Squiggle is to [try it out yourself](https://playground.squiggle-language.com/).
diff --git a/packages/website/docs/Javscript-library.md b/packages/website/docs/Javscript-library.md
index 4456119d..60f70426 100644
--- a/packages/website/docs/Javscript-library.md
+++ b/packages/website/docs/Javscript-library.md
@@ -1,16 +1,36 @@
---
-sidebar_position: 2
+sidebar_position: 3
---
-# Javascript Library
+# Javascript Libraries
-There's a very simple javscript library for Squiggle here: https://www.npmjs.com/package/squiggle-experimental.
+There are two JavaScript packages currently available for Squiggle:
+ - [`@quri/squiggle-lang`](https://www.npmjs.com/package/@quri/squiggle-lang)
+ - [`@quri/squiggle-components`](https://www.npmjs.com/package/@quri/squiggle-components)
-You can see it live on this Observable page: [https://observablehq.com/d/a99e822870c4ca5f](https://observablehq.com/d/a99e822870c4ca5f).
+Types are available for both packages.
+## Squiggle Language
-## Simple Example
-```
-let squiggle = require("squiggle-experimental@0.1.9/dist/index.js")
-squiggle.runMePlease("3 + normal(50,1))
-```
\ No newline at end of file
+The `@quri/squiggle-lang` package exports a single function, `run`, which given
+a string of Squiggle code, will execute the code and return any exports and the
+environment created from the squiggle code.
+
+`run` has two optional arguments. The first optional argument allows you to set
+sampling settings for Squiggle when representing distributions. The second optional
+argument allows you to pass an environment previously created by another `run`
+call. Passing this environment will mean that all previously declared variables
+in the previous environment will be made available.
+
+The return type of `run` is a bit complicated, and comes from auto generated js
+code that comes from rescript. I highly recommend using typescript when using
+this library to help navigate the return type.
+
+## Squiggle Components
+
+The `@quri/squiggle-components` package offers several components and utilities
+for people who want to embed Squiggle components into websites. This documentation
+relies on `@quri/squiggle-components` frequently.
+
+We host [a storybook](https://components.squiggle-language.com/) with details
+and usage of each of the components made available.
diff --git a/packages/website/docs/Language.md b/packages/website/docs/Language.md
deleted file mode 100644
index 952fddce..00000000
--- a/packages/website/docs/Language.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-sidebar_position: 1
----
-
-# Squiggle Language
-
-## Distributions
-```js
-normal(a,b)
-uniform(a,b)
-lognormal(a,b)
-lognormalFromMeanAndStdDev(mean, stdev)
-beta(a,b)
-exponential(a)
-triangular(a,b,c)
-mm(a,b,c, [1,2,3]) //todo: change to mix, or mx(). Also, change input format, maybe to mx([a,b,c], [a,b,c]).
-cauchy() //todo
-pareto() //todo
-metalog() //todo
-```
-
-## Functions
-```js
-pdf(distribution, float)
-inv(distribution, float)
-cdf(distribution, float)
-mean(distribution)
-sample(distribution)
-scaleExp(distribution, float)
-scaleMultiply(distribution, float)
-scaleLog(distribution, float)
-samples(distribution, n) //todo
-toPdf(distribution) //todo
-toCdf(distribution) //todo
-toHash(distribution) //todo. Make hash of content, like, {xs:[], ys:[]}
-trunctate(distribution, leftValue, rightValue) //todo
-leftTrunctate(distribution, leftValue) //todo
-rightTrunctate(distribution, rightValue) //todo
-distributionFromSamples(array, params) //todo
-distributionFromPoints() //todo
-distributionFromHash() //todo
-log() //todo
-
-```
-
-## Example Functions
-
-```js
-ozzie_estimate(t) = lognormal({mean: 3 + (t+.1)^2.5, stdev: 8})
-nuño_estimate(t) = lognormal({mean: 3 + (t+.1)^2, stdev: 10})
-combined(t) = mm(ozzie_estimate(t) .+ nuño_estimate(t))
-combined
-```
-
-```js
-us_economy_2018 = (10.5 to 10.9)T
-growth_rate = 1.08 to 1.2
-us_economy(t) = us_economy_2018 * (growth_rate^t)
-
-us_population_2019 = 320M to 330M
-us_population_growth_rate = 1.01 to 1.1
-us_population(t) = us_population_2019 * (us_population_growth_rate^t)
-gdp_per_person(t) = us_economy(t)/us_population(t)
-gdp_per_person
-
-gdp_per_person
-```
diff --git a/packages/website/docs/Language.mdx b/packages/website/docs/Language.mdx
new file mode 100644
index 00000000..f73a779f
--- /dev/null
+++ b/packages/website/docs/Language.mdx
@@ -0,0 +1,51 @@
+---
+sidebar_position: 2
+---
+
+import { SquiggleEditor } from '@quri/squiggle-components'
+
+# Squiggle Language
+
+The squiggle language has a very simply syntax. The best way to get to understand
+it is by simply looking at examples.
+
+
+## Basic Language
+
+As an example:
+
+
+
+Squiggle can declare variables (`value_of_work = 10 to 70`) and declare exports
+(the lone `value_of_work` line). Variables can be used later in a squiggle program
+and even in other notebooks!
+
+An export is rendered to the output view so you can see your result.
+
+the exports can be expressions, such as:
+
+
+
+## Functions
+
+Squiggle supports functions, including the rendering of functions:
+
+
+
+## Squiggle units
+
+Squiggle supports using suffixes at the end of numbers to refer to units:
+
+
+
diff --git a/packages/website/docs/Three-Types-Of-Distributions.md b/packages/website/docs/Three-Types-Of-Distributions.md
index a5225e7b..a69f0b1c 100644
--- a/packages/website/docs/Three-Types-Of-Distributions.md
+++ b/packages/website/docs/Three-Types-Of-Distributions.md
@@ -1,5 +1,5 @@
---
-sidebar_position: 4
+sidebar_position: 5
---
# Three Formats of Distributions
diff --git a/packages/website/docusaurus.config.js b/packages/website/docusaurus.config.js
index a859c8ca..7d1bfc54 100644
--- a/packages/website/docusaurus.config.js
+++ b/packages/website/docusaurus.config.js
@@ -3,18 +3,35 @@
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
+const path = require('path');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Squiggle (alpha)',
- tagline: "Scorable programming, for use by forecasters",
- url: 'https://squiggle-documentation.netlify.app',
+ tagline: "Estimation language for forecasters",
+ url: 'https://squiggle-language.com',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
- organizationName: 'QURI', // Usually your GitHub org/user name.
- projectName: 'Squiggle', // Usually your repo name.
+ organizationName: 'QURIResearch', // Usually your GitHub org/user name.
+ projectName: 'squiggle', // Usually your repo name.
+
+ plugins: [
+ () => ({
+ configureWebpack(config, isServer, utils, content) {
+ return {
+ resolve: {
+ alias : {
+ "@quri/squiggle-components": path.resolve(__dirname, "../components/src"),
+ "@quri/squiggle-lang": path.resolve(__dirname, "../squiggle-lang/src/js")
+ }
+ }
+
+ };
+ }
+ })
+ ],
presets: [
[
@@ -51,7 +68,7 @@ const config = {
items: [
{
type: 'doc',
- docId: 'Language',
+ docId: 'Introduction',
position: 'left',
label: 'Documentation',
},