diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..b28b018
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,24 @@
+name: Deploy github pages with docs
+on:
+ push:
+ branches:
+ - master
+ - main
+permissions:
+ contents: write
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: 3.x
+ - uses: actions/cache@v3
+ with:
+ key: mkdocs-material-${{ github.ref }}
+ path: .cache
+ restore-keys: |
+ mkdocs-material-
+ - run: pip install mkdocs-material
+ - run: mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index 9ccb25f..c9583fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,6 @@ dblab-build
# Dev binary
dblab
+
+
+.idea/
diff --git a/docs/contribute.md b/docs/contribute.md
new file mode 100644
index 0000000..76c629f
--- /dev/null
+++ b/docs/contribute.md
@@ -0,0 +1,7 @@
+- Fork this repository
+- Create a new feature branch for a new functionality or bugfix
+- Commit your changes
+- Execute test suite
+- Push your code and open a new pull request
+- Use [issues](https://github.com/danvergara/dblab/issues) for any questions
+- Check [wiki](https://github.com/danvergara/dblab/wiki) for extra documentation
\ No newline at end of file
diff --git a/docs/css/extra.css b/docs/css/extra.css
new file mode 100644
index 0000000..6f2e74c
--- /dev/null
+++ b/docs/css/extra.css
@@ -0,0 +1,4 @@
+.center {
+ display: block;
+ margin: 0 auto;
+}
\ No newline at end of file
diff --git a/docs/features.md b/docs/features.md
new file mode 100644
index 0000000..40c5cbb
--- /dev/null
+++ b/docs/features.md
@@ -0,0 +1,5 @@
+The key features are:
+
+ * Cross-platform support OSX/Linux/Windows 32/64-bit
+ * Simple installation (distributed as a single binary)
+ * Zero dependencies.
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..e2a286d
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,69 @@
+# Welcome to **dblab**
+
+{ width="300" : .center }
+
+Cross-platform, zero dependencies, terminal based UI application for your Data Bases.
+
+  [](https://github.com/danvergara/dblab/releases)
+
+---
+
+**Documentation**: https://dblab.danvergara.com
+
+**Source Code**: https://github.com/danvergara/dblab
+
+---
+
+## Overview
+
+**dblab** is a fast and lightweight interactive terminal based UI application for PostgreSQL, MySQL and SQLite3, written in Go and works on OSX, Linux and Windows machines.
+
+The main idea behind using Go for backend development is to utilize the ability of the compiler to produce zero-dependency binaries for multiple platforms.
+
+dblab was created as an attempt to build a very simple and portable application to interact with local or remote PostgreSQL/MySQL/SQLite3 databases.
+
+The key features are:
+
+ * Cross-platform support OSX/Linux/Windows 32/64-bit
+ * Simple installation (distributed as a single binary)
+ * Zero dependencies.
+
+## Installation
+
+{--if you need to work with SQLite3, install the CGO enabled binary using the proper bash script listed below.--}
+
+{==
+
+The above comment is deprecated and CGO is not needed anymore.
+There will be a single binary capable to deal with all supported clients.
+
+==}
+
+### Homebrew installation
+
+It works with Linux too.
+
+```
+$ brew install danvergara/tools/dblab
+```
+
+Or
+
+```
+$ brew tap danvergara/tools
+$ brew install dblab
+```
+
+### Manual Binary Installation
+The binaries are compatible with Linux, OSX and Windows.
+You can manually download and install the binary release from [the release page](https://github.com/danvergara/dblab/releases).
+
+### Automated installation/update
+> Don't forget to always verify what you're piping into bash
+
+Install the binary using our bash script:
+
+```sh
+curl https://raw.githubusercontent.com/danvergara/dblab/master/scripts/install_update_linux.sh | bash
+```
+
diff --git a/docs/quickstart.md b/docs/quickstart.md
new file mode 100644
index 0000000..087c3e7
--- /dev/null
+++ b/docs/quickstart.md
@@ -0,0 +1,85 @@
+### Using flags
+
+You can start the app without passing flags or parameters, so then an interactive command prompt will ask for the connection details.
+
+{ width="500" : .center }
+
+Otherwise, you can explicitly include the connection details using multiple parameters:
+
+```sh
+$ dblab --host localhost --user myuser --db users --pass password --ssl disable --port 5432 --driver postgres --limit 50
+$ dblab --db path/to/file.sqlite3 --driver sqlite
+```
+
+Connection URL scheme is also supported:
+
+```sh
+$ dblab --url postgres://user:password@host:port/database?sslmode=[mode]
+$ dblab --url mysql://user:password@tcp(host:port)/db
+$ dblab --url file:test.db?cache=shared&mode=memory
+```
+
+if you're using PostgreSQL, you have the option to define the schema you want to work with, the default value is `public`.
+
+```sh
+$ dblab --host localhost --user myuser --db users --pass password --schema myschema --ssl disable --port 5432 --driver postgres --limit 50
+$ dblab --url postgres://user:password@host:port/database?sslmode=[mode] --schema myschema
+```
+
+As a request made in [#125](https://github.com/danvergara/dblab/issues/125), support for MySQL/MariaDB sockets was integrated.
+
+```sh
+$ dblab --url "mysql://user:pasword@unix(/path/to/socket/mysql.sock)/dbname?charset=utf8"
+$ dblab --socket /path/to/socket/mysql.sock --user user --db dbname --pass password --ssl disable --port 5432 --driver mysql --limit 50
+```
+
+For more information about the available flags check the [Usage section](https://dblab.danvergara.com/usage/#usage).
+
+### Using a config file
+
+
+```sh
+# default: test
+$ dbladb --config
+
+$ dblab --config --cfg-name "prod"
+```
+
+`.dblab.yaml` example:
+
+```yaml
+database:
+ - name: "test"
+ host: "localhost"
+ port: 5432
+ db: "users"
+ password: "password"
+ user: "postgres"
+ driver: "postgres"
+ # optional
+ # postgres only
+ # default value: public
+ schema: "myschema"
+ - name: "prod"
+ # example endpoint
+ host: "mydb.123456789012.us-east-1.rds.amazonaws.com"
+ port: 5432
+ db: "users"
+ password: "password"
+ user: "postgres"
+ schema: "public"
+ driver: "postgres"
+# should be greater than 0, otherwise the app will error out
+limit: 50
+```
+
+Or for sqlite:
+
+```yaml
+database:
+ - name: "prod"
+ db: "path/to/file.sqlite3"
+ driver: "sqlite"
+```
+
+Only the `host` and `ssl` fields are optionals. `127.0.0.1` and `disable`, respectively.
diff --git a/docs/release-notes.md b/docs/release-notes.md
new file mode 100644
index 0000000..4201a5f
--- /dev/null
+++ b/docs/release-notes.md
@@ -0,0 +1,3 @@
+You can find the updated release notes in the following link:
+
+[https://github.com/danvergara/dblab/releases](https://github.com/danvergara/dblab/releases)
\ No newline at end of file
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644
index 0000000..ea0cfba
--- /dev/null
+++ b/docs/usage.md
@@ -0,0 +1,177 @@
+You can get started by using the connection flags or by using a configuration file with the connection params.
+
+```sh
+$ dblab [flags]
+
+```
+
+or
+
+```sh
+$ dblab [command]
+
+```
+
+### Available Commands
+
+| `help` | Help about any command |
+|:----------------------:|:----------------------------:|
+| `version` | The version of the project |
+
+### Flags
+
+| Flag | Type | Description |
+|:----------------:|:-----------:|:----------------------------------------------------------------------------------------------------------------------------------|
+| `--cfg-name` | `string` | Database config name section |
+| `--config` | | Get the connection data from a config file (default is $HOME/.dblab.yaml or the current directory) |
+| `--db` | `string` | Database name |
+| `--driver` | `string` | Database driver |
+| `-h, --help` | | help for dblab |
+| `--host` | `string` | Server host name or IP |
+| `--limit` | `int` | Size of the result set from the table content query (should be greater than zero, otherwise the app will error out) (default 100) |
+| `--pass` | `string` | Password for user |
+| `--port` | `string` | Server port |
+| `--schema` | `string` | Database schema (postgres only) |
+| `--socket` | `string ` | Path to a Unix socket file |
+| `--ssl` | `string` | SSL mode |
+| `-u, --url` | `string` | Database connection string |
+| `--user` | `string` | Database user |
+
+Use `dblab [command] --help` for more information about a command.
+
+
+## Navigation
+
+If the query panel is active, type the desired query and press Ctrl+Space to see the results on the rows panel below.
+Otherwise, you might me located at the tables panel, then you can navigate by using the arrows Up and Down (or the keys k and j respectively).
+
+If you want to see the rows of a table, press Enter.
+
+To see the schema of a table, locate yourself on the `rows` panel and press Ctrl+S to switch to the `structure` panel, then switch Ctrl+S to switch back.
+
+The same can be achieved for the `constraints` view by pressing Ctrl+F to go back and forth between the `rows` and the `constraints` panels.
+
+Now, there's a menu to navigate between hidden views by just clicking on the desired options:
+
+{ width="700" : .center }
+{ width="700" : .center }
+{ width="700" : .center }
+{ width="700" : .center }
+
+As you may have noticed, navigation has already been added, so every time you query the content of a listed table, the result set is going to be paginated. This allows to the user dealing with large tables, optimizing resources.
+Just hit the `BACK` and `NEXT` buttons to go back and forth.
+
+### Key Bindings
+Key | Description
+----------------------------------------|---------------------------------------
+Ctrl+Space | If the query panel is active, execute the query
+Enter | If the tables panel is active, list all the rows as a result set on the rows panel and display the structure of the table on the structure panel
+Ctrl+S | If the rows panel is active, switch to the schema panel. The opposite is true
+Ctrl+F | If the rows panel is active, switch to the constraints view. The opposite is true
+Ctrl+I | If the rows panel is active, switch to the indexes view. The opposite is true
+Ctrl+H | Toggle to the panel on the left
+Ctrl+J | Toggle to the panel below
+Ctrl+K | Toggle to the panel above
+Ctrl+L | Toggle to the panel on the right
+Arrow Up | Next row of the result set on the panel. Views: rows, table, constraints, structure and indexes
+k | Next row of the result set on the panel. Views: rows, table, constraints, structure and indexes
+Arrow Down | Previous row of the result set on the panel. Views: rows, table, constraints, structure and indexes
+j | Previous row of the result set on the panel. Views: rows, table, constraints, structure and indexes
+Arrow Right | Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
+l | Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
+Arrow Left | Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
+h | Horizontal scrolling on the panel. Views: rows, constraints, structure and indexes
+Ctrl+c | Quit
+
+
+## Connection Examples
+
+You can start the app without passing flags or parameters, so then an interactive command prompt will ask for the connection details.
+
+{ width="500" : .center }
+
+Otherwise, you can explicitly include the connection details using multiple parameters:
+
+```sh
+$ dblab --host localhost --user myuser --db users --pass password --ssl disable --port 5432 --driver postgres --limit 50
+$ dblab --db path/to/file.sqlite3 --driver sqlite
+```
+
+Connection URL scheme is also supported:
+
+```sh
+$ dblab --url postgres://user:password@host:port/database?sslmode=[mode]
+$ dblab --url mysql://user:password@tcp(host:port)/db
+$ dblab --url file:test.db?cache=shared&mode=memory
+```
+
+if you're using PostgreSQL, you have the option to define the schema you want to work with, the default value is `public`.
+
+```sh
+$ dblab --host localhost --user myuser --db users --pass password --schema myschema --ssl disable --port 5432 --driver postgres --limit 50
+$ dblab --url postgres://user:password@host:port/database?sslmode=[mode] --schema myschema
+```
+
+As a request made in [#125](https://github.com/danvergara/dblab/issues/125), support for MySQL/MariaDB sockets was integrated.
+
+```sh
+$ dblab --url "mysql://user:pasword@unix(/path/to/socket/mysql.sock)/dbname?charset=utf8"
+$ dblab --socket /path/to/socket/mysql.sock --user user --db dbname --pass password --ssl disable --port 5432 --driver mysql --limit 50
+```
+
+### Configuration
+
+Entering the parameters and flags every time you want to use it is tedious,
+so `dblab` provides a couple of flags to help with it: `--config` and `--cfg-name`.
+
+`dblab` is going to look for a file called `.dblab.yaml`. For now, the only two places where you can drop a config file are $HOME ($HOME/.dblab.yaml) and the current directory where you run the command line tool.
+
+If you want to use this feature, `--config` is mandatory and `--cfg-name` may be omitted. The config file can store one or multiple database connection sections under the `database` field. `database` is an array, previously was an object only able to store a single connection section at a time.
+
+We strongly encourgae you to adopt the new format as of `v0.18.0`. `--cfg-name` takes the name of the desired database section to connect with. It can be omitted and its default values will be the first item on the array.
+
+```sh
+# default: test
+$ dbladb --config
+
+$ dblab --config --cfg-name "prod"
+```
+
+`.dblab.yaml` example:
+
+```yaml
+database:
+ - name: "test"
+ host: "localhost"
+ port: 5432
+ db: "users"
+ password: "password"
+ user: "postgres"
+ driver: "postgres"
+ # optional
+ # postgres only
+ # default value: public
+ schema: "myschema"
+ - name: "prod"
+ # example endpoint
+ host: "mydb.123456789012.us-east-1.rds.amazonaws.com"
+ port: 5432
+ db: "users"
+ password: "password"
+ user: "postgres"
+ schema: "public"
+ driver: "postgres"
+# should be greater than 0, otherwise the app will error out
+limit: 50
+```
+
+Or for sqlite:
+
+```yaml
+database:
+ - name: "prod"
+ db: "path/to/file.sqlite3"
+ driver: "sqlite"
+```
+
+Only the `host` and `ssl` fields are optionals. `127.0.0.1` and `disable`, respectively.
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..436f28a
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,59 @@
+site_name: dblab
+site_description: dblab is a fast and lightweight interactive terminal based UI application for PostgreSQL, MySQL and SQLite3, written in Go and works on OSX, Linux and Windows machines.
+site_url: https://dblab.danvergara.com/
+theme:
+ name: material
+ palette:
+ - media: '(prefers-color-scheme: light)'
+ scheme: default
+ primary: blue
+ accent: teal
+ toggle:
+ icon: material/lightbulb
+ name: Switch to light mode
+ - media: '(prefers-color-scheme: dark)'
+ scheme: slate
+ primary: blue
+ accent: teal
+ toggle:
+ icon: material/lightbulb-outline
+ name: Switch to dark mode
+repo_name: danvergara/dblab
+repo_url: https://github.com/danvergara/dblab
+edit_uri: ''
+plugins:
+- search
+nav:
+- dblab: index.md
+- quickstart.md
+- usage.md
+- features.md
+- release-notes.md
+- contribute.md
+
+markdown_extensions:
+- toc:
+ permalink: true
+- def_list
+- pymdownx.tasklist:
+ custom_checkbox: true
+- pymdownx.critic
+- pymdownx.caret
+- pymdownx.keys
+- pymdownx.mark
+- pymdownx.tilde
+- markdown.extensions.codehilite:
+ guess_lang: false
+- admonition
+- codehilite
+- pymdownx.superfences:
+ custom_fences:
+ - name: mermaid
+ class: mermaid
+ format: !!python/name:pymdownx.superfences.fence_code_format ''
+- pymdownx.tabbed:
+ alternate_style: true
+- attr_list
+- md_in_html
+extra_css:
+- css/extra.css