A powerful template and project scaffolding tool to help kick-start development of your next project.
Gitit comes with the following features:
- π Fast Template Cloning Clone templates from GitHub, GitLab, Bitbucket, and more
- πͺ Fully Typed APIs Written in TypeScript for a great developer experience
- π¦ Zero Configuration Works out of the box with sensible defaults
- π Offline Support Use cached templates when offline
- π οΈ Customizable Configure templates with various options
- π§© Post-Installation Commands Run custom commands after cloning
- π Private Repository Support Authentication for private templates
- π₯οΈ Interactive Shell Open a shell in your newly created project
# Install globally bun install -g @stacksjs/gitit # or use directly with bunx bunx @stacksjs/gitit github:user/repo my-project
# Basic usage gitit github:user/repo my-project # With options gitit github:user/repo my-project --install --shell # Clone with custom command gitit github:user/repo my-project --command "npm run dev" # Use offline cached template gitit github:user/repo my-project --offline # Clone to a specific directory gitit github:user/repo ./path/to/project
Option | Description |
---|---|
--force | Clone to existing directory even if it exists |
--force-clean | Remove any existing directory or file recursively before cloning |
--shell | Open a new shell with current working directory |
--install | Install dependencies after cloning |
--verbose | Show verbose debugging info |
--command | Custom command to run after template is cloned |
--auth | Custom Authorization token for private repositories |
--cwd | Set current working directory to resolve dirs relative to it |
--offline | Do not attempt to download and use cached version |
--prefer-offline | Use cache if exists otherwise try to download |
Gitit can also be used programmatically in your Node.js or Bun applications:
import { downloadTemplate } from '@stacksjs/gitit' // Basic usage await downloadTemplate('github:user/repo') // With options const result = await downloadTemplate('github:user/repo', { dir: './my-project', force: true, install: true, offline: false, preferOffline: true }) console.log(`Downloaded to ${result.dir}`)
The main function for downloading templates.
- source:
string
- Template source (e.g., "github:user/repo") - options:
DownloadTemplateOptions
- Configuration options
interface DownloadTemplateOptions { provider?: string // Specify provider (github, gitlab, etc.) force?: boolean // Force clone even if directory exists forceClean?: boolean // Remove existing directory before cloning offline?: boolean // Use cached version only preferOffline?: boolean // Prefer cache if exists dir?: string // Target directory registry?: false | string // Registry URL or false to disable cwd?: string // Current working directory auth?: string // Auth token for private repositories install?: boolean // Install dependencies after download silent?: boolean // Hide installation output hooks?: Hooks // Custom lifecycle hooks }
interface DownloadTemplateResult { dir: string // The directory where template was extracted source: string // Original source string name: string // Template name tar: string // Tarball URL version?: string // Template version url?: string // Repository URL // ... additional properties }
You can extend gitit's functionality using plugins:
import { downloadTemplate } from '@stacksjs/gitit' const myPlugin = { name: 'my-plugin', version: '1.0.0', hooks: { afterExtract: (result) => { console.log(`Template extracted to ${result.dir}`) return result } }, providers: { myCustomSource: (input, options) => { // Custom template provider logic return { name: 'my-template', tar: 'https://example.com/template.tar.gz' } } } } await downloadTemplate('mycustom:template', { plugins: [myPlugin] })
Please see our releases page for more information on what has changed recently.
Please see CONTRIBUTING for details.
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
For casual chit-chat with others using this package:
Join the Stacks Discord Server
"Software that is free, but hopes for a postcard." We love receiving postcards from around the world showing where Stacks is being used! We showcase them on our website too.
Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094, United States π
We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us.
The MIT License (MIT). Please see LICENSE for more information.
Made with π