Unofficial Golang Library for the Instantly.ai API (V2).
CI / CD Β Β
|
|
Β Β Β Β Quality Β Β
|
|
Security Β Β
|
|
Β Β Β Β Community Β Β
|
|
πΒ Installation
|
π§ͺΒ ExamplesΒ &Β Tests
|
πΒ Documentation
|
π€Β Contributing
|
π οΈΒ CodeΒ Standards
|
β‘Β Benchmarks
|
π€Β AIΒ Usage
|
βοΈΒ License
|
π₯Β Maintainers
|
go-instantly requires a supported release of Go.
go get github.com/mrz1836/go-instantlyThis library targets the Instantly.ai API V2 only. V2 is not backwards compatible with V1 and uses
its own credentials β a V1 key will not authenticate against V2, so
create a V2 API key in your workspace
settings and pass it to NewClient. Every request is then authenticated with an
Authorization: Bearer <key> header against https://api.instantly.ai.
The SDK is organized AWS-SDK-v2 style: a tiny root package holds the shared Client, and each API
resource lives in its own subpackage (email, campaign, account, β¦). Construct the client once and
hand it to a resource service. Importing a resource pulls in only that resource plus the root package
and the standard library β never testify or the other resources.
package main
import (
"context"
"log"
"github.com/mrz1836/go-instantly"
"github.com/mrz1836/go-instantly/email"
)
func main() {
client := instantly.NewClient("[API-KEY]")
emails := email.New(client)
err := emails.SendTest(context.Background(), email.SendTestRequest{
EAccount: "sender@example.com",
ToAddressEmailList: "recipient@example.com",
Subject: "Testing the sending account",
Body: email.Body{
HTML: "<p>Hello from go-instantly.</p>",
Text: "Hello from go-instantly.",
},
})
if err != nil {
log.Fatal(err)
}
}List endpoints take functional options, so only the filters you actually pass are sent:
page, err := emails.List(ctx,
email.WithLimit(50),
email.WithIsUnread(true),
email.WithMode(email.ModeFocused),
)Pagination is cursor based. List returns a single page, and ListIter walks every page for you as a
range-over-func iterator:
for message, err := range emails.ListIter(ctx, email.WithIsUnread(true)) {
if err != nil {
return err
}
log.Printf("%s: %s", message.ID, message.Subject)
}Some endpoints report a failure inside an otherwise successful HTTP 200 response. This library turns
those into real errors, so err != nil catches every failure regardless of which shape it arrived in:
var apiErr *instantly.APIError
if errors.As(err, &apiErr) && apiErr.Code == instantly.ErrCodeAccountAuthError {
// the sending account failed to authenticate
}View the generated documentation, or the Instantly.ai API reference for endpoint details, scopes, and per-endpoint rate limits.
Heads up!
go-instantlyis intentionally light on dependencies. The only external package it uses is the excellenttestifysuiteβand that's just for our tests. You can drop this library into your projects without dragging along extra baggage.
Supported API Coverage
Coverage is built one resource at a time against the Instantly V2 OpenAPI spec β 171 operations across 127 endpoints in 28 resource groups. Each resource is its own Go package (AWS-SDK-v2 style). 171 / 171 operations Β· 28 / 28 resources ship today (Email, Account, Account-Campaign Mappings, Campaign, Lead, Lead List, Lead Label, Campaign Subsequence, Email Verification, Inbox Placement Test, Inbox Placement Analytics, Inbox Placement Report, SuperSearch Enrichment, Webhook, Webhook Event, Workspace, Workspace Member, Workspace Group Member, Workspace Billing, Block List Entry, Custom Tag, Custom Tag Mapping, API Key, Audit Log, Background Job, CRM Actions, OAuth, DFY Email Account Order) β the SDK now covers the entire Instantly.ai V2 API.
- Email API β (
email/)-
POST /api/v2/emails/test- Send a test email (email.Service.SendTest) -
GET /api/v2/emails- List emails (email.Service.List/ListIter) -
GET /api/v2/emails/{id}- Get an email (email.Service.Get) -
PATCH /api/v2/emails/{id}- Patch an email (email.Service.Update) -
DELETE /api/v2/emails/{id}- Delete an email (email.Service.Delete) -
POST /api/v2/emails/reply- Reply to an email (email.Service.Reply) -
POST /api/v2/emails/forward- Forward an email (email.Service.Forward) -
GET /api/v2/emails/unread/count- Count unread emails (email.Service.CountUnread) -
POST /api/v2/emails/threads/{thread_id}/mark-as-read- Mark a thread as read (email.Service.MarkThreadAsRead)
-
- Account API β (
account/)-
POST /api/v2/accounts- Create account (account.Service.Create) -
GET /api/v2/accounts- List accounts (account.Service.List/ListIter) -
GET /api/v2/accounts/{email}- Get account (account.Service.Get) -
PATCH /api/v2/accounts/{email}- Patch account (account.Service.Update) -
DELETE /api/v2/accounts/{email}- Delete account (account.Service.Delete) -
POST /api/v2/accounts/{email}/pause- Pause an account (account.Service.Pause) -
POST /api/v2/accounts/pause- Pause multiple accounts (account.Service.PauseBulk) -
POST /api/v2/accounts/{email}/resume- Resume an account (account.Service.Resume) -
POST /api/v2/accounts/{email}/mark-fixed- Mark an account fixed (account.Service.MarkFixed) -
POST /api/v2/accounts/move- Move accounts between workspaces (account.Service.Move) -
POST /api/v2/accounts/warmup/enable- Enable warmup (account.Service.EnableWarmup) -
POST /api/v2/accounts/warmup/disable- Disable warmup (account.Service.DisableWarmup) -
POST /api/v2/accounts/warmup-analytics- Warmup analytics (account.Service.WarmupAnalytics) -
GET /api/v2/accounts/analytics/daily- Daily analytics (account.Service.DailyAnalytics) -
GET /api/v2/accounts/ctd/status- Custom tracking domain status (account.Service.CtdStatus) -
POST /api/v2/accounts/test/vitals- Test account vitals (account.Service.TestVitals)
-
- Account-Campaign Mappings β (
accountcampaign/)-
GET /api/v2/account-campaign-mappings/{email}- Campaigns for an account (accountcampaign.Service.List/ListIter)
-
- Campaign API β (
campaign/)-
POST /api/v2/campaigns- Create campaign (campaign.Service.Create) -
GET /api/v2/campaigns- List campaigns (campaign.Service.List/ListIter) -
GET /api/v2/campaigns/{id}- Get campaign (campaign.Service.Get) -
PATCH /api/v2/campaigns/{id}- Patch campaign (campaign.Service.Update) -
DELETE /api/v2/campaigns/{id}- Delete campaign (campaign.Service.Delete) -
POST /api/v2/campaigns/{id}/activate- Activate/resume (campaign.Service.Activate) -
POST /api/v2/campaigns/{id}/pause- Pause (campaign.Service.Pause) -
POST /api/v2/campaigns/{id}/duplicate- Duplicate (campaign.Service.Duplicate) -
POST /api/v2/campaigns/{id}/share- Share (campaign.Service.Share) -
POST /api/v2/campaigns/{id}/export- Export to JSON (campaign.Service.Export) -
POST /api/v2/campaigns/{id}/from-export- Create from export (campaign.Service.CreateFromExport) -
POST /api/v2/campaigns/{id}/variables- Add variables (campaign.Service.AddVariables) -
GET /api/v2/campaigns/{id}/sending-status- Sending status (campaign.Service.SendingStatus) -
GET /api/v2/campaigns/count-launched- Launched count (campaign.Service.CountLaunched) -
GET /api/v2/campaigns/search-by-contact- Search by contact (campaign.Service.SearchByContact) -
GET /api/v2/campaigns/analytics- Analytics (campaign.Service.Analytics) -
GET /api/v2/campaigns/analytics/overview- Analytics overview (campaign.Service.AnalyticsOverview) -
GET /api/v2/campaigns/analytics/daily- Daily analytics (campaign.Service.DailyAnalytics) -
GET /api/v2/campaigns/analytics/steps- Steps analytics (campaign.Service.StepsAnalytics)
-
- Lead API β (
lead/)-
POST /api/v2/leads- Create lead (lead.Service.Create) -
POST /api/v2/leads/list- List leads, POST-body filters + cursor (lead.Service.List/ListIter) -
GET /api/v2/leads/{id}- Get lead (lead.Service.Get) -
PATCH /api/v2/leads/{id}- Patch lead (lead.Service.Update) -
DELETE /api/v2/leads/{id}- Delete lead (lead.Service.Delete) -
DELETE /api/v2/leads- Bulk delete, body on DELETE (lead.Service.BulkDelete) -
POST /api/v2/leads/add- Bulk add (lead.Service.BulkAdd) -
POST /api/v2/leads/bulk-assign- Bulk assign (lead.Service.BulkAssign) -
POST /api/v2/leads/move- Move leads (lead.Service.Move) -
POST /api/v2/leads/merge- Merge leads (lead.Service.Merge) -
POST /api/v2/leads/update-interest-status- Update interest (lead.Service.UpdateInterestStatus) -
POST /api/v2/leads/subsequence/remove- Remove from subsequence (lead.Service.RemoveFromSubsequence) -
POST /api/v2/leads/subsequence/move- Move to subsequence (lead.Service.MoveToSubsequence)
-
- Lead List API β (
leadlist/)-
POST /api/v2/lead-lists- Create (leadlist.Service.Create) -
GET /api/v2/lead-lists- List (leadlist.Service.List/ListIter) -
GET /api/v2/lead-lists/{id}- Get (leadlist.Service.Get) -
PATCH /api/v2/lead-lists/{id}- Patch (leadlist.Service.Update) -
DELETE /api/v2/lead-lists/{id}- Delete (leadlist.Service.Delete) -
GET /api/v2/lead-lists/{id}/verification-stats- Verification stats (leadlist.Service.VerificationStats)
-
- Lead Label API β (
leadlabel/)-
POST /api/v2/lead-labels- Create (leadlabel.Service.Create) -
GET /api/v2/lead-labels- List (leadlabel.Service.List/ListIter) -
GET /api/v2/lead-labels/{id}- Get (leadlabel.Service.Get) -
PATCH /api/v2/lead-labels/{id}- Patch (leadlabel.Service.Update) -
DELETE /api/v2/lead-labels/{id}- Delete (leadlabel.Service.Delete) -
POST /api/v2/lead-labels/ai-reply-label- Test AI reply label (leadlabel.Service.TestAIReplyLabel)
-
- Campaign Subsequence API β (
subsequence/)-
POST /api/v2/subsequences- Create (subsequence.Service.Create) -
GET /api/v2/subsequences- List (subsequence.Service.List/ListIter) -
GET /api/v2/subsequences/{id}- Get (subsequence.Service.Get) -
PATCH /api/v2/subsequences/{id}- Patch (subsequence.Service.Update) -
DELETE /api/v2/subsequences/{id}- Delete (subsequence.Service.Delete) -
POST /api/v2/subsequences/{id}/duplicate- Duplicate (subsequence.Service.Duplicate) -
POST /api/v2/subsequences/{id}/pause- Pause (subsequence.Service.Pause) -
POST /api/v2/subsequences/{id}/resume- Resume (subsequence.Service.Resume) -
GET /api/v2/subsequences/{id}/sending-status- Sending status (subsequence.Service.SendingStatus)
-
- Email Verification API β (
emailverification/)-
POST /api/v2/email-verification- Create verification (emailverification.Service.Create) -
GET /api/v2/email-verification/{email}- Check verification (emailverification.Service.Check)
-
- Inbox Placement Test API β (
inboxtest/)-
POST /api/v2/inbox-placement-tests- Create test (inboxtest.Service.Create) -
GET /api/v2/inbox-placement-tests- List tests (inboxtest.Service.List/ListIter) -
GET /api/v2/inbox-placement-tests/{id}- Get test (inboxtest.Service.Get) -
PATCH /api/v2/inbox-placement-tests/{id}- Patch test (inboxtest.Service.Update) -
DELETE /api/v2/inbox-placement-tests/{id}- Delete test (inboxtest.Service.Delete) -
GET /api/v2/inbox-placement-tests/email-service-provider-options- ESP options (inboxtest.Service.ESPOptions)
-
- Inbox Placement Analytics API β (
inboxanalytics/)-
GET /api/v2/inbox-placement-analytics- List analytics (inboxanalytics.Service.List/ListIter) -
GET /api/v2/inbox-placement-analytics/{id}- Get analytics (inboxanalytics.Service.Get) -
POST /api/v2/inbox-placement-analytics/stats-by-test-id- Stats by test id (inboxanalytics.Service.StatsByTestID) -
POST /api/v2/inbox-placement-analytics/deliverability-insights- Deliverability insights (inboxanalytics.Service.DeliverabilityInsights) -
POST /api/v2/inbox-placement-analytics/stats-by-date- Stats by date (inboxanalytics.Service.StatsByDate)
-
- Inbox Placement Report API β (
inboxreport/)-
GET /api/v2/inbox-placement-reports- List reports (inboxreport.Service.List/ListIter) -
GET /api/v2/inbox-placement-reports/{id}- Get report (inboxreport.Service.Get)
-
- SuperSearch Enrichment API β (
supersearch/)-
POST /api/v2/supersearch-enrichment/- Create enrichment (supersearch.Service.Create) -
GET /api/v2/supersearch-enrichment/{resource_id}- Get enrichment for resource (supersearch.Service.Get) -
PATCH /api/v2/supersearch-enrichment/{resource_id}/settings- Update settings (supersearch.Service.UpdateSettings) -
POST /api/v2/supersearch-enrichment/run- Run enrichment (supersearch.Service.Run) -
POST /api/v2/supersearch-enrichment/ai- Create AI enrichment (supersearch.Service.CreateAI) -
GET /api/v2/supersearch-enrichment/ai/{resource_id}/in-progress- In-progress AI jobs (supersearch.Service.AIInProgress) -
POST /api/v2/supersearch-enrichment/count-leads-from-supersearch- Count leads (supersearch.Service.CountLeads) -
POST /api/v2/supersearch-enrichment/preview-leads-from-supersearch- Preview leads (supersearch.Service.PreviewLeads) -
POST /api/v2/supersearch-enrichment/enrich-leads-from-supersearch- Enrich leads (supersearch.Service.EnrichLeads) -
POST /api/v2/supersearch-enrichment/signal-keywords-facet- Facet signal keywords (supersearch.Service.SignalKeywords) -
GET /api/v2/supersearch-enrichment/history/{resource_id}- Enrichment history (supersearch.Service.History)
-
- Webhook API β (
webhook/)-
POST /api/v2/webhooks- Create webhook (webhook.Service.Create) -
GET /api/v2/webhooks- List webhooks (webhook.Service.List/ListIter) -
GET /api/v2/webhooks/{id}- Get webhook (webhook.Service.Get) -
PATCH /api/v2/webhooks/{id}- Patch webhook (webhook.Service.Update) -
DELETE /api/v2/webhooks/{id}- Delete webhook (webhook.Service.Delete) -
GET /api/v2/webhooks/event-types- List event types (webhook.Service.EventTypes) -
POST /api/v2/webhooks/{id}/test- Send a test delivery (webhook.Service.Test) -
POST /api/v2/webhooks/{id}/resume- Resume a disabled webhook (webhook.Service.Resume)
-
- Webhook Event API β (
webhookevent/)-
GET /api/v2/webhook-events- List events (webhookevent.Service.List/ListIter) -
GET /api/v2/webhook-events/{id}- Get event (webhookevent.Service.Get) -
GET /api/v2/webhook-events/summary- Overview summary (webhookevent.Service.Summary) -
GET /api/v2/webhook-events/summary-by-date- Summary by date (webhookevent.Service.SummaryByDate)
-
- Workspace API β (
workspace/)-
GET /api/v2/workspaces/current- Get current workspace (workspace.Service.Get) -
PATCH /api/v2/workspaces/current- Patch workspace (workspace.Service.Update) -
POST /api/v2/workspaces/current/schedule-for-removal- Schedule removal (workspace.Service.ScheduleRemoval) -
DELETE /api/v2/workspaces/current/schedule-for-removal- Cancel removal (workspace.Service.CancelRemoval) -
POST /api/v2/workspaces/current/whitelabel-domain- Set agency domain (workspace.Service.SetAgencyDomain) -
GET /api/v2/workspaces/current/whitelabel-domain- Get domain info (workspace.Service.DomainInfo) -
DELETE /api/v2/workspaces/current/whitelabel-domain- Delete agency domain (workspace.Service.DeleteAgencyDomain) -
POST /api/v2/workspaces/current/change-owner- Change owner (workspace.Service.ChangeOwner)
-
- Workspace Member API β (
workspacemember/)-
POST /api/v2/workspace-members- Invite member (workspacemember.Service.Create) -
GET /api/v2/workspace-members- List members (workspacemember.Service.List/ListIter) -
GET /api/v2/workspace-members/{id}- Get member (workspacemember.Service.Get) -
PATCH /api/v2/workspace-members/{id}- Patch member (workspacemember.Service.Update) -
DELETE /api/v2/workspace-members/{id}- Remove member (workspacemember.Service.Delete)
-
- Workspace Group Member API β (
workspacegroup/)-
POST /api/v2/workspace-group-members- Invite sub workspace (workspacegroup.Service.Create) -
GET /api/v2/workspace-group-members- List group members (workspacegroup.Service.List/ListIter) -
GET /api/v2/workspace-group-members/{id}- Get group member (workspacegroup.Service.Get) -
DELETE /api/v2/workspace-group-members/{id}- Remove group member (workspacegroup.Service.Delete) -
GET /api/v2/workspace-group-members/admin- Get admin workspace (workspacegroup.Service.Admin)
-
- Workspace Billing API β (
workspacebilling/)-
GET /api/v2/workspace-billing/plan-details- Plan details (workspacebilling.Service.PlanDetails) -
GET /api/v2/workspace-billing/subscription-details- Subscription details (workspacebilling.Service.SubscriptionDetails)
-
- Block List Entry API β (
blocklist/)-
POST /api/v2/block-lists-entries- Create entry (blocklist.Service.Create) -
GET /api/v2/block-lists-entries- List entries (blocklist.Service.List/ListIter) -
DELETE /api/v2/block-lists-entries- Delete all entries (blocklist.Service.DeleteAll) -
GET /api/v2/block-lists-entries/{id}- Get entry (blocklist.Service.Get) -
PATCH /api/v2/block-lists-entries/{id}- Patch entry (blocklist.Service.Update) -
DELETE /api/v2/block-lists-entries/{id}- Delete entry (blocklist.Service.Delete) -
POST /api/v2/block-lists-entries/bulk-create- Bulk create (blocklist.Service.BulkCreate) -
POST /api/v2/block-lists-entries/bulk-delete- Bulk delete (blocklist.Service.BulkDelete) -
GET /api/v2/block-lists-entries/download- Download CSV, raw bytes (blocklist.Service.Download)
-
- Custom Tag API β (
customtag/)-
POST /api/v2/custom-tags- Create tag (customtag.Service.Create) -
GET /api/v2/custom-tags- List tags (customtag.Service.List/ListIter) -
GET /api/v2/custom-tags/{id}- Get tag (customtag.Service.Get) -
PATCH /api/v2/custom-tags/{id}- Patch tag (customtag.Service.Update) -
DELETE /api/v2/custom-tags/{id}- Delete tag (customtag.Service.Delete) -
POST /api/v2/custom-tags/toggle-resource- Assign/unassign tags (customtag.Service.Toggle)
-
- Custom Tag Mapping API β (
customtagmapping/)-
GET /api/v2/custom-tag-mappings- List mappings (customtagmapping.Service.List/ListIter)
-
- API Key API β (
apikey/)-
POST /api/v2/api-keys- Create API key (apikey.Service.Create) -
GET /api/v2/api-keys- List API keys (apikey.Service.List/ListIter) -
DELETE /api/v2/api-keys/{id}- Delete API key (apikey.Service.Delete)
-
- Audit Log API β (
auditlog/)-
GET /api/v2/audit-logs- List audit logs (auditlog.Service.List/ListIter)
-
- Background Job API β (
backgroundjob/)-
GET /api/v2/background-jobs- List background jobs (backgroundjob.Service.List/ListIter) -
GET /api/v2/background-jobs/{id}- Get a background job (backgroundjob.Service.Get)
-
- CRM Actions API β (
crm/)-
GET /api/v2/crm-actions/phone-numbers- List phone numbers (crm.Service.ListPhoneNumbers) -
DELETE /api/v2/crm-actions/phone-numbers/{id}- Delete a phone number (crm.Service.DeletePhoneNumber)
-
- OAuth API β (
oauth/)-
POST /api/v2/oauth/google/init- Start a Google OAuth session (oauth.Service.InitGoogle) -
POST /api/v2/oauth/microsoft/init- Start a Microsoft OAuth session (oauth.Service.InitMicrosoft) -
GET /api/v2/oauth/session/status/{sessionId}- Poll session status (oauth.Service.SessionStatus)
-
- DFY Email Account Order API β (
dfy/)-
POST /api/v2/dfy-email-account-orders- Place (or simulate) an order (dfy.Service.Create) -
GET /api/v2/dfy-email-account-orders- List orders (dfy.Service.List/ListIter) -
GET /api/v2/dfy-email-account-orders/accounts- List ordered accounts (dfy.Service.ListAccounts/ListAccountsIter) -
POST /api/v2/dfy-email-account-orders/accounts/cancel- Cancel accounts (dfy.Service.CancelAccounts) -
POST /api/v2/dfy-email-account-orders/domains/similar- Generate similar domains (dfy.Service.GenerateSimilarDomains) -
POST /api/v2/dfy-email-account-orders/domains/check- Check domain availability (dfy.Service.CheckDomains) -
POST /api/v2/dfy-email-account-orders/domains/pre-warmed-up-list- List pre-warmed-up domains (dfy.Service.PreWarmedUpDomains)
-
Every V2 resource now ships β there is no remaining planned coverage.
Notes on the counts. The Analytics area (7 operations) is cross-cutting β 3 endpoints live under Account and 4 under Campaign, so they are counted within those resources rather than as a separate group. Three additional tags β CustomPromptTemplate, EmailTemplate, and SalesFlow β are declared in the V2 API but currently expose no public endpoints.
Adding a resource? Follow the durable recipe in
docs/adding-a-resource.md β the email package is the reference
implementation.
Client Configuration (Functional Options)
The client is immutable after construction: configure it once with functional options. This is safer than mutating shared state and is the idiomatic Go pattern. Available options:
| Option | Purpose |
|---|---|
WithHTTPClient(*http.Client) |
Custom transport, proxy, or timeout |
WithBaseURL(string) |
Point at a test server or gateway |
WithUserAgent(string) |
Set the User-Agent header |
WithHTTPHeader(key, value) |
Add an extra header to every request |
package main
import (
"net/http"
"time"
"github.com/mrz1836/go-instantly"
)
// ....
client := instantly.NewClient("[API-KEY]",
instantly.WithHTTPClient(&http.Client{Timeout: 30 * time.Second}),
instantly.WithUserAgent("my-app/1.0"),
)
// ...Need an endpoint the typed resource packages do not wrap yet? The low-level plumbing is exported as an
escape hatch: client.Get, client.Post, client.Patch, client.Put, client.Delete, client.Do,
and client.DoRaw (raw bytes, for CSV and other non-JSON responses).
Development Setup (Getting Started)
Install MAGE-X build tool for development:
# Install MAGE-X for development and building
go install github.com/mrz1836/mage-x/cmd/magex@latest
magex update:installLibrary Deployment
This project uses goreleaser for streamlined binary and library deployment to GitHub. To get started, install it via:
brew install goreleaserThe release process is defined in the .goreleaser.yml configuration file.
Then create and push a new Git tag using:
magex version:bump bump=patch push=true branch=masterThis process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.
Build Commands
View all build commands
magex helpGitHub Workflows
All workflows are driven by modular configuration in .github/env/ β no YAML editing required.
Updating Dependencies
To update all dependencies (Go modules, linters, and related tools), run:
magex deps:updateThis command ensures all dependencies are brought up to date in a single step, including Go modules and any managed tools. It is the recommended way to keep your development environment and CI in sync with the latest versions.
All unit tests and fuzz tests run via GitHub Actions and use Go version 1.25.x. View the configuration file.
Run all tests (fast):
magex testRun all tests with race detector (slower):
magex test:raceBrowse the runnable usage samples in examples/examples.go.
Note: the test suite runs entirely against an in-repo mock router. No test contacts the live Instantly.ai API, and the examples file is illustrative β it is compiled, never executed by CI.
Run the Go benchmarks:
magex benchA benchmark suite now covers the hot paths β query encoding and path building (Query.Encode,
BuildPath), the response-error probe (checkResponse), cursor iteration (Iterate), the reusable
list helpers (JoinPath, ApplyOptions), and a representative resource decode and round-trip
(CampaignDecode, CampaignGet). Run magex bench to measure them on your own hardware; numbers vary
by machine, so they are reproduced locally rather than pinned here.
Read more about this Go project's code standards.
Read the AI Usage & Assistant Guidelines for details on how AI is used in this project and how to interact with the AI assistants.
![]() |
|---|
| MrZ |
View the contributing guidelines and please follow the code of conduct.
All kinds of contributions are welcome π! The most basic way to show your support is to star π the project, or to raise issues π¬. You can also support this project by becoming a sponsor on GitHub π or by making a bitcoin donation to ensure this journey continues indefinitely! π
