SEO for the AI era. Make your website visible, readable, and cited by every AI agent.
An open protocol that lets every website describe its content in a structured way machines can understand. One file. Universal discovery. Enforced attribution.
robots.txttells machines where not to go.flyweb.jsontells them what you have — and how to credit you.
Every website publishes /.well-known/flyweb.json:
{
"flyweb": "1.0",
"entity": "TechCrunch",
"type": "news",
"attribution": {
"required": true,
"license": "CC-BY-4.0",
"must_link": true
},
"resources": {
"articles": {
"path": "/.flyweb/articles",
"format": "jsonl",
"fields": ["title", "author", "date", "content"],
"access": "free",
"query": "?tag={tag}"
}
}
}AI agents check this file first — no scraping, no guessing. Your content, your credit, your terms.
| Package | Description | npm |
|---|---|---|
flyweb |
Core types, validation, CLI, and client SDK | |
next-flyweb |
Next.js integration | |
astro-flyweb |
Astro integration | |
sveltekit-flyweb |
SvelteKit integration | |
nuxt-flyweb |
Nuxt/Vue integration | |
express-flyweb |
Express/Node.js middleware |
npx flyweb check https://example.com # check any website
npx flyweb check ./flyweb.json # validate local file
npx flyweb discover https://example.com # discover & fetch structured data
npx flyweb init # generate starter configFor AI agents and developers consuming FlyWeb-enabled sites:
import { discover, fetchResource } from 'flyweb/client';
const site = await discover('https://example.com');
console.log(site.config.entity); // "TechCrunch"
const articles = await fetchResource(
'https://example.com',
site.config.resources.articles,
{ params: { tag: 'ai' }, limit: 10 }
);Next.js:
npm install next-flyweb// app/.well-known/flyweb.json/route.ts
import { createHandler } from 'next-flyweb';
export const GET = createHandler({
flyweb: '1.0',
entity: 'My Blog',
type: 'blog',
attribution: { required: true, license: 'CC-BY-4.0', must_link: true },
resources: {
posts: {
path: '/.flyweb/posts',
format: 'jsonl',
fields: ['title', 'author', 'date', 'content'],
access: 'free',
},
},
});SvelteKit:
npm install sveltekit-flyweb// src/routes/.well-known/flyweb.json/+server.ts
import { createHandler } from 'sveltekit-flyweb';
export const GET = createHandler({
flyweb: '1.0',
entity: 'My Blog',
type: 'blog',
resources: { posts: { path: '/.flyweb/posts', format: 'jsonl', fields: ['title', 'content'] } },
});Express:
npm install express-flywebimport express from 'express';
import { flyweb } from 'express-flyweb';
const app = express();
app.use(flyweb({
flyweb: '1.0',
entity: 'My API',
type: 'api',
resources: { items: { path: '/.flyweb/items', format: 'json', fields: ['id', 'name'] } },
}));Astro / Nuxt / Any site:
npm install astro-flyweb # Astro
npm install nuxt-flyweb # Nuxt
npx flyweb init # Any site — generates flyweb.jsonAdd to your README to show your site supports FlyWeb:
[](https://flyweb.io)- Discovery —
/.well-known/flyweb.jsontells machines what data you have - Structure — Resources served as clean JSON/JSONL, not HTML
- Query — Standard URL params for filtering:
?tag=ai&limit=10
FlyWeb enforces attribution at the protocol level. Even on the free tier, AI agents must credit the source:
"attribution": {
"required": true,
"format": "Source: {entity} — {url}",
"license": "CC-BY-4.0",
"must_link": true
}You can set price to zero. You can never set attribution to zero.
Read the full protocol specification: SPEC.md
We've proposed native FlyWeb support in major frameworks:
MIT