Разработка внутреннего инструмента на Tooljet
Tooljet — open-source low-code платформа для создания внутренних инструментов. Позиционируется как более гибкая альтернатива Retool с полностью открытым исходным кодом и self-hosted деплоем.
Отличия от аналогов
| Tooljet | Appsmith | Retool | |
|---|---|---|---|
| Open-source | Да (AGPL) | Да (Apache) | Нет |
| Self-hosted | Да | Да | Платно |
| Мобильный лейаут | Да | Ограниченно | Нет |
| Встроенные БД | TooljetDB (PG) | Нет | Нет |
| Кастомные компоненты | React-компоненты | JS-компоненты | JS-компоненты |
Установка
# Docker
docker run \
-p 80:80 \
-p 443:443 \
-v tooljet_data:/var/lib/postgresql/13/main \
tooljet/tooljet-ce:latest
# production docker-compose
services:
tooljet:
image: tooljet/tooljet-ce:EE-LTS-latest
environment:
TOOLJET_DB: tooljet_db
TOOLJET_DB_USER: postgres
TOOLJET_DB_PASS: password
TOOLJET_DB_HOST: postgres
SECRET_KEY_BASE: "your-secret-key-base"
LOCKBOX_MASTER_KEY: "your-lockbox-key"
ports:
- "80:80"
depends_on:
- postgres
Компоненты и данные
Tooljet работает через визуальный редактор с drag-and-drop. Запросы к БД/API создаются в панели «Query Manager» и привязываются к компонентам через {{ queries.queryName.data }}.
// Tooljet RunJS Query
// Валидация и трансформация данных
const users = queries.getUsers.data;
return users
.filter(u => u.created_at > moment().subtract(30, 'days').toISOString())
.map(u => ({
...u,
fullName: `${u.first_name} ${u.last_name}`,
registrationAge: moment(u.created_at).fromNow()
}));
Мобильный лейаут
Tooljet поддерживает отдельный лейаут для мобильных устройств — можно создать версию инструмента для менеджеров на смартфоне.
Кастомные React-компоненты
// Кастомный компонент в Tooljet
function CustomComponent({ data, updateData, height, width }) {
const [selected, setSelected] = useState(null);
return (
<div style={{ height, width }}>
<CustomChart
data={data.chartData}
onSelect={(item) => {
setSelected(item);
updateData({ selectedItem: item });
}}
/>
</div>
);
}
Сроки
Базовый инструмент — 2–4 дня. Комплексный с кастомными компонентами — 1–2 недели.







