Skip to content

stacksjs/gitit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Social Card of this repo

npm version GitHub Actions Commitizen friendly

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

# Install globally
bun install -g @stacksjs/gitit

# or use directly with bunx
bunx @stacksjs/gitit github:user/repo my-project

Usage

# 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:

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
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

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:

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 page for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Community

For help, discussion about best practices, or any other conversation that would benefit from being searchable:

Discussions on GitHub

For casual chit-chat with others using this package:

Join the Stacks Discord Server

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.

License

The MIT License (MIT). Please see LICENSE for more information.

Made with πŸ’™