Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/eager-planets-jam.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@macalinao/clients-orca-whirlpools": minor
"@macalinao/create-coda": minor
---

Add create-coda package
8 changes: 8 additions & 0 deletions .changeset/eight-animals-win.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@macalinao/clients-orca-whirlpools": patch
"@macalinao/clients-kamino-lending": patch
"@macalinao/create-coda": patch
"coda-docs": patch
---

Docs
4 changes: 2 additions & 2 deletions apps/docs/content/docs/meta.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"title": "Documentation",
"title": "Coda Documentation",
"pages": [
"---Introduction---",
"index",
"why-coda",
"installation",
"quick-start",
"---Using Coda---",
"create-coda",
"configuration",
"generating-clients",
"generating-docs",
Expand Down
244 changes: 244 additions & 0 deletions apps/docs/content/docs/packages/create-coda.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
---
title: "@macalinao/create-coda"
description: Project scaffolding tool for Coda client projects
---

## Overview

`@macalinao/create-coda` is a project scaffolding tool that helps you bootstrap new TypeScript clients for Solana programs. It sets up a complete project structure with TypeScript, ESLint, and Coda pre-configured, allowing you to start generating clients immediately.

## Installation

The package is designed to be used with create commands from any package manager:

```bash
# Using npm
npm create @macalinao/create-coda@latest my-project

# Using bun
bun create @macalinao/create-coda my-project
```

## Usage

### Basic Usage

Create a new Coda client project:

```bash
# Using npm
npm create @macalinao/create-coda@latest my-client

# Using bun
bun create @macalinao/create-coda my-client
```

This will create a new directory called `my-client` with a complete project setup.

### Custom Directory Name

You can specify any name for your project:

```bash
# Using npm
npm create @macalinao/create-coda@latest my-awesome-dex
npm create @macalinao/create-coda@latest lending-protocol
npm create @macalinao/create-coda@latest nft-marketplace

# Using bun
bun create @macalinao/create-coda my-awesome-dex
bun create @macalinao/create-coda lending-protocol
bun create @macalinao/create-coda nft-marketplace
```

## What's Included

The scaffolded project includes:

### Project Structure

```
my-client/
├── idls/ # Anchor IDL files
│ └── example.json # Example IDL to demonstrate usage
├── src/
│ ├── generated/ # Generated client code (after codegen)
│ └── index.ts # Main entry point
├── coda.config.mjs # Coda configuration
├── tsconfig.json # TypeScript configuration
├── eslint.config.js # ESLint configuration
├── package.json # Dependencies and scripts
├── README.md # Project documentation
└── .gitignore # Git ignore patterns
```

### Pre-configured Dependencies

- **@macalinao/coda** - The Coda CLI for generating clients
- **@macalinao/eslint-config** - Consistent ESLint configuration
- **@macalinao/tsconfig** - Shared TypeScript configuration
- **@solana/kit** - Solana development kit
- **TypeScript** - For type-safe development
- **ESLint** - For code quality

### NPM Scripts

```json
{
"scripts": {
"build": "tsc",
"clean": "rm -fr dist/ tsconfig.tsbuildinfo",
"codegen": "rm -fr src/generated/ && coda generate",
"lint": "eslint . --cache"
}
}
```

### TypeScript Configuration

Extends `@macalinao/tsconfig` with:

- ES modules with `.js` extensions
- Strict type checking
- Modern ES2024 target
- Source maps and declarations
- Incremental compilation

### ESLint Configuration

Extends `@macalinao/eslint-config` with:

- TypeScript-specific rules
- Import organization
- Special handling for generated code
- Automatic formatting fixes

### Coda Configuration

Pre-configured `coda.config.mjs` with:

- Automatic IDL discovery from `./idls/*.json`
- Output to `./src/generated`
- Ready for custom visitors and PDAs

## Template Customization

The template is designed to be flexible:

### Single IDL Projects

Default configuration works out of the box:

```javascript
// coda.config.mjs
export default defineConfig({
// Automatically finds IDLs in ./idls/*.json
outputDir: "./src/generated",
});
```

### Multiple IDL Projects

Configure for multiple programs:

```javascript
// coda.config.mjs
export default defineConfig({
idlPath: "./idls/*.json", // Process all IDLs
outputDir: "./src/generated",
});
```

### Custom Visitors

Add Codama visitors for enhanced functionality:

```javascript
// coda.config.mjs
import { addPdasVisitor } from "codama";

export default defineConfig({
outputDir: "./src/generated",
visitors: [
addPdasVisitor({
// Custom PDA definitions
}),
],
});
```

## Development Workflow

After creating a project with create-coda:

### 1. Install Dependencies

```bash
cd my-client
bun install
```

### 2. Add Your IDL

Replace the example IDL with your program's IDL:

```bash
rm idls/example.json
cp path/to/your/target/idl/program.json idls/
```

### 3. Generate Client

```bash
bun run codegen
```

### 4. Build Project

```bash
bun run build
```

### 5. Use the Client

```typescript
import { createInitializeInstruction } from "./dist/index.js";

const ix = createInitializeInstruction({
// ... parameters
});
```

## Package Development

To work on the create-coda package itself:

### Building

```bash
cd packages/create-coda
bun run build
```

### Testing Locally

```bash
node ./dist/bin.js test-project
```

### Template Files

The template files are located in `packages/create-coda/template/` and are copied when creating new projects.

## Source Code

The create-coda package is part of the Coda monorepo:

- [GitHub Repository](https://github.com/macalinao/coda/tree/master/packages/create-coda)
- [NPM Package](https://www.npmjs.com/package/@macalinao/create-coda)

## Related Packages

- [**@macalinao/coda**](/docs/packages/coda) - The main Coda CLI
- [**@macalinao/codama-renderers-js-esm**](/docs/packages/codama-renderers-js-esm) - ESM renderer for Codama
- [**@macalinao/codama-instruction-accounts-dedupe-visitor**](/docs/packages/codama-instruction-accounts-dedupe-visitor) - Account deduplication visitor
60 changes: 54 additions & 6 deletions apps/docs/content/docs/packages/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,40 @@ description: Core packages that power Coda's client generation capabilities

Coda is built as a modular system of packages that work together to generate high-quality TypeScript clients from Solana IDLs. Each package serves a specific purpose in the generation pipeline.

## Core Package
## Core Packages

### [@macalinao/coda](/docs/packages/coda)

The main CLI tool for generating TypeScript clients from Anchor IDLs. Works out of the box with sensible defaults and extensible configuration.

### [@macalinao/create-coda](/docs/packages/create-coda)

Project scaffolding tool that bootstraps new Coda client projects with TypeScript, ESLint, and all configurations pre-set.

## Parsers

### [@macalinao/codama-nodes-from-anchor-x](/docs/packages/codama-nodes-from-anchor-x)

Creates Codama root nodes from multiple Anchor IDLs with enhanced support for various IDL versions.

## Visitors

### [@macalinao/codama-instruction-accounts-dedupe-visitor](/docs/packages/codama-instruction-accounts-dedupe-visitor)

Flattens nested account structures from Anchor IDLs while preserving relationships through naming conventions.

### [@macalinao/codama-rename-visitor](/docs/packages/codama-rename-visitor)

Renames accounts, instructions, and defined types in the Codama AST to avoid conflicts and customize naming.

## Renderers

### [@macalinao/codama-renderers-js-esm](/docs/packages/codama-renderers-js-esm)

ESM-native TypeScript renderer that generates modern JavaScript modules with proper `.js` extensions.

### [@macalinao/codama-renderers-markdown](/docs/packages/codama-renderers-markdown)

Generates comprehensive Markdown documentation from Codama AST nodes, perfect for API documentation.

## Package Architecture
Expand All @@ -44,18 +54,56 @@ Each package in the Coda ecosystem follows a consistent structure:

Each package can be installed individually based on your needs:

### Create a New Project (Recommended)

```bash
# Using npm
npm create @macalinao/create-coda@latest my-client

# Using bun
bun create @macalinao/create-coda my-client
```

### Install the Main CLI

```bash
# Install the main CLI
# Using npm
npm install -D @macalinao/coda

# Using bun
bun add -D @macalinao/coda
```

# Install parsers
### Install Parsers

```bash
# Using npm
npm install @macalinao/codama-nodes-from-anchor-x

# Using bun
bun add @macalinao/codama-nodes-from-anchor-x
```

### Install Visitors

# Install visitors
```bash
# Using npm
npm install @macalinao/codama-instruction-accounts-dedupe-visitor
npm install @macalinao/codama-rename-visitor

# Using bun
bun add @macalinao/codama-instruction-accounts-dedupe-visitor
bun add @macalinao/codama-rename-visitor
```

### Install Renderers

# Install renderers
```bash
# Using npm
npm install @macalinao/codama-renderers-js-esm
npm install @macalinao/codama-renderers-markdown

# Using bun
bun add @macalinao/codama-renderers-js-esm
bun add @macalinao/codama-renderers-markdown
```
Expand All @@ -73,4 +121,4 @@ bun test

# Fix linting issues
bun run lint:fix
```
```
3 changes: 2 additions & 1 deletion apps/docs/content/docs/packages/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
"title": "Packages",
"pages": [
"index",
"---Core Package---",
"---Core Packages---",
"coda",
"create-coda",
"---Parsers---",
"codama-nodes-from-anchor-x",
"---Visitors---",
Expand Down
Loading