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
Binary file added templates/linx-server/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added templates/linx-server/assets/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
58 changes: 58 additions & 0 deletions templates/linx-server/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Output, Services } from "~templates-utils";
import { Input } from "./meta";

export function generate(input: Input): Output {
const services: Services = [];

const maxBytes = Math.floor((input.maxFileSizeMb ?? 1024) * 1024 * 1024);

const configFile = [
`bind = 0.0.0.0:8080`,
`filespath = /data/files/`,
`metapath = /data/meta/`,
`sitename = ${input.siteName || "Linx"}`,
`maxsize = ${maxBytes}`,
`realip = true`,
input.allowHotlink ? `allowhotlink = true` : `# allowhotlink = false`,
input.remoteUploads ? `remoteuploads = true` : `# remoteuploads = false`,
].join("\n");

services.push({
type: "app",
data: {
serviceName: input.appServiceName,
source: {
type: "image",
image: input.appServiceImage,
},
deploy: {
command: `/usr/local/bin/linx-server -config /data/linx-server.conf`,
},
domains: [
{
host: "$(EASYPANEL_DOMAIN)",
port: 8080,
},
],
mounts: [
{
type: "file",
content: configFile,
mountPath: "/data/linx-server.conf",
},
{
type: "volume",
name: "files",
mountPath: "/data/files",
},
{
type: "volume",
name: "meta",
mountPath: "/data/meta",
},
],
},
});

return { services };
}
112 changes: 112 additions & 0 deletions templates/linx-server/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: Linx Server
description:
Linx Server is a lightweight, self-hosted file and media sharing platform
written in Go. It lets users upload files, code snippets, and images and
share them via a clean, minimalist web interface with no external dependencies
or databases required. Uploads can be given expiry times, deletion keys, and
per-file access passwords. Code paste gets automatic syntax highlighting,
and media files (images, video, audio) render inline in the browser. Files
can also be served as torrents via WebSeed for bandwidth-efficient distribution.
An HTTP API is available for scripted or CLI-driven uploads, making it a
popular drop-in replacement for Imgur, 0x0, or pastebin-style services on
a private server.
instructions:
Open the app URL to upload files and get shareable links. To change settings
post-deployment, edit /data/linx-server.conf in the Mounts panel and redeploy.
changeLog:
- date: 2026-05-23
description: Config delivered as an editable file mount at /data/linx-server.conf
- date: 2026-05-20
description: Initial Template Release (v2.3.8)
links:
- label: GitHub
url: https://github.com/andreimarcu/linx-server
- label: Demo
url: https://put.icu/
contributors:
- name: Ahson Shaikh
url: https://github.com/Ahson-Shaikh
schema:
type: object
required:
- appServiceName
- appServiceImage
properties:
appServiceName:
type: string
title: App Service Name
default: linx-server
appServiceImage:
type: string
title: App Service Image
default: andreimarcu/linx-server:version-2.3.8
siteName:
type: string
title: Site Name
default: Linx
description: Name shown in the UI header.
maxFileSizeMb:
type: number
title: Max File Size (MB)
default: 1024
description: Maximum upload size in MB (hard limit 4096 MB).
allowHotlink:
type: boolean
title: Allow Hotlinking
default: true
description: Allow other sites to embed files from this instance.
remoteUploads:
type: boolean
title: Enable Remote Uploads
default: false
description: Let the API fetch and store a file from a remote URL.
benefits:
- title: No Database Required
description:
Linx stores file metadata in a flat file backend, making it trivially
easy to back up and restore without any database administration.
- title: Lightweight Go Binary
description:
The entire server is a single statically compiled Go binary under 12 MB.
Memory and CPU usage are minimal even under heavy upload traffic.
- title: Rich Media Preview
description:
Images, videos, audio, and code files render directly in the browser
with syntax highlighting — no plugins or JavaScript frameworks required.
- title: Flexible Expiry & Access Control
description:
Per-upload expiry times and optional access passwords give you fine-grained
control over who can reach each file and for how long.
features:
- title: Drag-and-Drop Upload
description:
Upload one or many files at once by dragging them onto the browser
or using the file picker. Paste images directly from the clipboard.
- title: Syntax-Highlighted Paste
description:
Pasted text and code files get automatic language detection and
full syntax highlighting powered by the Highlight.js library.
- title: Torrent / WebSeed Support
description:
Every file can be downloaded as a torrent with WebSeed enabled,
letting clients use peer-to-peer bandwidth alongside direct HTTP download.
- title: Deletion Keys
description:
Each upload receives a secret deletion key so the uploader can remove
a file at any time without administrator intervention.
- title: HTTP API
description:
A simple REST API at /api/upload supports CLI tools, scripts, and custom
ShareX/ShareX-compatible upload configurations.
- title: Optional Auth
description:
Restrict uploads to trusted users via an API key file without requiring
a full account system or user database.
tags:
- File Sharing
- Self-Hosted
- Pastebin
- Media Hosting
- Upload
- Go
- Lightweight