Package Exports
- create-polyglot
- create-polyglot/bin/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (create-polyglot) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
create-polyglot
Scaffold a modern polyglot microservices monorepo in seconds.
Generate Node.js, Python (FastAPI), Go, Java (Spring Boot), and Next.js frontend services with optional Turborepo or Nx presets, Docker Compose, shared packages, plugin hooks, and a persisted configuration file.
Table of Contents
- Why create-polyglot?
- Features
- Quick Start
- Installation
- Usage Examples
- Commands
- Init Flags / Options
- Generated Project Structure
- Presets
- Development Workflow
- Docker & Compose Support
- polyglot.json Configuration
- Plugins
- Basic Dev Runner
- Roadmap
- Contributing
- License
Why create-polyglot?
Building a production-style polyglot microservice environment normally requires repetitive boilerplate across languages, Docker files, presets, and configs. create-polyglot automates:
- Consistent folder layout & service naming
- Language starter templates (Node, FastAPI, Go, Spring Boot, Next.js)
- Optional monorepo orchestration (Turborepo or Nx) OR a zero-frills basic runner
- Dockerfile +
compose.yamlgeneration with correct port mappings - Extensible plugin scaffolding for future lifecycle hooks
- A centralized manifest (
polyglot.json) driving subsequent commands (e.g.add service)
Use it to prototype architectures, onboard teams faster, or spin up reproducible demos / PoCs.
Features
- ๐ Rapid polyglot monorepo scaffolding (Node.js, Python/FastAPI, Go, Java Spring Boot, Next.js)
- ๐งฉ Optional presets: Turborepo, Nx, or Basic runner
- ๐ณ Automatic Dockerfile + Docker Compose generation
- ๐ Interactive wizard (or fully non-interactive via flags)
- ๐ Post-init extensibility: add services & plugins anytime
- ๐ฆ Shared package (
packages/shared) for cross-service JS utilities - ๐งช Vitest test setup for the CLI itself
- ๐ Colorized dev logs & health probing for Node/frontend services
- ๐ Plugin skeleton generation (
create-polyglot add plugin <name>) - ๐ Single source of truth:
polyglot.json - โ Safe guards: port collision checks, reserved name checks, graceful fallbacks
- ๐ Friendly chalk-based CLI output with clear status symbols
Quick Start
Scaffold a workspace named my-org with multiple services:
npx create-polyglot init my-org -s node,python,go,java,frontend --git --yesThen run everything (Node + frontend locally):
create-polyglot devOr via Docker Compose:
create-polyglot dev --dockerAdd a new service later:
create-polyglot add service payments --type node --port 4100Installation
Global (recommended for repeated use):
npm install -g create-polyglotLocal dev / contributing:
npm install
npm link # or: pnpm link --global / yarn link / bun linkUsage Examples
Interactive wizard (prompts for missing info):
create-polyglot init my-orgNon-interactive with explicit services & git init:
create-polyglot init my-org -s node,python,go --git --yesAdd plugin skeleton:
create-polyglot add plugin postgresStart dev with Docker:
create-polyglot dev --dockerCommands
| Command | Description |
|---|---|
create-polyglot init <name> |
Scaffold a new workspace (root invocation without init is deprecated). |
create-polyglot add service <name> |
Add a service after init (--type, --port, --yes). |
create-polyglot add plugin <name> |
Create plugin skeleton under plugins/<name>. |
create-polyglot dev [--docker] |
Run Node & frontend services locally or all via compose. |
Init Options
| Flag | Description |
|---|---|
-s, --services <list> |
Comma separated services: node,python,go,java,frontend |
--preset <name> |
turborepo, nx, or basic (default auto -> asks) |
--git |
Initialize git repo & initial commit |
--no-install |
Skip dependency installation step |
--package-manager <pm> |
One of `npm |
--frontend-generator |
Use create-next-app (falls back to template on failure) |
--force |
Overwrite existing target directory if it exists |
--yes |
Accept defaults & suppress interactive prompts |
If you omit flags, the wizard will prompt interactively (similar to create-next-app).
Generated Structure
my-org/
services/
node/ # Express + dev script
python/ # FastAPI + uvicorn
go/ # Go net/http service
java/ # Spring Boot (Maven)
frontend/ # Next.js (template or create-next-app output)
gateway/
infra/
packages/
shared/
plugins/ # created when adding plugins
compose.yaml
polyglot.json # persisted configuration
package.json
turbo.json / nx.json (if preset chosen)
scripts/
dev-basic.cjsPresets
- Turborepo: Generates
turbo.json, sets rootdev&buildscripts for pipeline caching. - Nx: Generates
nx.jsonand adjusts scripts accordingly. - Basic: Minimal setup +
scripts/dev-basic.cjsfor simple concurrency.
Development Workflow
- Scaffold with
init. - (Optional) Add more services or plugins.
- Run
create-polyglot dev(local) orcreate-polyglot dev --docker. - Edit services under
services/<name>. - Extend infra / databases inside
compose.yaml.
Basic Dev Runner
When no preset is chosen, npm run dev uses scripts/dev-basic.cjs:
- Detects package manager (pnpm > yarn > bun > npm fallback)
- Scans
services/for Node services - Runs those with a
devscript - Prefixes log lines with service name
Non-Node services start manually or via compose:
cd services/python && uvicorn app.main:app --reloadpolyglot dev Command
create-polyglot dev reads polyglot.json, launches Node & frontend services that expose a dev script, assigns each a colorized log prefix, and probes http://localhost:<port>/health until ready (15s timeout). Pass --docker to instead delegate to docker compose up --build for all services.
If a service lacks a dev script it is skipped with no error. Non-Node services (python/go/java) are not auto-started yet unless you choose --docker.
Docker & Compose
For each selected service a Dockerfile is generated. A compose.yaml includes:
- Service definitions with build contexts
- Port mappings (adjust manually if conflicts)
- Shared network
app-net
You can extend compose with volumes, env vars, or database services after generation.
Frontend Generation
If --frontend-generator create-next-app is supplied, the tool shells out to npx create-next-app (respecting the chosen package manager for installs). If it fails, a fallback static template is used.
polyglot.json
Example:
{
"name": "my-org",
"preset": "none",
"packageManager": "npm",
"services": [
{ "name": "node", "type": "node", "port": 3001, "path": "services/node" }
]
}Used by add service to assert uniqueness and regenerate compose.yaml.
Plugins
create-polyglot add plugin <name> scaffolds plugins/<name>/index.js with a hook skeleton (afterInit). Future releases will execute hooks automatically during lifecycle events.
Shared Package
packages/shared shows cross-service Node utilities. Extend or add per-language shared modules.
Force Overwrite
If the target directory already exists, the CLI aborts unless --force is passed. Use with caution.
Git Initialization
Pass --git to automatically run git init, create an initial commit, and (if desired) you can add remotes afterwards.
Lint & Format
Generates ESLint + Prettier base configs at the root. Extend rules per service if needed.
Roadmap / Ideas
- Plugin hook execution pipeline
- Healthchecks and depends_on in
compose.yaml - Additional generators (Remix, Astro, SvelteKit)
- Automatic test harness & CI workflow template
- Language-specific shared libs (Python package, Go module)
- Hot reload integration aggregator
- Remove service / remove plugin commands
Contributing
Contributions welcome! See CONTRIBUTING.md for guidelines. Please run tests before submitting a PR:
npm testLicense
MIT
Documentation Site (VitePress)
Local docs development:
npm run docs:devBuild static site:
npm run docs:buildPreview production build:
npm run docs:previewDocs source lives in docs/ with sidebar-driven structure defined in docs/.vitepress/config.mjs.
Deployment
Docs are auto-deployed to GitHub Pages on pushes to main that touch docs/ via .github/workflows/docs.yml. The base path is set using VITEPRESS_BASE=/create-polyglot/.
Installation (local dev)
npm install
npm link # or: pnpm link --global / yarn link / bun linkThen run (non-interactive example):
create-polyglot init my-org -s node,python,go,java,frontend --git --yesInteractive (wizard prompts for any missing info):
create-polyglot init my-orgAdd a service later:
create-polyglot add service payments --type node --port 4100Add a plugin scaffold:
create-polyglot add plugin postgresRun all services in dev mode (Node & frontend locally; others manual unless using docker):
create-polyglot devRun everything via Docker Compose:
create-polyglot dev --dockerCommands
| Command | Description |
|---|---|
create-polyglot init <name> |
Scaffold a new workspace (root invocation without init is deprecated). |
create-polyglot add service <name> |
Add a service after init (--type, --port, --yes). |
create-polyglot add plugin <name> |
Create plugin skeleton under plugins/<name>. |
create-polyglot dev [--docker] |
Run Node & frontend services locally or all via compose. |
Init Options
| Flag | Description |
|---|---|
-s, --services <list> |
Comma separated services: node,python,go,java,frontend |
--preset <name> |
turborepo, nx, or basic (default auto -> asks) |
--git |
Initialize git repo & initial commit |
--no-install |
Skip dependency installation step |
--package-manager <pm> |
One of `npm |
--frontend-generator |
Use create-next-app (falls back to template on failure) |
--force |
Overwrite existing target directory if it exists |
If you omit flags, the wizard will prompt interactively (similar to create-next-app).
Generated Structure
my-org/
services/
node/ # Express + dev script
python/ # FastAPI + uvicorn
go/ # Go net/http service
java/ # Spring Boot (Maven)
frontend/ # Next.js (template or create-next-app output)
gateway/
infra/
packages/
shared/
plugins/ # created when adding plugins
compose.yaml
polyglot.json # persisted configuration
package.json
turbo.json / nx.json (if preset chosen)
scripts/
dev-basic.cjsPresets
- Turborepo: Generates
turbo.json, sets rootdev&buildscripts to leverage Turborepo pipelines. - Nx: Generates
nx.jsonand adjusts scripts accordingly. - Basic: Provides a minimal setup plus
scripts/dev-basic.cjsfor simple concurrency.
Basic Dev Runner
When no preset is chosen, npm run dev uses scripts/dev-basic.cjs:
- Detects package manager (pnpm > yarn > bun > npm fallback)
- Scans
services/for Node services - Runs those with a
devscript - Prefixes log lines with service name
Non-Node services start manually or via compose:
cd services/python && uvicorn app.main:app --reloadpolyglot dev Command
create-polyglot dev reads polyglot.json, launches Node & frontend services that expose a dev script, assigns each a colorized log prefix, and probes http://localhost:<port>/health until ready (15s timeout). Pass --docker to instead delegate to docker compose up --build for all services.
If a service lacks a dev script it is skipped with no error. Non-Node services (python/go/java) are not auto-started yet unless you choose --docker.
Docker & Compose
For each selected service a Dockerfile is generated. A compose.yaml includes:
- Service definitions with build contexts
- Port mappings (adjust manually if conflicts)
- Shared network
app-netYou can extend compose with volumes, env vars, or database services after generation.
Frontend Generation
If --frontend-generator create-next-app is supplied, the tool shells out to npx create-next-app (respecting the chosen package manager for installs). If it fails, a fallback static template is used.
polyglot.json
Example:
{
"name": "my-org",
"preset": "none",
"packageManager": "npm",
"services": [
{ "name": "node", "type": "node", "port": 3001, "path": "services/node" }
]
}Used by add service to assert uniqueness and regenerate compose.yaml.
Plugins
create-polyglot add plugin <name> scaffolds plugins/<name>/index.js with a hook skeleton (afterInit). Future releases will execute hooks automatically during lifecycle events.
Shared Package
packages/shared shows cross-service Node utilities. Extend or add per-language shared modules.
Force Overwrite
If the target directory already exists, the CLI aborts unless --force is passed. Use with caution.
Git Initialization
Pass --git to automatically run git init, create an initial commit, and (if desired) you can add remotes afterwards.
Lint & Format
Generates ESLint + Prettier base configs at the root. Extend rules per service if needed.
Roadmap / Ideas
- Plugin hook execution pipeline
- Healthchecks and depends_on in
compose.yaml - Additional generators (Remix, Astro, SvelteKit)
- Automatic test harness & CI workflow template
- Language-specific shared libs (Python package, Go module)
- Hot reload integration aggregator
- Remove service / remove plugin commands
License
MIT
Documentation Site (VitePress)
Local docs development:
npm run docs:devBuild static site:
npm run docs:buildPreview production build:
npm run docs:previewDocs source lives in docs/ with sidebar-driven structure defined in docs/.vitepress/config.mjs.
Deployment
Docs are auto-deployed to GitHub Pages on pushes to main that touch docs/ via .github/workflows/docs.yml. The base path is set using VITEPRESS_BASE=/create-polyglot/.