A web-based visual AI workflow builder where users drag-and-drop AI agent nodes, connect them on a canvas, and execute workflows in real-time.
SynApps is a web-based visual platform for modular AI agents called Snaplets. Its mission is to let indie creators build autonomous AI snaplets like LEGO blocks -- each snaplet is a small agent with a specialized skill. A lightweight SynApps Orchestrator routes messages between these snaplets, sequencing their interactions to solve tasks collaboratively. SynApps connects AI "synapses" (snaplets) in real time, forming an intelligent network that can tackle complex workflows.
- Visual Workflow Builder: Drag-and-drop AI nodes onto a canvas and connect them to build workflows.
- Autonomous & Collaborative Snaplets: Each snaplet runs autonomously but can pass data to others via the orchestrator.
- Real-Time Visual Feedback: See the AI snaplets at work with an animated graph of nodes and connections.
- Background Execution & Notifications: Snaplets run in the background once triggered, with notifications for status changes.
- Extensibility: 9 built-in node types (LLM, ImageGen, Code, HTTP, Transform, IfElse, Merge, ForEach, Memory) with support for custom logic via the Code node.
- Docker and Docker Compose
- For local development: Node.js 20+ and Python 3.11+
-
Clone the repository:
git clone https://github.com/nxtg-ai/synapps.git cd synapps -
Create a
.envfile in the root of the project:OPENAI_API_KEY=your_openai_api_key STABILITY_API_KEY=your_stability_api_key -
Build and run the containers (PostgreSQL + orchestrator + frontend):
docker-compose -f infra/docker/docker-compose.yml up --build
-
Open your browser and navigate to http://localhost:3000
# From the repo root
cd apps/orchestrator && pip install -e . && cd ../..
# Set up your environment variables
cp .env.example .env
# Then edit .env with your actual API keys
# Run database migrations
alembic upgrade head
# Start the dev server
PYTHONPATH=. uvicorn apps.orchestrator.main:app --reload --port 8000cd apps/web-frontend
npm install
npm run dev # Starts Vite dev server on :3000SynApps follows a microkernel architecture:
- Orchestrator: A FastAPI backend that routes messages between applets and manages workflow execution. All applet logic, auth, and WebSocket handlers live in
apps/orchestrator/main.py. - Applets (Nodes): Self-contained AI micro-agents implementing a standard
BaseAppletinterface. - Frontend: React 18 + TypeScript app with a visual workflow editor built on @xyflow/react, styled with Tailwind CSS, state managed by Zustand.
- Database: SQLite (dev via aiosqlite) / PostgreSQL (prod via asyncpg) with async SQLAlchemy 2.0 ORM.
| Node | Description |
|---|---|
| LLM | Text generation via LLM (e.g. GPT-4o) |
| ImageGen | Image generation from text prompts |
| Code | Execute custom Python/JavaScript logic |
| HTTP | Make HTTP requests to external APIs |
| Transform | Transform and reshape data between nodes |
| IfElse | Conditional branching based on expressions |
| Merge | Combine outputs from multiple branches |
| ForEach | Iterate over collections |
| Memory | Store/retrieve context using SQLite FTS or ChromaDB vector store |
| Layer | Technology |
|---|---|
| Backend | Python 3.11+, FastAPI 0.115+, Pydantic v2, SQLAlchemy 2.0 (async) |
| Frontend | React 18, TypeScript (strict), Vite 6, Tailwind CSS 4, Zustand, @xyflow/react v12 |
| Database | SQLite (dev), PostgreSQL (prod) |
| Testing | pytest + pytest-asyncio (backend), Vitest + React Testing Library (frontend), Playwright (E2E) |
| Linting | Ruff (Python), ESLint 9 flat config + Prettier (TypeScript) |
| CI/CD | GitHub Actions, Codecov, Docker |
| Deploy | Fly.io (backend), Vercel (frontend) |
- Frontend: Vercel
- Backend: Fly.io
CI/CD pipelines are set up using GitHub Actions.
# Run all tests (from repo root)
PYTHONPATH=. pytest apps/orchestrator/tests/ -v
# With coverage
PYTHONPATH=. pytest apps/orchestrator/tests/ --cov=apps/orchestrator --cov-report=term-missingcd apps/web-frontend
npm test # Vitest (single run)
npm run typecheck # TypeScript type checkingcd apps/web-frontend
npx playwright test # Run all E2E tests
npx playwright test --headed # Run with browser visible# Backend (from repo root)
ruff check apps/orchestrator --config apps/orchestrator/pyproject.toml
ruff format apps/orchestrator --config apps/orchestrator/pyproject.toml
# Frontend (from apps/web-frontend/)
npm run lint
npm run format:check
# All at once via pre-commit
pre-commit run --all-filesA convenience script starts both servers (requires concurrently and kill-port installed globally):
.scripts/start-dev.shNote: The script may use older invocation patterns. If you encounter import errors, use the manual backend/frontend commands documented above.
- Create a feature branch from
master - Make your changes
- Write tests for your changes
- Run
pre-commit run --all-filesto check linting - Submit a pull request to
master
Contributions are welcome! See CONTRIBUTING.md for detailed guidelines.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- @xyflow/react for the workflow visualization
- anime.js for animations
- FastAPI for the backend
- Monaco Editor for the code editor
- Tailwind CSS for styling
- Zustand for state management
