diff --git a/.gitignore b/.gitignore
index d29ae381..78fb54c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ postgraphile/package-lock.json
 vulcanizedb.log
 db/migrations/20*.sql
 plugins/*.so
+postgraphile/*.toml
diff --git a/postgraphile/README.md b/postgraphile/README.md
index 0bd5958c..cd17c7d2 100644
--- a/postgraphile/README.md
+++ b/postgraphile/README.md
@@ -13,6 +13,15 @@ Build the docker image in this directory. Start the `GraphiQL` frontend by:
 * Run the container (ex. `docker run -e DATABASE_HOST=localhost -e DATABASE_NAME=vulcanize_public -e DATABASE_USER=vulcanize -e DATABASE_PASSWORD=vulcanize -d m0ar/images:postgraphile-alpine`)
 * GraphiQL is available at `:3000/graphiql`
 
+By default, this build will expose only the "public" schema - to add other schemas, use a config file `config.toml` and set the env var `CONFIG_PATH` to point to its location. Example `toml`:
+
+```
+[database]
+    name     = "vulcanize_public"
+    hostname = "localhost"
+    port = 5432
+    schemas = ["public", "yourschema"]
+```
 
 ## Building
 
diff --git a/postgraphile/package.json b/postgraphile/package.json
index 42ef634b..c085ad20 100644
--- a/postgraphile/package.json
+++ b/postgraphile/package.json
@@ -7,6 +7,7 @@
     "lint": "tslint --project ./tsconfig.json --config ./tslint.json",
     "postinstall": "rm -rf node_modules/@graphile && mkdir node_modules/@graphile && cp -R ./vendor/postgraphile-supporter/ ./node_modules/@graphile/plugin-supporter/",
     "start": "npm run build && node ./build/dist/vulcanize-postgraphile-server.js",
+    "dev": "./node_modules/typescript/bin/tsc && node build/dist/src/index.js",
     "test": "rm -rf ./build/spec && tsc --build ./tsconfig.test.json && jasmine --config=./spec/support/jasmine.json",
     "test:ci": "npm run lint && npm run test"
   },
diff --git a/postgraphile/spec/config/parse.spec.ts b/postgraphile/spec/config/parse.spec.ts
index 4756cb3c..954cf599 100644
--- a/postgraphile/spec/config/parse.spec.ts
+++ b/postgraphile/spec/config/parse.spec.ts
@@ -33,7 +33,8 @@ describe('parseConfig', () => {
     const databaseConfig = parseConfig(
       readCallback, tomlParseCallback, configPath);
 
-    expect(databaseConfig.host).toEqual('postgres://user:password@example.com:1234');
+    expect(databaseConfig.host)
+      .toEqual('postgres://user:password@example.com:1234');
   });
 
   it('provides the database name', () => {
diff --git a/postgraphile/spec/server/config.spec.ts b/postgraphile/spec/server/config.spec.ts
index 1a6c17f9..964bcf97 100644
--- a/postgraphile/spec/server/config.spec.ts
+++ b/postgraphile/spec/server/config.spec.ts
@@ -21,7 +21,11 @@ describe('buildServerConfig', () => {
   let databaseConfig: DatabaseConfig;
 
   beforeEach(() => {
-    databaseConfig = { host: 'example.com', database: 'example_database' };
+    databaseConfig = {
+      host: 'example.com',
+      database: 'example_database',
+      schemas: ['public']
+    };
 
     postgraphileMiddleware = jasmine
       .createSpyObj<PostgraphileMiddleware>(['call']),
@@ -84,7 +88,7 @@ describe('buildServerConfig', () => {
   it('provides the database config to Postgraphile', () => {
     expect(serverUtilities.postgraphile).toHaveBeenCalledWith(
       `${databaseConfig.host}/${databaseConfig.database}`,
-      ["public"],
+      databaseConfig.schemas,
       jasmine.any(Object));
   });
 
diff --git a/postgraphile/src/adapters/fs.ts b/postgraphile/src/adapters/fs.ts
index 68716e55..7f42e893 100644
--- a/postgraphile/src/adapters/fs.ts
+++ b/postgraphile/src/adapters/fs.ts
@@ -8,4 +8,4 @@ export type ReadFileSyncCallback = (
 ) => string | Buffer;
 
 export type TomlParseCallback
-  = (fileContents: string) => { [key: string]: { [key: string]: string } };
+  = (fileContents: string) => { [key: string]: { [key: string]: any } };
diff --git a/postgraphile/src/adapters/postgraphile.ts b/postgraphile/src/adapters/postgraphile.ts
index 17e4bf4e..37a0ecfe 100644
--- a/postgraphile/src/adapters/postgraphile.ts
+++ b/postgraphile/src/adapters/postgraphile.ts
@@ -9,7 +9,7 @@ import { PluginHookFn } from 'postgraphile/build/postgraphile/pluginHook';
 export interface PostgraphileMiddleware extends RequestHandler {}
 
 export interface PostgraphileOptions {
-  pluginHook: PluginHookFn,
+  pluginHook: PluginHookFn;
   simpleSubscriptions: boolean;
   watchPg: boolean;
   enableCors: boolean;
diff --git a/postgraphile/src/config/parse.ts b/postgraphile/src/config/parse.ts
index 513aa4fe..30960bbc 100644
--- a/postgraphile/src/config/parse.ts
+++ b/postgraphile/src/config/parse.ts
@@ -6,8 +6,10 @@ export const MISSING_PATH_MESSAGE = `No path to config toml file provided, `
   + `please check the value of ${CONFIG_PATH_KEY} in your environment`;
 
 export const MISSING_HOST_MESSAGE = 'No database host provided in config toml';
-export const MISSING_USER_MESSAGE = 'No database user & password provided in config toml';
-export const MISSING_DATABASE_MESSAGE = 'No database name provided in config toml';
+export const MISSING_USER_MESSAGE = 'No database user & password '
+  + 'provided in config toml';
+export const MISSING_DATABASE_MESSAGE = 'No database name provided '
+  + 'in config toml';
 
 export function parseConfig(
   readCallback: ReadFileSyncCallback,
@@ -19,16 +21,18 @@ export function parseConfig(
   let database = '';
   let user = '';
   let password = '';
+  let schemas = ['public'];
 
   if (configPath) {
-      const tomlContents = readCallback(`${configPath}`).toString();
-      const parsedToml = tomlParseCallback(tomlContents);
+    const tomlContents = readCallback(`${configPath}`).toString();
+    const parsedToml = tomlParseCallback(tomlContents);
 
-      host = parsedToml['database']['hostname'];
-      port = parsedToml['database']['port'];
-      database = parsedToml['database']['name'];
-      user = parsedToml['database']['user'];
-      password = parsedToml['database']['password'];
+    host = parsedToml['database']['hostname'];
+    port = parsedToml['database']['port'];
+    database = parsedToml['database']['name'];
+    user = parsedToml['database']['user'];
+    password = parsedToml['database']['password'];
+    schemas = parsedToml['database']['schemas'];
   }
 
   // Overwrite config values with env. vars if such are set
@@ -50,5 +54,9 @@ export function parseConfig(
     throw new Error(MISSING_USER_MESSAGE);
   }
 
-  return { host: `postgres://${user}:${password}@${host}:${port}`, database };
+  return {
+    host: `postgres://${user}:${password}@${host}:${port}`,
+    database,
+    schemas
+  };
 }
diff --git a/postgraphile/src/server/config.ts b/postgraphile/src/server/config.ts
index e2be53a1..c2a2bace 100644
--- a/postgraphile/src/server/config.ts
+++ b/postgraphile/src/server/config.ts
@@ -39,7 +39,7 @@ export function buildServerConfig(
 
   const middleware: PostgraphileMiddleware = utilities.postgraphile(
     `${databaseConfig.host}/${databaseConfig.database}`,
-    ["public"],
+    databaseConfig.schemas,
     options
   );
 
diff --git a/postgraphile/src/server/interface.ts b/postgraphile/src/server/interface.ts
index b1d251b7..cd534d10 100644
--- a/postgraphile/src/server/interface.ts
+++ b/postgraphile/src/server/interface.ts
@@ -17,6 +17,7 @@ import { PluginHookFn } from 'postgraphile/build/postgraphile/pluginHook';
 export interface DatabaseConfig {
   host: string;
   database: string;
+  schemas: string[];
 }
 
 export interface ServerConfig {
@@ -32,5 +33,5 @@ export interface ServerUtilities {
   httpServerFactory: CreateHttpServerCallback;
   passport: StaticPassportProvider;
   postgraphile: PostgraphileInitCallback;
-  pluginHook: PluginHookFn
+  pluginHook: PluginHookFn;
 }