diff --git a/docs/sql/broadcasted_sql.md b/docs/architecture/broadcasted_sql.md
similarity index 92%
rename from docs/sql/broadcasted_sql.md
rename to docs/architecture/broadcasted_sql.md
index 5cba51da21ba9d2f9beed9ad14a8b8c68bc33b3d..eae0e51420f191d6259b97377cf89ac8f8e16e8a 100644
--- a/docs/sql/broadcasted_sql.md
+++ b/docs/architecture/broadcasted_sql.md
@@ -4,7 +4,7 @@ Picodata включает в себя богатую функционально
 
 ## Принципы работы {: #sql-essentials }
 
-Принципы работы распределенного SQL согласуются с требованиями [стандарта SQL](../reference) (_Structured Query Language_, язык структурированных запросов) для хранения и управления данными в виде таблиц:
+Принципы работы распределенного SQL согласуются с требованиями [стандарта SQL](../references/reference) (_Structured Query Language_, язык структурированных запросов) для хранения и управления данными в виде таблиц:
 
 * Любая таблица представляет собой именованный набор строк;
 * Все строки таблицы имеют одинаковый набор именованных столбцов;
@@ -36,12 +36,12 @@ style="color:#39cb00ff">_зеленым_</span> — собранные фраг
 ### Распределение данных {: #data-distribution }
 Распределенный SQL требует собственно распределения данных между
 различными репликасетами (шардами) кластера. Это достигается за счет
-использования встроенной библиотеки [Vshard](../glossary.md#vshard).
+использования встроенной библиотеки [Vshard](../general/glossary.md#vshard).
 Взаимодействие Picodata SQL и Vshard заключается в разделении функций:
 
-- Picodata SQL работает с шардированными [таблицами](../glossary.md#table)
+- Picodata SQL работает с шардированными [таблицами](../general/glossary.md#table)
   (таблицами), отдельные строки (кортежи) которых распределяются по
-  разным [бакетам](../glossary.md#bucket);
+  разным [бакетам](../general/glossary.md#bucket);
 - Vshard работает с распределением бакетов по
   [репликасетам](../glossary.md#replicaset).
 
@@ -65,9 +65,7 @@ Picodata SQL включает внутреннюю функцию по вычи
 `sharding_key`, попадут в один бакет.
 
 Описание поддерживаемых запросов и их синтаксиса приведены в разделе:
-[Команды SQL](../queries)
+[Команды SQL](../references/queries.md)
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/sql/broadcasted_sql.md)
-
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/broadcasted_sql.md)
diff --git a/docs/clustering.md b/docs/architecture/clustering.md
similarity index 98%
rename from docs/clustering.md
rename to docs/architecture/clustering.md
index 749f5e4e01d6af86c64f9504317362e53b046ac6..1786d6f97ed9ee05348d5a901b89179c1354472e 100644
--- a/docs/clustering.md
+++ b/docs/architecture/clustering.md
@@ -36,7 +36,7 @@ picodata run --instance-id iN --listen iN --peer i1
 На схеме ниже показаны этапы жизненного цикла инстанса в контексте его
 присоединения к кластеру Picodata.
 
-![main.rs](images/clustering.svg "main.rs control flow")
+![main.rs](../images/clustering.svg "main.rs control flow")
 
 В контексте операционных систем каждый инстанс соответствует группе из
 двух процессов — родительского (supervisor) и дочернего (именно он
@@ -133,7 +133,7 @@ discovery не будет, инстанс сразу перейдет к эта
 
 Для первичного вызова `box.cfg()`:
 - идентификаторы  `instance_uuid`, `replicaset_uuid`,
-- `box.cfg.replication` — список [адресов](glossary.md#address) для репликации.
+- `box.cfg.replication` — список [адресов](../general/glossary.md#address) для репликации.
 
 Получив все настройки, инстанс использует их в `box.cfg()` (см.
 [`init_common()`](#fn-init_common)), и затем создает в БД группу
@@ -335,7 +335,7 @@ Cartridge) Picodata не использует понятие "состояния
 том же порядке, в котором он к ним приступает.
 
 
-![Instance states](images/fsm.svg "Возможные переходы состояний инстанса")
+![Instance states](../images/fsm.svg "Возможные переходы состояний инстанса")
 
 Ниже перечислены существующие варианты активностей, которые создает
 `topology_governor`.
@@ -460,7 +460,7 @@ raft-журнал, необходимо убедиться что журнал 
 данные начали ребалансироваться.
 
 Кластер Picodata поддерживает распределенные SQL-запросы. Подробнее о
-работающих кластерных функциях SQL см. в разделе [Распределенный SQL](../sql/broadcasted_sql).
+работающих кластерных функциях SQL см. в разделе [Распределенный SQL](broadcasted_sql).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/clustering.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/clustering.md)
diff --git a/docs/discovery.md b/docs/architecture/discovery.md
similarity index 98%
rename from docs/discovery.md
rename to docs/architecture/discovery.md
index 456dc9c9fe3147e1a820bddd0b1921c4376a1aa5..1320842a8076ea2293c2e5109378da1776f94376 100644
--- a/docs/discovery.md
+++ b/docs/architecture/discovery.md
@@ -1,6 +1,6 @@
 # Алгоритм discovery
 В данном разделе описаны подробности работы алгоритма
-[discovery](glossary.md#discovery), который отвечает за обнаружение
+[discovery](../general/glossary.md#discovery), который отвечает за обнаружение
 инстансами друг друга при инициализации кластера.
 
 ## Входные данные {: #initial-state }
@@ -180,5 +180,4 @@ true`, в то время как уже существовал `i_am_bootstrap_l
 инициализации кластера](clustering.md).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/discovery.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/discovery.md)
diff --git a/docs/raft_voters.md b/docs/architecture/raft_voters.md
similarity index 88%
rename from docs/raft_voters.md
rename to docs/architecture/raft_voters.md
index de0bf668c4f79c35d127a08c819226e61108dd3a..14ff080023e9c7cc7ac49a916bf7bdb2ad5b2c32 100644
--- a/docs/raft_voters.md
+++ b/docs/architecture/raft_voters.md
@@ -1,10 +1,10 @@
 # Raft и отказоустойчивость
-Алгоритм [Raft](glossary.md#raft) в Picodata обеспечивает отказоустойчивость распределенной
+Алгоритм [Raft](../general/glossary.md#raft) в Picodata обеспечивает отказоустойчивость распределенной
 системы при выходе из строя части ее узлов. Это достигается с помощью:
 
 - использования [зон доступности](deploy_on_hosts.md#failure-domains) для эффективного распределения реплик
   кластера между физическими локациями;
-- динамического переключения [голосующих узлов](glossary.md#node-states) в Raft.
+- динамического переключения [голосующих узлов](../general/glossary.md#node-states) в Raft.
 
 ## Динамическое переключение голосующих узлов в Raft (Raft voter failover) {: #raft-voter-failover }
 
@@ -51,8 +51,8 @@
 станет автоматически голосующим, т.к. схема распределения не будет этого
 требовать.
 
-См. [отдельный подраздел](../deploy_on_hosts) с описанием развертывания кластера на физических узлах.
+См. [отдельный подраздел](../tutorials/deploy_on_hosts.md) с описанием развертывания кластера на физических узлах.
 
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/raft_voters.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/raft_voters.md)
diff --git a/docs/benefits_rust.md b/docs/benefits_rust.md
deleted file mode 100644
index 055ddd8b991082a12d6ca919a861041042fcb58d..0000000000000000000000000000000000000000
--- a/docs/benefits_rust.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Преимущества Rust
-
-В данном разделе приведены аргументы в пользу разработки приложений для Picodata на языке Rust.
-
- Программное обеспечение Picodata предоставляет встроенные средства для написания кода на Rust. Использование Rust имеет ряд преимуществ не только благодаря растущей популярности этого языка, но и за счет его богатой стандартной библиотеки. Это позволяет создавать новую функциональность, не прибегая к сторонним библиотекам так, как это приходится делать, к примеру, с Lua. Также к числу достоинств Rust относятся:
-
-- строгая статическая типизация, упрощающая разработку и поддержку больших проектов. При этом наличие мощного движка выведения типов ([type inference](https://dhghomon.github.io/easy_rust/Chapter_8.html){:target="_blank"}) позволяет не указывать явно все типы в коде;
-- безопасная работа с памятью ([borrow checker](https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html){:target="_blank"}), что делает код безопаснее чем на языках C/C++. При этом код остается более эффективным чем на языках, использующих "сборщики мусора" (C#, Java, Go), за счет того, что безопасность обеспечивается во время компиляции, а не исполнения;
-- мощные встроенные средства оптимизации (а также оптимизации LLVM) делают Rust одним из самых эффективных языков на сегодняшний день;
-- развитая экосистема: [Cargo](https://doc.rust-lang.org/cargo/){:target="_blank"} — единый инструмент для настройки/сборки/тестирования/установки зависимостей и публикации кода. [Crates.io](https://crates.io){:target="_blank"} — централизованное хранилище Rust-модулей, написанных сообществом.
-- стандартизированная документация — наиболее удобный способ комментирования собственного кода (достаточно написать комментарий с простой разметкой, и затем при публикации модуля документация автоматически становится доступна всем пользователям на сайте [docs.rs](https://docs.rs){:target="_blank"});
-- быстро растущее сообщество разработчиков и энтузиастов. В ежегодном [опросе](https://insights.stackoverflow.com/survey/2021){:target="_blank"} пользователей [stackoverflow.com](https://stackoverflow.com){:target="_blank"} язык Rust несколько лет подряд [занимает первое место](https://stackoverflow.blog/2020/06/05/why-the-developers-who-use-rust-love-it-so-much){:target="_blank"} по удовлетворенности пользователей (те, которые пишут на Rust, не хотят писать ни на чем другом).
-
----
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/benefits_rust.md)
diff --git a/docs/benefits.md b/docs/general/benefits.md
similarity index 98%
rename from docs/benefits.md
rename to docs/general/benefits.md
index 1e2f56c5d914513479b005e3681e78b1b68a956d..5f537bfbeb83aae05d272c95106bde83fc366c63 100644
--- a/docs/benefits.md
+++ b/docs/general/benefits.md
@@ -32,4 +32,4 @@ Picodata — это не только программное обеспечен
 * Выполнение запросов на изменение настроек кластера.
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/benefits.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/benefits.md)
diff --git a/docs/description.md b/docs/general/description.md
similarity index 61%
rename from docs/description.md
rename to docs/general/description.md
index ea07ab56f377afbb085d3f1efb666288c3ccc6c2..cc73c692111323f7d3d641a031c4bab3b14f4814 100644
--- a/docs/description.md
+++ b/docs/general/description.md
@@ -5,19 +5,19 @@
 Picodata — это распределенная система промышленного уровня для управления базами данных с возможностью расширения функциональности за счет плагинов. Исходный код Picodata [открыт](https://git.picodata.io/picodata/picodata){:target="_blank"}. Программное обеспечение Picodata реализует хранение структурированных и неструктурированных данных, транзакционное управление данными, языки запросов SQL и GraphQL, а также поддержку плагинов на языках Rust и Lua.
 
 ## Назначение {: #purpose }
-Основным назначением продукта Picodata является горизонтально масштабируемое хранение структурированных и неструктурированных данных, управление ими, предоставление среды вычислений внутри кластера, состоящего из [реплицированных](glossary.md#replication) отдельных узлов (*[инстансов](glossary.md#instance)*). Данная комбинация возможностей позволяет эффективно реализовать сценарии управления наиболее востребованными, часто изменяющимися, *горячими* данными. В традиционных корпоративных архитектурах для ускорения и повышения надёжности доступа к данным классических, универсальных СУБД используются кэши и шины данных. Цель развития Picodata: заменить три компонента корпоративной архитектуры — кэш, шина и витрина доступа к данным — единым, высокопроизводительным и строго консистентным решением.
+Основным назначением продукта Picodata является горизонтально масштабируемое хранение структурированных и неструктурированных данных, управление ими, предоставление среды вычислений внутри кластера, состоящего из [реплицированных](../general/glossary.md#replication) отдельных узлов (*[инстансов](../general/glossary.md#instance)*). Данная комбинация возможностей позволяет эффективно реализовать сценарии управления наиболее востребованными, часто изменяющимися, *горячими* данными. В традиционных корпоративных архитектурах для ускорения и повышения надёжности доступа к данным классических, универсальных СУБД используются кэши и шины данных. Цель развития Picodata: заменить три компонента корпоративной архитектуры — кэш, шина и витрина доступа к данным — единым, высокопроизводительным и строго консистентным решением.
 
 ## Роль в платформе данных {: #platform }
 С точки зрения использования нашего ПО в составе корпоративной платформы, Picodata предоставляет операционный слой управления данными для решений класса In-memory data grid (IMDG). Это резидентная база данных для очень быстрой обработки среднего по объёму массива данных. Все данные хранятся в оперативной памяти, но при этом они персистентны за счёт периодического обновления снимков БД (snapshots) на диске. Ниже показана условная пирамида управления данными с точки зрения их объёма.
 
-![picodata_db](images/platform.svg "DB classes")
+![picodata_db](../images/platform.svg "DB classes")
 
 Picodata занимает верхнюю часть пирамиды, т.к. оперирует данными ограниченного объёма. На изображении показаны примеры прочих СУБД, которые служат для управления более крупными массивами данных и лучше подходят для архивного хранения и построения аналитических отчетов. В то же время такие СУБД хуже справляются с потоком часто меняющихся данных. Это именно та область, где Picodata эффективно решает поставленные задачи.
 
 ## Задачи {: #features }
 Программное обеспечение Picodata решает следующие задачи:
 
-* реализация общего [линеаризованного](glossary.md#linearizability) хранилища конфигурации, схемы данных и топологии кластера, встроенного в распределенную систему управления базами данных;
+* реализация общего [линеаризованного](../general/glossary.md#linearizability) хранилища конфигурации, схемы данных и топологии кластера, встроенного в распределенную систему управления базами данных;
 * предоставление интерфейса командной строки по управлению топологией кластера;
 * реализация runtime-библиотек по работе с сетью, файловому вводу-выводу, реализация кооперативной многозадачности и управления потоками, работа со встроенной СУБД средствами языка Rust;
 * поддержка языка SQL для работы как с данными отдельного инстанса, так и с данными всего кластера;
@@ -51,7 +51,7 @@ Picodata занимает верхнюю часть пирамиды, т.к. о
 * простая настройка для запуска шардированного кластера. Не требуется много файлов конфигурации;
 * совместимость с любыми инструментами развертывания инстансов (Ansible, Chef, Puppet и др.);
 * обеспечение высокой доступности данных без необходимости в кластере Etcd и дополнительных настройках;
-* автоматическое определение активного инстанса в [репликасетах](glossary.md#replicaset) любого размера;
+* автоматическое определение активного инстанса в [репликасетах](../general/glossary.md#replicaset) любого размера;
 * единая схема данных во всех репликасетах кластера;
 * возможность обновлять схему данных и менять топологию работающего кластера, например, добавлять новые инстансы. Picodata автоматически управляет версиями схемы;
 * встроенные инструменты для создания и запуска приложений;
@@ -60,39 +60,39 @@ Picodata занимает верхнюю часть пирамиды, т.к. о
 
 ## Архитектура кластера {: #architecture }
 ### Составные части кластера {: #cluster-internals }
-Архитектура кластера Picodata предполагает систему отдельных *[инстансов](glossary.md#instance)* — программных узлов, входящих в состав кластера. Каждый такой узел может выполнять различные роли, например роль хранения данных, роль сервера приложения, или служебную роль координатора кластера.
+Архитектура кластера Picodata предполагает систему отдельных *[инстансов](../general/glossary.md#instance)* — программных узлов, входящих в состав кластера. Каждый такой узел может выполнять различные роли, например роль хранения данных, роль сервера приложения, или служебную роль координатора кластера.
 Все инстансы работают с единой схемой данных и кодом приложения. Каждый процесс базы данных выполняется на одном процессорном ядре и хранит используемый набор данных в оперативной памяти.
-Любой отдельный инстанс является частью набора реплик, который также называют *[репликасетом](glossary.md#replicaset)*. Репликасет может состоять из одного или нескольких инстансов — дубликатов одного и того же набора данных. Внутри репликасета всегда есть *активный* инстанс и — если реплик больше 1 — то некоторое число *резервных* инстансов, обеспечивающих отказоустойчивость системы в случае выхода из строя или недоступности активного инстанса. Число реплик определяется *фактором репликации*, заданным в глобальных настройках Picodata.
+Любой отдельный инстанс является частью набора реплик, который также называют *[репликасетом](../general/glossary.md#replicaset)*. Репликасет может состоять из одного или нескольких инстансов — дубликатов одного и того же набора данных. Внутри репликасета всегда есть *активный* инстанс и — если реплик больше 1 — то некоторое число *резервных* инстансов, обеспечивающих отказоустойчивость системы в случае выхода из строя или недоступности активного инстанса. Число реплик определяется *фактором репликации*, заданным в глобальных настройках Picodata.
 
 На рисунке ниже показана схема простого кластера из двух репликасетов, каждый из которых состоит из двух инстансов (активного и резервного).
 
-![Схема кластера](images/cluster.svg)
+![Схема кластера](../images/cluster.svg)
 
 Репликасеты являются единицами горизонтального масштабирования кластера. Данные балансируются между ними автоматически.
 
 ### Хранение данных {: #data-storage }
-Внутри каждого репликасета есть *бакет* ([bucket](glossary.md#bucket)) — виртуализированная неделимая единица хранения, обеспечивающая локальность данных (например, хранение нескольких связанных с клиентом записей на одном физическом узле сети). Сам по себе бакет не имеет ограничений по емкости и может содержать любой объем данных. Горизонтальное масштабирование позволяет распределить бакеты по разным шардам, оптимизируя производительность кластера путем добавления новых реплицированных инстансов. Чем больше репликасетов входит в состав кластера, тем меньше нагрузка на каждый из них. Бакет хранится физически на одном репликасете и является промежуточным звеном между данными и устройством хранения. В каждом репликасете может быть много бакетов (или не быть ни одного). Внутри бакета данные задублированы по всем инстансам в рамках репликасета в соответствии с фактором репликации. Количество бакетов может быть задано при первоначальной настройке кластера. По умолчанию кластер Picodata использует 3000 бакетов.
+Внутри каждого репликасета есть *бакет* ([bucket](../general/glossary.md#bucket)) — виртуализированная неделимая единица хранения, обеспечивающая локальность данных (например, хранение нескольких связанных с клиентом записей на одном физическом узле сети). Сам по себе бакет не имеет ограничений по емкости и может содержать любой объем данных. Горизонтальное масштабирование позволяет распределить бакеты по разным шардам, оптимизируя производительность кластера путем добавления новых реплицированных инстансов. Чем больше репликасетов входит в состав кластера, тем меньше нагрузка на каждый из них. Бакет хранится физически на одном репликасете и является промежуточным звеном между данными и устройством хранения. В каждом репликасете может быть много бакетов (или не быть ни одного). Внутри бакета данные задублированы по всем инстансам в рамках репликасета в соответствии с фактором репликации. Количество бакетов может быть задано при первоначальной настройке кластера. По умолчанию кластер Picodata использует 3000 бакетов.
 
 Ниже показан пример схемы хранения данных внутри репликасета.
 
-![Хранение данных](images/storage.svg)
+![Хранение данных](../images/storage.svg)
 
 ### Отказоустойчивость {: #failover }
-Наличие нескольких реплик внутри репликасета обеспечивают его [отказоустойчивость](glossary.md#failsoft). Дополнительно для повышения надежности каждый инстанс кластера внутри репликасета находится на разных физических серверах, а в некоторых случаях — в удаленных друг от друга датацентрах. Таким образом, в случае недоступности датацентра в репликасете происходит переключение на резервную реплику/инстанс без прерывания работы.
+Наличие нескольких реплик внутри репликасета обеспечивают его [отказоустойчивость](../general/glossary.md#failsoft). Дополнительно для повышения надежности каждый инстанс кластера внутри репликасета находится на разных физических серверах, а в некоторых случаях — в удаленных друг от друга датацентрах. Таким образом, в случае недоступности датацентра в репликасете происходит переключение на резервную реплику/инстанс без прерывания работы.
 
 Пример географического распределения репликасета показан на схеме ниже.
 
-![Отказоустойчивость](images/failover.svg)
+![Отказоустойчивость](../images/failover.svg)
 
 ### Шардирование {: #sharding }
-[Шардирование](glossary.md#sharding) — это распределение бакетов между различными репликасетами. В Picodata используется основанное на хэшах шардирование с хранением данных в виртуальных бакетах. Каждый репликасет является *шардом*, и чем больше репликасетов имеется в кластере, тем эффективнее данная функция может разделить массив данных на отдельные наборы данных меньшего размера. При добавлении новых инстансов в кластер и/или формировании новых репликасетов Picodata автоматически равномерно распределит бакеты с учетом новой конфигурации.
+[Шардирование](../general/glossary.md#sharding) — это распределение бакетов между различными репликасетами. В Picodata используется основанное на хэшах шардирование с хранением данных в виртуальных бакетах. Каждый репликасет является *шардом*, и чем больше репликасетов имеется в кластере, тем эффективнее данная функция может разделить массив данных на отдельные наборы данных меньшего размера. При добавлении новых инстансов в кластер и/или формировании новых репликасетов Picodata автоматически равномерно распределит бакеты с учетом новой конфигурации.
 
 Пример автоматического шардирования при добавлении в кластер новых инстансов показан на схеме ниже.
 
-![Шардирование](images/sharding.svg)
+![Шардирование](../images/sharding.svg)
 
 Таким образом, каждый инстанс (экземпляр Picodata) является *частью репликасета*, а каждый репликасет — *шардом*, а шарды распределены между несколькими серверами.
 
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/description.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/description.md)
diff --git a/docs/feedback.md b/docs/general/feedback.md
similarity index 93%
rename from docs/feedback.md
rename to docs/general/feedback.md
index ca030c294177765d5a5edff9b2fb0878d28b26f7..5ef77924598fc8345ed2c9645ee99c039c806a83 100644
--- a/docs/feedback.md
+++ b/docs/general/feedback.md
@@ -10,6 +10,4 @@ Telegram-канале
 [@picodataru](https://t.me/picodataru){:target="_blank"}.
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/feedback.md)
-
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/feedback.md)
diff --git a/docs/glossary.md b/docs/general/glossary.md
similarity index 97%
rename from docs/glossary.md
rename to docs/general/glossary.md
index b74328df39a0ba621a89ceac087502ad287df804..bb9e3519dcba69df5f42de83afad70395efb5b92 100644
--- a/docs/glossary.md
+++ b/docs/general/glossary.md
@@ -103,7 +103,7 @@ Picodata содержит следующие встроенные системн
 
 Схематичное представление кластера, в составе которого есть некоторое число инстансов, репликасетов и групп инстансов, показано ниже.<a name="cluster_group"></a>
 
-![Cluster](images/cluster_group.svg)
+![Cluster](../images/cluster_group.svg)
 
 ### Репликасет (replicaset) {: #replicaset }
 **Репликасет** — буквально «набор реплик», экземпляров приложений, в которых хранится один и тот же набор данных. Реплика в составе репликасета может быть в одном из двух состояний:
@@ -125,7 +125,7 @@ Picodata содержит следующие встроенные системн
 
 Концепция групп является аналогом [vshard_group](https://www.tarantool.io/ru/doc/latest/book/cartridge/cartridge_cli/commands/replicasets/#list-vshard-groups){:target="_blank"} из Cartridge, но дополнительно позволяет назначать роли группам (в Cartridge роли настраивались индивидуально для каждого репликасета).
 
-**Группа инстансов** является более крупным образованием, чем репликасет. См пояснительную [картинку](glossary.md#cluster_group).
+**Группа инстансов** является более крупным образованием, чем репликасет. См пояснительную [картинку](#cluster_group).
 
 Каждая шардированная таблица принадлежит одной конкретной инстанс-группе. На инстансах из других групп таблица физически не создается. Но так как схема данных является общей на весь кластер, создавать две таблицы с одинаковым именем в разных группах не разрешается. Принадлежность инстанс-группе определяется только для шардированных таблиц, глобальные таблицы создаются повсюду.
 
@@ -213,7 +213,7 @@ Picodata прилагает все усилия, чтобы эти состоя
 **Фенсинг** — это подпись всех запросов в кластере номером эпохи или терма, и отказ обслуживать запросы с устаревшей эпохой. Данный инструмент используется для корректной работы распределенной блокировки, т.е. ситуации, когда из нескольких узлов нужно гарантированно выбрать один для выполнения запроса.
 
 ### CaS (compare and swap) {: #cas }
-**Compare and swap** — особый алгоритм в составе Picodata. Он обеспечивает уровень изоляции транзакций [serializable](glossary.md#isolation), тем самым не допуская случаев несогласованности данных в результате выполнения конкурирующих запросов/транзакций. Таким случаем, например, может быть ситуация, когда одна транзакция затирает результат действия другой, выполняющейся в тоже время. _Compare and swap_ решает эту проблему с помощью проверки предиката, т.е. меняет данные какого-либо параметра кластера только в том случае, если исходное ожидаемое значение этого параметра соответствует исходному фактическому.
+**Compare and swap** — особый алгоритм в составе Picodata. Он обеспечивает уровень изоляции транзакций [serializable](#isolation), тем самым не допуская случаев несогласованности данных в результате выполнения конкурирующих запросов/транзакций. Таким случаем, например, может быть ситуация, когда одна транзакция затирает результат действия другой, выполняющейся в тоже время. _Compare and swap_ решает эту проблему с помощью проверки предиката, т.е. меняет данные какого-либо параметра кластера только в том случае, если исходное ожидаемое значение этого параметра соответствует исходному фактическому.
 Технически данный алгоритм реализован в виде хранимой процедуры `proc_cas()`.
 
 ### Бутстрап (bootstrap) {: #bootstrap }
@@ -324,4 +324,4 @@ sharding_key:
 **Материализация данных**. Один из этапов исполнения распределенного SQL-запроса, при котором на отдельном узле промежуточные данные сохраняются в его памяти.
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/glossary.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/glossary.md)
diff --git a/docs/sql/ebnf/ACL.svg b/docs/images/ebnf/ACL.svg
similarity index 100%
rename from docs/sql/ebnf/ACL.svg
rename to docs/images/ebnf/ACL.svg
diff --git a/docs/sql/ebnf/Column.svg b/docs/images/ebnf/Column.svg
similarity index 100%
rename from docs/sql/ebnf/Column.svg
rename to docs/images/ebnf/Column.svg
diff --git a/docs/sql/ebnf/CreateRole.svg b/docs/images/ebnf/CreateRole.svg
similarity index 100%
rename from docs/sql/ebnf/CreateRole.svg
rename to docs/images/ebnf/CreateRole.svg
diff --git a/docs/sql/ebnf/CreateTable.svg b/docs/images/ebnf/CreateTable.svg
similarity index 100%
rename from docs/sql/ebnf/CreateTable.svg
rename to docs/images/ebnf/CreateTable.svg
diff --git a/docs/sql/ebnf/CreateUser.svg b/docs/images/ebnf/CreateUser.svg
similarity index 100%
rename from docs/sql/ebnf/CreateUser.svg
rename to docs/images/ebnf/CreateUser.svg
diff --git a/docs/sql/ebnf/DDL.svg b/docs/images/ebnf/DDL.svg
similarity index 100%
rename from docs/sql/ebnf/DDL.svg
rename to docs/images/ebnf/DDL.svg
diff --git a/docs/sql/ebnf/DELETE.svg b/docs/images/ebnf/DELETE.svg
similarity index 100%
rename from docs/sql/ebnf/DELETE.svg
rename to docs/images/ebnf/DELETE.svg
diff --git a/docs/sql/ebnf/DML.svg b/docs/images/ebnf/DML.svg
similarity index 100%
rename from docs/sql/ebnf/DML.svg
rename to docs/images/ebnf/DML.svg
diff --git a/docs/sql/ebnf/DQL.svg b/docs/images/ebnf/DQL.svg
similarity index 100%
rename from docs/sql/ebnf/DQL.svg
rename to docs/images/ebnf/DQL.svg
diff --git a/docs/sql/ebnf/Distribution.svg b/docs/images/ebnf/Distribution.svg
similarity index 100%
rename from docs/sql/ebnf/Distribution.svg
rename to docs/images/ebnf/Distribution.svg
diff --git a/docs/sql/ebnf/DropRole.svg b/docs/images/ebnf/DropRole.svg
similarity index 100%
rename from docs/sql/ebnf/DropRole.svg
rename to docs/images/ebnf/DropRole.svg
diff --git a/docs/sql/ebnf/DropTable.svg b/docs/images/ebnf/DropTable.svg
similarity index 100%
rename from docs/sql/ebnf/DropTable.svg
rename to docs/images/ebnf/DropTable.svg
diff --git a/docs/sql/ebnf/DropUser.svg b/docs/images/ebnf/DropUser.svg
similarity index 100%
rename from docs/sql/ebnf/DropUser.svg
rename to docs/images/ebnf/DropUser.svg
diff --git a/docs/sql/ebnf/EXPLAIN.svg b/docs/images/ebnf/EXPLAIN.svg
similarity index 100%
rename from docs/sql/ebnf/EXPLAIN.svg
rename to docs/images/ebnf/EXPLAIN.svg
diff --git a/docs/sql/ebnf/INSERT.svg b/docs/images/ebnf/INSERT.svg
similarity index 100%
rename from docs/sql/ebnf/INSERT.svg
rename to docs/images/ebnf/INSERT.svg
diff --git a/docs/sql/ebnf/Options.svg b/docs/images/ebnf/Options.svg
similarity index 100%
rename from docs/sql/ebnf/Options.svg
rename to docs/images/ebnf/Options.svg
diff --git a/docs/sql/ebnf/PrimaryKey.svg b/docs/images/ebnf/PrimaryKey.svg
similarity index 100%
rename from docs/sql/ebnf/PrimaryKey.svg
rename to docs/images/ebnf/PrimaryKey.svg
diff --git a/docs/sql/ebnf/SELECT.svg b/docs/images/ebnf/SELECT.svg
similarity index 100%
rename from docs/sql/ebnf/SELECT.svg
rename to docs/images/ebnf/SELECT.svg
diff --git a/docs/sql/ebnf/STATEMENT.svg b/docs/images/ebnf/STATEMENT.svg
similarity index 100%
rename from docs/sql/ebnf/STATEMENT.svg
rename to docs/images/ebnf/STATEMENT.svg
diff --git a/docs/sql/ebnf/UPDATE.svg b/docs/images/ebnf/UPDATE.svg
similarity index 100%
rename from docs/sql/ebnf/UPDATE.svg
rename to docs/images/ebnf/UPDATE.svg
diff --git a/docs/sql/ebnf/VALUES.svg b/docs/images/ebnf/VALUES.svg
similarity index 100%
rename from docs/sql/ebnf/VALUES.svg
rename to docs/images/ebnf/VALUES.svg
diff --git a/docs/sql/ebnf/alias.svg b/docs/images/ebnf/alias.svg
similarity index 100%
rename from docs/sql/ebnf/alias.svg
rename to docs/images/ebnf/alias.svg
diff --git a/docs/sql/ebnf/expression.svg b/docs/images/ebnf/expression.svg
similarity index 100%
rename from docs/sql/ebnf/expression.svg
rename to docs/images/ebnf/expression.svg
diff --git a/docs/sql/ebnf/reference.svg b/docs/images/ebnf/reference.svg
similarity index 100%
rename from docs/sql/ebnf/reference.svg
rename to docs/images/ebnf/reference.svg
diff --git a/docs/sql/ebnf/row.svg b/docs/images/ebnf/row.svg
similarity index 100%
rename from docs/sql/ebnf/row.svg
rename to docs/images/ebnf/row.svg
diff --git a/docs/sql/ebnf/type.svg b/docs/images/ebnf/type.svg
similarity index 100%
rename from docs/sql/ebnf/type.svg
rename to docs/images/ebnf/type.svg
diff --git a/docs/sql/ebnf/value.svg b/docs/images/ebnf/value.svg
similarity index 100%
rename from docs/sql/ebnf/value.svg
rename to docs/images/ebnf/value.svg
diff --git a/docs/index.md b/docs/index.md
index 070e0739be7a1122b131a1f727a8e8d5ffb30b17..8382ac1156391eb68a716bd4405838fb8a3a3de0 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -11,33 +11,33 @@ Picodata — это распределенная система промышле
 
 
 ### Ознакомление с ПО Picodata {: #getting-started }
-* [Общее описание продукта](description)
-* [Преимущества использования Picodata](benefits)
-* [Глоссарий](glossary)
-* [Обратная связь и получение помощи](feedback)
+* [Общее описание продукта](general/description)
+* [Преимущества использования Picodata](general/benefits)
+* [Глоссарий](general/glossary)
+* [Обратная связь и получение помощи](general/feedback)
 
 ### Инструкции и руководства {: #manuals-and-howtos }
-* [Установка Picodata](install)
-* [Запуск кластера](deploy_on_hosts)
-* [Мониторинг кластера](monitoring)
-* [Подключение и работа в консоли](tutorial_first_steps)
-* [Работа в веб-интерфейсе](tutorial_webui)
-* [Авторизация с помощью LDAP](auth_ldap)
-* [Пользователи, привилегии и роли](tutorial_users)
-* [Работа с данными SQL](tutorial_data)
+* [Установка Picodata](tutorials/install)
+* [Запуск кластера](tutorials/deploy_on_hosts)
+* [Мониторинг кластера](tutorials/monitoring)
+* [Подключение и работа в консоли](tutorials/tutorial_first_steps)
+* [Работа в веб-интерфейсе](tutorials/tutorial_webui)
+* [Авторизация с помощью LDAP](tutorials/auth_ldap)
+* [Пользователи, привилегии и роли](tutorials/tutorial_users)
+* [Работа с данными SQL](tutorials/tutorial_data)
 
 ### Справочные материалы {: #references }
-* [Аргументы командной строки](cli)
-* [Типы данных SQL](sql/datatypes)
-* [Команды SQL](sql/queries)
-* [Публичный API](api)
-* [Совместимость с ANSI SQL](sql/reference)
+* [Аргументы командной строки](references/cli)
+* [Типы данных SQL](references/datatypes)
+* [Команды SQL](references/queries)
+* [Публичный API](references/api)
+* [Совместимость с ANSI SQL](references/reference)
 
 ### Архитектура {: #arch }
-* [Распределенный SQL](sql/broadcasted_sql.md)
-* [Алгоритм discovery](discovery)
-* [Raft и отказоустойчивость](raft_voters)
-* [Жизненный цикл кластера](clustering)
+* [Распределенный SQL](architecture/broadcasted_sql)
+* [Алгоритм discovery](architecture/discovery)
+* [Raft и отказоустойчивость](architecture/raft_voters)
+* [Жизненный цикл кластера](architecture/clustering)
 
 <!-- План на развитие структуры документации:
 ### Ознакомление с ПО Picodata
diff --git a/docs/picodata-list.sh b/docs/picodata-list.sh
deleted file mode 100755
index 3469c1eb00706f32c75652c3d24c523ce1a1f5e9..0000000000000000000000000000000000000000
--- a/docs/picodata-list.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-exec tarantoolctl connect ${1:-3301} << _SCRIPT_
-_G.fselect_max_width = 200
-local whoami = pico.whoami()
-local raft_status = pico.raft_status()
-return
-{instance_id = whoami.instance_id},
-{raft_state = raft_status.raft_state},
-{voters = box.space._raft_state:get("voters").value},
-{learners = box.space._raft_state:get("learners").value},
-{instances = box.space._pico_instance:fselect()},
-{replicasets = box.space._pico_replicaset:fselect()}
-_SCRIPT_
-
diff --git a/docs/api.md b/docs/references/api.md
similarity index 97%
rename from docs/api.md
rename to docs/references/api.md
index 60329ec69bb18d5d1dad72416b30173b3c3f7c4b..2be83d1176e0b633e017f3495db05edffcfc183b 100644
--- a/docs/api.md
+++ b/docs/references/api.md
@@ -32,7 +32,7 @@ picodata> pico.help("help")
 | [pico.PICODATA_VERSION](#picopicodata_version) | Версия Picodata.
 | [pico.abort_ddl](#picoabort_ddl) | Отмена ожидающей операции по изменению схемы данных.
 | [pico.args](#picoargs) | Вывод аргументов запуска `picodata run`.
-| [pico.cas()](#picocas) | Запрос на изменение параметров методом [Compare and Swap](glossary.md#as-compare-and-swap).
+| [pico.cas()](#picocas) | Запрос на изменение параметров методом [Compare and Swap](../general/glossary.md#as-compare-and-swap).
 | [pico.change_password()](#picochange_password) | Изменение пароля пользователя.
 | [pico.create_role()](#picocreate_role) | Создание роли.
 | [pico.create_table()](#picocreate_table) | Создание таблицы.
@@ -44,20 +44,20 @@ picodata> pico.help("help")
 | [pico.expel()](#picoexpel) | [Контролируемый вывод](cli.md#expel) инстанса из кластера.
 | [pico.grant_privilege()](#picogrant_privilege) | Назначение привилегии пользователю или роли.
 | [pico.help()](#picohelp) | Доступ к встроенной справочной системе.
-| [pico.instance_info()](#picoinstance_info) | Получение информации об инстансе (идентификаторы, уровни ([grade](glossary.md#grade)) и прочее).
-| [pico.raft_compact_log()](#picoraft_compact_log) | [Компактизация](glossary.md#raft-raft-log-compaction) raft-журнала c удалением указанного числа наиболее старых записей.
+| [pico.instance_info()](#picoinstance_info) | Получение информации об инстансе (идентификаторы, уровни ([grade](../general/glossary.md#grade)) и прочее).
+| [pico.raft_compact_log()](#picoraft_compact_log) | [Компактизация](../general/glossary.md#raft-raft-log-compaction) raft-журнала c удалением указанного числа наиболее старых записей.
 | [pico.raft_get_index()](#picoraft_get_index) | Получение текущего примененного индекса raft-журнала.
 | [pico.raft_log()](#picoraft_log) | Чтение содержимого raft-журнала.
 | [pico.raft_propose_nop()](#picoraft_propose_nop) | Добавление в raft-журнал запись `Nop` (no operation).
 | [pico.raft_read_index()](#picoraft_read_index) | Кворумное чтение индекса raft-журнала.
-| [pico.raft_status()](#picoraft_status) | Получение данных о текущем состоянии raft ([терм](glossary.md#term), [лидер](glossary.md#leader) и т.д.).
+| [pico.raft_status()](#picoraft_status) | Получение данных о текущем состоянии raft ([терм](../general/glossary.md#term), [лидер](../general/glossary.md#leader) и т.д.).
 | [pico.raft_term()](#picoraft_term) | Получение номера терма (текущего или для указанной записи).
 | [pico.raft_timeout_now()](#picoraft_timeout_now) | Немедленное объявление новых выборов в raft-группе.
 | [pico.raft_wait_index()](#picoraft_wait_index) |  Ожидание локального применения указанного raft-индекса.
 | [pico.revoke_privilege()](#picorevoke_privilege) |  Удаление привилегии у пользователя или роли.
 | [pico.sql()](#picosql) |  Выполнение кластерных SQL-запросов.
 | [pico.wait_ddl_finalize()](#picowait_ddl_finalize) | Ожидание применения (финализации) DDL-операции.
-| [pico.wait_vclock()](#picowait_vclock) | Ожидание момента, когда значение [Vclock](glossary.md#vclock-vector-clock) достигнет целевого.
+| [pico.wait_vclock()](#picowait_vclock) | Ожидание момента, когда значение [Vclock](../general/glossary.md#vclock-vector-clock) достигнет целевого.
 | [pico.whoami()](#picowhoami) | Отображение данных о текущем инстансе.
 
 
@@ -299,7 +299,7 @@ function create_table(opts)
 
 - `opts`: (_table_):
     - `name` (_string_)
-    - `format` (_table_ {_table_ TableField,...}), см. [table TableField](#table-tablefield)
+    - `format` (_table_ {_table_ TableField,...}), см. [table TableField](#tablefield_table)
     - `primary_key `(_table_ {_string_,...}) с именами полей
     - `id` (optional _number_), по умолчанию генерируется автоматически
     - `distribution` (_string_), варианты: `'global'` | `'sharded'`
@@ -310,7 +310,7 @@ function create_table(opts)
     - `sharding_fn` (optional _string_), поддерживается пока только функция `murmur3`
     - `engine` (optional _string_), движок хранения данных в БД;
       варианты: `'memtx'` | `'vinyl'`. По умолчанию используется
-      `'memtx'`. См [подробнее](glossary.md#db-engine).
+      `'memtx'`. См [подробнее](../general/glossary.md#db-engine).
     - `timeout` (optional _number_), число в секундах. По умолчанию
       используется бесконечное значение.
 
@@ -807,7 +807,7 @@ picodata> pico.raft_read_index(1)
 ### pico.raft_status
 
 Получает данные о текущем состоянии raft-узла
-([терм](glossary.md#term), [лидер](glossary.md#leader) и т.д.). Функция
+([терм](../general/glossary.md#term), [лидер](../general/glossary.md#leader) и т.д.). Функция
 не имеет передаваемых параметров.
 
 Возвращаемые поля:
@@ -1068,7 +1068,7 @@ function wait_ddl_finalize(index, opts)
 ### pico.wait_vclock
 
 Ожидает момента, когда значение
-[Vclock](glossary.md#vclock-vector-clock) в Tarantool достигнет
+[Vclock](../general/glossary.md#vclock-vector-clock) в Tarantool достигнет
 целевого.
 
 ```lua
@@ -1182,15 +1182,15 @@ Lua-таблица, описывающая поле в составе табли
 ### table Vclock {: #vclock_table }
 
 Lua-таблица, отражающая соответствие `id` инстанса его
-[LSN-номеру](glossary.md#lsn-log-sequence-number).
+[LSN-номеру](../general/glossary.md#lsn).
 
 Пример:
 ```lua
 {[0] = 2, [1] = 101}
 {[0] = 148, [1] = 9086, [3] = 2}
 ```
-См. подробнее описание [Vclock](glossary.md#vclock-vector-clock). Нулевое значение Vclock зарезервировано
+См. подробнее описание [Vclock](../general/glossary.md#vclock). Нулевое значение Vclock зарезервировано
 для отслеживания локальных изменений, которые не реплицируются.
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/api.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/references/api.md)
diff --git a/docs/cli.md b/docs/references/cli.md
similarity index 99%
rename from docs/cli.md
rename to docs/references/cli.md
index dadc14c503d590ff30ad7ce0a91fbd1e4c06a70b..1bd3e419564a4e3b91881db2c57bb10dad46f8d5 100644
--- a/docs/cli.md
+++ b/docs/references/cli.md
@@ -247,7 +247,7 @@ picodata expel [Параметры]
     — сервер можно выключать.
 
 
-Подробнее об устройстве кластера и репликасетов Picodata см. в разделе [Запуск кластера](../deploy_on_hosts).
+Подробнее об устройстве кластера и репликасетов Picodata см. в разделе [Запуск кластера](../tutorials/deploy_on_hosts.md).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/cli.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/references/cli.md)
diff --git a/docs/sql/datatypes.md b/docs/references/datatypes.md
similarity index 94%
rename from docs/sql/datatypes.md
rename to docs/references/datatypes.md
index 878d8bb81f0ecf971687f0e97339385b9523adb5..f3203c937a26cc72543e58c4d0cd6e17784dd403 100644
--- a/docs/sql/datatypes.md
+++ b/docs/references/datatypes.md
@@ -28,7 +28,7 @@
 - `VARCHAR`. Текстовый тип данных с явно заданной длиной строки.
 
 
-См. также: [Совместимость с ANSI SQL](../reference)
+См. также: [Совместимость с ANSI SQL](reference.md)
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/sql/datatypes.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/references/datatypes.md)
diff --git a/docs/sql/queries.md b/docs/references/queries.md
similarity index 96%
rename from docs/sql/queries.md
rename to docs/references/queries.md
index 7cc9cbc852af40d903104a71b0aaca8c94fb3eac..3f1b591e45d590fa2a5a5d100bb6c4fab49d8deb 100644
--- a/docs/sql/queries.md
+++ b/docs/references/queries.md
@@ -7,7 +7,7 @@ Picodata при работе с распределенной СУБД.
 
 - Data Definition Language (`DDL`): команды для
   [создания](#create_table) и [удаления](#drop_table)
-  [таблиц](../glossary.md#table);
+  [таблиц](../general/glossary.md#table);
 - Data Modification Language (`DML`): команды [`INSERT`](#insert) для
   добавления данных в таблицы и [`DELETE`](#delete) для удаления данных;
 - Data Query Language (`DQL`): команда [`SELECT`](#select) для получения
@@ -16,27 +16,27 @@ Picodata при работе с распределенной СУБД.
 - команда [`EXPLAIN`](#explain) для отображения планов запросов `DML` и
   `DQL`.
 
-Схемы этих функций на вернем уровне показаны ниже:
+Схемы этих функций на верхнем уровне показаны ниже:
 
 ### **STATEMENT**
-![Statement](ebnf/STATEMENT.svg)
+![Statement](../images/ebnf/STATEMENT.svg)
 
 #### **DML**
-![DML](ebnf/DML.svg)
+![DML](../images/ebnf/DML.svg)
 
 #### **DQL**
-![DQL](ebnf/DQL.svg)
+![DQL](../images/ebnf/DQL.svg)
 
 #### **DDL**
-![DDL](ebnf/DDL.svg)
+![DDL](../images/ebnf/DDL.svg)
 
 Ниже приведены особенности синтаксиса команд и дано описание часто используемых
 команд с примерами их выполнения.
 
 ## Начало работы {: #getting-started }
 Для ввода команд SQL требуется интерактивная консоль Picodata. Она
-доступна после [запуска](../cli.md#run-command) инстанса с ключом `-i`
-или явного [подключения](../cli.md#connect-command) к нему из отдельного
+доступна после [запуска](../references/cli.md#run-command) инстанса с ключом `-i`
+или явного [подключения](../references/cli.md#connect-command) к нему из отдельного
 терминала.
 
 ### Доступные языки консоли {: #available_langs }
@@ -94,19 +94,19 @@ pico.sql([[select * from "characters"]], {})
 Ниже показаны схемы для создания и удаления пользователей и ролей.
 
 ### **Access control lists** {: #ACL }
-![ACL](ebnf/ACL.svg)
+![ACL](../images/ebnf/ACL.svg)
 
 ### **Create user** {: #CreateUser }
-![Create user](ebnf/CreateUser.svg)
+![Create user](../images/ebnf/CreateUser.svg)
 
 ### **Drop user** {: #DropUser }
-![Drop user](ebnf/DropUser.svg)
+![Drop user](../images/ebnf/DropUser.svg)
 
 ### **Create role** {: #CreateRole }
-![Create role](ebnf/CreateRole.svg)
+![Create role](../images/ebnf/CreateRole.svg)
 
 ### **Drop role** {: #DropRole }
-![Drop role](ebnf/DropRole.svg)
+![Drop role](../images/ebnf/DropRole.svg)
 
 Пример команды для создания пользователя:
 
@@ -119,23 +119,23 @@ create user andy with password 'P@ssw0rd' using md5 option (timeout = 3.0)
 ```sql
 drop user andy
 ```
-См. [подробнее](../tutorial_users.md) об управлении пользователями.
+См. [подробнее](../tutorials/tutorial_users.md) об управлении пользователями.
 
 ## Создание таблицы {: #create_table }
 
 Схема запроса для создания шардированной таблицы показана ниже.
 
 ### **CreateTable**
-![Create table](ebnf/CreateTable.svg)
+![Create table](../images/ebnf/CreateTable.svg)
 
 #### **Column**
-![Column](ebnf/Column.svg)
+![Column](../images/ebnf/Column.svg)
 
 #### **PrimaryKey**
-![Primary Key](ebnf/PrimaryKey.svg)
+![Primary Key](../images/ebnf/PrimaryKey.svg)
 
 #### **Distribution**
-![Distribution](ebnf/Distribution.svg)
+![Distribution](../images/ebnf/Distribution.svg)
 
 Для примера в этом разделе будем использовать две тестовых таблицы для учета
 персонажей из "Истории игрушек":
@@ -155,7 +155,7 @@ drop user andy
 - _шардированными_, т.е. распределенные по шардам кластера. Для создания
   шардированной таблицы следует использовать параметр `distributed by
   ()`, указав в скобках название колонки, по которой такая таблица будет
-  распределена. См. [подробнее](../glossary.md#table).
+  распределена. См. [подробнее](../general/glossary.md#table).
 
 Для демонстрации работы распределенного SQL будем создавать шардированные таблицы.
 Создадим первую таблицу следующей командой:
@@ -175,7 +175,7 @@ option (timeout = 3.0) ;
 
 При создании таблицы также можно выбрать один из доступных движков хранения данных:
 
-  - `memtx` — [движок хранения данных](../glossary.md#db-engine) в ОЗУ (in-memory);
+  - `memtx` — [движок хранения данных](../general/glossary.md#db-engine) в ОЗУ (in-memory);
   - `vinyl` — дисковый движок хранения данных, использующий LSM-деревья
     (Log Structured Merge Tree).
 
@@ -184,7 +184,7 @@ option (timeout = 3.0) ;
 Cхема запроса для удаления таблицы показана ниже:
 
 ### **DropTable**
-![Drop table](ebnf/DropTable.svg)
+![Drop table](../images/ebnf/DropTable.svg)
 
 Пример удаления таблицы:
 
@@ -207,7 +207,7 @@ drop table "characters" ;
 Cхема возможных распределенных запросов `SELECT` показана ниже.
 
 ### **SELECT**
-![Select](ebnf/SELECT.svg)
+![Select](../images/ebnf/SELECT.svg)
 
 ### Примеры запросов {: #select-examples }
 
@@ -313,25 +313,25 @@ pico.sql([[select "name","year" from "characters" where "id" > ? and "year" > ?
 
 
 ### **values**
-![Column](ebnf/VALUES.svg)
+![Column](../images/ebnf/VALUES.svg)
 
 ### **row**
-![Column](ebnf/row.svg)
+![Column](../images/ebnf/row.svg)
 
 ### **alias**
-![Alias](ebnf/alias.svg)
+![Alias](../images/ebnf/alias.svg)
 
 ### **expression**
-![Expression](ebnf/expression.svg)
+![Expression](../images/ebnf/expression.svg)
 
 ### **reference**
-![Reference](ebnf/reference.svg)
+![Reference](../images/ebnf/reference.svg)
 
 ### **value**
-![Value](ebnf/value.svg)
+![Value](../images/ebnf/value.svg)
 
 ### **type**
-![Type](ebnf/type.svg)
+![Type](../images/ebnf/type.svg)
 
 ## Использование агрегатных функций {: #aggregate }
 Поддерживаются следующие агрегатные функции для работы с колонками:
@@ -671,7 +671,7 @@ select cast("score" as int) from "scoring" ;
   локальных запросов.
 
 #### **Options**
-![Options](ebnf/Options.svg)
+![Options](../images/ebnf/Options.svg)
 
 
 ### Пример использования {: #tuple-limit-example }
@@ -726,7 +726,7 @@ select * from "characters" option(sql_vdbe_max_steps = 55, vtable_max_rows = 10)
 
 Схема возможных запросов `INSERT` показана ниже.
 
-![Insert](ebnf/INSERT.svg)
+![Insert](../images/ebnf/INSERT.svg)
 
 ### Примеры запросов {: #insert-examples }
 Запись строки данных в таблицу командой `INSERT` возможна как в обычном
@@ -756,7 +756,7 @@ insert into "assets" values (1, 'Woody', 2561) ;
 фиксированной запятой (например, `values(2.5)` в `decimal 2.5`). В
 параметризированном виде дробнному числу будет назначен типа с плавающей
 запятой (например, `values(?), {2.5}` в `double 2.5`). См.
-[подробнее](../datatypes) о типах данных.
+[подробнее](datatypes) о типах данных.
 
 При использовании `INSERT` вместе с подзапросом (`SELECT`) происходит
 кеширование подзапроса, поэтому его тоже имеет смысл параметризировать,
@@ -859,7 +859,7 @@ replace`, команда `UPDATE` подойдет для выборочной 
 
 Схема возможных запросов `UPDATE` показана ниже.
 
-![Update](ebnf/UPDATE.svg)
+![Update](../images/ebnf/UPDATE.svg)
 
 При использовании `UPDATE` следует учитывать следующие ограничения:
 
@@ -906,7 +906,7 @@ pico.sql([[update "characters" set "name" = "item" from (select "id" as i, "name
 Команда `DELETE` используется для удаления данных из таблицы.
 
 ### **DELETE**
-![Delete](ebnf/DELETE.svg)
+![Delete](../images/ebnf/DELETE.svg)
 
 ### Примеры запросов {: #delete-examples }
 Простой запрос удаляет все данные из указанной таблицы:
@@ -947,7 +947,7 @@ nothing`.
 Схема использования `EXPLAIN` показана ниже.
 
 ### **EXPLAIN**
-![Explain](ebnf/EXPLAIN.svg)
+![Explain](../images/ebnf/EXPLAIN.svg)
 
 
 ### Простые запросы {: #basic-explain }
@@ -1092,7 +1092,7 @@ explain insert into "assets" values (1, 'Woody', 2561) ;
 **Локальная материализация** относится к тем случаям, когда требуется
 положить в память прочитанные данные из локального запроса для их
 дальнейшей обработки. Перемещения данных нет и вычисление `bucket_id` не
-требуется (см. [подробнее](broadcasted_sql.md#data-distribution)).
+требуется (см. [подробнее](../architecture/broadcasted_sql.md#data-distribution)).
 Примером может служить удаление данных из таблицы:
 
 ```sql
@@ -1271,8 +1271,8 @@ explain select count("id") from "characters" ;
 ...
 ```
 
-Читать далее: [Типы данных SQL](../datatypes)
+Читать далее: [Типы данных SQL](datatypes.md)
 <!-- ebnf source: https://git.picodata.io/picodata/picodata/sbroad/-/blob/main/doc/sql/query.ebnf -->
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/sql/queries.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/references/queries.md)
diff --git a/docs/sql/reference.md b/docs/references/reference.md
similarity index 99%
rename from docs/sql/reference.md
rename to docs/references/reference.md
index 53530ff4c1dc14ef876403be93bb9f16e7505625..a14564bb4200e728fb668ba917ad33c80a7cfd61 100644
--- a/docs/sql/reference.md
+++ b/docs/references/reference.md
@@ -96,7 +96,7 @@ Picodata SQL требованиям стандарта SQL:2016, а именно
 ### E071-03. Табличный оператор EXCEPT DISTINCT
 ### F041-03. LEFT OUTER JOIN.
 
-См. также: [Пример работы с SQL Broadcaster в Picodata](../tutorial).
+См. также: [Пример работы с SQL Broadcaster в Picodata](../tutorial.md).
 
 ---
 [Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/sql/reference.md)
diff --git a/docs/auth_ldap.md b/docs/tutorials/auth_ldap.md
similarity index 98%
rename from docs/auth_ldap.md
rename to docs/tutorials/auth_ldap.md
index 9e9ee0e24c2dfc3a00068ebc9eff7ab946e3fe90..b23913c71c14e4f50fdf8bbb82de35c07b6f73e2 100644
--- a/docs/auth_ldap.md
+++ b/docs/tutorials/auth_ldap.md
@@ -70,7 +70,7 @@ pico.change_password('username', '', {auth_type = 'ldap'})
 полученный пароль при взаимодействии с сервером LDAP.
 
 Подробнее о работе с пользователями и привилегиями и см. разделе
-[Публичный API Picodata](../api).
+[Публичный API Picodata](../references/api.md).
 
 ### Настройка кластера Picodata {: #cluster-setup }
 
@@ -108,5 +108,4 @@ pico.change_password('username', 'new_password', { auth_type = 'chap-sha1' })
 ```
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/auth_ldap.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/auth_ldap.md)
diff --git a/docs/deploy_on_hosts.md b/docs/tutorials/deploy_on_hosts.md
similarity index 97%
rename from docs/deploy_on_hosts.md
rename to docs/tutorials/deploy_on_hosts.md
index 40418be192e981c0eef40a949075d38f4418eb5e..0b9444bb49937ab899e7f93efefad58a1253a207 100644
--- a/docs/deploy_on_hosts.md
+++ b/docs/tutorials/deploy_on_hosts.md
@@ -10,8 +10,8 @@
 Запуск кластера сводится к выполнению команды `picodata run` с нужным
 набором параметров для каждого инстанса (узла). Полный перечень
 возможных параметров запуска и их описание содержатся в разделе
-[Аргументы командной строки Picodata](../cli), а также в выводе команды
-`picodata run --help`. С точки зрения внутренней архитектуры, [_кластер_](glossary.md#cluster)
+[Аргументы командной строки Picodata](../../references/cli), а также в выводе команды
+`picodata run --help`. С точки зрения внутренней архитектуры, [_кластер_](../general/glossary.md#cluster)
   корректно называть _raft-группой_ — в дальнейшем при мониторинге и
 управлении конфигурацией будет уместнее использовать именно этот термин.
 
@@ -45,7 +45,7 @@ picodata run --data-dir i3 --listen :3303
 предоставляет доступ к управлению им в консоли. Для подключения к
 интерактивной консоли следует либо запускать инстанс с ключом `-i`
 (`picodata run -i`), либо отдельно подключаться к инстансу командой
-`picodata connect` (см. [подробнее](cli.md#connect-command)).
+`picodata connect` (см. [подробнее](../references/cli.md#connect-command)).
 
 ## Кластер на нескольких серверах {: #distributed-cluster }
 
@@ -240,7 +240,7 @@ pico.expel("i3")
 Будет удален инстанс `i3`. Сам инстанс `i3` будет завершен. Если вы находитесь в консоли удаляемого инстанса — процесс завершится, консоль будет закрыта.
 
 
-См. [отдельный подраздел](../raft_voters) с описанием работы алгоритма Raft для обеспечения отказоустойчивости кластера.
+См. [отдельный подраздел](../../architecture/raft_voters) с описанием работы алгоритма Raft для обеспечения отказоустойчивости кластера.
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/deploy_on_hosts.md)
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/deploy_on_hosts.md)
diff --git a/docs/install.md b/docs/tutorials/install.md
similarity index 99%
rename from docs/install.md
rename to docs/tutorials/install.md
index fc028418d4ba3b641c30bf5def759d022a7f4e74..50dffaa1764bc108791e11a1a437404da8178b47 100644
--- a/docs/install.md
+++ b/docs/tutorials/install.md
@@ -214,8 +214,7 @@ picodata run --listen 0.0.0.0:3301 --advertise 192.168.0.1:3301
 -->
 Подробнее о запуске Picodata и работе с кластером см. в разделе
 [Запуск кластера](../deploy_on_hosts). Параметры запуска из командной
-строки описаны в разделе [Аргументы командной строки Picodata](../cli).
+строки описаны в разделе [Аргументы командной строки Picodata](../../references/cli).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/install.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/install.md)
diff --git a/docs/monitoring.md b/docs/tutorials/monitoring.md
similarity index 93%
rename from docs/monitoring.md
rename to docs/tutorials/monitoring.md
index ff5c663b1cf0b73d107a529631bda1871a9b4a9d..6663427bd5da7293611bbd8890a714a8fb7c013b 100644
--- a/docs/monitoring.md
+++ b/docs/tutorials/monitoring.md
@@ -64,11 +64,11 @@ box.space._pico_replicaset:fselect()
 ...
 
 ```
-Таблицы выше позволяют узнать текущий и целевой уровень ([grade](glossary.md#грейд-grade))
+Таблицы выше позволяют узнать текущий и целевой уровень ([grade](../general/glossary.md#грейд-grade))
 каждого инстанса, а также вес (`weight`) репликасета. Уровни отражают
 конфигурацию остальных инстансов относительно текущего, а вес
 репликасета — его наполненность репликами согласно фактору репликации
-(см. [подробнее](../clustering)). Вес репликасета определяет его
+(см. [подробнее](../architecture/clustering)). Вес репликасета определяет его
 приоритет при распределении бакетов с данными.
 
 ## Получение версии схемы данных {: #getting-data-schema }
@@ -84,8 +84,7 @@ box.space._pico_property:get("current_schema_version")
 увеличению этого номера.
 
 Подробнее о работе с данными в Picodata см. в разделе
-[Работа с данными](../tutorial_data).
+[Работа с данными SQL](../tutorial_data).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/monitoring.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/monitoring.md)
diff --git a/docs/tutorial_data.md b/docs/tutorials/tutorial_data.md
similarity index 82%
rename from docs/tutorial_data.md
rename to docs/tutorials/tutorial_data.md
index 2d6d028d190355645ac7e5576504a6108ca07b09..ff3f9c56653914532d8d558c0541c0c4dcd1c6c5 100644
--- a/docs/tutorial_data.md
+++ b/docs/tutorials/tutorial_data.md
@@ -1,6 +1,6 @@
 # Работа с данными SQL
 В данном разделе приведены примеры команд для работы с данными в
-Picodata с помощью языка [SQL-запросов](sql/queries.md).
+Picodata с помощью языка [SQL-запросов](../references/queries.md).
 
 ## Создание таблицы {: #creating-table }
 
@@ -8,12 +8,12 @@ Picodata с помощью языка [SQL-запросов](sql/queries.md).
 [подключиться](tutorial_first_steps.md#accessing-console) к
 интерактивной консоли инстанса. Для ввода команд можно использовать
 как формат Lua, так и язык SQL напрямую, в зависимости от
-[выбранного](sql/queries.md#available_langs) языка консоли. В примерах
+[выбранного](../references/queries.md#available_langs) языка консоли. В примерах
 ниже использован формат Lua.
 
 Пользователям доступны функции для работы как с глобальными, так и
 шардированными таблицами (в последнем случае реализованы возможности
-[распределенного SQL](sql/broadcasted_sql.md)).
+[распределенного SQL](../architecture/broadcasted_sql.md)).
 
 Для примера создадим шаблон списка друзей Свинки Пеппы,
 котором будет два поля: идентификатор записи и имя друга:
@@ -32,7 +32,7 @@ pico.sql([[
 Помимо двух колонок, в примере указаны:
 
 - первичный ключ таблицы (колонка `"id"`);
-- [движок хранения данных](glossary.md#db-engine) in-memory (`memtx`);
+- [движок хранения данных](../general/glossary.md#db-engine) in-memory (`memtx`);
 - тип таблицы (шардированный, `distributed by`);
 - ключ шардирования таблицы (колонка `"id"`);
 - таймаут перед возвращением управления пользователю.
@@ -51,8 +51,8 @@ pico.sql([[
 ]])
 ```
 
-Подробнее о типах таблиц см. в [глоссарии](../glossary.md#table).
-Описание команд SQL приведено в разделе [Команды SQL](sql/queries.md).
+Подробнее о типах таблиц см. в [глоссарии](../general/glossary.md#table).
+Описание команд SQL приведено в разделе [Команды SQL](../references/queries.md).
 
 ## Запись данных в таблицу {: #writing-to-table }
 Запись данных, т.е. вставка строк, в таблицу происходит с помощью
@@ -74,7 +74,7 @@ pico.sql(
 	[[insert into "friends_of_peppa" ("id", "name") values (1, "Suzy")]],{}
 )
 ```
-См. [подробнее](sql/queries.md#insert) о различиях в `INSERT`-запросах.
+См. [подробнее](../references/queries.md#insert) о различиях в `INSERT`-запросах.
 
 ## Чтение данных из таблицы {: #reading-from-table }
 Для чтения всех данных из таблицы подойдёт команда:
@@ -89,7 +89,7 @@ pico.sql([[select * from "friends_of_peppa"]], {})
 pico.sql([[select * from "friends_of_peppa" where "id" = 1]], {})
 ```
 
-См. [подробнее](sql/queries.md#select) о вариантах чтения данных в SQL.
+См. [подробнее](../references/queries.md#select) о вариантах чтения данных в SQL.
 
 ## Удаление данных {: #deleting-from-table }
 
@@ -103,10 +103,9 @@ picodata> pico.sql([[delete from "friends_of_peppa" where "id" = 1]], {})
 
 Приведенный выше пример поможет сделать первые шаги в работе с данными в Picodata.
 Подробнее о внутренней архитектуре кластера Picodata см. в разделе
-[Жизненный цикл кластера](../clustering).
+[Жизненный цикл кластера](../architecture/clustering.md).
 
-Параметры запуска из командной строки описаны в разделе [Аргументы командной строки Picodata](../cli).
+Параметры запуска из командной строки описаны в разделе [Аргументы командной строки Picodata](../references/cli.md).
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_data.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/tutorial_data.md)
diff --git a/docs/tutorial_first_steps.md b/docs/tutorials/tutorial_first_steps.md
similarity index 87%
rename from docs/tutorial_first_steps.md
rename to docs/tutorials/tutorial_first_steps.md
index 47298456f24b417adcac7bc7e8f864a389557377..0d38e00ca1837fd9a2470f8480120a0831b2f729 100644
--- a/docs/tutorial_first_steps.md
+++ b/docs/tutorials/tutorial_first_steps.md
@@ -22,7 +22,7 @@
 ```
 picodata connect localhost:3301
 ```
-По умолчанию, [подключение](cli.md#connect-command) производится под
+По умолчанию, [подключение](../references/cli.md#connect-command) производится под
 пользователем `guest` без пароля. У такого пользователя имеется
 единственная привилегия
 [`SESSION`](tutorial_users.md#available-privileges).
@@ -58,16 +58,16 @@ picodata connect --unix /tmp/file.socket
 ```
 
 ## Рабочие файлы инстанса
-В [директории с данными инстанса](cli.md#data-dir) автоматически появляются следующие файлы:
+В [директории с данными инстанса](../references/cli.md#data-dir) автоматически появляются следующие файлы:
 
-- `*.snap` — файлы [снапшотов](glossary.md#snapshot) БД
+- `*.snap` — файлы [снапшотов](../general/glossary.md#snapshot) БД
 - `*.xlog` — файлы журнала упреждающей записи (Write-ahead log, WAL) c
   инкрементными изменениями БД
 - `*.vylog` — также файлы с инкрементными изменениями БД, но для таблиц,
-  использующих движок хранения [`vinyl`](glossary.md#db-engine).
+  использующих движок хранения [`vinyl`](../general/glossary.md#db-engine).
 
 При перезапуске инстанса эти файлы необходимы для восстановления его
-состояния, обеспечивая [персистентное](glossary.md#persistence) хранение
+состояния, обеспечивая [персистентное](../general/glossary.md#persistence) хранение
 данных.
 
 Файлы снапшотов (`*.snap`) и журнала WAL (`*.xlog`/`*.vylog`) не
@@ -77,9 +77,8 @@ picodata connect --unix /tmp/file.socket
 данных нужен будет и последний снапшот, и один или несколько файлов
 журнала.
 
-Параметры запуска из командной строки описаны в разделе [Аргументы командной строки Picodata](../cli).
+Параметры запуска из командной строки описаны в разделе [Аргументы командной строки Picodata](../references/cli.md).
 
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_first_steps.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/tutorial_first_steps.md)
diff --git a/docs/tutorial_users.md b/docs/tutorials/tutorial_users.md
similarity index 86%
rename from docs/tutorial_users.md
rename to docs/tutorials/tutorial_users.md
index 3774d6eb35183bfbfcc5fbe58cd155591572a6b8..48909313c437749244b8f34e2900d410b2936014 100644
--- a/docs/tutorial_users.md
+++ b/docs/tutorials/tutorial_users.md
@@ -1,38 +1,37 @@
 # Пользователи, привилегии и роли
-В данном разделе описаны [SQL-команды](sql/queries.md) для управления
+В данном разделе описаны [SQL-команды](../references/queries.md) для управления
 доступом с помощью ролевой модели в Picodata.
 
 ## Ролевая модель {: #role-model }
 Ролевая модель Picodata позволяет гибко разграничивать возможности
 пользователей распределенной системы. Разграничение строится на базе
-трех основных понятий: [пользователей](glossary.md#user),
-[привилегий](glossary.md#privilege) и [ролей](glossary.md#role).
+трех основных понятий: [пользователей](../general/glossary.md#user),
+[привилегий](../general/glossary.md#privilege) и [ролей](../general/glossary.md#role).
 Привилегии можно назначать напрямую пользователям:
 
-![Users and privileges](images/user_priv.svg)
+![Users and privileges](../images/user_priv.svg)
 
 Также, привилегии могут быть назначены роли, которая, в свою очередь,
 может быть присвоена пользователю:
 
-![Users and roles](images/user_roles.svg)
+![Users and roles](../images/user_roles.svg)
 
 У каждого пользователя может быть одна или несколько ролей. Каждому
 пользователю или роли может быть назначена одна или несколько
-привилегий. Помимо пользователей и ролей, привилегии могут быть
-назначены и [другим объектам](#objects).
+привилегий. Список объектов, которым могут быть назначены привелении, [приведен ниже](#objects).
 
 ## Начало работы {: #getting-started }
 Для начала работы с пользователями, привилегиями и ролями иследует
 [подключиться](tutorial_first_steps.md#accessing-console) к
 интерактивной консоли инстанса Picodata. Для ввода команд можно
 использовать как формат Lua, так и язык SQL напрямую, в зависимости от
-[выбранного](sql/queries.md#available_langs) языка консоли. В примерах
+[выбранного](../references/queries.md#available_langs) языка консоли. В примерах
 ниже использован язык SQL.
 
 ## Создание пользователя {: #creating-user }
 Создание нового пользователя происходит с помощью SQL-команды `create
 user`, функциональность которой аналогична Lua-функции
-[`pico.create_user()`](api.md#picocreate_user).
+[`pico.create_user()`](../references/api.md#picocreate_user).
 
 Приведем пример создания нового пользователя:
 
@@ -67,7 +66,7 @@ pico.sql([[
 
 Создание новой роли происходит с помощью SQL-команды `create
 role`, функциональность которой аналогична Lua-функции
-[`pico.create_role()`](api.md#picocreate_role).
+[`pico.create_role()`](../references/api.md#picocreate_role).
 
 Приведем пример создания новой роли:
 
@@ -151,8 +150,7 @@ pico.sql([[
 ``` -->
 
 
-См. также [`pico.grant_privilege`](api.md#picogrant_privilege) и [`pico.revoke_privilege`](api.md#picorevoke_privilege)
+См. также [`pico.grant_privilege`](../references/api.md#picogrant_privilege) и [`pico.revoke_privilege`](../references/api.md#picorevoke_privilege)
 
 ---
-[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_users.md)
-
+[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/tutorial_users.md)
diff --git a/docs/tutorial_webui.md b/docs/tutorials/tutorial_webui.md
similarity index 87%
rename from docs/tutorial_webui.md
rename to docs/tutorials/tutorial_webui.md
index 729a83731e43f44cc321814c04ee262e039a4a09..22ac2ccd9f998cb60657e9acc5a7fff02d2466b3 100644
--- a/docs/tutorial_webui.md
+++ b/docs/tutorials/tutorial_webui.md
@@ -16,13 +16,13 @@ Picodata](install.md).
 
 ## Подключение функции веб-интерфейса
 Веб-интерфейс представляет собой веб-сервер, запускаемый вместе с
-[инстансом](glossary.md#instance) Picodata. Не имеет значения, на каком
+[инстансом](../general/glossary.md#instance) Picodata. Не имеет значения, на каком
 именно инстансе кластера запущен этот веб-сервер; в любом случае,
 веб-сервер будет отображать данные обо всем кластере.
 
 Для запуска инстанса с веб-сервером следует использовать дополнительный
 параметр `--http-listen` с указанием [хоста и
-порта](cli.md#http-listen)). Пример команды:
+порта](../references/cli.md#http-listen)). Пример команды:
 
 ```bash
 picodata run --http-listen localhost:8080
@@ -38,7 +38,7 @@ picodata run --http-listen localhost:8080
 параметра `--http-listen`. Откроется страница с информацией о кластере
 Picodata:
 
-![webui-main](images/webui-main.png)
+![webui-main](../images/webui-main.png)
 
 Данная страница предоставляет следующую полезную информацию о кластере:
 
@@ -46,7 +46,7 @@ Picodata:
 позволяющее вывести список всех инстансов (узлов) кластера;<br>
 <span style="color:red;font-size:150%">❷</span> — панель основной
 информации о кластере: показателях памяти, количестве
-[репликасетов](glossart.md#replicaset), [инстансов](glossart.md#instance) и их [грейдов](glossary.md#grade), версии
+[репликасетов](../general/glossary.md#replicaset), [инстансов](../general/glossary.md#instance) и их [грейдов](../general/glossary.md#grade), версии
 Picodata;<br>
 <span style="color:red;font-size:150%">❸</span> — кнопка выбора
 группировки представления (по инстансам или репликасетам);<br>
@@ -60,7 +60,7 @@ Picodata;<br>
 style="color:red;font-size:150%">❸</span>), то можно сразу увидеть
 дополнительную информацию о состоянии инстансов:
 
-![webui-instances](images/webui-instances.png)
+![webui-instances](../images/webui-instances.png)
 
 Представление в виде списка инстансов содержит следующие элементы:
 
@@ -68,7 +68,7 @@ style="color:red;font-size:150%">❸</span>), то можно сразу уви
 инстансов по имени (нажатие переключает сортировку по
 возрастанию/убыванию);<br>
 <span style="color:blue;font-size:150%">❷</span> — кнопку фильтрации по
-[домену отказа](glossary.md#failure_domain) (позволяет оставить в списке
+[домену отказа](../general/glossary.md#failure_domain) (позволяет оставить в списке
 только те инстансы, которые удовлетворяют заданному условию);<br>
 <span style="color:blue;font-size:150%">❸</span> — текущий и целевой
 грейды инстанса);<br>
@@ -76,9 +76,8 @@ style="color:red;font-size:150%">❸</span>), то можно сразу уви
 отказа инстанса;<br>
 
 Подробности о запуске кластера Picodata приведены в разделе [Запуск
-кластера](../deploy_on_hosts).
+кластера](deploy_on_hosts.md).
 
 ---
 [Исходный код
-страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorial_webui.md)
-
+страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/tutorials/tutorial_webui.md)
diff --git a/mkdocs.yml b/mkdocs.yml
index 1920062d66fe3d84f435e9eac522fa5abaf86974..7649666be777f444d065b9d6cc4c3faccffb7cc2 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -5,30 +5,30 @@ repo_url: https://git.picodata.io/picodata/picodata/docs
 
 nav:
   - Ознакомление с ПО Picodata:
-    - description.md
-    - benefits.md
-    - glossary.md
-    - feedback.md
+    - general/description.md
+    - general/benefits.md
+    - general/glossary.md
+    - general/feedback.md
   - Инструкции и руководства:
-    - install.md
-    - deploy_on_hosts.md
-    - monitoring.md
-    - tutorial_first_steps.md
-    - tutorial_webui.md
-    - auth_ldap.md
-    - tutorial_users.md
-    - tutorial_data.md
+    - tutorials/install.md
+    - tutorials/deploy_on_hosts.md
+    - tutorials/monitoring.md
+    - tutorials/tutorial_first_steps.md
+    - tutorials/tutorial_webui.md
+    - tutorials/auth_ldap.md
+    - tutorials/tutorial_users.md
+    - tutorials/tutorial_data.md
   - Справочные материалы:
-    - cli.md
-    - sql/datatypes.md
-    - sql/queries.md
-    - api.md
-    - sql/reference.md
+    - references/cli.md
+    - references/datatypes.md
+    - references/queries.md
+    - references/api.md
+    - references/reference.md
   - Архитектура:
-    - sql/broadcasted_sql.md
-    - discovery.md
-    - raft_voters.md
-    - clustering.md
+    - architecture/broadcasted_sql.md
+    - architecture/discovery.md
+    - architecture/raft_voters.md
+    - architecture/clustering.md
 theme:
     name: material
     custom_dir: overrides