Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions app/global.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,53 @@
@import 'tailwindcss';
@import 'fumadocs-ui/css/neutral.css';
@import 'fumadocs-ui/css/preset.css';
@import 'fumadocs-openapi/css/preset.css';

/* API sidebar method badges — scoped to leaf page links only (have padding-inline-start) */
a[style*="padding-inline-start"][href*="/api/"][href*="/get-"]::before,
a[style*="padding-inline-start"][href*="/api/"][href*="/post-"]::before,
a[style*="padding-inline-start"][href*="/api/"][href*="/put-"]::before,
a[style*="padding-inline-start"][href*="/api/"][href*="/patch-"]::before,
a[style*="padding-inline-start"][href*="/api/"][href*="/delete-"]::before {
font-size: 0.625rem;
font-weight: 700;
line-height: 1;
padding: 2px 5px;
border-radius: 4px;
letter-spacing: 0.02em;
flex-shrink: 0;
position: static !important;
width: auto !important;
inset: unset !important;
background: unset !important;
}

a[style*="padding-inline-start"][href*="/api/"][href*="/get-"]::before {
content: "GET" !important;
background-color: color-mix(in srgb, #7d69cb 18%, transparent) !important;
color: #7d69cb;
}

a[style*="padding-inline-start"][href*="/api/"][href*="/post-"]::before {
content: "POST" !important;
background-color: color-mix(in srgb, #59a210 18%, transparent) !important;
color: #59a210;
}

a[style*="padding-inline-start"][href*="/api/"][href*="/put-"]::before {
content: "PUT" !important;
background-color: color-mix(in srgb, #ff9a1f 18%, transparent) !important;
color: #ff9a1f;
}

a[style*="padding-inline-start"][href*="/api/"][href*="/patch-"]::before {
content: "PATCH" !important;
background-color: color-mix(in srgb, #d07502 18%, transparent) !important;
color: #d07502;
}

a[style*="padding-inline-start"][href*="/api/"][href*="/delete-"]::before {
content: "DEL" !important;
background-color: color-mix(in srgb, #d04444 18%, transparent) !important;
color: #d04444;
}
125 changes: 125 additions & 0 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import Link from 'next/link';
import type { Metadata } from 'next';

export const metadata: Metadata = {
title: 'Pterodactyl - Open Source Game Server Management',
description:
'A free, open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers.',
};

const features = [
{
title: 'Security First',
description:
'Built with security as a priority. All servers run in isolated Docker containers with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.',
},
{
title: 'Modern Tooling',
description:
'Built on a modern stack using React for the frontend and Go for the daemon, giving you a fast and responsive experience.',
},
{
title: 'Docker Powered',
description:
'All game servers run in isolated Docker containers, limiting attack vectors and providing strict resource limits on CPU, memory, and IO.',
},
{
title: 'Free & Open Source',
description:
'Pterodactyl is 100% free and licensed under the MIT license. All of our code is publicly available on GitHub.',
},
{
title: 'User Friendly',
description:
'An intuitive and clean UI that makes managing your game servers easy, whether you run one server or hundreds.',
},
{
title: 'Scalable',
description:
'Whether you are a hosting company, a large gaming network, or just some friends playing video games, Pterodactyl can scale to fit your needs.',
},
];

export default function LandingPage() {
return (
<div className="flex min-h-screen flex-col">
<nav className="border-b border-fd-border bg-fd-background/80 backdrop-blur-sm">
<div className="mx-auto flex max-w-6xl items-center justify-between px-6 py-4">
<span className="text-xl font-bold text-fd-foreground">Pterodactyl</span>
<div className="flex items-center gap-6">
<Link href="/panel/getting-started" className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition-colors">
Documentation
</Link>
<a href="https://discord.gg/pterodactyl" className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition-colors">
Discord
</a>
<a href="https://github.com/pterodactyl" className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition-colors">
GitHub
</a>
</div>
</div>
</nav>

<main className="flex-1">
<section className="mx-auto max-w-4xl px-6 py-24 text-center">
{/* eslint-disable-next-line @next/next/no-img-element */}
<img
src="https://cdn.pterodactyl.io/logos/new/pterodactyl_logo_transparent.png"
alt="Pterodactyl"
className="mx-auto mb-6 w-full max-w-xl"
/>
<p className="mt-6 text-lg leading-8 text-fd-muted-foreground">
A free, open-source game server management panel built with PHP, React, and Go.
Designed with security in mind, Pterodactyl runs all game servers in isolated Docker
containers while exposing a beautiful and intuitive UI to end users.
</p>
<div className="mt-10">
<Link
href="/panel/getting-started"
className="inline-block rounded-lg bg-fd-primary px-8 py-3 text-base font-semibold text-fd-primary-foreground shadow-sm hover:opacity-90 transition-opacity"
>
Let&apos;s Get Started!
</Link>
</div>
</section>

<section className="mx-auto max-w-6xl px-6 pb-24">
<h2 className="mb-12 text-center text-3xl font-bold text-fd-foreground">
Why use Pterodactyl?
</h2>
<div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
{features.map((feature) => (
<div
key={feature.title}
className="rounded-xl border border-fd-border bg-fd-card p-6"
>
<h3 className="mb-2 text-lg font-semibold text-fd-foreground">
{feature.title}
</h3>
<p className="text-sm leading-relaxed text-fd-muted-foreground">
{feature.description}
</p>
</div>
))}
</div>
</section>
</main>

<footer className="border-t border-fd-border bg-fd-background">
<div className="mx-auto flex max-w-6xl items-center justify-between px-6 py-6">
<p className="text-sm text-fd-muted-foreground">
&copy; 2015 Dane Everitt and contributors.
</p>
<div className="flex items-center gap-6">
<a href="https://github.com/pterodactyl" className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition-colors">
GitHub
</a>
<a href="https://discord.gg/pterodactyl" className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition-colors">
Discord
</a>
</div>
</div>
</footer>
</div>
);
}
8 changes: 8 additions & 0 deletions components/api-page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { openapi } from '@/lib/openapi';
import { createAPIPage } from 'fumadocs-openapi/ui';

export const APIPage = createAPIPage(openapi, {
playground: {
enabled: false,
},
});
17 changes: 17 additions & 0 deletions content/docs/api/application-locations/delete-delete-location.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Delete location
full: true
_openapi:
method: DELETE
toc: []
structuredData:
headings: []
contents:
- content: Deletes the specified location
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Deletes the specified location

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/locations/{location}","method":"delete"}]} />
30 changes: 30 additions & 0 deletions content/docs/api/application-locations/get-list-locations.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
title: List locations
full: true
_openapi:
method: GET
toc: []
structuredData:
headings: []
contents:
- content: |-
Retrieves all locations

# Available include parameters
| Parameter | Description |
|-----------|----------------------------------------|
| nodes | List of nodes assigned to the location |
| servers | List of servers in the location |
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Retrieves all locations

# Available include parameters
| Parameter | Description |
|-----------|----------------------------------------|
| nodes | List of nodes assigned to the location |
| servers | List of servers in the location |

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/locations","method":"get"}]} />
30 changes: 30 additions & 0 deletions content/docs/api/application-locations/get-location-details.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
title: Location details
full: true
_openapi:
method: GET
toc: []
structuredData:
headings: []
contents:
- content: |-
Retrieves the specified location

# Available include parameters
| Parameter | Description |
|-----------|----------------------------------------|
| nodes | List of nodes assigned to the location |
| servers | List of servers in the location |
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Retrieves the specified location

# Available include parameters
| Parameter | Description |
|-----------|----------------------------------------|
| nodes | List of nodes assigned to the location |
| servers | List of servers in the location |

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/locations/{location}","method":"get"}]} />
17 changes: 17 additions & 0 deletions content/docs/api/application-locations/patch-update-location.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Update location
full: true
_openapi:
method: PATCH
toc: []
structuredData:
headings: []
contents:
- content: Updates the specified location
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Updates the specified location

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/locations/{location}","method":"patch"}]} />
17 changes: 17 additions & 0 deletions content/docs/api/application-locations/post-create-location.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
title: Create location
full: true
_openapi:
method: POST
toc: []
structuredData:
headings: []
contents:
- content: Creates a new location
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Creates a new location

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/locations","method":"post"}]} />
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: Egg details
full: true
_openapi:
method: GET
toc: []
structuredData:
headings: []
contents:
- content: |-
Retrieves the specified egg

## Available include parameters
| Parameter | Description |
|-----------|----------------------------------------------|
| nest | Information about the nest that owns the egg |
| servers | List of servers using the egg |
| config | Config options of the egg |
| script | Egg install script |
| variables | List of egg variables |
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Retrieves the specified egg

## Available include parameters
| Parameter | Description |
|-----------|----------------------------------------------|
| nest | Information about the nest that owns the egg |
| servers | List of servers using the egg |
| config | Config options of the egg |
| script | Egg install script |
| variables | List of egg variables |

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/nests/{nest}/eggs/{egg}","method":"get"}]} />
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: List eggs
full: true
_openapi:
method: GET
toc: []
structuredData:
headings: []
contents:
- content: |-
Retrieves a list of eggs

## Available include parameters
| Parameter | Description |
|-----------|----------------------------------------------|
| nest | Information about the nest that owns the egg |
| servers | List of servers using the egg |
| config | Config options of the egg |
| script | Egg install script |
| variables | List of egg variables |
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

Retrieves a list of eggs

## Available include parameters
| Parameter | Description |
|-----------|----------------------------------------------|
| nest | Information about the nest that owns the egg |
| servers | List of servers using the egg |
| config | Config options of the egg |
| script | Egg install script |
| variables | List of egg variables |

<APIPage document={"./openapi.json"} operations={[{"path":"/api/application/nests/{nest}/eggs","method":"get"}]} />
Loading