Feature Reference

Everything Furl
can do for your domain

A complete reference for every Furl feature — from route-based proxying to A/B testing and edge analytics. Each feature is explained with configuration options, examples, and best practices.

GET STARTED — INTRO

Product overview

What Furl controls, where it sits in the request path, and how to think about setup.

Furl runs as an edge routing layer in front of your domain. It decides whether to serve a file, apply a redirect, proxy to a route destination, or fall back to your primary origin.

You get one control plane for domains, routes, experiments, analytics, and team access, without shipping deploy-time proxy code for every change.

ℹ️
Execution order: Files → Redirects → Routes → Primary origin. Knowing this order helps you debug route behavior quickly.
GET STARTED — QUICK START

First route in minutes

The shortest path from empty account to live traffic.

01
Create a domain workspace and define your primary origin URL.
02
Add your hostname and set DNS. Preferred: CNAME/ALIAS @ → https://proxy.usefurl.com, CNAME www → https://proxy.usefurl.com. Fallback: subdomain hostname + apex URL forwarding.
03
Run hostname verification until status is active.
04
Create your first route (for example /blog).
05
Test a live URL on your domain and confirm origin response.
01 — ROUTES

Routes & Subfolder Proxying

Route any path on your domain to a different origin — invisibly, at the edge.

Routes let you serve content from a completely different platform or server under a path on your main domain. When a visitor goes to mycompany.com/blog, Furl intercepts that request and proxies it to your WordPress instance — the URL in the browser never changes.

This is useful for keeping your domain cohesive while using best-of-breed tools for each section: Webflow or Framer for marketing pages, WordPress for blogs, and Squarespace or Wix for brochure sites.

💡
SEO benefit: Subfolder paths inherit your domain's authority. Hosting your blog at yoursite.com/blog passes link equity from your main domain — unlike a subdomain (blog.yoursite.com) which is treated as a separate domain by search engines.

How to set up a route

01
Choose a path
Navigate to Routes and click Add route. Enter the path where you want the content served — for example /blog or /docs. Paths must start with a forward slash and cannot conflict with another active route on the same domain workspace.
02
Enter the destination URL
This is your origin — the server that actually hosts the content. Use the root URL of your platform (e.g. https://myblog.wordpress.com). Do not include the path you're mapping from. Furl strips the route path prefix and forwards the rest of the path to the origin.
03
Select the platform
Choosing the correct platform enables platform-specific optimizations. Furl adjusts link rewriting, cookie forwarding, and header handling per platform.
04
Configure options and save
Toggle link rewriting and query string preservation as needed (see below), then click Save. Changes propagate to the edge in under 1 second.

Configuration reference

Property
Type
Description
path
string
The URL path to match. Must start with /. Example: /blog
destinationUrl
string
The origin URL to proxy requests to. Must be a valid HTTPS URL.
platform
enum
Platform preset. Enables automatic optimizations. See platform guide below.
rewriteLinks
boolean
When true, Furl rewrites href and action attributes in HTML responses to include your route path prefix. Default: true.
preserveQueryString
boolean
Forward the original query string to the origin. Default: true.
status
enum
active | paused | draft. Paused routes fall through to the primary origin.
⚠️
Path priority: If you have overlapping paths (e.g. /blog and /blog/authors), Furl matches the most specific path first (longest match). Drag to reorder in the dashboard if you need manual control.
02 — REDIRECTS

Redirect Rules

301 and 302 redirects matched at the edge before any proxying occurs. Wildcard and regex patterns are available on Growth and above.

Redirects are evaluated before routes and are ideal for handling URL migrations, canonical enforcement, and legacy link management. They're matched at the edge in under a millisecond with zero origin round-trips.

Pattern syntax

Furl supports three matching modes:

Examples
# Exact path
/old-about       → /about

# Named parameter (captures :slug)
/blog/:slug      → /articles/:slug

# Wildcard (captures everything after /news/)
/news/*          → https://press.mycompany.com/*

# Regex (isRegex: true)
^/products/([0-9]+)$ → /shop/item/$1
Property
Type
Description
sourcePath
string
The incoming path to match. Supports :param and * wildcards, or a regex when isRegex is true.
destination
string
The target URL or path. Can be relative (/new-path) or absolute (https://other.com/page).
statusCode
integer
301 (permanent) or 302 (temporary). Use 301 for SEO-affecting migrations.
isRegex
boolean
Treat sourcePath as a regular expression. Capture groups can be referenced in destination with $1, $2, etc. Available on Growth and above.
status
enum
active | paused. Paused redirects are skipped during matching.
📥
Bulk import: Navigate to Redirects → Import CSV to upload a spreadsheet of redirects. Format: source,destination,status_code — one redirect per line. Up to 10,000 redirects per import. Errors are reported row-by-row. Download sample CSV. Wildcard and regex patterns are available on Growth and above.
03 — DOMAINS

Domains & DNS

Point any domain at Furl with two DNS records. SSL is provisioned automatically.

Furl operates as a reverse proxy in front of your domain. To use it, you point your domain's DNS to Furl's infrastructure. We handle SSL certificate provisioning via Cloudflare for SaaS — you don't need to touch your certificate configuration.

Required DNS records

CNAME/ALIAS@https://proxy.usefurl.comTTL: Auto
CNAMEwwwhttps://proxy.usefurl.comTTL: Auto
ℹ️
If your DNS provider does not support apex aliasing, connect a subdomain hostname in Furl (for example www.example.com) and configure apex URL forwarding to that hostname in your provider.
⚠️
Propagation time: DNS changes can take between a few minutes and 48 hours to propagate globally, depending on your domain registrar and TTL settings. Furl checks your DNS every 5 minutes and sends you a notification as soon as verification succeeds.

Domain types

Type
Status
Use case
primary
Supported
Your main domain — all routes and analytics are scoped to this.
redirect
Supported
Redirect an additional domain (e.g. the non-www version) to your primary.
alias
Supported
Serve the same content as primary from an additional domain.
wildcard
Coming soon
Wildcard hostnames are scheduled for Q2 2026 GA and are currently disabled.

SSL / TLS

SSL certificates are provisioned automatically by Cloudflare when your domain is verified. Certificates use DV (Domain Validated) TLS, enforce a minimum of TLS 1.2, and are renewed automatically. You don't need to manage certificates, upload anything, or renew manually.

04 — A/B TESTING

A/B Traffic Splitting

Split visitors between two origin URLs and measure which converts better — with statistical confidence built in.

Furl's A/B testing works at the proxy layer — no JavaScript, no flicker, no client-side redirects. Visitors are assigned to a variant before the first byte is served. Assignments are sticky: the same visitor always sees the same variant across sessions, using a cookie-based approach.

Traffic splitting

Traffic split — 60% Control / 40% Challenger
Variant A — Control (60%)Variant B — Challenger (40%)

Conversion tracking

Conversion type
Status
How it works
url_visit
Live
A conversion is recorded when a visitor in a variant visits a specific URL path (e.g. /thank-you).
click
soon
A conversion is recorded when a visitor clicks a specific element ID.
form_submit
soon
A conversion is recorded on a form submission event.
custom_event
soon
A conversion is recorded when your site fires a custom JavaScript event.

Statistical significance

Furl uses a two-proportion z-test to calculate statistical confidence. A minimum of 100 visitors per variant is required before confidence is calculated. When confidence reaches your configured threshold (default 95%), Furl will display the winning variant and — if Auto-Switch is enabled — automatically route 100% of traffic to the winner and close the test.

📊
Auto-Switch: Enable this to let Furl declare and deploy the winning variant automatically. When confidence ≥ 95%, the proxy routes all traffic to the winner and updates your KV route config in real-time — no manual step required.

Sticky sessions & the variant cookie

Cookie
furl_ab_{testId}=a; Path=/; Max-Age=2592000; SameSite=Lax; Secure

The cookie contains only the variant letter (a or b) and expires after 30 days. It carries no personal identifier and cannot track visitors across sites.

05 — ANALYTICS

Edge Analytics

Real-time, privacy-preserving traffic data — no JavaScript snippet, no cookies on your visitors.

Furl collects analytics directly at the edge, as every request passes through the proxy. There's nothing to install on your origin — no script tag, no pixel, no SDK. Analytics work immediately when your domain is live.

🔒
Privacy first: Visitor identification uses a daily-rotating hash of IP + User-Agent. The hash resets at midnight UTC — the same visitor is counted fresh each day and cannot be tracked across sessions. Full IP addresses are never stored.

What's collected per request

Analytics event schema
b1
domainIdYour domain workspace identifiere.g. "clx8..."
b2
hostnameRequest hostnamee.g. "mycompany.com"
b3
pathURL pathe.g. "/blog/my-post"
b4
routeMatched route rulee.g. "/blog"
b5
sourceTraffic sourcee.g. "google"
b6
mediumTraffic mediume.g. "organic"
b7
countryCountry code onlye.g. "US"
b8
deviceDevice type"desktop" | "mobile" | "tablet"
b9
visitorHashDaily rotating hash — not an IPResets at midnight UTC
b10
referrerReferrer hostname onlye.g. "twitter.com"

Available metrics

  • Visitors — unique daily visitor counts (by hash), with 7d / 30d / 90d windows
  • Pageviews — total request count per path and per route
  • Traffic by route — breakdown of visitors per route path (e.g. how many hit /blog vs /docs)
  • Top pages — most visited URLs on your domain
  • Traffic sources — UTM-parsed or referrer-parsed source/medium
  • Device split — desktop / mobile / tablet percentages
  • Geo distribution — country-level visitor map
  • Real-time visitors — active visitors in the last 5 minutes, updated live
06 — FILES

Static File Serving

Upload and serve any file from any path on your domain — without touching your origin server.

Sometimes you need to serve a specific file at a specific path — a site verification file, robots.txt, a .well-known challenge, or a sitemap — but your origin platform doesn't give you access to the root filesystem. Furl's file serving solves this.

Uploaded files are stored in Cloudflare R2 and served by the proxy worker before requests reach your route rules or primary origin. File paths take highest priority in the routing chain.

Common use cases

  • Google Search Console verification — serve /google-site-verification.html
  • Custom robots.txt — override or supplement your platform's robots.txt from /robots.txt
  • Apple app site association — serve /.well-known/apple-app-site-association for universal links
  • Favicon override — serve /favicon.ico without modifying your origin
  • Bing / Pinterest verification — any platform verification file at any root path
📁
How to upload: Go to Files in the sidebar, click Upload, select your file, and enter the path it should be served at. Files up to 10MB are supported. The MIME type is detected automatically but can be overridden. Changes are live immediately.
07 — SITEMAPS

Managed Sitemaps

Control sitemap output per domain workspace from the dashboard.

Furl supports two sitemap modes. Passthrough keeps your origin's sitemap behavior. Managed generates sitemap XML directly from your Furl configuration.

Plan access: Starter supports passthrough mode. Managed mode is available on Growth, Agency, and Enterprise plans.

Modes

Mode
Who can use it
Behavior
Passthrough
All plans
Furl does not generate XML. Requests to /sitemap.xml are proxied to the origin.
Managed
Growth+
Furl generates and serves sitemap XML from routes, files, and sitemap rules.

Generation rules

Rule
Details
Included by default
Active routes and indexable files (for example, HTML pages uploaded in Files).
Rule types
Include pattern, exclude pattern, manual URL, and external sitemap URL.
Pattern syntax
Glob matching by default (/blog/*) and regex with re: prefix.
Output paths
Root output at /sitemap.xml, with chunked files under /sitemaps/sitemap-N.xml when needed.
Regeneration
Run manually from the dashboard or automatically when route/file/domain changes are detected.
🧭
SEO workflow: once your hostname is active, submit https://yourdomain.com/sitemap.xml in Google Search Console. If managed mode creates a sitemap index, Search Console will follow the child sitemap files automatically.

FAQ

1
Do I need to upload sitemap.xml manually?

No. In managed mode, Furl generates and serves sitemap XML for you.

2
Can I keep my origin sitemap?

Yes. Keep mode on passthrough and Furl will proxy your origin sitemap response.

3
What if I also need external sitemaps?

Add external sitemap URLs in rules; they are included in the sitemap index output.

08 — TEAMS

Teams & Roles

Invite your team and assign the right level of access to each person.

Furl uses a team-based model. When you create an account, a team is created automatically and you are its Owner. You can invite colleagues by email — they receive an invitation link that expires after 7 days.

Role
Plan
Permissions
Owner
All plans
Full access including billing, team deletion, and all configuration. Cannot be removed.
Admin
Growth+
All configuration access. Cannot manage billing or delete the team.
Editor
Growth+
Create, update, and delete routes, domains, redirects, files, and A/B tests. Cannot manage team members or billing.
Viewer
Growth+
Read-only access to all configuration and analytics. Cannot make any changes.
09 — WHITE-LABEL

White-label Portal

Give collaborators a branded client portal while keeping your team controls in one place.

White-labeling is available on Agency plans and above. It lets you present your own brand name, logo, and portal hostname for invited collaborators while Furl runs the routing infrastructure behind the scenes.

Invited users land in a collaborator shell scoped to the workspaces and permissions you grant. They can work on assigned domains and routes without needing full account-level settings.

Branding settings

Field
Type
Description
brandingEnabled
boolean
Turns branded portal experience on or off for your team.
brandName
string
Display name used in the client portal header and invite screens.
brandLogoUrl
string
Public logo URL used in the portal navigation and auth surfaces.
brandPrimaryColor
string
Primary accent color used for call-to-action buttons and highlights.
brandPortalDomain
hostname
Custom portal hostname (for example portal.agency.com).

Portal DNS setup

01
Open Settings → White-label and enable branding.
02
Set your portal hostname (example: portal.agency.com).
03
Create a CNAME record for that hostname pointing to https://proxy.usefurl.com.
04
Wait for DNS verification + SSL issuance to pass, then send collaborator invites.

Local dev (/etc/hosts)

/etc/hosts
127.0.0.1 portal.agency.local
Test URL
http://portal.agency.local:5173/auth
  • Keep your web app running on port 5173.
  • Use the same hostname in White-label settings as your hosts entry.
  • Validate login and invite acceptance on the branded hostname.

Staging checklist

  • Set brandPortalDomain for a staging team.
  • Create a staging CNAME from the portal hostname to https://proxy.usefurl.com.
  • Confirm DNS verification is active and SSL status is active.
  • Open branded /auth and complete OTP + Google auth.
  • Accept an invite from the branded host and verify collaborator shell branding.
🧭
Portal scope: white-label changes branding and entry experience for collaborators. Account billing, plan controls, and owner operations remain in the core app shell for your team.
10 — API KEYS

API Keys

Manage Furl programmatically with secure, team-scoped API keys.

API keys let you manage your Furl configuration from scripts, CI/CD pipelines, or integrations. Keys are scoped to a team and carry the permissions of the team member who created them.

Key format

API Key format
furl_live_cjld2cjxh0000qzrmn831i7rn   # Live key (production)
furl_test_cjld2cyuq0000t3rmniod1foy   # Test key (sandbox)
🔐
Shown once: The full plaintext API key is displayed exactly once — at creation. Furl stores only a SHA-256 hash. If you lose the key, revoke it and create a new one. Never commit API keys to version control.

Making authenticated requests

cURL
curl https://furl-api-staging.hexeldigitalstudio.workers.dev/trpc/routes.list \
                -H "Authorization: Bearer furl_live_YOUR_KEY" \
                -H "Content-Type: application/json" \
                -d '{"domainId":"YOUR_DOMAIN_ID"}'
11 — WEBHOOKS

Webhooks

Receive real-time event notifications to any HTTP endpoint when things happen in Furl.

Webhooks let you build integrations on top of Furl events. When a domain is verified, an A/B test declares a winner, or a route changes, Furl sends an HMAC-signed POST request to your configured endpoint.

Available events

  • domain.verified — fired when a domain's DNS verification succeeds
  • domain.error — fired when DNS verification fails after a successful state
  • ab_test.winner_declared — fired when statistical significance is reached
  • ab_test.started — fired when a test transitions to running
  • route.created — fired when a new route rule is created
  • route.updated — fired when a route rule changes
  • route.deleted — fired when a route rule is removed
  • redirect.created — fired when a redirect rule is created
  • redirect.updated — fired when a redirect rule changes
  • redirect.deleted — fired when a redirect rule is removed

Verifying webhook signatures

Node.js verification
import crypto from 'crypto'

function verifyWebhook(payload, signature, timestamp, deliveryId, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${deliveryId}.${payload}`)
    .digest('hex')

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  )
}

// In your handler:
const sig = req.headers['x-furl-signature']
const timestamp = req.headers['x-furl-timestamp']
const deliveryId = req.headers['x-furl-delivery-id']
const valid = verifyWebhook(req.rawBody, sig, timestamp, deliveryId, WEBHOOK_SECRET)
🧪
Verification fixture: Use a deterministic signed payload to test your signature validator before going live. Download webhook signature fixture.
12 — PLATFORMS

Platform Guide

Platform-specific setup notes and recommended configurations.

Select the correct platform preset so rewrite behavior and header handling match your origin. Support is focused on the no-code platforms below, with optional advanced origins behind a flag.

Webflow
Use your Webflow staging URL. Enable link rewriting.
Framer
Use your Framer publish URL. Link rewriting optional.
WordPress
Use your WordPress site URL. Validate wp-admin/plugin redirects in staging.
Squarespace
Use your .squarespace.com URL. Enable link rewriting.
Wix
Use your Wix publish URL. Validate members/commerce flows in staging.
💡
Not listed? Custom-origin routing is currently gated in public beta while we harden no-code platform support.
13 — COMPATIBILITY

Compatibility Matrix

What works out of the box, what needs validation, and what requires upstream configuration.

Furl is strongest when routing no-code platform origins. Custom-origin support will return once the advanced flow is reintroduced.

Supported
Webflow, Framer, WordPress, Squarespace, Wix. Recommended defaults usually work without extra tuning.
Coming soon
Custom-origin and framework presets are temporarily disabled while no-code support is hardened.
⚠️
Known limitations: Third-party CORS allowlists and vendor-managed checkout/auth domains cannot be fully overridden at the proxy layer.