A full-stack asset management and network discovery platform for tracking, monitoring, and cataloging IT assets across your infrastructure.
Assetly automates network scanning to discover devices, tracks their interfaces and IP addresses, and maintains a detailed audit log of all changes over time.
- Automated Network Discovery - Scan IP network ranges to discover and catalog assets automatically
- Asset Tracking - Track devices, network interfaces, MAC addresses, and IP assignments
- Change Auditing - Full audit log of all asset modifications (inserts, updates, deletes) with diff tracking
- Distributed Scanning - Celery-based worker architecture with RabbitMQ for scalable, parallel scanning
- Scheduled Scans - Cron-based scheduling for periodic network discovery
- API-First Design - Complete REST API with OpenAPI documentation and auto-generated TypeScript client
- User Management - Role-based access with JWT authentication and API key support for scanner workers
| Layer | Technologies |
|---|---|
| Backend | Python, FastAPI, SQLModel, PostgreSQL, Alembic |
| Frontend | TypeScript, React, Vite, Chakra UI, TanStack Router/Query |
| Task Queue | Celery, RabbitMQ |
| Infrastructure | Docker Compose, Traefik, GitHub Actions |
| Code Quality | Ruff, Mypy, Biome, Pre-commit hooks |
# Clone the repository
git clone <repo-url>
cd assetly
# Start the full stack with live reload
docker compose watchThe following services will be available:
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:8000 |
| API Docs (Swagger) | http://localhost:8000/docs |
| Adminer (DB UI) | http://localhost:8080 |
| Traefik Dashboard | http://localhost:8090 |
| MailCatcher | http://localhost:1080 |
Default superuser credentials are configured in the .env file.
assetly/
├── backend/ # FastAPI application
│ ├── app/
│ │ ├── api/routes/ # API endpoint handlers
│ │ ├── models/ # SQLModel database models
│ │ ├── crud/ # Database CRUD operations
│ │ ├── services/ # Business logic
│ │ ├── workflows/ # Background job workflows
│ │ ├── audit/ # Change audit logging
│ │ ├── core/ # Config, DB, security, Celery setup
│ │ ├── alembic/ # Database migrations
│ │ └── tests/ # Pytest test suite
│ └── assetly_processor/ # Scanner processor worker module
├── frontend/ # React + Vite application
│ ├── src/
│ │ ├── routes/ # TanStack Router pages
│ │ ├── components/ # React components
│ │ ├── client/ # Auto-generated OpenAPI client
│ │ └── hooks/ # Custom React hooks
│ └── tests/ # Playwright E2E tests
├── docker-compose.yml # Main service definitions
├── docker-compose.override.yml # Dev overrides (volumes, live reload)
├── docker-compose.traefik.yml # Traefik reverse proxy config
├── scripts/ # Utility scripts
└── .github/workflows/ # CI/CD pipelines
cd backend
uv sync # Install dependencies
fastapi dev app/main.py # Run dev server
# Testing
bash scripts/test.sh # Run tests with coverage
# Linting & type checking
uv run ruff check --fix
uv run mypy app/cd frontend
fnm use # Set Node.js version
npm install # Install dependencies
npm run dev # Start Vite dev server
# Generate TypeScript client from OpenAPI spec
npm run generate-client
# Linting
npm run lint
# E2E tests (requires backend running)
npx playwright testdocker compose exec backend bash
alembic revision --autogenerate -m "Description"
alembic upgrade headConfiguration is managed through environment variables in the .env file. Key settings:
| Variable | Description |
|---|---|
DOMAIN |
Base domain (localhost for dev) |
FRONTEND_HOST |
Frontend URL for CORS and email links |
ENVIRONMENT |
local, staging, or production |
POSTGRES_* |
PostgreSQL connection settings |
SECRET_KEY |
JWT signing secret |
RABBITMQ_BROKER_* |
RabbitMQ connection settings |
SMTP_* |
Email server configuration |
SENTRY_DSN |
Sentry error tracking (optional) |
TIMEZONE |
Application timezone |
See the .env file for the complete list of configurable options.
This project is licensed under the MIT License - see the LICENSE file for details.