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 π