PasteFlix Documentation

The complete, pin-to-pin guide to every feature of PasteFlix — a privacy-first, dark-themed Markdown pastebin built for developers and power users. This document covers the editor, all settings, Markdown syntax, the REST API, keyboard shortcuts, and more.

Getting Started

Creating your first paste takes three simple steps:

Step 1: Write Your Content

Navigate to the homepage. The full-featured Markdown editor loads instantly. Type or paste your content into the editor. Use the Markdown, Preview, or Split tabs to see your work rendered in real-time.

Step 2: Configure Document Settings

Scroll down below the editor to the Document Settings panel. Here you can set a Title (required, max 100 chars), choose Visibility (Public or Private), add an optional Password (min 4, max 30 chars), set an Edit Key for future modifications, and pick an Expiration Date & Time.

Step 3: Publish

Click the Publish button. Your paste is instantly saved to our secure storage and you are redirected to a unique, SEO-friendly URL like /p/my-document-title. Share this URL with anyone.

The Editor

The PasteFlix editor is a full-featured Markdown authoring environment. It consists of three main areas: the Tab Bar, the Toolbar, and the Text Area.

Editor Tabs

Markdown

The raw text editor. Type your Markdown here. Supports all standard Markdown plus our extended syntax.

Preview

A full-page read-only preview showing the final rendered output with syntax highlighting, tables, and all formatting applied.

Split

Side-by-side view with the editor on the left and live preview on the right. Includes optional Scroll Sync to keep both panels aligned.

The Toolbar

The toolbar provides quick-access buttons for all formatting actions. It is divided into groups:

Left Group — Formatting
Bold Italic Headings (H1–H6 dropdown) Link Image Unordered List
Right Group — Tools
Shortcuts Panel Search & Replace Copy Markdown Fullscreen- 16px + Font Size Adjustment
More Actions Menu

The "..." button opens a comprehensive dropdown with additional formatting and insert options:

Strikethrough Underline Highlight Spoiler Superscript Subscript Blockquote Inline Code Code Block Table Horizontal Rule Emoji Ordered List Task List Footnote Definition List Abbreviation Raw Mode Toggle

The Containers submenu lets you insert styled callout blocks: Tip Info Warning Danger

Markdown Reference

PasteFlix uses a powerful Markdown engine with extensive plugin support. Below is every supported syntax element with examples.

Basic Syntax

Standard GFM elements supported by our engine.

Headings

Editor View
# Heading 1
## Heading 2
### Heading 3
Live Preview

Heading 1

Heading 2

Heading 3

Emphasis

Editor View
**Bold Text**
*Italic Text*
~~Strikethrough~~
++Underline++
==Highlighted Text==
Live Preview

Bold Text
Italic Text
Strikethrough
Underline
Highlighted Text

Quotes

Editor View
> Primary blockquote
>> Level 2 nested
>>> Level 3 deeply nested
Live Preview

Primary blockquote

Level 2 nested

Level 3 deeply nested

Lists (Deep Embedding)

Editor View
- Level 1 Item
  - Level 2 Nested
    - Level 3 Deeply Nested
      - Level 4 and so on...

1. First main item
   1. Sub-item A
   2. Sub-item B
      1. Deep sub-item
Live Preview
  • Level 1 Item
    • Level 2 Nested
      • Level 3 Deeply Nested
        • Level 4 and so on…
  1. First main item
    1. Sub-item A
    2. Sub-item B
      1. Deep sub-item

Task Lists

Editor View
- [x] Completed task
- [ ] Pending task
- [ ] Another item
Live Preview
  • Completed task
  • Pending task
  • Another item

Links & Image Sizing

Editor View
[Standard Link](https://google.com)

![Default Size](https://picsum.photos/200/100)

![Sized Image](https://picsum.photos/200/100 =100x50)

![Width Only](https://picsum.photos/200/100 =150x)
![Height Only](https://picsum.photos/200/100 =x75)
Live Preview

Tables

Editor View
| Feature | Status |
| :--- | :---: |
| Markdown | Works |
| Preview | Live |
Live Preview
Feature Status
Markdown Works
Preview Live

Horizontal Rules & Misc

Editor View
Text above

---

Text below

Inline `code blocks` look like this.
Live Preview

Text above


Text below

Inline code blocks look like this.

Extended Syntax

Advanced features powered by our specialized plugins.

Scripts & Formatting

Editor View
H~2~O (Subscript)
X^2^ (Superscript)
++Underline++
==Highlight==
Live Preview

H2O (Subscript)
X2 (Superscript)
Underline
Highlight

Emojis & Shortcuts

Editor View
Direct: :smile: :heart: :fire: :rocket:

Shortcuts: :) :( :D :P ;) <3
Live Preview

Direct: 😄 ❤️ 🔥 🚀

Shortcuts: 😃 😦 😄 😛 😉 ❤️

Abbreviations

Editor View
*[HTML]: Hyper Text Markup Language
*[CSS]: Cascading Style Sheets

Hover over HTML or CSS to see the expansion.
Live Preview

Hover over HTML or CSS to see the expansion.

Footnotes

Editor View
Here is a note.[^1]

[^1]: Footnote details here.
Live Preview

Here is a note.[1]


  1. Footnote details here. ↩︎

Spoilers

Editor View
||This is a secret spoiler||

!!Another spoiler style!!
Live Preview

This is a secret spoiler

Another spoiler style

Definitions (Advanced)

Editor View
Term A
: This is the definition of Term A

Term B
~ You can also use the tilde symbol
~ For multiple definitions
Live Preview
Term A
This is the definition of Term A
Term B
You can also use the tilde symbol
For multiple definitions

Code Blocks

Rich code blocks with language badges, copying, and toggles.

Editor View
```javascript
function test() {
  console.log("Hello world");
}
```
Live Preview
JAVASCRIPT
function test() {
  console.log("Hello world");
}

Custom Containers (Callouts)

Specialized containers for highlighting info, tips, or warnings.

Editor View
::: tip
This is a tip container.
:::
Live Preview

This is a tip container.

Editor View
::: info
This is an info container.
:::
Live Preview

This is an info container.

Editor View
::: warning
This is a warning container.
:::
Live Preview

This is a warning container.

Editor View
::: danger
This is a critical danger container.
:::
Live Preview

This is a critical danger container.

Document Settings

Every paste has configurable settings accessible from the panel below the editor. Here is a detailed breakdown of each field:

Document Title Required

The title of your document. This is used to generate the URL slug (e.g., "My Cool Paste" becomes /p/my-cool-paste). If a slug already exists, a random 2-character suffix is appended. Max 100 characters.

Visibility

Public: The paste is accessible by anyone with the URL. Default option.

Private (Unlisted): The paste can only be accessed by those who have the exact URL. It is not indexed or discoverable.

Password Protection

When a password is set (min 4, max 30 characters), visitors must enter the correct password before the paste content is revealed. The content is never sent to the browser until the correct password is provided server-side. If no password is set, the paste is freely accessible. A validation hint is displayed only if the entered password is shorter than the required minimum.

Edit Key

An optional secret key (min 4, max 30 characters) that enables editing. If set, an "Edit paste" link appears on the viewer page. Clicking it takes you to /edit/[id] where you must provide the Edit Key. The Edit Key is never exposed in the API responses. Without it, a paste is permanently read-only. A validation hint is shown only when the rules are violated.

Expiration

Set a precise date and time for auto-expiry using the date-time picker. After the expiry time, the paste returns a 410 Gone status. The expiry date is displayed on the viewer page. If left empty, the paste lives indefinitely.

Viewing Pastes

When you visit a paste URL (/p/[id]), the viewer page renders with:

  • Title — Displayed as a large heading at the top
  • Metadata — Creation date, expiry date (if set), "Create your own paste" link
  • Edit Link — Shown only if the paste has an Edit Key configured
  • Rendered Markdown — Full GFM rendering with syntax highlighting, tables, containers, spoilers, and more
  • Raw Mode — If the paste was published in Raw mode, content is shown as plain preformatted text
  • Password Gate — If password-protected, a password input form is shown instead of the content
  • Expired State — If the paste has expired, a notice is shown with a link to create a new paste

Editing Pastes

If you set an Edit Key during creation, you can update your paste later:

  1. Navigate to the paste viewer page (/p/[id])
  2. Click the "Edit paste" link in the metadata bar
  3. You are taken to /edit/[id] and prompted for your Edit Key
  4. Upon successful verification, the full editor loads with your existing content pre-filled
  5. Make your changes and click "Update Paste"
  6. All fields (title, content, visibility, password, edit key, expiry) can be changed

Security & Privacy

Server-Side Content Gating

When a paste is password protected, the API returns only the title and metadata. The actual content is never transmitted to the client until the correct password is verified on the server. There is no client-side decryption — the protection is enforced at the API layer.

Edit Key Security

The Edit Key is stored in the database but is never included in any API GET response. It is stripped from the response object before being sent to the client using object destructuring.

Rate Limiting

All API endpoints are rate-limited per IP address: 5 requests/minute for POST and PUT, and 30 requests/minute for GET. Exceeding these limits returns a 429 Too Many Requests response.

No Tracking

PasteFlix does not use cookies, analytics, or any form of user tracking. There are no third-party scripts loaded beyond the core libraries.

Developer API

PasteFlix exposes a REST API for programmatic access. Base URL: your deployment domain. All endpoints accept and return application/json.

Open Interactive API Explorer (Swagger UI)

POST/api/pastes

Creates a new paste. Returns the generated ID and URL.

Request Body

FieldTypeStatusDescription
titlestringRequiredDocument title. Max 100 characters.
contentstringRequiredThe Markdown or plain text content of the paste.
rawbooleanOptionalIf true, content is displayed as plain text (no Markdown rendering). Default: false.
visibilitystringOptionalEither "public" or "private". Default: "public".
passwordstringOptionalOptional password to protect the paste. Min 4 characters.
editKeystringOptionalOptional key to enable future editing. Min 4 characters.
expiresAtISO 8601OptionalOptional expiry timestamp, e.g., "2026-03-01T00:00:00Z".

Example

bash
curl -X POST https://your-domain.com/api/pastes \ -H "Content-Type: application/json" \ -d '{ "title": "My First Paste", "content": "# Hello World\nThis is **Markdown**.", "visibility": "public", "editKey": "my-secret-key" }'
json (response 201)
{ "success": true, "id": "my-first-paste", "url": "https://your-domain.com/p/my-first-paste" }

GET/api/pastes/{id}

Retrieves a paste by its ID. If the paste is password-protected, include the ?password= query parameter.

Parameters

FieldTypeStatusDescription
idstring (path)RequiredThe unique paste ID (URL slug).
passwordstring (query)OptionalRequired only if the paste is password-protected.

Example

bash
# Public paste curl https://your-domain.com/api/pastes/my-first-paste # Password-protected paste curl "https://your-domain.com/api/pastes/my-first-paste?password=secret123"
json (response 200)
{ "success": true, "paste": { "id": "my-first-paste", "title": "My First Paste", "content": "# Hello World\nThis is **Markdown**.", "raw": false, "visibility": "public", "createdAt": { "seconds": 1772027530 }, "hasEditKey": true } }

PUT/api/pastes/{id}

Updates an existing paste. Requires the current Edit Key for authorization.

Request Body

FieldTypeStatusDescription
editKeystringRequiredThe current edit key that was set during creation.
titlestringRequiredUpdated title. Max 100 characters.
contentstringRequiredUpdated content.
rawbooleanOptionalToggle raw mode.
visibilitystringOptionalChange to "public" or "private".
passwordstringOptionalSet or change the password. Send null to remove.
expiresAtISO 8601OptionalSet or change the expiry. Send null to remove.
newEditKeystringOptionalChange the edit key itself. Min 4 characters. Send null to remove.

Example

bash
curl -X PUT https://your-domain.com/api/pastes/my-first-paste \ -H "Content-Type: application/json" \ -d '{ "editKey": "my-secret-key", "title": "Updated Title", "content": "# Updated Content\nNew stuff here." }'
json (response 200)
{ "success": true, "id": "my-first-paste" }

Rate Limits

POST /api/pastes

5 requests per minute per IP

GET /api/pastes/{id}

30 requests per minute per IP

PUT /api/pastes/{id}

5 requests per minute per IP

Error Codes

FieldTypeStatusDescription
400Bad RequestOptionalMissing or invalid fields (e.g., empty title, content too short).
401UnauthorizedOptionalInvalid password or invalid/missing edit key.
404Not FoundOptionalThe paste ID does not exist in the database.
410GoneOptionalThe paste existed but has expired past its expiresAt date.
429Rate LimitedOptionalToo many requests from this IP. Wait and retry.
500Server ErrorOptionalAn unexpected error occurred. Check request body JSON validity.

Keyboard Shortcuts

The full list of keyboard shortcuts available in the editor. These can also be viewed from the Keyboard icon in the toolbar.

Styles

BoldCtrl + B
ItalicCtrl + I
UnderlineCtrl + U
StrikethroughCtrl + Shift + X
HighlightCtrl + Shift + H
SpoilerCtrl + Shift + S
SuperscriptCtrl + .
SubscriptCtrl + ,

Headers

Heading 1Ctrl + Alt + 1
Heading 2Ctrl + Alt + 2
Heading 3Ctrl + Alt + 3
Heading 4Ctrl + Alt + 4
Heading 5Ctrl + Alt + 5
Heading 6Ctrl + Alt + 6

Insert

Insert LinkCtrl + K
Insert ImageCtrl + Shift + M
Inline CodeCtrl + E
Code BlockCtrl + Shift + K
BlockquoteCtrl + Q
TableCtrl + T
Horizontal RuleCtrl + R

Lists

Unordered ListCtrl + L
Ordered ListCtrl + O
Task ListCtrl + Shift + T

System

Search & ReplaceCtrl + F
Toggle FullscreenCtrl + Shift + F
Copy MarkdownCtrl + Shift + C
UndoCtrl + Z
RedoCtrl + Y

Frequently Asked Questions

How is the URL slug generated?

The slug is derived from your document title, lowercased and stripped of special characters. If a slug collision occurs, a 2-character random alphanumeric suffix is appended (e.g., my-paste-k3).

Can I delete a paste?

There is no explicit delete endpoint. If you have the Edit Key, you can clear the content or set an expiry in the past. Pastes with an expiry date will automatically become inaccessible after that time with a 410 Gone status.

Is there a size limit on pastes?

Yes. PasteFlix enforces a **hard 1MB limit** (1,048,576 bytes) per paste. This is equivalent to approximately 1 million plain text characters. If your content exceeds this limit, the editor will block publishing and show a warning message.

Can I recover a lost Edit Key?

No. Edit Keys are stored securely and never returned in API responses. If you lose your Edit Key, you cannot edit the paste. Always save it somewhere safe.

What Markdown plugins are used?

PasteFlix uses a high-performance Markdown engine with support for: emoji, sub, sup, underline, highlights, footnotes, definition lists, abbreviations, custom callout containers (tip/info/warning/danger), spoilers, task-lists, and code syntax highlighting.

Does PasteFlix use cookies or track users?

No. PasteFlix has zero tracking, zero cookies, and loads no third-party analytics scripts.

Can I use the API without authentication?

Yes. The API is fully public. Rate limiting is enforced per IP address.

What happens when a paste expires?

Expired pastes return a 410 Gone HTTP status. The viewer page shows a dedicated 'This Paste Has Expired' notice with a link to create a new paste.