Introducing Massimo
The Next Evolution of Type-Safe API Client Generation

Search for a command to run...
The Next Evolution of Type-Safe API Client Generation

As massimo means maximum, maybe you can use max as short command for the cli. BEST!
Just to be completely sure. I guess itโs compatible with Next.js (server side and browser side) with the native fetch approach. Is it? Is there any catch?
Yes, the native fetch approach is compatible 100% with Next.js. No catch, no dependencies.
Nitro is a server toolkit used by many JavaScript applications. You can use it on its own for APIs or full-stack servers, or combine it with Vite to get a familiar frontend workflow with a Nitro serve

All durable execution engines give the same versioning advice: pin your runs. Temporal pins runs to worker builds. Vercel's Workflow SDK pins each run to the deployment that started it. Azure Durable

Eve organizes AI agents in a simple way: use Markdown for instructions and skills, TypeScript for tools, and separate files for channels, schedules, and subagents. Behind this setup, Eve relies on the

Picture an online store launching a new product and sending out a mailing list campaign. Thousands of users click the same link at once. The product page, built with a Node.js app like Next.js, needs

How Platformatic ICC Outperforms AWS ECS Target Tracking and Step Scaling

Today marks a significant milestone in the evolution of type-safe API development. What began as @platformatic/client in our v0.19.0 release has grown into something much biggerโa production-proven, enterprise-grade solution now powering companies like Spendesk, who are not only using Massimo in production but actively contributing to its development.
We're thrilled to introduce Massimo (formerly @platformatic/client)โnot just a new name, but the next evolution of type-safe API client generation. This relaunch also marks Massimo's independence as standalone packages without the @platformatic scope.
The name is inspired by Massimo Troisi, the beloved Italian actor from the film "Il Postino" (The Postman). Just as the postman in the movie delivered messages and connected people, Massimo delivers API connections and bridges the gap between services, making communication between applications as effortless and poetic as Troisi's unforgettable performance.
Since its initial release, what started as a developer tool has evolved into an enterprise-grade solution. Massimo has been battle-tested in production environments, with companies like Spendesk relying on it to enhance their frontend and backend development efficiency. This real-world usage has driven continuous improvements, community contributions, and the robust feature set you see today.
Massimo is a powerful API SDK client and CLI tool for creating fully-typed clients for remote OpenAPI or GraphQL APIs. Here's everything you need to know about its comprehensive, production-proven feature set:
Massimo provides two complementary approaches to API client development:
1. Code Generator (massimo-cli)
2. Runtime Library (massimo)
The Key Connection: The generator doesn't just create standalone files - it's also the type-safety engine that powers the runtime library. When you use the runtime library, it uses the same code generation logic internally to ensure your API calls are fully typed, even when created dynamically.
This dual approach means you can choose the right strategy for your use case:
Both approaches use the same underlying type generation system, ensuring consistency and type safety across your entire application stack.
Type-Safe Development
Framework Integration
fetch APIThe massimo-cli provides extensive command-line functionality:
Client Generation Options
# Install CLI
npm install -g massimo-cli
# Generate OpenAPI client
massimo http://api.example.com/openapi.json --name myclient
# Generate GraphQL client
massimo http://api.example.com/graphql --name myclient --type graphql
# Frontend-compatible client
massimo http://api.example.com/openapi.json --frontend --language ts --name myclient
# Types only generation
massimo http://api.example.com/openapi.json --types-only --name myclient
Advanced CLI Options
--frontend - Generate browser-compatible clients using fetch--language js|ts - Choose JavaScript or TypeScript output--full-response - Return complete response objects instead of just body--full-request - Wrap parameters in body, headers, query structure--validate-response - Enable response validation against schema--optional-headers - Mark specific headers as optional--typescript - Generate TypeScript plugin files--with-credentials - Frontend client only: adds credentials: 'include' to fetch calls (learn more about credentials)The massimo core library offers programmatic API access:
OpenAPI Client Builder
import { buildOpenAPIClient } from "massimo";
const client = await buildOpenAPIClient({
url: 'https://api.example.com/openapi.json',
headers: { Authorization: 'Bearer token' },
validateResponse: true,
fullResponse: false,
throwOnError: true
});
GraphQL Client Builder
import { buildGraphQLClient } from "massimo";
const client = await buildGraphQLClient({
url: 'https://api.example.com/graphql',
headers: { Authorization: 'Bearer token' }
});
const result = await client.graphql({
query: 'mutation { createUser(input: { name: "John" }) { id } }',
variables: { name: "John" }
});
Dynamic Headers
getHeaders functionFastify Plugin Authentication
app.configureMyClient({
async getHeaders(req, reply) {
return {
Authorization: `Bearer ${req.user.token}`,
'X-User-ID': req.user.id
};
}
});
Security Options
Massimo generates two fundamentally different types of clients depending on your target environment:
Built on Undici for maximum performance and Node.js compatibility:
# Generate server-side client (default)
massimo http://api.example.com/openapi.json --name myclient
Key Features:
// Server-side client usage
import myClient from './myclient/myclient.js';
const client = await myClient({
url: 'https://api.example.com',
bodyTimeout: 30000,
headersTimeout: 10000,
dispatcher: customAgent // Custom Undici agent
});
// Works seamlessly in Fastify
app.get('/users', async (request) => {
return request.myclient.getUsers(); // Automatic telemetry propagation
});
Zero dependencies - uses native browser fetch():
# Generate frontend client
massimo http://api.example.com/openapi.json --frontend --name myclient
Key Features:
fetch() API// Frontend client - two usage patterns available
// Pattern 1: Named operations with global state
import { setBaseUrl, getMovies, setDefaultHeaders } from './api.js';
setBaseUrl('https://api.example.com');
setDefaultHeaders({ Authorization: 'Bearer token' });
const movies = await getMovies({}); // Uses global config
// Pattern 2: Factory approach (isolated instances)
import build from './api.js';
const client = build('https://api.example.com', {
headers: { Authorization: 'Bearer token' }
});
const movies = await client.getMovies({}); // Self-contained
Bundle Impact:
This architectural difference means you can use the same OpenAPI spec to generate both a high-performance server client for your backend services AND a lightweight, dependency-free client for your frontend applications!
Operation Mapping
Request/Response Customization
Telemetry & Monitoring
Error Handling Comprehensive error system with specific error codes:
PLT_MASSIMO_OPTIONS_URL_REQUIRED - Missing URL in client optionsPLT_MASSIMO_FORM_DATA_REQUIRED - FormData required for multipart requestsPLT_MASSIMO_MISSING_PARAMS_REQUIRED - Missing required path parametersPLT_MASSIMO_INVALID_RESPONSE_SCHEMA - Response validation failureProduction Usage Companies like Spendesk are using Massimo to power their production applications, demonstrating its reliability and enterprise readiness. The feedback and contributions from these production deployments have been instrumental in shaping Massimo's evolution.
Community Contributions Massimo benefits from active community involvement, with enterprise users contributing back improvements, bug fixes, and feature requests based on real-world usage patterns.
Package Names
@platformatic/client โ massimo@platformatic/client-cli โ massimo-cliCLI Command
npx @platformatic/client-cli โ npx massimo-cli or massimoImport Statements
// Before
import { buildOpenAPIClient } from '@platformatic/client';
import pltClient from '@platformatic/client/fastify-plugin';
// After
import { buildOpenAPIClient } from 'massimo';
import pltClient from 'massimo/fastify-plugin';
All existing APIs remain the same - this evolution maintains full backward compatibility!
Battle-Tested Features
Development Experience
Install Massimo and start generating typed API clients:
# Install CLI globally
npm install -g massimo-cli
# Generate your first client
massimo http://api.example.com/openapi.json --name myclient
# Or use the library directly
npm install massimo
The same powerful features you loved in @platformatic/client are now available as standalone Massimo packages, with continued development and new features coming soon!
Join our Discord community for support and to connect with other developers using Massimo!