Skip to content
Automatically generate knexjs tables using simple, clean JSON
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
sql-json-schema @ cbf2f52

JSON to Knex

What it does

JSON to Knex dynamically creates tables by parsing a JSON structure into a series of chained knexjs functions using the input you specify.


const schema = {
  tables: [
      name: "todo",
      columns: [
          name: "userId",
          type: "integer",
          unsigned: true,
          references: "id",
          inTable: "users",
          onDelete: "SET NULL" // or e.g. "CASCADE"
          // all fields are null by default unless overridden
          name: "description",
          type: "string",
          default: ""
          name: "isDone",
          type: "boolean",
          default: false

will produce

// todo: add transpiled knex here

For more examples, see ./examples.


To run the test suite, just type npm test


To contribute, feel free to submit PRs that fix issues presented in tickets. Please include a test that verifies that the issue has been solved.


A schema is always represented as:

  tables: [
      name: "items",
      columns: [
          name: "foo", // whatever string you want, preferrable camelcase
          type: "bar" // 'string', 'boolean', etc
    // ...

Column objects have a variety of options that can be specified:

key type default description
name string null Required. Column name in table. Should be camelCased (e.g. "email" or "emailAddress")
type enum null Required. Data type of column (possible values: "binary", "string", "text", "dateTime", "time", "date", "increments", "integer", "json", "index")
nullable bool true Whether or not the column can be null
primary bool false Whether or not this is the primary key of the table
unique bool false Whether or not the value is constrained to being unique
unsigned bool false Applicable only to integers (TODO: not sure about this), whether or not the value is represented as a signed or unsigned integer.
inTable string null Required if references is specified. The name of the table referenced by this foreign key.
references string null The name of the column of table inTable referenced by this foreign key.
foreign string null Alias for references
onDelete enum null If references is specified, specifies what happens to this item when the foreignkey record is deleted (values: "SET NULL", "CASCADE", "SET DEFAULT", "NO ACTION", "RESTRICT")
default string null Sets default value of column. For strings, include inner quotes, e.g. "'hello world'"
defaultTo string null Alias for default
index bool false If true, generates an index on this field named ${tableName}_${columnName}
columns string[] null Required if type == "index". Specifies the columns by name-as-string to include in the index formed by this column. (NOTE: type: "index" is different from index: true. The former adds a multi-column manually-named index and the latter adds a single-column, automatically-named index)
indexType string null If type == "index", and the database is postgres or MySQL, specifies the index type as outlined in the respective db's documentation.
You can’t perform that action at this time.