Cenit is an open-source integration-platform-as-a-service (iPaaS). It helps teams design integrations, orchestrate data flows, expose APIs, and manage data pipelines across external systems.
- Cloud: web.cenit.io
- Product documentation: docs.cenit.io
- What you can build
- Architecture and stack
- Project status
- Quick start (local Docker Compose)
- Configuration
- Testing and quality checks
- Git hooks (pre-push E2E)
- Troubleshooting
- Contributing
- Security
- Code of conduct
- License
- Backendless data APIs from JSON Schema-based Data Types.
- Integration flows for routing, orchestration, and automation.
- Data transformation pipelines across JSON, XML, ASN, EDIFACT, X12, UBL, and more.
- API and integration connectors for third-party services.
- Event- and schedule-driven integration workloads.
Core runtime:
- Ruby (Rails + Unicorn)
- MongoDB
- Redis
- RabbitMQ
Default local ports:
- Backend:
http://localhost:3000 - UI:
http://localhost:3002 - RabbitMQ management:
http://localhost:15672
Related repository:
- UI repository: cenit-io/ui
The repository is actively maintained. Current local migration baseline in this branch/repo:
- Ruby
3.2.2 - MongoDB
7.0 - Docker Compose local runtime
Additional migration context is documented in upgrading_notes.md.
- Docker Desktop (or Docker Engine + Compose v2 plugin)
git- UI repository checked out as a sibling directory at
../ui(or setCENIT_UI_CONTEXT)
# backend
git clone git@github.com:cenit-io/cenit.git
# UI (sibling directory required by default compose config)
git clone git@github.com:cenit-io/ui.git ../uiIf your UI checkout lives elsewhere:
export CENIT_UI_CONTEXT=/absolute/path/to/uicd /path/to/cenit
docker compose up -d
docker compose psUse this when iterating on UI code to avoid rebuilding the nginx UI image:
cd /path/to/cenit
docker compose --profile dev up -d mongo_server redis rabbitmq server ui_dev
docker compose --profile dev psNotes:
ui_devserves Vite onhttp://localhost:3002with source mounted from${CENIT_UI_CONTEXT:-../ui}.- Keep
ui(nginx image service) for production-like checks and CI parity.
curl -I http://localhost:3000
curl -I http://localhost:3002On first bootstrap (fresh database), default admin credentials:
- Email:
support@cenit.io - Password:
password
RabbitMQ default credentials:
- User:
cenit_rabbit - Password:
cenit_rabbit - VHost:
cenit_rabbit_vhost
# Follow backend logs
docker compose logs -f server
# Restart backend only
docker compose restart server
# Stop all services
docker compose down
# Full reset (containers + volumes)
docker compose down -v --remove-orphansImportant environment knobs used by local scripts:
CENIT_SERVER_URL(defaulthttp://localhost:3000)CENIT_UI_URL(defaulthttp://localhost:3002)CENIT_UI_CONTEXT(path to UI repository for Docker build)CENIT_E2E_AUTOSTART(1to auto-start stack in E2E scripts)CENIT_E2E_RESET_STACK(1to reset containers/volumes before E2E)CENIT_E2E_BUILD_STACK(1to rebuild images before E2E, default0)CENIT_E2E_HEADED(1for headed browser runs)
scripts/e2e/cenit_ui_login.shscripts/e2e/cenit_ui_contact_flow.shDriver note:
CENIT_E2E_DRIVER=pwclimay hit parser/runtime limits on largerun-codepayloads.- The contact-flow runner automatically falls back to the node-playwright driver when this is detected.
Useful overrides:
# Reuse already-running stack (skip deterministic reset)
CENIT_E2E_AUTOSTART=0 scripts/e2e/cenit_ui_contact_flow.sh
# Deterministic default (clean DB each run, no image rebuild)
CENIT_E2E_RESET_STACK=1 CENIT_E2E_BUILD_STACK=0 scripts/e2e/cenit_ui_contact_flow.sh
# Run headed
CENIT_E2E_HEADED=1 scripts/e2e/cenit_ui_contact_flow.sh
# Slower machines
CENIT_E2E_SERVER_READY_RETRIES=240 \
CENIT_E2E_UI_READY_RETRIES=180 \
scripts/e2e/cenit_ui_contact_flow.shscripts/e2e/cenit_ui_user_journey.shscripts/e2e/cenit_flow_execution_smoke.shArtifacts are written under output/playwright/.
Install hooks:
npm install
npm run prepareCurrent pre-push behavior:
- Runs
scripts/e2e/cenit_ui_contact_flow.sh - Uses fresh stack defaults:
CENIT_E2E_RESET_STACK=1CENIT_E2E_BUILD_STACK=0CENIT_E2E_CLEANUP=0(cleanup disabled for hook stability)
Overrides:
# Reuse running stack
CENIT_E2E_AUTOSTART=0 git push
# Keep current volumes/state
CENIT_E2E_RESET_STACK=0 git push
# Skip image rebuild
CENIT_E2E_BUILD_STACK=0 git push
# Force cleanup phase
CENIT_E2E_CLEANUP=1 git push
# Skip hooks once
HUSKY=0 git pushdocker compose ps -a
docker compose logs --no-color --tail=200 serverIf needed, run a full reset and rebuild:
docker compose down -v --remove-orphans
docker compose up -d --buildUse a clean boot:
CENIT_E2E_RESET_STACK=1 \
CENIT_E2E_BUILD_STACK=0 \
scripts/e2e/cenit_ui_contact_flow.shContributions are welcome and appreciated.
- Contribution guide: .github/CONTRIBUTING.md
- Open an issue: github.com/cenit-io/cenit/issues
- Open a pull request: github.com/cenit-io/cenit/pulls
Before opening a PR:
- Reproduce and describe the problem clearly.
- Include tests or reproducible validation steps.
- Keep scope focused and documented.
Please do not report security vulnerabilities in public issues.
- Use GitHub Security Advisories: Report a vulnerability
This project follows the code of conduct in CODE_OF_CONDUCT.md.
Distributed under the terms in LICENSE.



