A command-line interface for PkgTemplates.jl.
- Create Julia packages from the command line without REPL
- User-configurable defaults via TOML config file
- Optional mise task file generation
- Shell completion (fish, bash, zsh)
- Julia 1.12+
julia -e 'using Pkg; Pkg.Apps.add(url="https://github.com/ultimatile/PkgTemplatesCommandLineInterface.jl")'git clone https://github.com/ultimatile/PkgTemplatesCommandLineInterface.jl
cd PkgTemplatesCommandLineInterface.jl
mise run install# Create a package
jtc create MyPackage
# Create with options
jtc create MyPackage --author "Your Name" --user yourgithubuser --output-dir ~/projects
# Generate without mise configuration file
jtc create MyPackage --no-mise
# Dry run (preview without executing)
jtc create MyPackage --dry-run| Command | Description |
|---|---|
create |
Create a new Julia package |
config show |
Show current configuration |
config set |
Set configuration values |
plugin-info [name] |
Display plugin information |
completion <shell> |
Generate shell completion scripts (fish, bash, zsh) |
| Option | Description |
|---|---|
--version |
Show version |
--verbose, -v |
Enable verbose logging |
jtc supports user-configurable defaults stored in $XDG_CONFIG_HOME/jtc/config.toml (default: ~/.config/jtc/config.toml).
# Show current configuration
jtc config show
# Set default values
jtc config set --author "Your Name" --user yourgithubuser- Command-line options (highest priority)
- Configuration file defaults
- Built-in defaults (lowest priority)
Plugin fields are passed through to PkgTemplates.jl as key=value pairs, e.g.
jtc create MyPackage --tagbot 'token=GITHUB_TOKEN'.
Fields typed as a secret (such as TagBot.token or TagBot.ssh) expect the
name of a GitHub Actions secret — not the secret value itself.
PkgTemplates.jl renders the name into the workflow as ${{ secrets.NAME }}, so
a conventional value is an identifier like DOCUMENTER_KEY or GITHUB_TOKEN.
If you accidentally pass a literal credential, jtc warns and avoids echoing it
in command output and --dry-run plans. The literal would still be written to
your config file in plaintext, so remove it and use the secret's name instead.
The config file and its directory are created with owner-only permissions
(0600 / 0700) on POSIX systems.
After updating Julia (e.g., juliaup up), you may see:
/path/to/julia-1.x.x+0.../bin/julia: No such file or directory
This occurs because the shim file has a hardcoded path to the old Julia version. Reinstall to fix:
julia -e 'using Pkg; Pkg.Apps.add(url="https://github.com/ultimatile/PkgTemplatesCommandLineInterface.jl")'MIT