@stacksjs/gitit
Version:
A simple way to programmatically download templates.
209 lines (153 loc) • 6.52 kB
Markdown
<p align="center"><img src=".github/art/cover.jpg" alt="Social Card of this repo"></p>
[![npm version][npm-version-src]][npm-version-href]
[![GitHub Actions][github-actions-src]][github-actions-href]
[](http://commitizen.github.io/cz-cli/)
<!-- [![npm downloads][npm-downloads-src]][npm-downloads-href] -->
<!-- [![Codecov][codecov-src]][codecov-href] -->
# gitit
A powerful template and project scaffolding tool to help kick-start development of your next project.
## Features
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_
## Get Started
```bash
# Install globally
bun install -g @stacksjs/gitit
# or use directly with bunx
bunx @stacksjs/gitit github:user/repo my-project
```
## Usage
```bash
# 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
```
## Available Options
| 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 |
## Library Usage
Gitit can also be used programmatically in your Node.js or Bun applications:
```js
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}`)
```
### API Reference
#### `downloadTemplate(source, options)`
The main function for downloading templates.
- **source**: `string` - Template source (e.g., "github:user/repo")
- **options**: `DownloadTemplateOptions` - Configuration options
```ts
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
}
```
#### Return value
```ts
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
}
```
#### Advanced: Custom Plugins
You can extend gitit's functionality using plugins:
```js
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]
})
```
## Changelog
Please see our [releases](https://github.com/stackjs/gitit/releases) page for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.
## Community
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
[Discussions on GitHub](https://github.com/stacksjs/gitit/discussions)
For casual chit-chat with others using this package:
[Join the Stacks Discord Server](https://discord.gg/stacksjs)
## Postcardware
"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 🌎
## Sponsors
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.
- [JetBrains](https://www.jetbrains.com/)
- [The Solana Foundation](https://solana.com/)
## License
The MIT License (MIT). Please see [LICENSE](LICENSE.md) for more information.
Made with 💙
<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/@stacksjs/gitit?style=flat-square
[npm-version-href]: https://npmjs.com/package/@stacksjs/gitit
[github-actions-src]: https://img.shields.io/github/actions/workflow/status/stacksjs/gitit/ci.yml?style=flat-square&branch=main
[github-actions-href]: https://github.com/stacksjs/gitit/actions?query=workflow%3Aci
<!-- [codecov-src]: https://img.shields.io/codecov/c/gh/stacksjs/gitit/main?style=flat-square
[codecov-href]: https://codecov.io/gh/stacksjs/gitit -->