Just: A Language Like Make, but Not a Build System
In the world of programming and software development, automation tools play a critical role in simplifying repetitive tasks, managing dependencies, and enhancing productivity. One such tool that has garnered attention in recent years is Just, a command-line utility designed to be a lightweight, user-friendly alternative to traditional build systems like Make. Despite its resemblance to Make, Just is not a build system. Rather, it focuses on offering a simpler, more flexible approach for automating tasks that would otherwise require writing long, complex shell scripts.

What is Just?
Just is a language designed for task automation. Its goal is to provide a simpler, more accessible environment for developers to automate repetitive tasks. It is akin to Make, but with a few key differences. Unlike Make, Just does not focus on compiling code or managing complex dependency graphs. Instead, it is designed to run commands in a more streamlined manner, providing a simpler interface for organizing and executing these commands.
Though Just can be used for a variety of tasks, from automating builds to testing or deployment processes, it does not enforce any specific workflow. This flexibility is one of Just’s defining features—it allows developers to use it in any context where repetitive command execution is required, whether for personal projects or large-scale applications.
History and Development
Just was created in 2021, with its development driven by the need for a simple yet powerful task automation tool that could serve as a replacement for more complex build systems. Unlike Make, which uses a specialized syntax that can be intimidating to new users, Just uses a simpler syntax that is more accessible, especially for those familiar with shell scripting. It was designed to be lightweight and easy to use, with an emphasis on simplicity and flexibility.
The project is open-source, and while it doesn’t have a centralized repository with comprehensive documentation or a large community, it has still attracted attention from developers who appreciate its minimalistic approach. Much of the project’s development is ongoing, and its issues are primarily discussed and tracked through the project’s GitHub repository.
Key Features of Just
The main appeal of Just lies in its ease of use and versatility. Some of its features include:
-
Simple Task Definitions: Just allows users to define tasks in a straightforward manner, similar to how Make uses rules. Tasks are defined in
.justfile
, a simple text file that lists the tasks and the commands they should run. -
Cross-Platform Support: Just is designed to be compatible across various platforms, making it useful for developers working in diverse environments.
-
No Complex Dependency Management: Unlike Make, Just does not rely on complex dependency tracking or intricate build graphs. Tasks are defined independently and are executed in sequence as specified, without the overhead of managing dependencies.
-
Simplicity Over Complexity: Just takes a minimalist approach compared to other tools. It does not require users to learn a new language or domain-specific syntax. The task definitions are simple shell commands, making Just very approachable.
-
Support for Variables and Command Substitution: Just supports variable definitions and command substitution, providing users with more control over task execution.
-
Minimal Installation and Usage: Installing Just is a quick and simple process. Developers can begin defining tasks almost immediately after installation without needing to configure an elaborate environment.
How Does Just Compare to Make?
At its core, Just and Make serve a similar purpose: automating tasks. However, they do so in very different ways. Make, a tool that has been around since the 1970s, is deeply entrenched in the world of software development. It works by defining rules and dependencies that dictate how code should be compiled and built. It is particularly well-suited for large projects with complex dependency chains.
Just, on the other hand, takes a simpler approach. There are no complex dependency chains or build graphs to manage. Just tasks are defined as simple shell commands, and their execution is linear. The simplicity of Just makes it an appealing choice for developers working on smaller projects or those who prefer a more minimalistic tool.
One of the key differences between the two tools is that Just does not perform any automatic dependency management. In Make, if a file changes, the system automatically knows which targets need to be rebuilt based on the dependency graph. Just, however, does not attempt to track file dependencies. This makes Just more suitable for tasks that don’t require sophisticated dependency management, such as running tests, cleaning up old files, or deploying applications.
Syntax and Usage
Just’s syntax is designed to be easy to understand for anyone familiar with shell scripting. Tasks are defined in .justfile
, a simple text file that lists tasks and their corresponding commands. For example:
bash# Define a task to build the project
build:
gcc -o my_project main.c utils.c
# Define a task to run tests
test:
./run_tests.sh
In this example, there are two tasks: build
and test
. The build
task compiles the project using gcc
, while the test
task runs the tests defined in a separate script. To run any of these tasks, the user simply types just build
or just test
in the command line.
This simplicity stands in stark contrast to the more verbose and complex syntax found in traditional build systems like Make. In Just, users define tasks and simply run them by name, without the need to worry about dependencies or complex build rules.
When to Use Just?
While Just is incredibly useful for simple task automation, it may not be the best choice for every scenario. Here are a few cases where Just shines:
-
Simple Task Automation: Just is perfect for automating small, simple tasks that do not require complex dependency management. For example, running a series of tests, cleaning up files, or deploying an application.
-
Cross-Platform Projects: Since Just works across multiple platforms, it is a great choice for developers working on projects that need to be run on different operating systems. The same
.justfile
can be used on macOS, Linux, and Windows without modification. -
Learning Tool: Just is a great tool for beginners who want to automate their tasks without getting bogged down by the complexities of traditional build systems. Its straightforward syntax makes it accessible to newcomers, while still being powerful enough for more experienced developers.
However, Just may not be the best choice for projects with intricate build processes, especially those that require managing complex file dependencies. For these types of projects, traditional build systems like Make or CMake might be more appropriate.
Conclusion
Just is an elegant solution for task automation, especially for developers who need a lightweight tool to handle repetitive tasks without the overhead of a full-fledged build system. Its simplicity, cross-platform compatibility, and ease of use make it an appealing choice for a wide range of developers, from beginners to experienced professionals. While it may not replace complex build systems like Make in all situations, it certainly provides a useful and straightforward alternative for simpler workflows.
By focusing on minimalism and usability, Just fills a niche in the world of task automation. It is not a replacement for traditional build systems but instead a simpler, more flexible tool for everyday use. As the project evolves and its community grows, Just could become an even more integral part of the development toolkit for those who prioritize simplicity and efficiency.
References
Unfortunately, there is no official source or extensive documentation available for Just at this time, as it is still a relatively new project. However, discussions regarding the tool can be found on its GitHub Issues page, where the community provides feedback and suggestions for further development.