Розробка внутрішніх інструментів на Tooljet
Tooljet — платформа з відкритим кодом 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 тижні.







