PageSourceSearch

https://projen.io/assets/js/a96e4c38.51b6106a.js

js projen.io collected 2026-10-02 05:19:50 UTC 7,413 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([["8121"],{2674(e,n,t){t.r(n),t.d(n,{metadata:()=>r,default:()=>p,frontMatter:()=>s,contentTitle:()=>c,toc:()=>l,assets:()=>a});var r=JSON.parse('{"id":"introduction/index","title":"Introduction","description":"Welcome to the projen documentation! This guide will introduce you to projen and explain its purpose and benefits.","source":"@site/../docs/introduction/index.md","sourceDirName":"introduction","slug":"/introduction/","permalink":"/docs/introduction/","draft":false,"unlisted":false,"editUrl":"https://github.com/projen/projen/tree/main/docusaurus/../docs/introduction/index.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"docsSidebar","next":{"title":"Getting Started","permalink":"/docs/introduction/getting-started"}}'),i=t(4848),o=t(8453);let s={sidebar_position:1},c="Introduction",a={},l=[{value:"You will learn",id:"you-will-learn",level:2},{value:"What is projen?",id:"what-is-projen",level:2},{value:"What kind of projects can be created with projen?",id:"what-kind-of-projects-can-be-created-with-projen",level:2},{value:"AWS CDK",id:"aws-cdk",level:3},{value:"cdk8s",id:"cdk8s",level:3},{value:"CDK Terrain (CDKTN)",id:"cdk-terrain-cdktn",level:3},{value:"Java",id:"java",level:3},{value:"Node.js & TypeScript",id:"nodejs--typescript",level:3},{value:"Python",id:"python",level:3},{value:"Web",id:"web",level:3},{value:"Other",id:"other",level:3}];function d(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,i.jsx)(n.p,{children:"Welcome to the projen documentation! This guide will introduce you to projen and explain its purpose and benefits."}),"\n",(0,i.jsx)(n.h2,{id:"you-will-learn",children:"You will learn"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The purpose of projen"}),"\n",(0,i.jsx)(n.li,{children:"Types of projects you can create with projen"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"what-is-projen",children:"What is projen?"}),"\n",(0,i.jsxs)(n.p,{children:["Projen lets you define and manage complex project configurations through code, generating configuration files from\nwell-typed definitions in any ",(0,i.jsx)(n.a,{href:"https://github.com/aws/jsii",children:"jsii"}),"-compatible language. For example, you can use TypeScript to define a projen\nproject and synthesize files like ",(0,i.jsx)(n.code,{children:"package.json"}),", ",(0,i.jsx)(n.code,{children:"tsconfig.json"}),", ",(0,i.jsx)(n.code,{children:".gitignore"}),", and GitHub workflow files. Projen\nsupports TypeScript, Python, Java, and Golang."]}),"\n",(0,i.jsx)(n.p,{children:"Whether you're a solo developer or part of a large team, projen helps you manage project configurations seamlessly. As\nyour project grows, you can easily add new configuration files and workflows."}),"\n",(0,i.jsx)(n.p,{children:"Unlike traditional scaffolding tools or template generators, projen enforces changes through strongly-typed code. The\ngenerated files are never manually edited; instead, you update your code and apply changes by running the projen CLI."}),"\n",(0,i.jsx)(n.p,{children:"Projen ensures consistency across multiple repositories by allowing you to define custom project types. This enables\norganizations to create and maintain uniform project templates across a large number of codebases."}),"\n",(0,i.jsxs)(n.p,{children:["Learn more from the talk, ",(0,i.jsx)(n.a,{href:"https://youtu.be/SOWMPzXtTCw",children:"CDK Day 2020 - Projen... a CDK for Project Generation/Configuration"}),"\nby projen's creator."]}),"\n",(0,i.jsx)(n.h2,{id:"what-kind-of-projects-can-be-created-with-projen",children:"What kind of projects can be created with projen?"}),"\n",(0,i.jsx)(n.p,{children:"Projen offers various project types, including:"}),"\n",(0,i.jsx)(n.h3,{id:"aws-cdk",children:"AWS CDK"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"awscdk-app-java - AWS CDK app in Java."}),"\n",(0,i.jsx)(n.li,{children:"awscdk-app-py - AWS CDK app in Python."}),"\n",(0,i.jsx)(n.li,{children:"awscdk-app-ts - AWS CDK app in TypeScript."}),"\n",(0,i.jsx)(n.li,{children:"awscdk-construct - AWS CDK construct library project."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"cdk8s",children:"cdk8s"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"cdk8s-app-py - CDK8s app in Python."}),"\n",(0,i.jsx)(n.li,{children:"cdk8s-app-ts - CDK8s app in TypeScript."}),"\n",(0,i.jsx)(n.li,{children:"cdk8s-construct - CDK8s construct library project."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"cdk-terrain-cdktn",children:"CDK Terrain (CDKTN)"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"cdktn-construct - CDKTN construct library project."}),"\n",(0,i.jsx)(n.li,{children:"cdktf-construct - CDKTF construct library project (archived by HashiCorp, use cdktn-construct)."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": CDKTF has been archived by HashiCorp. ",(0,i.jsx)(n.a,{href:"https://cdktn.io/",children:"CDK Terrain (CDKTN)"})," is a community-driven fork that continues active development."]}),"\n",(0,i.jsx)(n.h3,{id:"java",children:"Java"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"java - Java project."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"nodejs--typescript",children:"Node.js & TypeScript"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"node - Node.js project."}),"\n",(0,i.jsx)(n.li,{children:"typescript - TypeScript project."}),"\n",(0,i.jsx)(n.li,{children:"typescript-app - TypeScript app."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"python",children:"Python"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"python - Python project."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"web",children:"Web"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"nextjs - Next.js project using JavaScript."}),"\n",(0,i.jsx)(n.li,{children:"nextjs-ts - Next.js project using TypeScript."}),"\n",(0,i.jsx)(n.li,{children:"react - React project using JavaScript."}),"\n",(0,i.jsx)(n.li,{children:"react-ts - React project using TypeScript."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"other",children:"Other"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"jsii - Multi-language jsii library project."}),"\n",(0,i.jsx)(n.li,{children:"project - Base project."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Projen aims to help teams manage projects efficie
1ntly. You can extend the starter projects listed above to create\ncustom project types tailored to your organization. See ",(0,i.jsx)(n.a,{href:"/docs/concepts/projects/building-your-own",children:"Building your own project type"})," for more information."]})]})}function p(e={}){let{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453(e,n,t){t.d(n,{R:()=>s,x:()=>c});var r=t(6540);let i={},o=r.createContext(i);function s(e){let n=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.