ucp_dart_sdk 1.0.0
ucp_dart_sdk: ^1.0.0 copied to clipboard
Unofficial Dart library for the Universal Commerce Protocol (UCP).
UCP Dart SDK
Unofficial Dart library for the Universal Commerce Protocol (UCP).
Overview #
This repository contains the Dart SDK for the Universal Commerce Protocol (UCP). It provides Freezed models for UCP schemas, making it easy to build UCP-compliant applications in Dart and Flutter.
Installation #
Add this to your package's pubspec.yaml file:
dependencies:
ucp_dart_sdk:
git:
url: https://github.com/gurkanfikretgunak/ucp_dart_sdk.git
Or if published to pub.dev:
dependencies:
ucp_dart_sdk: ^1.0.0
Then run:
dart pub get
Development #
Prerequisites #
- Dart SDK >= 3.10.4
Code Generation #
This SDK uses freezed and json_serializable for code generation. After making changes to the models, run:
dart pub get
dart run build_runner build --delete-conflicting-outputs
Running Tests #
The SDK includes comprehensive test coverage for all models:
dart test
Tests cover:
- Model creation and validation
- JSON serialization/deserialization
- Extra fields handling
- Error handling and validation
- Complex nested structures
Project Structure #
The SDK follows the same structure as the Python SDK:
lib/
├── src/
│ ├── models/
│ │ ├── _internal.dart # Core UCP models
│ │ ├── discovery/
│ │ │ └── profile_schema.dart
│ │ ├── schemas/
│ │ │ ├── capability.dart
│ │ │ ├── ucp.dart
│ │ │ └── shopping/
│ │ │ ├── [shopping schemas]
│ │ │ └── types/
│ │ │ └── [56 type files]
│ │ ├── services/
│ │ │ ├── service_schema.dart
│ │ │ └── shopping/
│ │ │ ├── rest_openapi.dart
│ │ │ ├── mcp_openrpc.dart
│ │ │ └── embedded_openrpc.dart
│ │ └── handlers/
│ │ └── tokenization/
│ │ └── openapi.dart
│ └── ucp_dart_sdk_base.dart
└── ucp_dart_sdk.dart # Main export file
Usage #
Quick Start #
Run the comprehensive example to see the SDK in action:
dart run example/ucp_dart_sdk_example.dart
This example demonstrates a complete UCP REST API workflow including discovery profiles, checkout creation, payment handling, discounts, error handling, and order processing.
Basic Example #
import 'package:ucp_dart_sdk/ucp_dart_sdk.dart';
void main() {
// Create a buyer
final buyer = Buyer(
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
);
// Create a line item
final lineItem = LineItemCreateRequest(
item: ItemCreateRequest(id: 'product-123'),
quantity: 2,
);
// Create a checkout request
final checkout = CheckoutCreateRequest(
lineItems: [lineItem],
buyer: buyer,
currency: 'USD',
payment: PaymentCreateRequest(),
);
// Serialize to JSON
final json = checkout.toJson();
print(json);
}
Advanced Example #
For a complete end-to-end example demonstrating:
- Discovery profile parsing
- Checkout creation with payment handlers and instruments
- Fulfillment configuration
- Discount application
- Checkout updates
- Error handling with UCP messages
- Order processing
See example/ucp_dart_sdk_example.dart, which is based on the Universal Commerce Protocol REST samples.
Working with Discovery Profiles #
import 'package:ucp_dart_sdk/ucp_dart_sdk.dart';
void main() {
// Parse a discovery profile
final profileJson = {
'ucp': {
'version': {'root': '2024-01-15'},
'services': {
'root': {
'dev.ucp.shopping': {
'version': {'root': '2024-01-15'},
'spec': 'https://ucp.dev/specs/shopping',
'rest': {
'schema': 'https://example.com/openapi.json',
'endpoint': 'https://api.example.com',
},
},
},
},
'capabilities': [],
},
};
final profile = UcpDiscoveryProfile.fromJson(profileJson);
print('UCP Version: ${profile.ucp.version.root}');
}
Working with Orders #
import 'package:ucp_dart_sdk/ucp_dart_sdk.dart';
void main() {
// Create an order
final order = Order(
ucp: ResponseOrder(
version: Version('2024-01-15'),
capabilities: [],
),
id: 'order-123',
checkoutId: 'checkout-456',
permalinkUrl: 'https://example.com/orders/123',
lineItems: [
OrderLineItem(
id: 'line-item-1',
item: ItemResponse(
id: 'product-123',
title: 'Example Product',
price: 2999,
),
quantity: Quantity(total: 2, fulfilled: 0),
totals: [
TotalResponse(
type: 'subtotal',
amount: 5998,
),
],
status: 'processing',
),
],
fulfillment: OrderFulfillment(),
totals: [
TotalResponse(
type: 'total',
amount: 5998,
),
],
);
// Serialize to JSON
final json = order.toJson();
print(json);
}
Features #
- ✅ Complete UCP schema models - 100% coverage from Python SDK
- ✅ Type-safe models - Using Freezed for immutability and type safety
- ✅ JSON serialization/deserialization - Automatic code generation with
json_serializable - ✅ Comprehensive test coverage - 118+ tests covering all models and workflows
- ✅ Support for all UCP capabilities - Shopping, discovery, services, handlers
- ✅ Extra field support - Future-proof extensibility
- ✅ Pattern validation - Built-in validation (e.g., Version format, non-negative amounts)
- ✅ Union types - Sealed classes for variant types (Message, PaymentCredential, etc.)
- ✅ Production ready - Fully tested and error-free
Testing #
The SDK includes comprehensive test coverage organized by feature area:
- Core Models (
test/core/) - Version, Base, UcpCapability, Services - Discovery (
test/discovery/) - Discovery profiles, signing keys, payment handlers - Shopping (
test/shopping/) - Checkout, payment, fulfillment, discounts, orders, types
Run all tests:
dart test
Run specific test files:
dart test test/shopping/checkout_test.dart
Related Resources #
Contributing #
We welcome community contributions. See our Contribution Guide for details.
License #
MIT License - Copyright (c) 2026 MasterFabric [@masterfabric]
Author: Gurkan Fikret Gunak [@gurkanfikretgunak]