Putnami
DocsGitHub

Licensed under FSL-1.1-MIT

Getting Started
Concepts
How To
Build A Web App
Build An Api Service
Share Code Between Projects
Configure Your App
Add Persistence
Add Authentication
Add Background Jobs
Develop With Ai
Structure Business Logic With Di
Upgrade Putnami
Principles
Tooling & Workspace
Workspace
Cli
Jobs & Caching
Extensions
Templates
Error Handling
Frameworks
Typescript
ExtensionOverviewWebReact RoutingForms And ActionsStatic FilesApiErrors And ResponsesConfigurationLoggingHttp And MiddlewareDependency InjectionPlugins And LifecycleSessionsAuthPersistenceEventsStorageCachingWebsocketsTestingHealth ChecksTelemetryProto GrpcSmart ClientSchema
Go
ExtensionOverviewHttpDependency InjectionPlugins And LifecycleConfigurationSecurityPersistenceErrorsEventsStorageCachingLoggingTelemetryGrpcService ClientsValidationOpenapiTesting
Python
Extension
Platform
Ci
  1. DocsSeparator
  2. Tooling & WorkspaceSeparator
  3. Templates

Templates

Templates are project scaffolds that let you create fully configured projects in one command. They are decoupled from extensions — each template is defined by a putnami.template.json manifest and can be installed, versioned, and published independently.

Creating a project from a template

putnami projects create my-app --template typescript-web

The --template flag is required. Options:

  • --template <name> — Template to scaffold from (required)
  • --path <path> — Custom project path (default: determined by workspace scopes)

Official templates

Each language extension ships its own templates:

Template Extension Description
typescript-web @putnami/typescript React SSR web app with file-based routing, layouts, and client hydration
typescript-server @putnami/typescript HTTP server with @putnami/application, file-based API routing, and tests
typescript-library @putnami/typescript TypeScript library with exports and tests
go-server @putnami/go HTTP server with net/http, JSON endpoint, and tests
go-library @putnami/go Go library with exported function and tests
python-server @putnami/python FastAPI server with uvicorn and tests
python-library @putnami/python Python library with importable module and tests
# TypeScript
putnami projects create my-app --template typescript-web
putnami projects create my-api --template typescript-server
putnami projects create my-lib --template typescript-library

# Go
putnami projects create my-api --template go-server
putnami projects create my-lib --template go-library

# Python
putnami projects create my-api --template python-server
putnami projects create my-lib --template python-library

Every template produces a project you can serve or test immediately:

putnami serve my-app
putnami test my-lib

Template file processing

Files ending in .template are processed with variable substitution. Other files are copied as-is.

Available variables:

Variable Description
<%= projectName %> The project name passed to create
<%= projectPath %> Path to the project relative to workspace root
<%= projectModule %> Normalized module name (e.g., my-lib becomes my_lib for Python)
<%= putnamiVersion %> Current Putnami CLI version
<%= workspaceRelativePath %> Relative path from project to workspace root

Template discovery

Templates are discovered from three sources:

  1. Workspace projects — any project containing a putnami.template.json
  2. Convention directories — <domain>/templates/*/ paths in the workspace
  3. Installed templates — downloaded from the template registry

Installing external templates

Configure installable templates in putnami.workspace.json:

{
  "templates": [
    "typescript-library",
    "go-server:^1.0.0"
  ]
}

Then install:

putnami templates install

Or install as part of the combined workspace setup:

putnami install

Templates are downloaded and stored in .putnami/templates/<name>/<version>/. The unified lock file (putnami.lock.json) ensures deterministic installs.

Managing templates

putnami templates list               # List configured and discovered templates
putnami templates update             # Update to latest compatible versions
putnami templates remove <name>      # Remove an installed template
putnami templates validate [path]    # Validate a template manifest
putnami templates test [path]        # Test a template by rendering it
putnami templates package [path]     # Package for distribution

Publishing templates

To publish your own template, configure the template-archives publish channel in the template project's putnami.json:

{
  "publish": ["template-archives"]
}

Then package and publish:

putnami templates package ./my-template
putnami publish --projects my-template

On this page

  • Templates
  • Creating a project from a template
  • Official templates
  • Template file processing
  • Template discovery
  • Installing external templates
  • Managing templates
  • Publishing templates