Run almost any project with a single command.
runproject is an experimental multi-language project runner for Linux.
Instead of manually figuring out which runtime, package manager, dependencies, build system, and start command a project needs, run:
runprojectrunproject analyzes the current directory, detects the project type, checks the required runtime and tools, optionally installs missing components, installs project dependencies when needed, and finally runs the project.
AI-assisted project:
runprojectwas built with significant assistance from AI during development, debugging, architecture design, and testing. The project is actively being improved and should currently be considered an experimental/early-stage tool.
When you run:
runprojectthe tool tries to:
- π Detect the project language and project type
- βοΈ Detect required runtimes and development tools
- π¦ Check whether required tools are installed
- β¬οΈ Ask for permission before installing missing system packages
- π Detect and install project dependencies
- π¨ Build the project when necessary
- π Determine an appropriate way to run it
βΆοΈ Start the project
The goal is to make starting an unfamiliar project as simple as:
cd my-project
runprojectThe current version has support for:
| Language / Platform | Status |
|---|---|
| Node.js / JavaScript | β |
| TypeScript | β |
| Python | β |
| C | β |
| C++ | β |
| Rust | β |
| Go | β |
| Java | β |
| PHP | β |
| Ruby | β |
| Zig | β |
| Deno | β |
| .NET / C# | β |
| Elixir | β |
| Haskell | β |
| Julia | β |
| Scala / sbt | β |
| Lua | β |
| Perl | β |
| R | β |
| Shell / Bash | β |
Support is based on project files, manifests, source extensions, build systems, and available project metadata.
A simplified version of the workflow looks like this:
βββββββββββββββββββ
β runproject β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Detect project β
β type β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Detect runtime β
β and toolchain β
ββββββββββ¬βββββββββ
β
Missing?
/ \
Yes No
β β
βΌ β
Ask user β
β β
βΌ β
Install β
β β
ββββββ¬ββββββ
βΌ
βββββββββββββββββββ
β Check project β
β dependencies β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Build if needed β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Run project β
βββββββββββββββββββ
The implementation is divided into language detectors, installers, dependency handling, and runners so that new languages can be added without rewriting the entire application.
The current installer implementation is designed primarily for:
- Arch Linux
- Manjaro Linux
System packages are currently installed through pacman.
For example, if a required runtime is missing, runproject can ask:
β python is not installed
π¦ Required package: python
β Install python using pacman? (y/n):
No privileged installation is performed without user confirmation.
Cross-distribution package-manager support is planned for future versions.
Clone the repository:
git clone git@github.com:keyvan1702/runproject.git
cd runprojectInstall the Node.js dependencies:
npm installThen make the command available:
mkdir -p ~/.local/bin
ln -sf "$PWD/bin/runproject.js" ~/.local/bin/runprojectMake sure ~/.local/bin is in your PATH.
Then test:
runprojectSuppose you have:
my-project/
βββ main.py
with:
print("Hello from Python!")Run:
cd my-project
runprojectrunproject can detect the project as Python, check whether Python is available, and then execute the project.
For projects with dependency files, it can also detect and install dependencies when supported.
Several ecosystems already have dependency handling.
Examples include:
package.json
Supports npm and project package-manager detection for supported package managers.
requirements.txt
pyproject.toml
Python environments can be created using .venv.
composer.json
Composer dependencies can be installed automatically.
Gemfile
Bundler dependencies can be installed into a project-local vendor/bundle directory.
Other ecosystems such as Maven, Gradle, sbt, Cargo, and Go have their own build/dependency mechanisms and are handled through their respective tooling.
The project is organized around separate responsibilities:
runproject/
βββ bin/
β βββ runproject.js
β
βββ detectors/
β βββ index.js
β
βββ installers/
β βββ package-install.js
β βββ check.js
β βββ dependencies.js
β βββ dependencies-install.js
β βββ package-manager.js
β βββ platform.js
β
βββ languages/
β βββ cpp.js
β βββ deno.js
β βββ dotnet.js
β βββ elixir.js
β βββ go.js
β βββ haskell.js
β βββ helpers.js
β βββ index.js
β βββ java.js
β βββ julia.js
β βββ node.js
β βββ php.js
β βββ python.js
β βββ ruby.js
β βββ rust.js
β βββ scala.js
β βββ scripting.js
β βββ zig.js
β
βββ runners/
β βββ node.js
β
βββ index.js
βββ package.json
βββ package-lock.json
βββ README.md
βββ test-project.js
The architecture is intentionally modular so that adding a new language does not require changing the core workflow.
This project was developed with substantial assistance from AI.
AI was used during development for:
- Architecture and project structure
- Language detection design
- Runtime detection
- Dependency handling
- Build and execution logic
- Debugging
- Error analysis
- Testing strategies
- Refactoring
- Documentation
However, the project was also tested against real projects and real runtime installations on a Manjaro Linux system.
Examples of real-world testing included:
- Installing missing runtimes through
pacman - Installing Python packages
- Installing Node.js dependencies
- Building C/C++ projects
- Running Cargo projects
- Running Maven and Gradle projects
- Installing and running Ruby gems
- Running Composer projects
- Testing scripting languages such as Lua, Perl, R, and Bash
AI assistance is part of the development process, not a claim that every part of the project is automatically correct or production-ready.
runproject is still an experimental project.
Some areas are intentionally not considered complete yet:
- Package-manager support is currently focused on Arch/Manjaro.
- Project detection is primarily based on files in the project root.
- Some language ecosystems have only basic runner support.
- Complex project structures may require additional configuration.
- Automatic entry-point detection is heuristic.
- Kotlin support is not yet equivalent to Java support.
- Some build systems have assumptions about their available tasks.
- More comprehensive dependency verification is still being developed.
- More extensive cross-platform testing is needed.
If runproject cannot confidently determine how to run a project, it should fail rather than blindly execute an arbitrary command.
Planned improvements include:
- Better project detection
- Better Deno / TypeScript detection
- Improved Rust toolchain detection
- Full Kotlin support
- Better Gradle and Maven project detection
- More robust dependency verification
- Support for more Python dependency formats
- Better nested-project detection
- More package managers
- Debian / Ubuntu support
- Fedora support
- Improved Windows support
- Improved macOS support
- npm package distribution
- Automated test suite
- CI/CD
- More language integrations
Contributions, bug reports, and ideas are welcome.
If you find a project that runproject cannot detect or run correctly, please open an issue and include:
- Operating system
- Project language
- Project structure
- Relevant manifest/build files
runprojectoutput- Expected behavior
- Actual behavior
Pull requests for new languages, better detection, improved runners, and platform support are welcome.
A project license has not been selected yet.
Until a license is added to the repository, please do not assume that the source code is freely reusable, modified, or redistributed.
GitHub:
https://github.com/keyvan1702/runproject
If you find the project useful, consider giving it a β on GitHub.
keyvan1702
Built with curiosity, Linux, Node.js, and a lot of debugging. π