diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 616cbed..1a3dabc 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -3,7 +3,11 @@ on:
pull_request: ~
push:
branches:
- - master
+ - main
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
jobs:
documentation:
@@ -15,11 +19,11 @@ jobs:
os: [ubuntu-latest, macos-latest]
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Set up Python
- uses: actions/setup-python@v1
+ uses: actions/setup-python@v4
with:
- python-version: 3.7
+ python-version: 3.11
- name: Build docs
run: |
cd docs && make check
diff --git a/.gitignore b/.gitignore
index ba53d36..dc4edd0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
.crate-docs
.DS_Store
.env
+.idea
.style
.utils
*.lint
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 07393e9..cd4b00c 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,11 +1,22 @@
+# .readthedocs.yml
+# Read the Docs configuration file
+
+# Details
+# - https://docs.readthedocs.io/en/stable/config-file/v2.html
+
+# Required
version: 2
+build:
+ os: "ubuntu-22.04"
+ tools:
+ python: "3.11"
+
sphinx:
builder: html
configuration: docs/conf.py
fail_on_warning: true
python:
- version: 3.7
install:
- requirements: docs/requirements.txt
diff --git a/BACKLOG.md b/BACKLOG.md
new file mode 100644
index 0000000..7b478d0
--- /dev/null
+++ b/BACKLOG.md
@@ -0,0 +1,59 @@
+# Backlog
+
+
+## Iteration +1
+- [ ] Add item about Admin UI
+- [ ] Add item about `psycopg3`
+- [ ] Connect: Add more properties, like `schema`
+
+## Iteration +2
+- [ ] Refer to more artefacts/resources
+ - Prometheus (Server Metrics/Monitoring)
+ - Terraform (Administration)
+- [ ] Add section about testing frameworks
+- [ ] Add section "highlights", or "awesome", bundling corresponding resources.
+ - https://community.crate.io/t/how-we-scaled-ingestion-to-one-million-rows-per-second/1069
+- [ ] Add [HTTPie Desktop]
+ Screenshot: https://github.com/crate/crate-clients-tools/assets/453543/9f724518-ee83-43ac-9ea1-7be63e7c9805
+
+## Iteration +3
+- [ ] Drivers: Outline multiple dimensions
+ - protocol: http vs. pg
+ - maintained/unmaintained
+ - recommended
+- [ ] Drivers: Layout overview list/table differently, to better convey more detailed
+ information per item. Maybe use [Info Card].
+
+## Evaluate
+
+- Via https://getsqlpad.com/en/introduction/#alternatives
+ - [Querybook](https://www.querybook.org/) (open source)
+ - [Superset](https://github.com/apache/superset) (open source) / [Preset](https://preset.io/) (company)
+ - [Chartbrew](https://github.com/chartbrew/chartbrew) (open source) / [Chartbrew](https://chartbrew.com/) (company)
+ - [Lightdash](https://github.com/lightdash/lightdash) (open source) / [Lightdash](https://www.lightdash.com/) (company)
+ - [CloudBeaver](https://github.com/dbeaver/cloudbeaver) (open source)
+ - [Awesome DB tools GUIs](https://github.com/mgramin/awesome-db-tools#gui)
+
+- Via https://github.com/crate/crate-clients-tools/issues
+ - [Looker](https://cloud.google.com/looker)
+ - [Metabase](https://github.com/metabase/metabase)
+ - [pgweb](https://sosedoff.github.io/pgweb/)
+ - [Redash](https://github.com/getredash/redash)
+ - [usql](https://github.com/xo/usql)
+
+- Re-evaluate
+ - Add [DataGrip]
+ - Add [pgAdmin]
+
+
+## Done
+- [x] CLI: Dedicated section per program, with code examples
+- [x] Connect: Improve "Configure" section about connection properties
+- [x] .NET driver got lost
+- [x] Remove DataGrip and pgAdmin again, they do not work
+
+
+[DataGrip]: https://www.jetbrains.com/datagrip/
+[HTTPie Desktop]: https://httpie.io/desktop
+[Info Card]: https://sphinx-design-elements.readthedocs.io/en/latest/infocard.html
+[pgAdmin]: https://www.pgadmin.org/
diff --git a/DEVELOP.rst b/DEVELOP.rst
index df01690..dca1904 100644
--- a/DEVELOP.rst
+++ b/DEVELOP.rst
@@ -45,9 +45,9 @@ You must install `fswatch`_ to use the ``dev`` target.
Continuous integration and deployment
-------------------------------------
-|build| |travis| |rtd|
+|build| |gha| |rtd|
-Travis CI is `configured`_ to run ``make check`` from the ``docs`` directory.
+GHA is `configured`_ to run ``make check`` from the ``docs`` directory.
Please do not merge pull requests until the tests pass.
`Read the Docs`_ automatically deploys the documentation whenever a configured
@@ -58,21 +58,21 @@ release version), please contact the `@crate/tech-writing`_ team.
.. _@crate/tech-writing: https://github.com/orgs/crate/teams/tech-writing
-.. _configured: https://github.com/crate/crate-clients-tools/blob/master/.travis.yml
+.. _configured: https://github.com/crate/crate-clients-tools/blob/main/.github/workflows/docs.yml
.. _fswatch: https://github.com/emcrisostomo/fswatch
.. _Read the Docs: http://readthedocs.org
.. _ReStructuredText: http://docutils.sourceforge.net/rst.html
.. _Sphinx: http://sphinx-doc.org/
-.. |build| image:: https://img.shields.io/endpoint.svg?color=blue&url=https%3A%2F%2Fraw.githubusercontent.com%2Fcrate%2Fcrate-clients-toolss%2Fmaster%2Fdocs%2Fbuild.json
+.. |build| image:: https://img.shields.io/endpoint.svg?color=blue&url=https%3A%2F%2Fraw.githubusercontent.com%2Fcrate%2Fcrate-clients-toolss%2Fmain%2Fdocs%2Fbuild.json
:alt: Build version
- :target: https://github.com/crate/crate-clients-tools/blob/master/docs/build.json
+ :target: https://github.com/crate/crate-clients-tools/blob/main/docs/build.json
-.. |travis| image:: https://img.shields.io/travis/crate/crate-clients-tools.svg?style=flat
+.. |gha| image:: https://github.com/crate/crate-clients-tools/actions/workflows/docs.yml/badge.svg
:alt: Travis CI status
:scale: 100%
- :target: https://travis-ci.org/crate/crate-clients-tools
+ :target: https://github.com/crate/crate-clients-tools/actions/workflows/docs.yml
.. |rtd| image:: https://readthedocs.org/projects/crate-clients-tools/badge/?version=latest
:alt: Read The Docs status
diff --git a/LICENSE b/LICENSE
index d645695..f433b1a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -175,28 +175,3 @@
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/MAINTAINERS.rst b/MAINTAINERS.rst
new file mode 100644
index 0000000..5c8e5c3
--- /dev/null
+++ b/MAINTAINERS.rst
@@ -0,0 +1,67 @@
+###########
+Maintainers
+###########
+
+
+About
+=====
+
+At Crate.io we are defining so called Power Users to ensure the integrations
+keep working.
+
+Responsibilities of Power Users:
+
+* Keep track of releases, updates and developments of the tools.
+* Test integration after minor and mayor CrateDB releases.
+* Test integration after tool releases.
+* Have a working setup available including a quick demo.
+* Being able to answer questions for the specific tool.
+* Ensuring guides are up to date.
+
+
+Power Users
+===========
+
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Tool | User | Version | CrateDB Version | |
++=================+===================+=========+=================+======================================================+
+| Grafana | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Grafana`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| PowerBI | `WolfgangHerbst`_ | *X.Y* | *X.Y.Z* | `Known Issues PowerBI`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Tableau | `marregui`_ | *X.Y* | *X.Y.Z* | `Known Issues Tableau`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Zeppelin | | | | |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Looker | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Looker`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Node-Red | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Node Red`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| NiFi | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues NiFi`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Telegraf | | | | |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Prometheus | `infoverload`_ | *X.Y* | *X.Y.Z* | `Known Issues Prometheus`_, `Known Issues Adapter`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| R | `autophagy`_ | *X.Y* | *X.Y.Z* | `Known Issues R`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+| Azure Functions | `autophagy`_ | *X.Y* | *X.Y.Z* | `Known Issues Azure Functions`_ |
++-----------------+-------------------+---------+-----------------+------------------------------------------------------+
+
+
+.. _autophagy: https://github.com/autophagy
+.. _infoverload: https://github.com/infoverload
+.. _marregui: https://github.com/marregui
+.. _proddata: https://github.com/proddata
+.. _WolfgangHerbst: https://github.com/WolfgangHerbst
+
+.. _Known Issues Adapter: https://github.com/crate/crate_adapter/issues
+.. _Known Issues Azure Functions: https://github.com/crate/crate/labels/tool%3A%20Azure%20Functions
+.. _Known Issues Grafana: https://github.com/crate/crate/labels/tool%3A%20Grafana
+.. _Known Issues Looker: https://github.com/crate/crate/labels/tool%3A%20Looker
+.. _Known Issues NiFi: https://github.com/crate/crate/labels/tool%3A%20NiFi
+.. _Known Issues Node Red: https://github.com/crate/crate/labels/tool%3A%20Node-Red
+.. _Known Issues PowerBI: https://github.com/crate/crate/labels/tool%3A%20PowerBI
+.. _Known Issues Prometheus: https://github.com/crate/crate/labels/tool%3A%20Prometheus
+.. _Known Issues R: https://github.com/crate/crate/labels/tool%3A%20R
+.. _Known Issues Tableau: https://github.com/crate/crate/labels/tool%3A%20Tableau
diff --git a/README.rst b/README.rst
index 5f632bd..a097338 100644
--- a/README.rst
+++ b/README.rst
@@ -2,92 +2,31 @@
CrateDB Clients and Tools
=========================
-Clients and tools for working with `CrateDB`_.
-We are also maintaining a more up-to-date list of `CrateDB integration tutorials`_.
+Client libraries, applications, tools, and integrations for `CrateDB`_.
+We are also maintaining an up-to-date list of `CrateDB integration tutorials`_.
Contributing
============
-This project is primarily maintained by `Crate.io`_, but we welcome community
-contributions!
-
-See the `developer docs`_ and the `contribution docs`_ for more information.
-
-
-Tool Power User
-===============
-
-At Crate.io we are defining so called Power Users to ensure the integrations
-keep working.
-
-Responsiblities of Power Users:
-
- * Keep track of releases, updates and developments of the tools.
- * Test integration after minor and mayor CrateDB releases.
- * Test integration after tool releases.
- * Have a working setup available including a quick demo.
- * Being able to answer questions for the specific tool.
- * Ensuring guides are up to date.
-
-
-Power Users
------------
-
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Tool | User | Version | CrateDB Version | |
-+=================+===================+=========+=================+======================================================+
-| Grafana | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Grafana`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| PowerBI | `WolfgangHerbst`_ | *X.Y* | *X.Y.Z* | `Known Issues PowerBI`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Tableau | `marregui`_ | *X.Y* | *X.Y.Z* | `Known Issues Tableau`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Zeppelin | | | | |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Looker | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Looker`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Node-Red | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues Node Red`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| NiFi | `proddata`_ | *X.Y* | *X.Y.Z* | `Known Issues NiFi`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Telegraf | | | | |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Prometheus | `infoverload`_ | *X.Y* | *X.Y.Z* | `Known Issues Prometheus`_, `Known Issues Adapter`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| R | `autophagy`_ | *X.Y* | *X.Y.Z* | `Known Issues R`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-| Azure Functions | `autophagy`_ | *X.Y* | *X.Y.Z* | `Known Issues Azure Functions`_ |
-+-----------------+-------------------+---------+-----------------+------------------------------------------------------+
-
+This project is primarily maintained by `Crate.io`_, and community contributions
+are welcome. See the `developer docs`_ and the `contribution docs`_ for more
+information.
Help
====
-Looking for more help?
+Looking for help?
- Read the `live docs`_
- Check out our `support channels`_
+- Visit the `community forum`_
-.. _autophagy: https://github.com/autophagy
.. _contribution docs: CONTRIBUTING.rst
+.. _community forum: https://community.crate.io/
.. _Crate.io: http://crate.io/
.. _CrateDB: https://crate.io/products/cratedb/
.. _CrateDB integration tutorials: https://community.crate.io/t/overview-of-cratedb-integration-tutorials/1015
.. _developer docs: DEVELOP.rst
-.. _infoverload: https://github.com/infoverload
-.. _Known Issues Adapter: https://github.com/crate/crate_adapter/issues
-.. _Known Issues Azure Functions: https://github.com/crate/crate/labels/tool%3A%20Azure%20Functions
-.. _Known Issues Grafana: https://github.com/crate/crate/labels/tool%3A%20Grafana
-.. _Known Issues Looker: https://github.com/crate/crate/labels/tool%3A%20Looker
-.. _Known Issues NiFi: https://github.com/crate/crate/labels/tool%3A%20NiFi
-.. _Known Issues Node Red: https://github.com/crate/crate/labels/tool%3A%20Node-Red
-.. _Known Issues PowerBI: https://github.com/crate/crate/labels/tool%3A%20PowerBI
-.. _Known Issues Prometheus: https://github.com/crate/crate/labels/tool%3A%20Prometheus
-.. _Known Issues R: https://github.com/crate/crate/labels/tool%3A%20R
-.. _Known Issues Tableau: https://github.com/crate/crate/labels/tool%3A%20Tableau
.. _live docs: https://crate.io/docs/crate/clients-tools/en/latest/
-.. _marregui: https://github.com/marregui
-.. _proddata: https://github.com/proddata
.. _support channels: https://crate.io/support/
-.. _WolfgangHerbst: https://github.com/WolfgangHerbst
diff --git a/docs/analyze.md b/docs/analyze.md
new file mode 100644
index 0000000..5a7d2a2
--- /dev/null
+++ b/docs/analyze.md
@@ -0,0 +1,104 @@
+(analyze)=
+# Analytics with CrateDB
+
+This documentation section enumerates analytics applications and frameworks for
+analyzing data in CrateDB.
+
+
+## Business analytics with Microsoft Power BI
+
+```{div}
+:style: "float: right"
+[![](https://upload.wikimedia.org/wikipedia/en/thumb/2/20/Power_BI_logo.svg/192px-Power_BI_logo.svg.png?20200923233425){w=180px}](https://powerbi.microsoft.com/en-us/desktop/)
+```
+
+[Power BI Desktop] is a powerful business intelligence tool that provides a set of
+data analytics and visualizations. Using Power BI Desktop, users can create reports
+and dashboards from large datasets.
+
+For connecting to CrateDB with Power BI, you can use the [Power Query PostgreSQL connector].
+Earlier versions used the [PostgreSQL ODBC driver]. [](#cratedb-powerbi-desktop) walks
+you through the process of configuring that correctly.
+
+The [Power BI Service] is an online data analysis and visualization tool, making it
+possible to publish your dashboards, in order to share them with others.
+[](#cratedb-powerbi-service) has a corresponding tutorial.
+
+![](https://crate.io/docs/crate/howtos/en/latest/_images/powerbi-table-navigator.png){h=160px}
+![](https://crate.io/docs/crate/howtos/en/latest/_images/powerbi-pie-chart.png){h=160px}
+![](https://crate.io/docs/crate/howtos/en/latest/_images/powerbi-publish-success.png){h=160px}
+
+```{seealso}
+[CrateDB and Power BI]
+```
+
+
+## Business intelligence with Tableau
+
+```{div}
+:style: "float: right"
+[![](https://upload.wikimedia.org/wikipedia/en/thumb/0/06/Tableau_logo.svg/500px-Tableau_logo.svg.png?20200509180027){w=180px}](https://www.tableau.com/)
+```
+
+[Tableau] is a visual business intelligence and analytics software platform. It expresses
+data by translating drag-and-drop actions into data queries through an intuitive interface.
+
+[Connecting to CrateDB from Tableau with JDBC] and [Using CrateDB with Tableau] will
+guide you through the process of setting it up correctly with CrateDB.
+
+![](https://crate.io/hs-fs/hubfs/08-index.png?width=1536&name=08-index.png){h=200px}
+
+```{seealso}
+[CrateDB and Tableau]
+```
+
+
+## Data analysis with pandas and scikit-learn
+
+```{div}
+:style: "float: right"
+[![](https://pandas.pydata.org/static/img/pandas.svg){w=180px}](https://pandas.pydata.org/)
+
+[![](https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Scikit_learn_logo_small.svg/240px-Scikit_learn_logo_small.svg.png){w=180px}](https://scikit-learn.org/)
+
+[![](https://jupyter.org/assets/logos/rectanglelogo-greytext-orangebody-greymoons.svg){w=180px}](https://jupyter.org/)
+```
+
+
+Using [pandas] and [scikit-learn] to run a regression analysis within a [Jupyter Notebook].
+
+- [Machine Learning and CrateDB: An introduction]
+- [Machine Learning and CrateDB: Getting Started With Jupyter]
+- [Machine Learning and CrateDB: Experiment Design & Linear Regression]
+
+More resources:
+
+- [Automating financial data collection and storage in CrateDB with Python and pandas 2.0.0]
+- [From data storage to data analysis: Tutorial on CrateDB and pandas]
+
+
+## Machine Learning and CrateDB
+
+Using pandas, NumPy, Matplotlib, Merlion, and MLFlow, to analyze timeseries anomalies.
+
+- [Running Time Series Models in Production using CrateDB]
+
+
+[Automating financial data collection and storage in CrateDB with Python and pandas 2.0.0]: https://community.crate.io/t/automating-financial-data-collection-and-storage-in-cratedb-with-python-and-pandas-2-0-0/916
+[Connecting to CrateDB from Tableau with JDBC]: https://crate.io/blog/connecting-to-cratedb-from-tableau-with-jdbc
+[CrateDB and Tableau]: https://crate.io/integrations/cratedb-and-tableau
+[CrateDB and Power BI]: https://crate.io/integrations/cratedb-and-power-bi
+[From data storage to data analysis: Tutorial on CrateDB and pandas]: https://community.crate.io/t/from-data-storage-to-data-analysis-tutorial-on-cratedb-and-pandas/1440/1
+[Jupyter Notebook]: https://jupyter.org/
+[Machine Learning and CrateDB: An introduction]: https://crate.io/blog/machine-learning-and-cratedb-part-one
+[Machine Learning and CrateDB: Getting Started With Jupyter]: https://crate.io/blog/machine-learning-cratedb-jupyter
+[Machine Learning and CrateDB: Experiment Design & Linear Regression]: https://crate.io/blog/machine-learning-and-cratedb-part-three-experiment-design-and-linear-regression
+[pandas]: https://pandas.pydata.org/
+[PostgreSQL ODBC driver]: https://odbc.postgresql.org/
+[Power BI Desktop]: https://powerbi.microsoft.com/en-us/desktop/
+[Power BI Service]: https://powerbi.microsoft.com/en-us/
+[Power Query PostgreSQL connector]: https://learn.microsoft.com/en-us/power-query/connectors/postgresql
+[Running Time Series Models in Production using CrateDB]: https://github.com/crate/ml-sandbox/blob/main/timeseries-blog/timeseries-blog.md
+[scikit-learn]: https://scikit-learn.org/
+[Tableau]: https://www.tableau.com/
+[Using CrateDB with Tableau]: https://community.crate.io/t/using-cratedb-with-tableau/1192
diff --git a/docs/build.json b/docs/build.json
index 49cbd2b..5647caf 100644
--- a/docs/build.json
+++ b/docs/build.json
@@ -1,5 +1,5 @@
{
"schemaVersion": 1,
"label": "docs build",
- "message": "2.1.0"
+ "message": "2.1.1"
}
diff --git a/docs/cli.md b/docs/cli.md
new file mode 100644
index 0000000..912498b
--- /dev/null
+++ b/docs/cli.md
@@ -0,0 +1,180 @@
+(cli)=
+(connect-cli)=
+# Using command-line programs with CrateDB
+
+This section provides a quick overview about a few CLI programs, and how to
+use them for connecting to CrateDB clusters. We recommend to use crash,
+psql, http ([HTTPie]), or curl.
+
+You can use them to quickly validate HTTP and PostgreSQL connectivity to your
+database cluster, or to conduct basic scripting.
+
+Before running the command-line snippets outlined below, please use the correct
+settings instead of the placeholder tokens ``, ``, and
+``.
+
+
+(crash)=
+## crash
+
+```{div}
+:style: "float: right"
+![image](https://crate.io/docs/crate/crash/en/latest/_images/query.png){w=240px}
+```
+
+The **CrateDB Shell** is an interactive command-line interface (CLI) tool for
+working with CrateDB. For more information, see the documentation about [crash].
+
+```{div}
+:style: "clear: both"
+```
+
+::::{tab-set}
+
+:::{tab-item} CrateDB Server and Cloud
+:sync: server
+
+```{code-block} shell
+CRATEPW= \
+ crash --hosts 'https://.cratedb.net:4200' --username '' \
+ --command "SELECT 42.42;"
+```
+:::
+
+:::{tab-item} CrateDB on localhost
+:sync: localhost
+
+```{code-block} shell
+# No authentication.
+crash --command "SELECT 42.42;"
+
+```
+:::
+
+::::
+
+
+(psql)=
+## psql
+
+```{div}
+:style: "float: right"
+![image](https://github.com/crate/crate-clients-tools/assets/453543/8f0a0e06-87f6-467f-be2d-b38121afbafa){w=240px}
+```
+
+**psql** is a terminal-based front-end to PostgreSQL. It enables you to type in
+queries interactively, issue them to PostgreSQL, and see the query results.
+For more information, see the documentation about [psql].
+
+```{div}
+:style: "clear: both"
+```
+
+::::{tab-set}
+
+:::{tab-item} CrateDB Server and Cloud
+:sync: server
+
+```{code-block} shell
+PGUSER= PGPASSWORD= \
+ psql postgresql://.cratedb.net/crate --command "SELECT 42.42;"
+```
+:::
+
+:::{tab-item} CrateDB on localhost
+:sync: localhost
+
+```{code-block} shell
+# No authentication.
+psql postgresql://crate@localhost:5432/crate --command "SELECT 42.42;"
+```
+:::
+
+::::
+
+
+(httpie)=
+## HTTPie
+
+```{div}
+:style: "float: right"
+![image](https://github.com/crate/crate-clients-tools/assets/453543/f5a2916d-3730-4901-99cf-b88b9af03329){w=240px}
+```
+
+The **HTTPie CLI** is a modern, user-friendly command-line HTTP client with
+JSON support, colors, sessions, downloads, plugins & more.
+For more information, see the documentation about [HTTPie].
+
+```{div}
+:style: "clear: both"
+```
+
+::::{tab-set}
+
+:::{tab-item} CrateDB Server and Cloud
+:sync: server
+
+```{code-block} shell
+http https://:@.cratedb.net:4200/_sql?pretty" \
+ stmt="SELECT 42.42;"
+```
+:::
+
+:::{tab-item} CrateDB on localhost
+:sync: localhost
+
+```{code-block} shell
+http "localhost:4200/_sql?pretty" \
+ stmt="SELECT 42.42;"
+```
+:::
+
+::::
+
+
+(curl)=
+## curl
+
+```{div}
+:style: "float: right"
+![image](https://github.com/crate/crate-clients-tools/assets/453543/318b0819-a0d4-4112-a320-23852263362c){w=240px}
+```
+
+The venerable **curl** is the ubiquitous command line tool and library for transferring
+data with URLs. For more information, see the documentation about [curl].
+
+This example combines it with [jq], a lightweight and flexible command-line JSON processor.
+
+```{div}
+:style: "clear: both"
+```
+
+::::{tab-set}
+
+:::{tab-item} CrateDB Server and Cloud
+:sync: server
+
+```{code-block} shell
+echo '{"stmt": "SELECT 42.42;"}' \
+ | curl "https://:@.cratedb.net:4200/_sql?pretty" --silent --data @- | jq
+```
+:::
+
+:::{tab-item} CrateDB on localhost
+:sync: localhost
+
+```{code-block} shell
+echo '{"stmt": "SELECT 42.42;"}' \
+ | curl "localhost:4200/_sql?pretty" --silent --data @- | jq
+```
+:::
+
+::::
+
+
+
+[curl]: https://curl.se/
+[crash]: inv:crate-crash:*:label#index
+[HTTPie]: https://httpie.io/
+[jq]: https://jqlang.github.io/jq/
+[psql]: https://www.postgresql.org/docs/current/app-psql.html
diff --git a/docs/connect/index.md b/docs/connect/index.md
new file mode 100644
index 0000000..559c853
--- /dev/null
+++ b/docs/connect/index.md
@@ -0,0 +1,472 @@
+(connect)=
+
+# Connect to a CrateDB cluster
+
+This documentation section is about connecting your applications and drivers to CrateDB.
+
+
+## Configure
+
+CrateDB supports both the [HTTP protocol] {tags-success}`HTTP`,
+and the [PostgreSQL wire protocol] {tags-primary}`PG`.
+
+Accordingly, many clients that work with either HTTP, or PostgreSQL, will also
+work with CrateDB. In order to connect to CrateDB, your application or driver
+needs to be configured with corresponding settings.
+
+::::::{tab-set}
+
+:::::{tab-item} CrateDB Server and Cloud
+
+::::{grid}
+:margin: 0
+:padding: 0
+
+:::{grid-item}
+:columns: 5
+:margin: 0
+:padding: 0
+
+**Connection properties**
+
+Make sure to use the correct connection properties.
+
+:Host: ``.cratedb.net
+:Port: 5432 (PostgreSQL) or 4200 (HTTP)
+:User: ``
+:Pass: ``
+
+:::
+
+:::{grid-item}
+:columns: 7
+:margin: 0
+:padding: 0
+
+**Connection-string examples**
+
+Please note that different applications and drivers may obtain
+connection properties in different formats.
+
+A native PostgreSQL connection string.
+`postgresql://@.cratedb.net/crate`
+
+A connection string for SQLAlchemy or Apache Flink.
+`crate://@.cratedb.net/crate`
+
+An HTTP URL to visit Admin UI.
+`https://@.cratedb.net:4200/`
+
+:::
+
+::::
+
+:::::
+
+:::::{tab-item} CrateDB on localhost
+
+::::{grid}
+:margin: 0
+:padding: 0
+
+:::{grid-item}
+:columns: 5
+:margin: 0
+:padding: 0
+
+**Connection properties**
+
+Make sure to use the correct connection properties.
+
+:Host: localhost
+:Port: 5432 (PostgreSQL) or 4200 (HTTP)
+:User: `crate`
+:Pass: (empty)
+
+:::
+
+:::{grid-item}
+:columns: 7
+:margin: 0
+:padding: 0
+
+**Connection-string examples**
+
+Please note that different applications and drivers may obtain
+connection properties in different formats.
+
+A native PostgreSQL connection string.
+`postgresql://crate@localhost:5432/crate`
+
+A connection string for SQLAlchemy or Apache Flink.
+`crate://crate@localhost/crate`
+
+An HTTP URL to visit Admin UI.
+`http://crate@localhost:4200/`
+
+:::
+
+::::
+:::::
+
+::::::
+
+
+```{tip}
+- Specify the [schema] name `doc`, if you are asked for a *database name*.
+- The default [superuser] on a vanilla CrateDB cluster is called `crate`,
+ without a password.
+- When aiming to authenticate properly, please learn about the available
+ [authentication] options.
+```
+
+
+## Client libraries
+
+We recommend to use those drivers and adapters for the corresponding languages and frameworks.
+
+### Overview
+
+::::{sd-table}
+:widths: 2 3 5 2
+:row-class: top-border
+
+:::{sd-row}
+```{sd-item} **Language**
+```
+```{sd-item} **Driver/Adapter**
+```
+```{sd-item} **Description**
+```
+```{sd-item} **Properties**
+```
+:::
+
+:::{sd-row}
+```{sd-item} .NET
+```
+```{sd-item}
+[Npgsql](https://www.npgsql.org/)
+```
+```{sd-item}
+An open source ADO.NET Data Provider for PostgreSQL, for program written in C#,
+Visual Basic, and F#.
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} .NET
+```
+```{sd-item}
+[CrateDB Npgsql fork](https://crate.io/docs/npgsql/)
+```
+```{sd-item}
+This fork of the official driver was needed prior to CrateDB 4.2.
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Golang
+```
+```{sd-item}
+[pgx](https://github.com/jackc/pgx)
+```
+```{sd-item}
+A pure Go driver and toolkit for PostgreSQL.
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Java
+```
+```{sd-item}
+[PostgreSQL JDBC](https://jdbc.postgresql.org/)
+```
+```{sd-item}
+For connecting to CrateDB from any environment that supports it.
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Java
+```
+```{sd-item}
+[CrateDB PgJDBC fork](https://crate.io/docs/jdbc/)
+```
+```{sd-item}
+For connecting to CrateDB within special scenarios, in order to leverage more
+features of its type system, and to ignore the `ROLLBACK` statement.
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} JavaScript, TypeScript
+```
+```{sd-item}
+[node-postgres](https://node-postgres.com/)
+```
+```{sd-item}
+A collection of Node.js modules for interfacing with a PostgreSQL database. [^node-postgres]
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} PHP
+```
+```{sd-item}
+[PHP PDO driver](https://crate.io/docs/pdo/)
+```
+```{sd-item}
+For connecting to CrateDB from PHP.
+```
+```{sd-item}
+{tags-success}`HTTP`
+```
+:::
+
+:::{sd-row}
+```{sd-item} PHP
+```
+```{sd-item}
+[PHP DBAL adapter](https://crate.io/docs/dbal/)
+```
+```{sd-item}
+For connecting to CrateDB from PHP, using DBAL and Doctrine.
+```
+```{sd-item}
+{tags-success}`HTTP`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Python
+```
+```{sd-item}
+[DB-API driver](https://crate.io/docs/python/)
+```
+```{sd-item}
+For connecting to CrateDB from Python. [^blob-support].
+```
+```{sd-item}
+{tags-success}`HTTP`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Python
+```
+```{sd-item}
+[SQLAlchemy dialect](https://crate.io/docs/python/en/latest/sqlalchemy.html)
+```
+```{sd-item}
+For connecting to CrateDB from Python, using SQLAlchemy.
+```
+```{sd-item}
+{tags-success}`HTTP`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Python
+```
+```{sd-item}
+[asyncpg](https://github.com/MagicStack/asyncpg)
+```
+```{sd-item}
+For connecting to CrateDB from Python. [^asyncio-support]
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+:::{sd-row}
+```{sd-item} Python
+```
+```{sd-item}
+[psycopg3](https://www.psycopg.org/psycopg3/docs/)
+```
+```{sd-item}
+For connecting to CrateDB from Python. [^asyncio-support]
+```
+```{sd-item}
+{tags-primary}`PG`
+```
+:::
+
+::::
+
+```{note}
+While we generally recommend the PostgreSQL interface (PG) for maximum compatibility
+in PostgreSQL environments, the HTTP interface supports [CrateDB bulk operations]
+and [CrateDB BLOBs], which are not supported by the PostgreSQL protocol.
+```
+
+
+## Examples and guides
+
+This section enumerates a few client libraries and frameworks by example, demonstrating
+how to use them to connect to your CrateDB cluster.
+
+### Starter guides
+
+A few basic examples and tutorials about how to connect to CrateDB, and how to run basic
+database operations.
+
+::::{sd-table}
+:widths: 2 10
+:row-class: top-border
+
+:::{sd-row}
+```{sd-item}
+**Language/
+Framework**
+```
+```{sd-item} **Guideline and code example**
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+.NET/C#
+```
+```{sd-item}
+[Connect to CrateDB from .NET (C#) (runnable)](https://github.com/crate/cratedb-examples/tree/main/by-language/csharp-npgsql)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+Java
+```
+```{sd-item}
+[Connect to CrateDB from Java using JDBC](#java)
+
+[Connect to CrateDB from Java using JDBC (runnable)](https://github.com/crate/cratedb-examples/tree/main/by-language/java-jdbc)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+JavaScript, TypeScript
+```
+```{sd-item}
+[Connect to CrateDB from Node.js using `node-postgres` or `node-crate`](#javascript)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+PHP
+```
+```{sd-item}
+[Connect to CrateDB from PHP using PDO and DBAL drivers](#php)
+
+[Connect to CrateDB from PHP using PDO (runnable)](https://github.com/crate/cratedb-examples/tree/main/by-language/php-pdo)
+
+[Connect to CrateDB from PHP using AMPHP (runnable)](https://github.com/crate/cratedb-examples/tree/main/by-language/php-amphp)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+Python
+```
+```{sd-item}
+[Connect to CrateDB from Python using different kinds of drivers](#python)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+Ruby
+```
+```{sd-item}
+[Connect to CrateDB from Ruby](#ruby)
+
+[Connect to CrateDB from Ruby (runnable)](https://github.com/crate/cratedb-examples/tree/main/by-language/ruby)
+```
+:::
+
+::::
+
+
+### Advanced guides
+
+A few more advanced uses cases by example.
+
+::::{sd-table}
+:widths: 2 10
+:row-class: top-border
+
+:::{sd-row}
+```{sd-item}
+**Language/
+Framework**
+```
+```{sd-item} **Guideline and code example**
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+Java
+```
+```{sd-item}
+[Use CrateDB with Apache Flink and Apache Kafka](https://github.com/crate/cratedb-examples/tree/main/stacks/kafka-flink)
+```
+:::
+
+:::{sd-row}
+```{sd-item}
+Java
+```
+```{sd-item}
+[Use CrateDB with JDBC and jOOQ](https://github.com/crate/cratedb-examples/tree/main/by-language/java-jooq)
+```
+:::
+
+::::
+
+
+```{toctree}
+:maxdepth: 1
+:hidden:
+
+java
+javascript
+php
+python
+ruby
+```
+
+
+[Authentication]: https://crate.io/docs/crate/reference/en/latest/admin/auth/index.html
+[CrateDB BLOBs]: https://crate.io/docs/crate/reference/en/latest/general/blobs.html
+[CrateDB bulk operations]: https://crate.io/docs/crate/reference/en/latest/interfaces/http.html#bulk-operations
+[HTTP protocol]: https://en.wikipedia.org/wiki/HTTP
+[PostgreSQL wire protocol]: https://crate.io/docs/crate/reference/en/latest/interfaces/postgres.html
+[schema]: https://crate.io/docs/crate/reference/en/latest/general/ddl/create-table.html#schemas
+[superuser]: https://crate.io/docs/crate/reference/en/latest/admin/user-management.html
+
+[^asyncio-support]: Has support for Python's `asyncio`.
+[^blob-support]: Has support for [CrateDB BLOBs].
+[^node-postgres]: Has support for callbacks, promises, async/await, connection pooling, prepared statements, cursors, streaming results, C/C++ bindings, rich type parsing, and more.
diff --git a/docs/connect/java.rst b/docs/connect/java.rst
new file mode 100644
index 0000000..1d237d2
--- /dev/null
+++ b/docs/connect/java.rst
@@ -0,0 +1,41 @@
+.. _connect-java:
+
+====
+Java
+====
+
+JDBC is a standard Java API that provides a common interfaces for accessing
+databases in Java.
+
+Example method used in implementation:
+
+.. code-block:: java
+
+ import java.sql.*;
+ import java.util.Properties;
+
+ public class Main {
+ public static void main(String[] args) {
+ try {
+ Properties properties = new Properties();
+ properties.put("user", "admin");
+ properties.put("password", "");
+ properties.put("ssl", true);
+ Connection conn = DriverManager.getConnection(
+ "crate://.cratedb.net:5432/",
+ properties
+ );
+
+ Statement statement = conn.createStatement();
+ ResultSet resultSet = statement.executeQuery("SELECT name FROM sys.cluster");
+ resultSet.next();
+ String name = resultSet.getString("name");
+
+ System.out.println(name);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+See full documentation :ref:`here `.
\ No newline at end of file
diff --git a/docs/connect/javascript.rst b/docs/connect/javascript.rst
new file mode 100644
index 0000000..751e740
--- /dev/null
+++ b/docs/connect/javascript.rst
@@ -0,0 +1,60 @@
+.. _connect-javascript:
+
+==========
+JavaScript
+==========
+
+This section provides a quick overview of available node.js modules and
+drivers for CrateDB Cloud.
+
+node-postgres
+-------------
+
+node-postgres is a collection of node.js modules for interfacing with a CrateDB
+Cloud database.
+
+Example implementation will look like this:
+
+.. code-block:: javascript
+
+ const { Client } = require("pg");
+
+ const crateClient = new Client({
+ host: ".cratedb.net",
+ port: 5432,
+ user: "admin",
+ password: "",
+ ssl: true,
+ });
+
+ (async () => {
+ await crateClient.connect();
+ const result = await crateClient.query("SELECT name FROM sys.cluster");
+ console.log(result.rows[0]);
+ })();
+
+For more information see `node-postgres documentation`_.
+
+node-crate
+----------
+
+node-crate is an independent node.js driver implementation for CRATE using the _sql endpoint REST API.
+
+Example implementation will look like this:
+
+.. code-block:: javascript
+
+ const crate = require("node-crate");
+
+ crate.connect(`https://admin:${encodeURIComponent("")}@.cratedb.net:4200`);
+
+ (async () => {
+ const result = await crate.execute("SELECT name FROM sys.cluster");
+ console.log(result.rows[0]);
+ })();
+
+
+For more information see `node-crate documentation`_.
+
+.. _node-postgres documentation: https://www.npmjs.com/package/pg
+.. _node-crate documentation: https://www.npmjs.com/package/node-crate
diff --git a/docs/connect/php.rst b/docs/connect/php.rst
new file mode 100644
index 0000000..2ebae4d
--- /dev/null
+++ b/docs/connect/php.rst
@@ -0,0 +1,70 @@
+.. _connect-php:
+
+===
+PHP
+===
+
+This section provides a quick overview of available PHP extensions for CrateDB
+Cloud.
+
+PDO
+---
+
+The PHP Data Objects (PDO) is a standard PHP extension that defines a common
+interface for accessing databases in PHP.
+
+Example implementation will look like this:
+
+.. code-block:: php
+
+ .cratedb.net:4200',
+ 'admin',
+ ''
+ );
+
+ $stm = $pdo->query('SELECT name FROM sys.cluster');
+ $name = $stm->fetch();
+ print $name[0];
+
+ ?>
+
+See full documentation :ref:`here `.
+
+DBAL
+----
+
+DBAL is a PHP database abstraction layer that comes with database schema
+introspection, schema management, and PDO support.
+
+Example implementation will look like this:
+
+.. code-block:: console
+
+ 'Crate\DBAL\Driver\PDOCrate\Driver',
+ 'user' => 'admin',
+ 'password' = '',
+ 'host' => '.cratedb.net',
+ 'port' => 4200
+ );
+
+ $connection = \Doctrine\DBAL\DriverManager::getConnection($params);
+ $sql = 'SELECT name FROM sys.cluster';
+ $name = $connection->query($sql)->fetch();
+
+ print $name['name'];
+
+ ?>
+
+See full documentation :ref:`here `.
diff --git a/docs/connect/python.rst b/docs/connect/python.rst
new file mode 100644
index 0000000..82a2ded
--- /dev/null
+++ b/docs/connect/python.rst
@@ -0,0 +1,102 @@
+.. _connect-python:
+
+======
+Python
+======
+
+This guide demonstrates how to connect to a CrateDB Cloud cluster using different
+kinds of Python drivers. Individual drivers offer specific features for specific
+needs of your application, so consider reading this enumeration carefully.
+
+crate-python
+------------
+
+The ``crate`` Python package offers a database client implementation compatible
+with the Python Database API 2.0 specification, and also includes the CrateDB
+SQLAlchemy dialect. See the full documentation :ref:`here `.
+The package can be installed using ``pip install crate[sqlalchemy]``.
+
+.. code-block:: python
+
+ from crate import client
+
+ conn = client.connect("https://.cratedb.net:4200", username="admin", password="", verify_ssl_cert=True)
+
+ with conn:
+ cursor = conn.cursor()
+ cursor.execute("SELECT name FROM sys.cluster")
+ result = cursor.fetchone()
+ print(result)
+
+psycopg2
+--------
+
+Psycopg is a popular PostgreSQL database adapter for Python. Its main features
+are the complete implementation of the Python DB API 2.0 specification and the
+thread safety (several threads can share the same connection).
+For more information, see the `psycopg documentation`_.
+
+.. code-block:: python
+
+ import psycopg2
+
+ conn = psycopg2.connect(host=".cratedb.net", port=5432, user="admin", password="", sslmode="require")
+
+ with conn:
+ with conn.cursor() as cursor:
+ cursor.execute("SELECT name FROM sys.cluster")
+ result = cursor.fetchone()
+ print(result)
+
+aiopg
+-----
+
+aiopg is a python library for accessing a PostgreSQL database from the asyncio
+PEP-3156/tulip) framework. It wraps asynchronous features of the Psycopg
+database driver.
+For more information, see the `aiopg documentation`_.
+
+.. code-block:: python
+
+ import asyncio
+ import aiopg
+
+ async def run():
+ async with aiopg.create_pool(host=".cratedb.net", port=5432, user="admin", password="", sslmode="require") as pool:
+ async with pool.acquire() as conn:
+ async with conn.cursor() as cursor:
+ await cursor.execute("SELECT name FROM sys.cluster")
+ result = await cursor.fetchone()
+ print(result)
+
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(run())
+
+asyncpg
+-------
+
+asyncpg is a database interface library designed specifically for PostgreSQL
+and Python/asyncio. asyncpg is an efficient, clean implementation of the
+PostgreSQL server binary protocol for use with Python's asyncio framework.
+For more information, see the `asyncpg documentation`_.
+
+.. code-block:: python
+
+ import asyncio
+ import asyncpg
+
+ async def run():
+ conn = await asyncpg.connect(host=".cratedb.net", port=5432, user="admin", password="", ssl=True)
+ try:
+ result = await conn.fetch("SELECT name FROM sys.cluster")
+ finally:
+ await conn.close()
+ print(result)
+
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(run())
+
+
+.. _psycopg documentation: https://www.psycopg.org/docs/
+.. _aiopg documentation: https://aiopg.readthedocs.io/
+.. _asyncpg documentation: https://magicstack.github.io/asyncpg/current/
diff --git a/docs/connect/ruby.rst b/docs/connect/ruby.rst
new file mode 100644
index 0000000..29458ec
--- /dev/null
+++ b/docs/connect/ruby.rst
@@ -0,0 +1,20 @@
+.. _connect-ruby:
+
+====
+Ruby
+====
+
+This section shows an example implementation of Ruby client library for CrateDB
+Cloud:
+
+.. code-block:: ruby
+
+ require 'crate_ruby'
+
+ client = CrateRuby::Client.new(servers=[".cratedb.net:4200"], username: "admin", password: "", ssl: true)
+ result = client.execute("SELECT name FROM sys.cluster")
+ p result.to_a
+
+For additional information see `our GitHub documentation`_.
+
+.. _our GitHub documentation: https://github.com/crate/crate_ruby/blob/main/README.rst
\ No newline at end of file
diff --git a/docs/etl.md b/docs/etl.md
new file mode 100644
index 0000000..11ac512
--- /dev/null
+++ b/docs/etl.md
@@ -0,0 +1,184 @@
+(etl)=
+# ETL with CrateDB
+
+Use ETL applications and frameworks for transferring data in and out of CrateDB.
+
+```{note}
+This section is a work in progress.
+```
+
+
+## General
+
+- [Automating recurrent CrateDB queries]
+
+
+## Apache Airflow
+
+[Apache Airflow] is a software platform to programmatically author, schedule, and
+monitor workflows, written in Python.
+
+```{div}
+:style: "float: right"
+[![](https://19927462.fs1.hubspotusercontent-na1.net/hub/19927462/hubfs/Partner%20Logos/392x140/Apache-Airflow-Logo-392x140.png?width=784&height=280&name=Apache-Airflow-Logo-392x140.png){w=180px}](https://airflow.apache.org/)
+```
+
+A set of starter tutorials.
+
+- [Automating the import of Parquet files with Apache Airflow]
+- [Updating stock market data automatically with CrateDB and Apache Airflow]
+- [Automating stock data collection and storage with CrateDB and Apache Airflow]
+
+A set of elaborated tutorials, including blueprint implementations.
+
+- [Automating export of CrateDB data to S3 using Apache Airflow]
+- [Implementing a data retention policy in CrateDB using Apache Airflow]
+- [CrateDB and Apache Airflow: Building a data ingestion pipeline]
+- [Building a hot and cold storage data retention policy in CrateDB with Apache Airflow]
+
+```{seealso}
+[CrateDB and Apache Airflow]
+```
+
+
+## Apache Flink
+
+```{div}
+:style: "float: right"
+[![](https://flink.apache.org/flink-header-logo.svg){w=180px}](https://flink.apache.org/)
+```
+
+[Apache Flink] is a framework and distributed processing engine for stateful
+computations over unbounded and bounded data streams. Flink has been designed
+to run in all common cluster environments, perform computations at in-memory
+speed and at any scale.
+
+- [Build a data ingestion pipeline using Kafka, Flink, and CrateDB]
+- [Community Day: Stream processing with Apache Flink and CrateDB]
+- [Executable stack: Apache Kafka, Apache Flink, and CrateDB]
+
+![](https://flink.apache.org/img/flink-home-graphic.png){h=200px}
+
+
+## Apache Kafka
+
+```{div}
+:style: "float: right"
+[![](https://kafka.apache.org/logos/kafka_logo--simple.png){w=180px}](https://kafka.apache.org/)
+```
+
+[Apache Kafka] is an open-source distributed event streaming platform used by
+thousands of companies for high-performance data pipelines, streaming analytics,
+data integration, and mission-critical applications.
+
+- [Data Ingestion using Kafka and Kafka Connect]
+
+```{seealso}
+[CrateDB and Apache Kafka]
+```
+
+
+## Debezium
+
+```{div}
+:style: "float: right"
+[![](https://debezium.io/assets/images/color_white_debezium_type_600px.svg){w=180px}](https://debezium.io/)
+```
+
+[Debezium] is an open source distributed platform for change data capture. After
+pointing it at your databases, you are able to subscribe to the event stream of
+all database update operations.
+
+- [Tutorial: Replicating data to CrateDB with Debezium and Kafka]
+- [Webinar: How to replicate data from other databases to CrateDB with Debezium and Kafka]
+
+
+
+## Node-RED
+
+```{div}
+:style: "float: right"
+[![](https://global.discourse-cdn.com/business6/uploads/nodered/original/1X/778549404735e222c89ce5449482a189ace8cdae.png){w=180px}](https://nodered.org/)
+```
+
+[Node-RED] is a programming tool for wiring together hardware devices, APIs
+and online services within a low-code programming environment for event-driven
+applications. It allows orchestrating message flows and transformations through
+an intuitive web interface.
+
+It provides a browser-based editor that makes it easy to wire together flows
+using the wide range of elements called "nodes" from the palette that can be
+deployed to its runtime in a single-click.
+
+- [Ingesting MQTT messages into CrateDB using Node-RED]
+
+```{seealso}
+[CrateDB and Node-RED]
+```
+
+
+## pandas
+
+[pandas] is a fast, powerful, flexible and easy to use open source data analysis
+and manipulation tool, built on top of the Python programming language.
+
+```{div}
+:style: "float: right"
+[![](https://pandas.pydata.org/static/img/pandas.svg){w=180px}](https://pandas.pydata.org/)
+```
+
+- [Importing Parquet files into CrateDB using Apache Arrow and SQLAlchemy]
+- [Guide to efficient data ingestion to CrateDB with pandas]
+- [Guide to efficient data ingestion to CrateDB with pandas and Dask]
+
+
+## Telegraf
+
+```{div}
+:style: "float: right"
+[![](https://raw.githubusercontent.com/influxdata/branding/master/docs/img/logo-usage/logo-symbol-black.svg){w=180px}](https://www.influxdata.com/time-series-platform/telegraf/)
+```
+
+[Telegraf] is a leading open source server agent to help you collect metrics
+from your stacks, sensors, and systems. More than 200 adapters to connect
+to other systems leaves nothing to be desired.
+
+- [Use CrateDB With Telegraf, an Agent for Collecting & Reporting Metrics]
+
+![](https://www.influxdata.com/wp-content/uploads/Main-Diagram_06.01.2022v1.png){h=200px}
+
+```{seealso}
+[CrateDB and Telegraf]
+```
+
+
+[Apache Airflow]: https://airflow.apache.org/
+[Apache Flink]: https://flink.apache.org/
+[Apache Kafka]: https://kafka.apache.org/
+[Automating recurrent CrateDB queries]: https://community.crate.io/t/automating-recurrent-cratedb-queries/788
+[Automating export of CrateDB data to S3 using Apache Airflow]: https://community.crate.io/t/cratedb-and-apache-airflow-automating-data-export-to-s3/901
+[Automating stock data collection and storage with CrateDB and Apache Airflow]: https://community.crate.io/t/automating-stock-data-collection-and-storage-with-cratedb-and-apache-airflow/990
+[Automating the import of Parquet files with Apache Airflow]: https://community.crate.io/t/automating-the-import-of-parquet-files-with-apache-airflow/1247
+[Build a data ingestion pipeline using Kafka, Flink, and CrateDB]: https://dev.to/crate/build-a-data-ingestion-pipeline-using-kafka-flink-and-cratedb-1h5o
+[Building a hot and cold storage data retention policy in CrateDB with Apache Airflow]: https://community.crate.io/t/cratedb-and-apache-airflow-building-a-hot-cold-storage-data-retention-policy/934
+[Community Day: Stream processing with Apache Flink and CrateDB]: https://crate.io/blog/cratedb-community-day-2nd-edition-summary-and-highlights
+[CrateDB and Apache Airflow]: https://crate.io/integrations/cratedb-and-apache-airflow
+[CrateDB and Apache Airflow: Building a data ingestion pipeline]: https://community.crate.io/t/cratedb-and-apache-airflow-building-a-data-ingestion-pipeline/926
+[CrateDB and Apache Kafka]: https://crate.io/integrations/cratedb-and-kafka
+[CrateDB and Node-RED]: https://crate.io/integrations/cratedb-and-node-red
+[CrateDB and Telegraf]: https://crate.io/integrations/cratedb-and-telegraf
+[Data Ingestion using Kafka and Kafka Connect]: https://crate.io/docs/crate/howtos/en/latest/integrations/kafka-connect.html
+[Debezium]: https://debezium.io/
+[Executable stack: Apache Kafka, Apache Flink, and CrateDB]: https://github.com/crate/cratedb-examples/tree/main/stacks/kafka-flink
+[Guide to efficient data ingestion to CrateDB with pandas]: https://community.crate.io/t/guide-to-efficient-data-ingestion-to-cratedb-with-pandas/1541
+[Guide to efficient data ingestion to CrateDB with pandas and Dask]: https://community.crate.io/t/guide-to-efficient-data-ingestion-to-cratedb-with-pandas-and-dask/1482
+[Implementing a data retention policy in CrateDB using Apache Airflow]: https://community.crate.io/t/implementing-a-data-retention-policy-in-cratedb-using-apache-airflow/913
+[Importing Parquet files into CrateDB using Apache Arrow and SQLAlchemy]: https://community.crate.io/t/importing-parquet-files-into-cratedb-using-apache-arrow-and-sqlalchemy/1161
+[Ingesting MQTT messages into CrateDB using Node-RED]: https://community.crate.io/t/ingesting-mqtt-messages-into-cratedb-using-node-red/803
+[Node-RED]: https://nodered.org/
+[pandas]: https://pandas.pydata.org/
+[Telegraf]: https://www.influxdata.com/time-series-platform/telegraf/
+[Tutorial: Replicating data to CrateDB with Debezium and Kafka]: https://community.crate.io/t/replicating-data-to-cratedb-with-debezium-and-kafka/1388
+[Updating stock market data automatically with CrateDB and Apache Airflow]: https://community.crate.io/t/updating-stock-market-data-automatically-with-cratedb-and-apache-airflow/1304
+[Use CrateDB With Telegraf, an Agent for Collecting & Reporting Metrics]: https://crate.io/blog/use-cratedb-with-telegraf-an-agent-for-collecting-reporting-metrics
+[Webinar: How to replicate data from other databases to CrateDB with Debezium and Kafka]: https://crate.io/resources/webinars/lp-wb-debezium-kafka
diff --git a/docs/ide.md b/docs/ide.md
new file mode 100644
index 0000000..a1d541b
--- /dev/null
+++ b/docs/ide.md
@@ -0,0 +1,29 @@
+(ide)=
+
+# Using database IDEs with CrateDB
+
+Mostly through its PostgreSQL interface, CrateDB supports working with popular
+database IDE (Integrated Development Environment) applications.
+
+
+## DBeaver
+
+```{div}
+:style: "float: right"
+[![](https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/DBeaver_logo.svg/512px-DBeaver_logo.svg.png){w=120px}](https://dbeaver.io/)
+```
+
+[DBeaver] is a multipurpose database tool for developers and database administrators.
+Because CrateDB provides a JDBC driver, you can access CrateDB with any client tool that supports JDBC drivers.
+
+Connecting DBeaver to CrateDB uses the legacy PostgreSQL JDBC Driver, the blog
+article [Blog: Use CrateDB With DBeaver] explains how it works.
+
+![image](https://19927462.fs1.hubspotusercontent-na1.net/hub/19927462/hubfs/Screen-Shot-2019-04-05-at-17.13.21.png?width=1600&name=CrateDB-DBeaver.png){h=200px}
+![image](https://19927462.fs1.hubspotusercontent-na1.net/hub/19927462/hubfs/Screen-Shot-2019-04-05-at-17.15.13.png?width=1600&name=Screen-Shot-2019-04-05-at-17.15.13.png){h=200px}
+
+
+
+[Blog: Use CrateDB With DataGrip]: https://crate.io/blog/use-cratedb-with-datagrip-an-advanced-database-ide
+[Blog: Use CrateDB With DBeaver]: https://crate.io/blog/cratedb-dbeaver
+[DBeaver]: https://dbeaver.io/
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..241abd2
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,144 @@
+(index)=
+
+# CrateDB Clients and Tools
+
+
+## About CrateDB
+
+CrateDB is a distributed and scalable open-source SQL database for storing and
+analyzing massive amounts of data in near real-time, even with complex queries.
+It is PostgreSQL-compatible, and based on Lucene.
+
+Users are operating CrateDB clusters that store information in the range of
+billions of records, and terabytes of data, equally accessible without any
+retrieval penalty on data point age.
+
+
+## Connectivity
+
+This section introduces you to the canonical set of database drivers, client-
+and developer-applications, and how to configure them to connect to CrateDB.
+Just to name a few, it is about the CrateDB Admin UI, `crash`, `psql`,
+DataGrip, and DBeaver applications, the Java/JDBC/Python drivers, the SQLAlchemy
+and Flink dialects, and more.
+
+::::{grid} 1 2 2 3
+:margin: 4 4 0 0
+:gutter: 1
+
+
+:::{grid-item-card} {material-outlined}`code;2em` IDE
+:link: ide
+:link-type: ref
+
+Learn how to connect to CrateDB using a database IDE like DataGrip
+or DBeaver.
+:::
+
+
+:::{grid-item-card} {material-outlined}`terminal;2em` CLI
+:link: cli
+:link-type: ref
+
+Learn how to connect to a CrateDB cluster using command-line
+based terminal programs.
+:::
+
+
+:::{grid-item-card} {material-outlined}`link;2em` Library
+:link: connect
+:link-type: ref
+
+Learn how to configure your favorite client library to connect to a
+CrateDB cluster.
+:::
+
+
+::::
+
+
+## Integrations
+
+CrateDB integrates well with a diverse set of applications and tools concerned
+with analytics, visualization, and data wrangling, in the areas of ETL, BI,
+metrics aggregation and monitoring, and more.
+
+::::{grid} 1 2 2 4
+:margin: 4 4 0 0
+:gutter: 1
+
+
+:::{grid-item-card} {material-outlined}`integration_instructions;2em` Overview
+:link: https://community.crate.io/t/overview-of-cratedb-integration-tutorials/1015
+:link-type: url
+
+Use CrateDB with popular applications, frameworks, and tools.
+:::
+
+
+:::{grid-item-card} {material-outlined}`transform;2em` ETL
+:link: etl
+:link-type: ref
+
+Use ETL applications and frameworks for transferring data in and out of CrateDB.
+:::
+
+
+:::{grid-item-card} {material-outlined}`analytics;2em` Analytics
+:link: analyze
+:link-type: ref
+
+Analyze information in your CrateDB cluster.
+:::
+
+
+:::{grid-item-card} {material-outlined}`bar_chart;2em` Visualization
+:link: visualize
+:link-type: ref
+
+Visualize information in your CrateDB cluster.
+:::
+
+
+::::
+
+
+
+```{note} Contributions are welcome.
+
+If you would like to add items about integrations with other tools to this
+documentation section, please [get in touch], or directly edit this page on
+GitHub. You will find corresponding links within the topmost right navigation
+element.
+```
+
+```{seealso}
+Looking for the previous content on this page? Visit [](#index-legacy).
+```
+
+
+```{toctree}
+:hidden:
+
+IDE applications
+CLI programs
+Database drivers
+
+```
+
+```{toctree}
+:hidden:
+
+Load and export data
+Analyze data
+Visualize data
+```
+
+```{toctree}
+:hidden:
+
+Legacy documentation
+```
+
+
+[get in touch]: https://crate.io/contact
diff --git a/docs/index.rst b/docs/legacy.rst
similarity index 95%
rename from docs/index.rst
rename to docs/legacy.rst
index 9abf37b..e4da24c 100644
--- a/docs/index.rst
+++ b/docs/legacy.rst
@@ -1,8 +1,8 @@
-.. _index:
+.. _index-legacy:
-=========================
-CrateDB Clients and Tools
-=========================
+==================================
+[Legacy] CrateDB Clients and Tools
+==================================
CrateDB is a distributed SQL database that makes it simple to store and analyze
massive amounts of machine data in real-time.
@@ -178,8 +178,9 @@ CrateDB integrates with many different tools. Some of these are:
.. NOTE::
- If you would like to add to this page, please `get in touch`_ or
- `edit this page`_ on GitHub.
+ If you would like to add items to this page, please `get in touch`_ or
+ directly edit this page on GitHub. You will find corresponding links within
+ the topmost right navigation element.
.. _activerecord-crate-adaptor: https://rubygems.org/gems/activerecord-crate-adapter
@@ -204,7 +205,6 @@ CrateDB integrates with many different tools. Some of these are:
.. _create a data enrichment pipeline: https://crate.io/docs/crate/howtos/en/latest/integrations/azure-functions.html
.. _create a Machine Learning pipeline: https://crate.io/docs/crate/howtos/en/latest/integrations/r.html
.. _DBD::Crate: https://github.com/mamod/DBD-Crate
-.. _edit this page: https://github.com/crate/crate-clients-tools/blob/master/docs/index.rst
.. _get in touch: https://crate.io/contact
.. _GitHub: https://github.com/crate/crate-clients-tools
.. _Grafana: https://grafana.com
diff --git a/docs/visualize.md b/docs/visualize.md
new file mode 100644
index 0000000..5f1c446
--- /dev/null
+++ b/docs/visualize.md
@@ -0,0 +1,84 @@
+(visualize)=
+# Visualize data in CrateDB
+
+
+## Apache Superset
+
+```{div}
+:style: "float: right"
+[![](https://crate.io/hs-fs/hubfs/Apache-Superset-Logo-392x140@2x.png?width=604&height=216&name=Apache-Superset-Logo-392x140@2x.png){w=180px}](https://superset.apache.org/)
+```
+
+[Apache Superset] is an open-source modern data exploration and visualization
+platform, written in Python.
+
+- [Introduction to Time-Series Visualization in CrateDB and Superset]
+- [Use CrateDB and Apache Superset for Open Source Data Warehousing and Visualization]
+- [Set up an Apache Superset development sandbox with CrateDB]
+
+![](https://crate.io/hs-fs/hubfs/Screenshot%202021-12-28%20at%2013.33.41.png?width=2826&name=Screenshot%202021-12-28%20at%2013.33.41.png){h=200px}
+![](https://superset.apache.org/img/hero-screenshot.jpg){h=200px}
+
+```{seealso}
+[CrateDB and Superset]
+```
+
+
+## Explo Explore
+
+```{div}
+:style: "float: right"
+[![](https://uploads-ssl.webflow.com/62f681c18d50329187681754/62f681c18d5032d0bd681785_logo.svg){w=180px}](https://www.explo.co/)
+```
+
+[Explo] is a software platform for personalized and real-time customer facing
+analytics. Organizations use Explo’s platform services "Explore", "Host", "Report
+builder", and "Email", to activate and share data with their customers.
+
+[Explo Explore] integrates directly into your web portal or application and provides
+your customers with a complete self-service data toolkit, which can also be used to
+run white-labeled data portals.
+
+- [Introduction to Time Series Visualization in CrateDB and Explo]
+
+![](https://crate.io/hs-fs/hubfs/Screenshot%202023-07-21%20at%2013.17.45.png?width=2948&height=2312&name=Screenshot%202023-07-21%20at%2013.17.45.png){h=200px}
+![](https://crate.io/hs-fs/hubfs/Screenshot%202023-07-21%20at%2013.24.01.png?width=2932&height=1716&name=Screenshot%202023-07-21%20at%2013.24.01.png){h=200px}
+
+
+## Grafana
+
+```{div}
+:style: "float: right"
+[![](https://crate.io/hs-fs/hubfs/Imported_Blog_Media/grafana-logo-1-520x126.png?width=1040&height=252&name=grafana-logo-1-520x126.png){w=180px}](https://grafana.com/grafana/)
+```
+
+[Grafana] is the leading open-source metrics visualization tool that helps you
+build real-time dashboards, graphs, and many other sorts of data visualizations.
+It complements CrateDB in monitoring large volumes of machine data in real-time.
+
+Connecting to a CrateDB cluster will use the Grafana PostgreSQL data source adapter.
+The following tutorials outline how to configure Grafana to connect to CrateDB, and
+how to run a database query.
+
+- [Using Grafana with CrateDB Cloud]
+
+![](https://crate.io/docs/cloud/howtos/en/latest/_images/grafana-connection.png){h=200px}
+![](https://crate.io/docs/cloud/howtos/en/latest/_images/grafana-panel1.png){h=200px}
+
+```{seealso}
+[CrateDB and Grafana]
+```
+
+
+
+[Apache Superset]: https://superset.apache.org/
+[CrateDB and Grafana]: https://crate.io/integrations/cratedb-and-grafana
+[CrateDB and Superset]: https://crate.io/integrations/cratedb-and-apache-superset
+[Explo]: https://www.explo.co/
+[Explo Explore]: https://www.explo.co/products/explore
+[Grafana]: https://grafana.com/grafana/
+[Introduction to Time Series Visualization in CrateDB and Explo]: https://crate.io/blog/introduction-to-time-series-visualization-in-cratedb-and-explo
+[Introduction to Time-Series Visualization in CrateDB and Superset]: https://community.crate.io/t/introduction-to-time-series-visualization-in-cratedb-and-superset/1041
+[Set up an Apache Superset development sandbox with CrateDB]: https://community.crate.io/t/set-up-an-apache-superset-development-sandbox-with-cratedb/1163
+[Use CrateDB and Apache Superset for Open Source Data Warehousing and Visualization]: https://crate.io/blog/use-cratedb-and-apache-superset-for-open-source-data-warehousing-and-visualization
+[Using Grafana with CrateDB Cloud]: inv:cloud-howtos:std:label#visualize-data-with-grafana