Scaffold projects from personal templates, with a security audit on every create
Project description
omurtag
A builder for a builder. Scaffold projects from personal templates, with a security audit on every create.
Install
curl -fsSL https://evgeni-genchev.com/omurtag/install.sh | sh
Or directly:
uv tool install omurtag
# or
pip install omurtag
If omurtag is not found after installing:
uv tool update-shell
Commands
omurtag {add,remove,create,list,pull,sync,search,audit}
add Add a local folder as a template
remove Remove a template by name
create Generate a project from a template
list List templates with stack info
pull Pull a template from a git repo
sync Download/update all templates from config
search Browse and pull from the community template list
audit Run a security audit on any project directory
Examples
# browse community templates and pull interactively
omurtag search
# pull a template from GitHub
omurtag pull github:EvgeniGenchev/fastapi_frontend_omurtag_template
# pull a specific branch
omurtag pull github:user/repo_omurtag_template --branch dev
# list available templates
omurtag list
omurtag list --verbose
# create a project (interactive if no args)
omurtag create
omurtag create ~/projects/myapp --type fastapi_frontend
# add a local folder as a template
omurtag add ~/my_template_folder
# remove a template
omurtag remove fastapi_frontend
# sync all templates from config
omurtag sync
# audit any project directory
omurtag audit
omurtag audit ~/projects/myapp
Configuration
Config file location: $XDG_CONFIG_HOME/omurtag/config.py or ~/.omurtag/config.py
templates = [
"github:EvgeniGenchev/fastapi_frontend_omurtag_template",
"gitlab:user/my_project_omurtag_template",
"codeberg.org:user/tool_omurtag_template",
"https://codeberg.org/user/repo_omurtag_template.git",
]
# optional
transitive_deps = False # scan transitive deps on create (slower)
show_desc = True # show description in list
show_stack = True # show stack in list
Creating templates
Any folder can be a template. Use omurtag add <folder> to register a local one. To host it so others can pull it, name the repo with a _omurtag_template suffix.
Placeholders use the <*name*> syntax. On omurtag create, every placeholder is replaced in file contents, filenames, and directory names. <*project*> is always set to the project name. Any other placeholders are prompted for interactively at create time.
Security audit runs automatically on every create. omurtag detects the stack from marker files (pyproject.toml, package.json, Cargo.toml, etc.) and checks direct dependencies for known CVEs via deps.dev. Opt in to transitive scanning with transitive_deps = True in config.
An optional omurtag.sh at the template root is a post-create setup script. After the project is created, omurtag shows its contents and asks whether to run it in the project directory. It is never copied into created projects.
An optional omurtag.toml at the template root provides metadata shown in omurtag list. It is never copied into created projects.
[template]
name = "my-service"
description = "Minimal Python service"
stack = ["python"]
author = "you"
Available templates
- fastapi-frontend — FastAPI backend with Jinja2 HTML frontend
- jupyter-notebook — Jupyter notebook project with uv
- neovim-plugin — Neovim plugin boilerplate
- tool-website — Single-page tool website with docs, about, and donate pages
- static-html-website — Static HTML/CSS website
- typst-coursework — Typst coursework document template
Full list: evgeni-genchev.com/omurtag/templates.json
Dev install
uv cache clean && uv tool uninstall omurtag && uv tool install .
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omurtag-0.4.3.tar.gz.
File metadata
- Download URL: omurtag-0.4.3.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcb4ced78dca4ef86b8ecbb34d2a24d7e727f37096b60dae95f51650bb39884e
|
|
| MD5 |
b2fdc106556273a1334cc9cdc59ee62b
|
|
| BLAKE2b-256 |
b53f166339a4b778a3ed66395300050b6d2e5e09ba8f04f7a949caffc7db2c96
|
Provenance
The following attestation bundles were made for omurtag-0.4.3.tar.gz:
Publisher:
publish.yml on EvgeniGenchev/omurtag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omurtag-0.4.3.tar.gz -
Subject digest:
dcb4ced78dca4ef86b8ecbb34d2a24d7e727f37096b60dae95f51650bb39884e - Sigstore transparency entry: 1437870385
- Sigstore integration time:
-
Permalink:
EvgeniGenchev/omurtag@bb18b5fb9efc3b1e49a444a0577cb2dd9e6d22ed -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/EvgeniGenchev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bb18b5fb9efc3b1e49a444a0577cb2dd9e6d22ed -
Trigger Event:
push
-
Statement type:
File details
Details for the file omurtag-0.4.3-py3-none-any.whl.
File metadata
- Download URL: omurtag-0.4.3-py3-none-any.whl
- Upload date:
- Size: 15.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4af7dac61d2119769de65406a953452fb5f21a041299415cfe73875d23784265
|
|
| MD5 |
d4a18c7e34b22bf82b11aa4b817efdbe
|
|
| BLAKE2b-256 |
b8939d4e92d1c86a640686a26533ae1ab4c0bf52d2f1495812a3d987bb6709b6
|
Provenance
The following attestation bundles were made for omurtag-0.4.3-py3-none-any.whl:
Publisher:
publish.yml on EvgeniGenchev/omurtag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omurtag-0.4.3-py3-none-any.whl -
Subject digest:
4af7dac61d2119769de65406a953452fb5f21a041299415cfe73875d23784265 - Sigstore transparency entry: 1437870390
- Sigstore integration time:
-
Permalink:
EvgeniGenchev/omurtag@bb18b5fb9efc3b1e49a444a0577cb2dd9e6d22ed -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/EvgeniGenchev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bb18b5fb9efc3b1e49a444a0577cb2dd9e6d22ed -
Trigger Event:
push
-
Statement type: