trusted by engineering teams at
Stripe
Vercel
Linear
Notion
Figma
GitHub
Shopify
Twilio
Supabase
PlanetScale
Fly.io
Render
Stripe
Vercel
Linear
Notion
Figma
GitHub
Shopify
Twilio
Supabase
PlanetScale
Fly.io
Render
v2.4.0 — Now with multi-repo support

docs that write themselves.

Inhale a raw codebase. Exhale a clean, navigable documentation site — before the sprint review starts.

See the Docs for Our Docs
Terminal
docs.myapi.dev
my-api docs
Interactive — paste your own code

See it work on your code.

Paste any function below. DocForge parses intent, infers parameters, and generates structured reference docs in under a second.

your-code.tsTypeScript
123456789101112
12 lines · 290 chars
docs.preview / functions / getUser

Generated docs will appear here

Click "Generate Docs" to see DocForge in action

No credit card · No config files · 2-minute setup

Click any language to see a real before/after

Every language your team
actually ships in.

DocForge parses ASTs, not just comments. It generates docs even when your code has no JSDoc, no docstrings, no nothing.

Before — raw code
// No docs — just vibes
export async function chargeCard(
  customerId: string,
  amount: number,
  currency: string
) {
  const charge = await stripe.charges.create({
    amount,
    currency,
    customer: customerId,
  });
  return charge.id;
}
After — DocForge output
## chargeCard(customerId, amount, currency)

Creates a Stripe charge against an existing customer.

| Param | Type | Description |
|-------|------|-------------|
| customerId | string | Stripe customer ID (cus_...) |
| amount | number | Amount in smallest currency unit |
| currency | string | ISO 4217 currency code (e.g. "usd") |

**Returns:** `Promise<string>` — The Stripe charge ID

**Throws:** `StripeError` if customer not found or card declined
Before — raw code
def calculate_mrr(subscriptions):
    active = [s for s in subscriptions
              if s['status'] == 'active']
    return sum(s['amount'] for s in active) / 100
After — DocForge output
## calculate_mrr(subscriptions)

Calculates Monthly Recurring Revenue from a list of subscription objects.

**Parameters:**
- `subscriptions` (list[dict]): Subscription records with status and amount fields

**Returns:** `float` — Total MRR in dollars (divides cents by 100)

**Filters** only subscriptions with status == "active"
Before — raw code
func (r *UserRepo) FindByEmail(
    ctx context.Context, email string,
) (*User, error) {
    var u User
    err := r.db.QueryRowContext(ctx,
        "SELECT * FROM users WHERE email=$1",
        email,
    ).Scan(&u.ID, &u.Email, &u.Role)
    return &u, err
}
After — DocForge output
## (UserRepo) FindByEmail

Queries the database for a user matching the given email address.

**Receiver:** `*UserRepo`

**Parameters:**
- `ctx` (context.Context): Request context for cancellation
- `email` (string): Email address to look up

**Returns:** `(*User, error)` — User pointer or nil with error on miss
Before — raw code
pub fn parse_config(path: &Path)
    -> Result<Config, ConfigError>
{
    let contents = fs::read_to_string(path)?;
    let config: Config = toml::from_str(&contents)
        .map_err(ConfigError::Parse)?;
    Ok(config)
}
After — DocForge output
## parse_config(path)

Reads and deserializes a TOML configuration file from disk.

**Parameters:**
- `path` (&Path): Filesystem path to the .toml config file

**Returns:** `Result<Config, ConfigError>`
- Ok(Config) on successful parse
- Err(ConfigError::Io) on file read failure
- Err(ConfigError::Parse) on malformed TOML
Before — raw code
def send_welcome_email(user)
  UserMailer
    .with(user: user)
    .welcome_email
    .deliver_later
end
After — DocForge output
## send_welcome_email(user)

Enqueues a welcome email for asynchronous delivery via ActiveJob.

**Parameters:**
- `user` (User): ActiveRecord User instance to greet

**Side effects:** Queues a background job via `deliver_later`

**Mailer:** UserMailer#welcome_email
Also parsing:JavaKotlinSwiftC#PHPElixirScala
Hover any card to see the feature in action

Built for teams that
ship fast.

Every feature exists to close the gap between your code and your docs — permanently.

Version-aware diffs

DocForge tracks API changes across releases. Breaking changes surface as red diffs. Non-breaking additions stay green. Your changelog writes itself.

Full-text search

Every generated doc site ships with a search index. Type a function name, a param type, or a description fragment — results in <50ms.

One-command theming

Swap between 12 built-in themes or supply your brand tokens. Dark, light, high-contrast — all generated at build time, no runtime CSS.

GitHub sync

Push to main, docs update in 8 seconds. DocForge hooks into your CI pipeline and rebuilds only the pages affected by the diff.

OpenAPI export

Every REST endpoint DocForge documents exports to a valid OpenAPI 3.1 spec. Drop it into Postman, Swagger UI, or your SDK generator.

Monorepo ready

Point DocForge at a Turborepo, Nx, or Lerna workspace. It resolves package boundaries, cross-references types, and builds one unified site.

2.4M
doc pages generated
847
engineering teams
8.1s
avg deploy time
99.7%
accuracy vs source

Shipping docs at

Cascade Systems
Refract Labs
Northline Pay
Axiom Cloud
Driftwork
Helix API
340 endpoints documented in 6 min

We had 340 undocumented endpoints across 12 microservices. DocForge processed the entire repo in 6 minutes and generated a unified docs site that our DevRel team actually uses. Confluence is officially dead to us.

Marcus Oyelaran, VP Engineering at Cascade Systems
Marcus Oyelaran
VP Engineering · Cascade Systems
README drift: eliminated

Our OSS library had a README that matched v1.8 while we were shipping v3.2. New contributors kept filing issues that were just docs gaps. DocForge runs on every release tag — the README and API reference are always in sync now.

Priya Venkataraman, Open Source Lead at Refract Labs
Priya Venkataraman
Open Source Lead · Refract Labs
4 hrs/sprint → 0

I was spending 4 hours per sprint writing reference docs. Now I spend 0. The generated output is better than what I was writing manually — the parameter tables are accurate, the examples actually run, and the search works.

Tom Kiprotich, Staff Engineer at Northline Pay
Tom Kiprotich
Staff Engineer · Northline Pay
Your Confluence debt ends
today.

Point DocForge at your repo. Get a production-ready docs site in the time it takes to make coffee.

See the Docs for Our Docs →

Free tier includes 3 repos · No credit card · GitHub OAuth