AI-powered tool for converting Minecraft Java Edition mods to Bedrock Edition add-ons
6
stars
2,423
commits
Python
primary language
Sep 9, 2026
updated
AI-powered Minecraft Java to Bedrock conversion platform. Convert mods, add-ons, and extensions with 67%+ coverage across textures, models, recipes, sounds, lang files, and entities.
modporter.ai | Documentation | API Reference | Conversion Guide
Empower Minecraft creators with production-grade AI tooling that converts Java Edition content to Bedrock Edition at scale — with smart assumptions to bridge technical gaps.
| Content Type | Coverage |
|---|---|
| Textures | Block textures, item textures, entity textures |
| Models | Bedrock JSON models (geometry, render controllers) |
| Recipes | Crafting, smelting, stonecutting, milling, crushing, cooking_pot |
| Sounds | Sound definitions and audio assets |
| Lang Files | en_US.lang translation and localization |
| Entities | Entity behaviors and spawn rules |
This project offers multiple deployment options:
This option uses pre-built Docker images from Docker Hub for a production-like environment.
# Clone the repository
git clone https://github.com/anchapin/PortKit.git
cd PortKit
# Copy environment variables
cp .env.example .env
# Edit .env and add your API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY)
# Start all services using Docker Hub images
docker compose -f docker compose.prod.yml up -d
# Check service status
docker compose ps
Service URLs:
/api/ when using frontend proxy)Note: The frontend uses Nginx to proxy API requests to the backend, so you can access the API through either http://localhost:3000/api/ or directly at http://localhost:8080/api/.
# Clone the repository
git clone https://github.com/anchapin/PortKit.git
cd PortKit
# Copy environment variables
cp .env.example .env
# Edit .env and add your API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY)
# Start all services
docker compose up -d
# Check service status
docker compose ps
# Use development configuration with hot reload
docker compose -f docker compose.dev.yml up -d
# View logs
docker compose logs [service-name]
# Restart a service
docker compose restart [service-name]
# Stop all services
docker compose down
# Rebuild and restart
docker compose up -d --build
# View real-time logs
docker compose logs -f
If you prefer to run services locally without Docker:
pnpm run install-allpnpm run devPortKit uses a microservices architecture with the following containers:
| Service | Technology | Port | Purpose |
|---|---|---|---|
| Frontend | React + Nginx | 3000 | User interface |
| Backend | FastAPI + Python | 8080 | Main API server |
| AI Engine | FastAPI + LangChain/LangGraph | 8001 | AI conversion engine |
| PostgreSQL | PostgreSQL 15 | 5433 | Primary database |
| Redis | Redis 7 | 6379 | Caching & sessions |
Required environment variables (add to .env):
# AI API Keys (required)
OPENAI_API_KEY=your-openai-api-key
ANTHROPIC_API_KEY=your-anthropic-api-key
# Database Configuration
# For local development (auto-configured for Docker):
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/portkit
POSTGRES_DB=portkit
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
# For Supabase (production):
DATABASE_URL=postgresql://supabase_user:supabase_password@db.your_project_id.supabase.co:5432/postgres
# Redis (auto-configured for Docker)
REDIS_URL=redis://redis:6379
# Application
LOG_LEVEL=INFO
DEBUG=false
VITE_API_URL=http://localhost:8080/api/v1
Note: Frontend environment variables (VITE_API_URL, VITE_API_BASE_URL) are set as build arguments in Docker Compose and are embedded into the built JavaScript bundle at build time.
All services include health checks for monitoring:
# Check frontend health
curl http://localhost:3000/health
# Check backend health (basic liveness)
curl http://localhost:8080/health
# Check backend readiness (includes dependency checks)
curl http://localhost:8080/health/readiness
# Check backend liveness (process running)
curl http://localhost:8080/health/liveness
# Check AI engine health
curl http://localhost:8001/api/v1/health
# Check all service status
docker compose ps
The backend provides three health check endpoints for Kubernetes probes:
| Endpoint | Purpose | Dependencies Checked |
|---|---|---|
/health | Basic health check | None |
/health/liveness | Process is running | None |
/health/readiness | Can serve traffic | Database, Redis |
Response Format:
{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00",
"checks": {
"dependencies": {
"database": {
"status": "healthy",
"latency_ms": 5.2,
"message": "Database connection successful"
},
"redis": {
"status": "healthy",
"latency_ms": 1.8,
"message": "Redis connection successful"
}
}
}
}
Status Values:
healthy: All checks passeddegraded: Non-critical dependencies unavailable (e.g., Redis)unhealthy: Critical dependencies unavailable (e.g., Database)docker compose.yml.env file contains valid OPENAI_API_KEY and ANTHROPIC_API_KEYfont-src 'self' data:# View service logs
docker compose logs backend
docker compose logs ai-engine
docker compose logs frontend
# Access container shell
docker compose exec backend bash
docker compose exec ai-engine bash
# Reset everything
docker compose down -v
docker compose up -d --build
# Start the test PostgreSQL database
./scripts/test-db.sh start
# Or manually with docker-compose
docker-compose -f docker-compose.test.yml up -d test-postgres
Important: The test suite uses a parallel/serial split architecture:
# Run all tests (parallel + serial)
pnpm run test
# Backend tests - parallel run (default, ~2772 tests)
# These run with: -n auto --dist=loadscope -m "not integration and not serial"
cd backend && pytest
# Backend tests - serial run (4 tests with module-level state issues)
# These run with: -n0 -m serial
cd backend && pytest -m serial
# Backend tests - serial mode only (for debugging)
cd backend && pytest -n0
# Frontend tests
cd frontend && pnpm test
# AI Engine and RAG tests
cd ai-engine && pytest
Test Stability: The parallel test suite runs with ZERO flaky failures. The serial tests (-m serial) handle tests that pollute module-level state.
| Marker | Description |
|---|---|
integration | Integration tests (excluded from default run) |
serial | Tests that must run serially (not in parallel) due to module-level state pollution |
unit | Unit tests |
asyncio | Async tests |
# Start test database
./scripts/test-db.sh start
# Stop test database
./scripts/test-db.sh stop
# Reset test database (clears all data)
./scripts/test-db.sh reset
# View database logs
./scripts/test-db.sh logs
To run the full conversion pipeline test, validating the complete Java to Bedrock pipeline:
pytest tests/test_mvp_conversion.py
# Run tests in Docker containers (parallel mode - default)
docker compose exec backend pytest
# Run serial tests only
docker compose exec backend pytest -m serial
# Run tests in serial mode (for debugging)
docker compose exec backend pytest -n0
# Run tests with coverage
docker compose exec backend pytest --cov=src
docker compose exec ai-engine pytest --cov=src
Use the development Docker Compose configuration for active development:
# Start with hot reload enabled
docker compose -f docker compose.dev.yml up -d
# This enables:
# - Frontend: Vite dev server with hot reload
# - Backend: uvicorn with auto-reload
# - AI Engine: uvicorn with auto-reload and debug mode
# After code changes, rebuild specific service
docker compose build backend
docker compose up -d backend
# Or rebuild all services
docker compose up -d --build
# Access PostgreSQL directly
docker compose exec postgres psql -U postgres -d portkit
# Run database migrations
docker compose exec backend alembic upgrade head
# Reset database (⚠️ destroys data)
docker compose down -v
docker compose up -d
# Monitor resource usage
docker stats
# View container resource limits
docker compose config
# Check service dependencies
docker compose ps --services
Current milestone: M6 Beta Iteration — see GitHub Milestones for progress.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by the PortKit team
1,429 commits
614 commits
153 commits
137 commits
Python
90.3%
TypeScript
7.1%
CSS
1.4%
AI-powered tool for converting Minecraft Java Edition mods to Bedrock Edition add-ons
6
stars
2,423
commits
Python
primary language
Sep 9, 2026
updated
AI-powered Minecraft Java to Bedrock conversion platform. Convert mods, add-ons, and extensions with 67%+ coverage across textures, models, recipes, sounds, lang files, and entities.
modporter.ai | Documentation | API Reference | Conversion Guide
Empower Minecraft creators with production-grade AI tooling that converts Java Edition content to Bedrock Edition at scale — with smart assumptions to bridge technical gaps.
| Content Type | Coverage |
|---|---|
| Textures | Block textures, item textures, entity textures |
| Models | Bedrock JSON models (geometry, render controllers) |
| Recipes | Crafting, smelting, stonecutting, milling, crushing, cooking_pot |
| Sounds | Sound definitions and audio assets |
| Lang Files | en_US.lang translation and localization |
| Entities | Entity behaviors and spawn rules |
This project offers multiple deployment options:
This option uses pre-built Docker images from Docker Hub for a production-like environment.
# Clone the repository
git clone https://github.com/anchapin/PortKit.git
cd PortKit
# Copy environment variables
cp .env.example .env
# Edit .env and add your API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY)
# Start all services using Docker Hub images
docker compose -f docker compose.prod.yml up -d
# Check service status
docker compose ps
Service URLs:
/api/ when using frontend proxy)Note: The frontend uses Nginx to proxy API requests to the backend, so you can access the API through either http://localhost:3000/api/ or directly at http://localhost:8080/api/.
# Clone the repository
git clone https://github.com/anchapin/PortKit.git
cd PortKit
# Copy environment variables
cp .env.example .env
# Edit .env and add your API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY)
# Start all services
docker compose up -d
# Check service status
docker compose ps
# Use development configuration with hot reload
docker compose -f docker compose.dev.yml up -d
# View logs
docker compose logs [service-name]
# Restart a service
docker compose restart [service-name]
# Stop all services
docker compose down
# Rebuild and restart
docker compose up -d --build
# View real-time logs
docker compose logs -f
If you prefer to run services locally without Docker:
pnpm run install-allpnpm run devPortKit uses a microservices architecture with the following containers:
| Service | Technology | Port | Purpose |
|---|---|---|---|
| Frontend | React + Nginx | 3000 | User interface |
| Backend | FastAPI + Python | 8080 | Main API server |
| AI Engine | FastAPI + LangChain/LangGraph | 8001 | AI conversion engine |
| PostgreSQL | PostgreSQL 15 | 5433 | Primary database |
| Redis | Redis 7 | 6379 | Caching & sessions |
Required environment variables (add to .env):
# AI API Keys (required)
OPENAI_API_KEY=your-openai-api-key
ANTHROPIC_API_KEY=your-anthropic-api-key
# Database Configuration
# For local development (auto-configured for Docker):
DATABASE_URL=postgresql+asyncpg://postgres:password@postgres:5432/portkit
POSTGRES_DB=portkit
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
# For Supabase (production):
DATABASE_URL=postgresql://supabase_user:supabase_password@db.your_project_id.supabase.co:5432/postgres
# Redis (auto-configured for Docker)
REDIS_URL=redis://redis:6379
# Application
LOG_LEVEL=INFO
DEBUG=false
VITE_API_URL=http://localhost:8080/api/v1
Note: Frontend environment variables (VITE_API_URL, VITE_API_BASE_URL) are set as build arguments in Docker Compose and are embedded into the built JavaScript bundle at build time.
All services include health checks for monitoring:
# Check frontend health
curl http://localhost:3000/health
# Check backend health (basic liveness)
curl http://localhost:8080/health
# Check backend readiness (includes dependency checks)
curl http://localhost:8080/health/readiness
# Check backend liveness (process running)
curl http://localhost:8080/health/liveness
# Check AI engine health
curl http://localhost:8001/api/v1/health
# Check all service status
docker compose ps
The backend provides three health check endpoints for Kubernetes probes:
| Endpoint | Purpose | Dependencies Checked |
|---|---|---|
/health | Basic health check | None |
/health/liveness | Process is running | None |
/health/readiness | Can serve traffic | Database, Redis |
Response Format:
{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00",
"checks": {
"dependencies": {
"database": {
"status": "healthy",
"latency_ms": 5.2,
"message": "Database connection successful"
},
"redis": {
"status": "healthy",
"latency_ms": 1.8,
"message": "Redis connection successful"
}
}
}
}
Status Values:
healthy: All checks passeddegraded: Non-critical dependencies unavailable (e.g., Redis)unhealthy: Critical dependencies unavailable (e.g., Database)docker compose.yml.env file contains valid OPENAI_API_KEY and ANTHROPIC_API_KEYfont-src 'self' data:# View service logs
docker compose logs backend
docker compose logs ai-engine
docker compose logs frontend
# Access container shell
docker compose exec backend bash
docker compose exec ai-engine bash
# Reset everything
docker compose down -v
docker compose up -d --build
# Start the test PostgreSQL database
./scripts/test-db.sh start
# Or manually with docker-compose
docker-compose -f docker-compose.test.yml up -d test-postgres
Important: The test suite uses a parallel/serial split architecture:
# Run all tests (parallel + serial)
pnpm run test
# Backend tests - parallel run (default, ~2772 tests)
# These run with: -n auto --dist=loadscope -m "not integration and not serial"
cd backend && pytest
# Backend tests - serial run (4 tests with module-level state issues)
# These run with: -n0 -m serial
cd backend && pytest -m serial
# Backend tests - serial mode only (for debugging)
cd backend && pytest -n0
# Frontend tests
cd frontend && pnpm test
# AI Engine and RAG tests
cd ai-engine && pytest
Test Stability: The parallel test suite runs with ZERO flaky failures. The serial tests (-m serial) handle tests that pollute module-level state.
| Marker | Description |
|---|---|
integration | Integration tests (excluded from default run) |
serial | Tests that must run serially (not in parallel) due to module-level state pollution |
unit | Unit tests |
asyncio | Async tests |
# Start test database
./scripts/test-db.sh start
# Stop test database
./scripts/test-db.sh stop
# Reset test database (clears all data)
./scripts/test-db.sh reset
# View database logs
./scripts/test-db.sh logs
To run the full conversion pipeline test, validating the complete Java to Bedrock pipeline:
pytest tests/test_mvp_conversion.py
# Run tests in Docker containers (parallel mode - default)
docker compose exec backend pytest
# Run serial tests only
docker compose exec backend pytest -m serial
# Run tests in serial mode (for debugging)
docker compose exec backend pytest -n0
# Run tests with coverage
docker compose exec backend pytest --cov=src
docker compose exec ai-engine pytest --cov=src
Use the development Docker Compose configuration for active development:
# Start with hot reload enabled
docker compose -f docker compose.dev.yml up -d
# This enables:
# - Frontend: Vite dev server with hot reload
# - Backend: uvicorn with auto-reload
# - AI Engine: uvicorn with auto-reload and debug mode
# After code changes, rebuild specific service
docker compose build backend
docker compose up -d backend
# Or rebuild all services
docker compose up -d --build
# Access PostgreSQL directly
docker compose exec postgres psql -U postgres -d portkit
# Run database migrations
docker compose exec backend alembic upgrade head
# Reset database (⚠️ destroys data)
docker compose down -v
docker compose up -d
# Monitor resource usage
docker stats
# View container resource limits
docker compose config
# Check service dependencies
docker compose ps --services
Current milestone: M6 Beta Iteration — see GitHub Milestones for progress.
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by the PortKit team
1,429 commits
614 commits
153 commits
137 commits
Python
90.3%
TypeScript
7.1%
CSS
1.4%