{"id":31706989,"url":"https://github.com/ehsaniara/joblet","last_synced_at":"2026-04-22T16:33:08.517Z","repository":{"id":296107251,"uuid":"990395702","full_name":"ehsaniara/joblet","owner":"ehsaniara","description":"Joblet is a micro-container runtime for running Linux jobs with:  Process and filesystem isolation (PID namespace, chroot)  Fine-grained CPU, memory, and IO throttling (cgroups v2)  Secure job execution with mTLS and RBAC  Built-in scheduler, SSE log streaming, and multi-core pinning  Ideal for:  Agentic AI  Workloads  (Untrusted code)","archived":false,"fork":false,"pushed_at":"2026-01-31T16:50:35.000Z","size":55538,"stargazers_count":25,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-01T04:32:45.369Z","etag":null,"topics":["cgroups","containerization","golang","linux","linux-namespaces","namespaces","process-isolation","resource-management","system","system-call-isolation"],"latest_commit_sha":null,"homepage":"https://ehsaniara.github.io/joblet/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ehsaniara.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-26T03:55:43.000Z","updated_at":"2026-01-31T16:48:01.000Z","dependencies_parsed_at":"2025-05-29T01:57:04.667Z","dependency_job_id":"04b7a731-a130-4e85-b266-3f2b83b50cde","html_url":"https://github.com/ehsaniara/joblet","commit_stats":null,"previous_names":["ehsaniara/job-worker","ehsaniara/worker","ehsaniara/joblet"],"tags_count":160,"template":false,"template_full_name":null,"purl":"pkg:github/ehsaniara/joblet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsaniara%2Fjoblet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsaniara%2Fjoblet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsaniara%2Fjoblet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsaniara%2Fjoblet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ehsaniara","download_url":"https://codeload.github.com/ehsaniara/joblet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehsaniara%2Fjoblet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32145639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T15:33:03.595Z","status":"ssl_error","status_checked_at":"2026-04-22T15:30:42.712Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cgroups","containerization","golang","linux","linux-namespaces","namespaces","process-isolation","resource-management","system","system-call-isolation"],"created_at":"2025-10-08T23:49:20.942Z","updated_at":"2026-04-22T16:33:03.437Z","avatar_url":"https://github.com/ehsaniara.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Joblet / RNX - Secure Linux Process Execution Platform\n\n[![Tests](https://github.com/ehsaniara/joblet/actions/workflows/ci.yml/badge.svg)](https://github.com/ehsaniara/joblet/actions/workflows/ci.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/ehsaniara/joblet)](https://goreportcard.com/report/github.com/ehsaniara/joblet)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n\u003cimg align=\"right\" width=\"159px\" src=\"docs/joblet-thumbnail.png\"\u003e\n\n**Joblet** is a secure Linux job execution platform that simplifies running isolated processes with comprehensive\nresource management. It handles process isolation, resource limits, GPU acceleration, and monitoring automatically,\nletting you focus on your applications rather than infrastructure complexity.\n\n\u003e Complete Documentation: [/docs/README.md](docs/README.md)\n\n\u003e Provides sandboxed code execution with GPU support, resource controls, and complete process\n\u003e isolation for AI workloads.\n\n## Key Capabilities\n\n- **🔒 Isolation**: Run in secure sandboxes, separate namespaces, preventing interference between\n  workloads\n- **⚡ GPU Acceleration**: Native NVIDIA GPU support with automatic CUDA env. setup for AI/ML workloads\n- **🎛️ Resource Management**: CPU, memory, I/O, and GPU resource limits with fine-grained control\n- **🌐 Network Isolation**: Networking options from full isolation to custom networks for secure\n  communication\n- **💾 Storage Solutions**: Persistent volumes for data retention and temporary storage with automatic cleanup\n- **⏰ Job Scheduling**: Execute jobs immediately, schedule for specific times, or set delayed execution\n- **🛡️ Enterprise Security**: mTLS encryption with certificate-based authentication and role-based\n  access control\n- **🐍 Runtime Environments**: Build Python ML, Java, and custom runtime environments from declarative YAML specifications\n\n## Getting Started\n\n\u003e **☁️ Cloud Deployment**: Joblet can be deployed directly on AWS EC2 with automated installation DynamoDB and\n\u003e CloudWatch\n\u003e integration. See the [AWS Deployment Guide](docs/AWS_DEPLOYMENT.md) for one-click deployment with user data scripts.\n\n### A. Joblet Server Installation (Linux)\n\n#### Option 1: Package Installation (Ubuntu/Debian)\n\n```bash\n# Download and install the latest release\nwget $(curl -s https://api.github.com/repos/ehsaniara/joblet/releases/latest | grep \"browser_download_url.*_amd64\\.deb\" | cut -d '\"' -f 4)\nsudo dpkg -i joblet_*_amd64.deb\n\n# Start the service\nsudo systemctl start joblet\nsudo systemctl enable joblet\n```\n\n#### Option 2: Manual Installation (Any Linux Distribution)\n\n```bash\n# Download and extract the release\ncurl -L -o rnx-linux-amd64.tar.gz $(curl -s https://api.github.com/repos/ehsaniara/joblet/releases/latest | grep \"browser_download_url.*linux-amd64.tar.gz\" | cut -d '\"' -f 4)\ntar -xzf rnx-linux-amd64.tar.gz\ncd rnx-linux-amd64\n\n# Run the installation script\nsudo ./install.sh\nsudo systemctl start joblet\n```\n\n### B. RNX Client Installation (Cross-Platform)\n\n#### macOS (Homebrew)\n\n```bash\n# Add the Joblet tap\nbrew tap ehsaniara/joblet https://github.com/ehsaniara/joblet\nbrew install rnx              # Installs RNX CLI\n\n# Copy configuration from server\nscp user@joblet-server:/opt/joblet/config/rnx-config.yml ~/.rnx/\n```\n\n#### Windows\n\n```powershell\n# Download the Windows binary\nInvoke-WebRequest -Uri \"https://github.com/ehsaniara/joblet/releases/latest/download/rnx-windows-amd64.exe\" -OutFile \"rnx.exe\"\n\n# Add to PATH\nNew-Item -ItemType Directory -Force -Path \"$env:USERPROFILE\\bin\"\nMove-Item rnx.exe \"$env:USERPROFILE\\bin\\\"\n[Environment]::SetEnvironmentVariable(\"Path\", $env:Path + \";$env:USERPROFILE\\bin\", [EnvironmentVariableTarget]::User)\n\n# Copy configuration from Joblet server to %USERPROFILE%\\.rnx\\rnx-config.yml\n```\n\n### C. Verify Installation\n\n```bash\n# Test the connection and run your first job\nrnx job list                           # List current jobs\nrnx job run echo \"Hello from Joblet!\" # Execute a simple test job\nrnx monitor status                     # Check server health\n\n```\n\n### D. Python SDK Usage (Alternative to CLI)\n\n```python\n# Install: pip install joblet-sdk\nfrom joblet import JobletClient\n\nwith JobletClient(host=\"your-joblet-server\") as client:\n    # Run a job programmatically\n    job = client.jobs.run_job(\n        command=\"echo\",\n        args=[\"Hello from Python!\"],\n        name=\"python-job\"\n    )\n    print(f\"Job started: {job['job_uuid']}\")\n```\n\n## 🚀 Usage Examples\n\n### Command Line Interface\n\n```bash\n# Basic job execution with resource isolation\nrnx job run echo \"Hello World\"\nrnx job run --max-cpu=50 --max-memory=512 python3 script.py\n\n# Build and use runtime environments\nrnx runtime build ./examples/python-3.11-ml/runtime.yaml   # Build Python ML runtime\nrnx runtime build ./examples/java-21/runtime.yaml          # Build Java 21 runtime\nrnx job run --runtime=python-3.11-ml python analysis.py    # Use Python ML runtime\nrnx job run --runtime=openjdk-21 java App.java             # Use Java runtime\n\n# GPU acceleration for compute-intensive workloads\nrnx job run --gpu=1 --gpu-memory=8GB python train_model.py\nrnx job run --gpu=2 --runtime=python-3.11-ml python distributed_training.py\n\n# File uploads and environment configuration\nrnx job run --upload=data.csv --upload=script.py python3 script.py\n\n# Environment variables (visible and secure)\nrnx job run --env=NODE_ENV=production node app.js\nrnx job run --secret-env=API_KEY=secret python app.py       # Hidden from logs\n\n# Network isolation modes\nrnx job run --network=none secure_task.sh                   # No network access\nrnx job run --network=isolated wget https://api.com         # External access only\nrnx job run --network=bridge api_server.py                  # Inter-job communication\n\n# Persistent storage management\nrnx volume create mydata --size=1GB\nrnx job run --volume=mydata python3 process_data.py\n\n# Job scheduling options\nrnx job run --schedule=\"1hour\" backup.sh\nrnx job run --schedule=\"2025-12-25T00:00:00\" maintenance.py\n\n# Execution timeout (terminates job if exceeded)\nrnx job run --timeout=5m long_running_task.sh\nrnx job run --timeout=30s --max-memory=256 quick_check.sh\n```\n\n## 🎨 Web Administration Interface\n\nThe Joblet Admin UI is available as a standalone package\nat [joblet-admin repository](https://github.com/ehsaniara/joblet-admin):\n\n- **System Monitoring**: Real-time CPU, memory, disk, and network metrics with visual dashboards\n- **Job Management**: Comprehensive job listing, filtering, control, and log streaming capabilities\n- **Workflow Visualization**: Interactive dependency graphs and execution timelines\n- **System Administration**: Intuitive volume, network, and runtime environment management\n- **Direct gRPC**: Connects directly to Joblet server via gRPC\n\nTo use the admin interface:\n\n```bash\n# Clone the joblet-admin repository\ngit clone https://github.com/ehsaniara/joblet-admin\ncd joblet-admin\n\n# Install and run\nnpm install\nnpm run dev\n\n# Access at http://localhost:3000\n```\n\n**Learn more**: See the [Admin UI Documentation](docs/ADMIN_UI.md)\n\n## System Requirements\n\n### Joblet Server (Linux)\n\n- **Operating System**: Linux kernel 4.6+ (Ubuntu 18.04+, CentOS 8+, or equivalent distributions)\n- **Hardware**: Multi-core CPU, 1GB+ RAM, 5GB+ disk space (scales with workload)\n- **Network**: Port 50051 accessible for gRPC communication\n- **Privileges**: Root access required for namespace and cgroup management\n- **Dependencies**: cgroups v2, iptables, iproute2, bridge-utils (standard on most distributions)\n- **GPU Support**: NVIDIA drivers (optional, required only for GPU workloads)\n\n### RNX Client (Cross-Platform)\n\n- **Operating Systems**: Linux, macOS 10.15+, Windows 10+\n- **Resources**: Minimal - 50MB+ RAM, network connectivity to server port 50051\n- **Distribution**: Single binary executable with no additional dependencies\n\n## Documentation\n\n- **[Quick Start Guide](docs/QUICKSTART.md)** - Get up and running quickly with step-by-step instructions\n- **[Installation Guide](docs/INSTALLATION.md)** - Comprehensive installation procedures for all platforms\n- **[AWS Deployment Guide](docs/AWS_DEPLOYMENT.md)** - Deploy Joblet on AWS EC2 with CloudWatch integration\n- **[GPU Support Guide](docs/GPU_SUPPORT.md)** - Complete guide to NVIDIA GPU acceleration and CUDA integration\n- **[Runtime System Guide](docs/RUNTIME_SYSTEM.md)** - Build and manage runtime environments from YAML specifications\n- **[Job Execution Guide](docs/JOB_EXECUTION.md)** - Detailed job management and execution patterns\n- **[RNX CLI Reference](docs/RNX_CLI_REFERENCE.md)** - Complete command reference with examples\n- **[Security Guide](docs/SECURITY.md)** - Security configuration and best practices\n- **[Working Examples](examples/)** - Production-ready runtime configurations and job examples\n\n## Related Projects\n\n- **[Joblet Admin UI](https://github.com/ehsaniara/joblet-admin)**\n- **[Joblet Proto](https://github.com/ehsaniara/joblet-proto)**\n- **[Joblet Python SDK](https://github.com/ehsaniara/joblet-sdk-python/)**\n- **[Joblet MCP Server](https://github.com/ehsaniara/joblet-mcp-server)**\n\n**Developing a custom client?** Start with the [protocol definitions](https://github.com/ehsaniara/joblet-proto) to\ngenerate language-specific bindings.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehsaniara%2Fjoblet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fehsaniara%2Fjoblet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fehsaniara%2Fjoblet/lists"}