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

const caddyfile = `:3000 {
\treverse_proxy /api/* http://127.0.0.1:8080
\treverse_proxy http://127.0.0.1:3333
}
`;

const caddyfileTrustProxy = `:3000 {
\treverse_proxy /api/* http://127.0.0.1:8080 {
\t\ttrusted_proxies 0.0.0.0/0
\t}
\treverse_proxy /* http://127.0.0.1:3333 {
\t\ttrusted_proxies 0.0.0.0/0
\t}
}
`;

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

services.push({
type: "app",
data: {
serviceName: input.appServiceName,
source: { type: "image", image: input.appServiceImage },
env: [
`TRUST_PROXY=${input.trustProxy ? "true" : "false"}`,
`BACKEND_PORT=8080`,
].join("\n"),
domains: [{ host: "$(EASYPANEL_DOMAIN)", port: 3000 }],
mounts: [
{ type: "volume", name: "data", mountPath: "/opt/app/backend/data" },
{
type: "volume",
name: "images",
mountPath: "/opt/app/frontend/public/img",
},
{
type: "file",
content: caddyfile,
mountPath: "/opt/app/reverse-proxy/Caddyfile",
},
{
type: "file",
content: caddyfileTrustProxy,
mountPath: "/opt/app/reverse-proxy/Caddyfile.trust-proxy",
},
],
},
});

return { services };
}
86 changes: 86 additions & 0 deletions templates/pingvin-share-x/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Pingvin Share X
description:
Pingvin Share X is a community-maintained fork of Pingvin Share, a secure and
easy-to-use self-hosted file sharing platform. It lets you share files with a
single link, set expiration dates, password protection, and download limits,
without ever giving your data to a third party. The platform supports
registration, reverse shares, S3-compatible storage, LDAP and OAuth/OIDC
authentication, SMTP email notifications, ClamAV virus scanning, and a fully
configurable, themeable web interface.
instructions:
After deploying, open the application domain to create the first admin
account. To enable email sharing, password resets, and notifications,
configure SMTP under Admin → Email. If you place this service behind a reverse
proxy with TLS termination, set TRUST_PROXY to true and enable secure cookies
in the appearance/general settings.
changeLog:
- date: 2026-07-06
description: First Release (v1.21.0)
links:
- label: Docs
url: https://smp46.github.io/pingvin-share-x/
- label: GitHub
url: https://github.com/smp46/pingvin-share-x
contributors:
- name: Ahson Shaikh
url: https://github.com/Ahson-Shaikh
schema:
type: object
required:
- appServiceName
- appServiceImage
properties:
appServiceName:
type: string
title: Service Name
default: pingvin-share-x
appServiceImage:
type: string
title: App Service Image
default: smp46/pingvin-share-x:v1.21.0
trustProxy:
type: boolean
title: Trust Proxy
description:
Enable this if Pingvin Share X is placed behind a reverse proxy
terminating TLS (recommended when using a domain through Easypanel).
default: true
benefits:
- title: Self-Hosted & Private
description:
Host Pingvin Share X on your own infrastructure. Your files never pass
through a third-party service like WeTransfer, keeping your data fully
under your control.
- title: No Annoying Size Limits
description:
Upload and share files as large as you want — the only limit is your own
hard drive, not an arbitrary cap imposed by a provider.
- title: Flexible Sharing Controls
description:
Protect shares with passwords, set expiration dates and download limits,
create reverse share links, and notify recipients by email.
- title: Enterprise-Ready Authentication
description:
Sign in with local accounts, LDAP, or OAuth/OIDC providers like GitHub,
Google, Microsoft, and Discord, with optional two-factor authentication.
features:
- title: S3 & Local Storage
description:
Store shared files on the local filesystem or in an S3-compatible bucket,
whichever fits your infrastructure best.
- title: Customizable Interface
description:
Tailor the look and feel with theme colors, border radius, color scheme,
and custom CSS injected directly into the frontend.
- title: ClamAV Integration
description:
Scan uploaded shares for malicious files using an optional ClamAV
integration to keep your platform safe.
- title: Email Notifications
description:
Configure SMTP to send share links, reverse-share notifications, password
resets, invites, and download notifications to users.
tags:
- File Management
- Privacy
- Security