# Write Code ## The `index.ts` content Create a new `index.ts` file with your initial code: ```ts export interface GreeterProps { readonly greetee: string; } export class Greeter { private readonly greetee: string; public constructor(props: GreeterProps) { this.greetee = props.greetee; } public greet(): string { return `Hello, ${this.greetee}!` } } ``` ## Iterate Either run the `build` or `build:watch` script from the [Set Up](set-up.md) step in order to compile the project. The necessary `tsconfig.json` is automatically created so the **TypeScript** compiler produces the correct output. ## Generate Targets Once you are satisfied with the library, bindings in all supported languages can be generated by running `jsii-pacmak`, typically by using the `package` script from the [Set Up](set-up.md) step. Publishable artifacts will be generated and placed in per-language sub-directories of the `dist` folder: ```console $ tree dist dist ├── dotnet │ ├── Acme.ProjectName.1.0.0.nupkg │ └── Acme.ProjectName.1.0.0.snupkg ├── java │ └── com │ └── acme │ └── sample │ └── project-name │ ├── 1.0.0 │ │ ├── project-name-1.0.0-javadoc.jar │ │ ├── project-name-1.0.0-javadoc.jar.md5 │ │ ├── project-name-1.0.0-javadoc.jar.sha1 │ │ ├── project-name-1.0.0-sources.jar │ │ ├── project-name-1.0.0-sources.jar.md5 │ │ ├── project-name-1.0.0-sources.jar.sha1 │ │ ├── project-name-1.0.0.jar │ │ ├── project-name-1.0.0.jar.md5 │ │ ├── project-name-1.0.0.jar.sha1 │ │ ├── project-name-1.0.0.pom │ │ ├── project-name-1.0.0.pom.md5 │ │ └── project-name-1.0.0.pom.sha1 │ ├── maven-metadata.xml │ ├── maven-metadata.xml.md5 │ └── maven-metadata.xml.sha1 ├── js │ └── project-name@1.0.0.jsii.tgz └── python ├── project-name-1.0.0.tar.gz └── project_name-1.0.0-py3-none-any.whl 9 directories, 20 files ```