← All posts

Creating a Function vs Publishing to the Registry

2026-07-04 · Tutorials & How-To Guides

New to FunctionFly? Confused about whether to "create a function" or "publish to the registry"? You're not alone. This guide explains exactly what each action does—and when to use which.

The Short Answer

When you create a function, you're building a private backend endpoint within your own workspace. When you publish to the registry, you're sharing a function with the broader FunctionFly community.

:::callout[tip] When in doubt: Start by creating a platform function. Only publish to the registry when you're ready to share with the community. :::

Creating a Function (Platform API)

When you create a function, you're building a private backend endpoint within your own workspace. This is the standard flow for adding custom logic to your application.

What happens:

  • A new FunctionConfig record is created in your tenant namespace
  • The function starts in "draft" status and must be deployed to run
  • It counts against your bundle's function limit (e.g., Free tier = 3 functions)
  • Only you can see and execute it
  • No platform fee is charged

Typical workflow:

:::workflow

  1. POST /v1/functions — Create the function
  2. POST /v1/functions/deploy — Deploy it (uploads code, provisions runtime)
  3. POST /v1/functions/{id}/execute — Run it when needed [/workflow]

Use cases:

  • API endpoints for your SaaS application
  • Custom business logic (webhooks, data transforms, auth flows)
  • AI-powered features (embeddings, LLM calls, vector search)
  • Scheduled jobs and background workers

Publishing to the Registry

When you publish to the registry, you're sharing a function with the broader FunctionFly community. Think of it as publishing a package to npm or a template to a marketplace.

What happens:

  • A RegistryFunction record is created with a public profile
  • Source code/WASM is uploaded to artifact storage
  • A RegistryFunctionVersion entry is created for version tracking
  • The function becomes discoverable via search and browse
  • Users can remix it (create a personal copy)
  • Trust and verification badges may be applied (FXCERT, DRE scores)
  • Ratings and reviews are enabled
  • A platform fee applies ($2.99 for new functions, $0.99 per version update)

:::callout[warning] Platform fee applies: Publishing to the registry costs $2.99 for new functions and $0.99 per version update. :::

Version lifecycle:

Registry functions support full version management: :::lifecycle draft > published > deprecated > archived :::

  • Set latest and stable aliases
  • Rollback to previous versions
  • Track changelogs per version

Execution:

Published functions use the @{author}/{name} namespace pattern:

POST /v1/@functionfly/image-resizer?version=2.1.0

Use cases:

  • Open-source function templates for the community
  • Commercial functions you want to sell
  • Building a personal brand as a function author
  • Creating starter templates others can remix

Key Differences at a Glance

:::api-table | label | Platform | Registry | | Visibility | Private (tenant-scoped) | Public, private, or unlisted | | Namespace | Tenant ID | @{author}/{name} | | Bundle Quota | Yes (counts toward limit) | No (separate registry quota) | | Platform Fee | None | $2.99 (new) / $0.99 (version) | | Versioning | Single version per function | Full version lifecycle | | Discovery | Only by owner | Search, browse, categories | | Remix | No | Yes | | Trust/Verification | Not applicable | FXCERT, DRE scores | | Ratings/Reviews | No | Yes | [/api-table]

When to Use Which

:::decision [platform] Stick with creating a function if:

  • You're building internal backend logic
  • The function is tightly coupled to your application
  • You don't want others to see or use it
  • You're prototyping or testing [/platform] [registry] Publish to the registry if:
  • You want to share a reusable function with others
  • You're building a product that includes a marketplace component
  • You want to charge for your function code
  • You want the community to be able to remix and improve it [/registry] [/decision]

Under the Hood

The two systems are completely separate and map to different database tables and API endpoints:

:::api-table | label | Platform (Create) | Registry (Publish) | | API Endpoint | POST /v1/functions | POST /v1/registry/publish | | Handler | functions.HandleCreateFunction | registry.HandlePublish | | Storage | functions table | registry_functions + registry_function_versions | | Initial Status | "draft" | "published" | [/api-table]

Ready to build? Head to your dashboard to create your first function, or visit the registry to explore what the community has built.