{"id":25393147,"url":"https://github.com/superlinear-ai/substrate","last_synced_at":"2026-02-20T12:03:37.196Z","repository":{"id":37024788,"uuid":"444870763","full_name":"superlinear-ai/substrate","owner":"superlinear-ai","description":"🌱 Substrate is a modern Copier template for scaffolding Python packages and apps","archived":false,"fork":false,"pushed_at":"2025-12-24T11:04:04.000Z","size":428,"stargazers_count":349,"open_issues_count":16,"forks_count":54,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-02-10T06:56:40.328Z","etag":null,"topics":["copier-template","devcontainer","project-template","python","ruff","scaffolding","template","ty","uv"],"latest_commit_sha":null,"homepage":"","language":"Jinja","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/superlinear-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2022-01-05T16:20:19.000Z","updated_at":"2026-01-28T03:42:46.000Z","dependencies_parsed_at":"2023-09-29T08:38:30.173Z","dependency_job_id":"4dc153bb-7345-4df4-a6c2-d1ba66a9aab3","html_url":"https://github.com/superlinear-ai/substrate","commit_stats":null,"previous_names":["superlinear-ai/poetry-cookiecutter","radix-ai/poetry-cookiecutter","superlinear-ai/substrate"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/superlinear-ai/substrate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superlinear-ai%2Fsubstrate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superlinear-ai%2Fsubstrate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superlinear-ai%2Fsubstrate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superlinear-ai%2Fsubstrate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/superlinear-ai","download_url":"https://codeload.github.com/superlinear-ai/substrate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/superlinear-ai%2Fsubstrate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29650504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["copier-template","devcontainer","project-template","python","ruff","scaffolding","template","ty","uv"],"created_at":"2025-02-15T17:02:04.929Z","updated_at":"2026-02-20T12:03:37.191Z","avatar_url":"https://github.com/superlinear-ai.png","language":"Jinja","readme":"[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers\u0026message=Open\u0026color=blue\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE3IDE2VjdsLTYgNU0yIDlWOGwxLTFoMWw0IDMgOC04aDFsNCAyIDEgMXYxNGwtMSAxLTQgMmgtMWwtOC04LTQgM0gzbC0xLTF2LTFsMy0zIi8+PC9zdmc+)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/superlinear-ai/substrate) [![Open in GitHub Codespaces](https://img.shields.io/static/v1?label=GitHub%20Codespaces\u0026message=Open\u0026color=blue\u0026logo=github)](https://github.com/codespaces/new/superlinear-ai/substrate) [![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-black.json)](https://github.com/copier-org/copier)\n\n# 🌱 Substrate\n\nA modern [Copier template](https://github.com/copier-org/copier) for scaffolding Python packages and apps.\n\n\u003cvideo src=\"https://github.com/user-attachments/assets/28d23137-ebae-47d8-a6e5-11f66abf2a91\" controls preload\u003e\u003c/video\u003e\n\n## 🎁 Features\n\n- 🧑‍💻 One-click development environments with [Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) and [GitHub Codespaces](https://github.com/features/codespaces)\n- 🌈 Cross-platform support for Linux, macOS, and Windows\n- 🐚 Modern shell prompt with [Starship](https://github.com/starship/starship)\n- 📦 Packaging and dependency management with [uv](https://github.com/astral-sh/uv)\n- 🚚 Installing from and publishing to [PyPI](https://pypi.org/)\n- ⚡️ Task running with [Poe the Poet](https://github.com/nat-n/poethepoet)\n- 💅 Code formatting with [ruff](https://github.com/astral-sh/ruff)\n- ✅ Code linting with [pre-commit](https://pre-commit.com/), [ruff](https://github.com/astral-sh/ruff), and [ty](https://github.com/astral-sh/ty)\n- 🏷 Optionally follow the [Conventional Commits](https://www.conventionalcommits.org/) standard\n- 🚦 Release new versions with [Semantic Versioning](https://semver.org/) and [Keep A Changelog](https://keepachangelog.com/) using [Commitizen](https://github.com/commitizen-tools)\n- 💌 Verified commits with [GPG](https://gnupg.org/)\n- ♻️ Continuous integration with [GitHub Actions](https://docs.github.com/en/actions) or [GitLab CI/CD](https://docs.gitlab.com/ee/ci/)\n- 🧪 Test coverage with [Coverage.py](https://github.com/nedbat/coveragepy)\n- 🧰 Dependency updates with [Dependabot](https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide)\n- 📚 Documentation with [MkDocs](https://github.com/mkdocs/mkdocs)\n\n## ✨ Using\n\n\u003e [!TIP]\n\u003e You should first [install uv](https://docs.astral.sh/uv/getting-started/installation/) to be able to run the commands below.\n\n### Create a new Python project\n\nTo create a new Python project with this template, run:\n\n```sh\nuvx copier copy gh:superlinear-ai/substrate path/to/local/repository\n```\n\n### Update your Python project\n\nTo update your Python project to the latest template version, run:\n\n```sh\nuvx copier update --exclude src/ --exclude tests/\n```\n\n### Release a new version of your Python project\n\nIf you have enabled [Conventional Commits](https://www.conventionalcommits.org/), you can create a new version tag and update `CHANGELOG.md` based on your commit messages with:\n\n```sh\ngit checkout main\ncz bump\ngit push origin main --tags\n```\n\n### Build and publish your Python project's docs\n\nTo build and serve your Python project's docs, run:\n\n```sh\npoe docs --serve\n```\n\nIf your project is on GitHub, your docs will be published automatically to GitHub Pages every time you update the default branch. You can view the docs by clicking on the ![Documentation](https://img.shields.io/static/v1?label=Documentation\u0026message=View\u0026color=blue\u0026logo=readme\u0026logoColor=white) badge in your project's README.\n\n\u003e [!TIP]\n\u003e Make sure to [configure the source of your project's GitHub Pages as GitHub Actions in your project settings](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow) to allow the GitHub Actions workflow to publish your docs.\n\n## Contributing\n\n\u003cdetails\u003e\n\u003csummary\u003ePrerequisites\u003c/summary\u003e\n\n1. [Generate an SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key) and [add the SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).\n2. Configure SSH to automatically load your SSH keys:\n\n    ```sh\n    cat \u003c\u003c EOF \u003e\u003e ~/.ssh/config\n    \n    Host *\n      AddKeysToAgent yes\n      IgnoreUnknown UseKeychain\n      UseKeychain yes\n      ForwardAgent yes\n    EOF\n    ```\n\n3. [Install Docker Desktop](https://www.docker.com/get-started).\n4. [Install VS Code](https://code.visualstudio.com/) and [VS Code's Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). Alternatively, install [PyCharm](https://www.jetbrains.com/pycharm/download/).\n5. _Optional:_ install a [Nerd Font](https://www.nerdfonts.com/font-downloads) such as [FiraCode Nerd Font](https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/FiraCode) and [configure VS Code](https://github.com/tonsky/FiraCode/wiki/VS-Code-Instructions) or [PyCharm](https://github.com/tonsky/FiraCode/wiki/Intellij-products-instructions) to use it.\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eDevelopment environments\u003c/summary\u003e\n\nThe following development environments are supported:\n\n1. ⭐️ _GitHub Codespaces_: click on [Open in GitHub Codespaces](https://github.com/codespaces/new/superlinear-ai/substrate) to start developing in your browser.\n2. ⭐️ _VS Code Dev Container (with container volume)_: click on [Open in Dev Containers](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/superlinear-ai/substrate) to clone this repository in a container volume and create a Dev Container with VS Code.\n3. ⭐️ _uv_: clone this repository and run the following from root of the repository:\n\n    ```sh\n    # Create and install a virtual environment\n    uv sync\n\n    # Activate the virtual environment\n    source .venv/bin/activate\n\n    # Install the pre-commit hooks\n    pre-commit install --install-hooks\n    ```\n\n4. _VS Code Dev Container_: clone this repository, open it with VS Code, and run \u003ckbd\u003eCtrl/⌘\u003c/kbd\u003e + \u003ckbd\u003e⇧\u003c/kbd\u003e + \u003ckbd\u003eP\u003c/kbd\u003e → _Dev Containers: Reopen in Container_.\n5. _PyCharm Dev Container_: clone this repository, open it with PyCharm, [create a Dev Container with Mount Sources](https://www.jetbrains.com/help/pycharm/start-dev-container-inside-ide.html), and [configure an existing Python interpreter](https://www.jetbrains.com/help/pycharm/configuring-python-interpreter.html#widget) at `/opt/venv/bin/python`.\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eDeveloping\u003c/summary\u003e\n\n- This project follows the [Conventional Commits](https://www.conventionalcommits.org/) standard to automate [Semantic Versioning](https://semver.org/) and [Keep A Changelog](https://keepachangelog.com/) with [Commitizen](https://github.com/commitizen-tools/commitizen).\n- Run `cz bump` to bump Substrate's version, update the `CHANGELOG.md`, and create a git tag. Then push the changes and the git tag with `git push origin main --tags`.\n\n\u003c/details\u003e\n","funding_links":[],"categories":["Jinja"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperlinear-ai%2Fsubstrate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperlinear-ai%2Fsubstrate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperlinear-ai%2Fsubstrate/lists"}