* fix: oauthId optional * fix: remove optional * hotfix: make oauthid optional (#249) * hotfix: fallback oauth find (#250) * fix: add a forgotten ? to schema * fix: catch null at other places (#252) * fix: forgor (#253) * Fix root url & uploader stuff (#254) * fix: uploader route as root won't be broken * fix: fix broken url route for when on root * fix: catch hopefully the most of the edge cases (#251) * fix: catch hopefully the most of the edge cases * fix: invite only, fools * feat: tsup, small fixes * fix: #264 * fix: urls handle empty strings * fix: remove esbuild * fix: do not mutate res #266 * feat: new embed method * fix: overwrite tmp ss flameshot * fix: overrides for uploading * refactor: chart.js -> recharts * feat: download query on /r/ * fix: better icons on file vie2 * feat: ability to generate url shorten config * fix: sxcu name * fix: react hooks error * feat: ability to insert tabs on Tab keypress * feat: overhaul image upload * fix: clean * fix: group icons vertically * fix: embeds not showing up * fix: docker stuff * feat(3.7.0-rc1): version * fix: cors for files (#257) Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * refactor: many columns/tables in prisma * feat: keep original name #247 * fix: ability to gen with original-name * fix: type error * fix: no name on dashboard * feat(v3.7.0-rc2): version * fix: sharex DestinationType * fix: ensureDatabaseExists args * fix: sharex config * fix: #277 #272 * fix: 🐛 Add Menu component as parent * refactor: popover -> menu Co-authored-by: IceToast <> Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: add a "skip" for fresh db's (#274) * fix: add a "skip" for fresh db's * fix: trimming * fix: elevate logging! * fix: allow more variables on view * fix: optimize docker image * fix: root url for upload and shorten (#255) Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: /app -> /zipline * feat(v3.7.0-rc3): folders for files * fix: use `name` instead of `file` (#281) Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * feat: search+create for folder select (#283) * feat?: Search for the folder to add. Also you can create a folder right from the file, rather than being redirected. * woops wrong import * fix: return null for no string in parser (#285) * feat: use ENTRYPOINT in docker (#286) * :3 * Update Dockerfile Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * Update Dockerfile Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * Update Dockerfile Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * test --------- Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: set password to actual text value * fix: url encode password query * fix: entrypoint executable (#289) * feat: override domain header * fix: random domains * feat: better version checking * feat: public folders * fix: dates #278 * feat: devcontainers for codespaces, etc. * experiment with devcontainer.json * introduce a docker-compose for devcontainer * Devcontainers! * version pop * Port labeling and a complimentary env variable * see it to believe it * Update .devcontainer/devcontainer.json * Update .devcontainer/devcontainer.json * Update .devcontainer/docker-compose.yml --------- Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: spaces and route fixes (#294) * fix: spaces and route fixes * fix: shorten url response * feat: better version checking * fix: use special characters should work If it doesn't, better call saul * save that extra byte * fix: returning protocol again in domain unrelated to this pr but whatever * fix: above ^ * Rename shorten.tsv to shorten.ts --------- Co-authored-by: diced <pranaco2@gmail.com> Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: #296 * fix: show files per user (#299) * feat: clearing orphaned files (#303) * fix: default public folder (docker) * feat: seperate discord webhooks (shorten/upload) (#260) * fix: title for folders * fix: clipboard & 2fa improvements A workaround that shows the content that would have been copied if `navigator.clipboard` is unavailable for whatever reason. 2FA input autofocuses & submits on enter. * fix: revamp uploaded file modal * fix: revamp mobile ui * feat: more functionality within files table * feat: clear zero byte files script * feat: logger improvements - Timestamp is gray - removed colorette dependency - introduction of LOGGER_FILTERS * chore: update deps * feat(v3.7.0-rc4): version * fix: show warning when password protect * fix: fix (#310) * Muted audio by default! * Code renderin' * not but still decently standard files being viewable * reserved routes * Update validateConfig.ts --------- Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * feat: file size (#308) * feat: baseline support for file sizes * feat: script to add file sizes * fix: #311 * chore: update to mantine@6 * refactor: remove old File.tsx * feat: initial move to mantine v6 * feat: use api option * remove: useless size modifier * fix: user button * feat: use pininput for 2fa * fix: breaking changes in migrating mantine v6 --------- Co-authored-by: TacticalCoderJay <gogojayvin923@gmail.com> * feat: add size to datatable * fix: null on non originalName * fix: allow download query on non raw * fix: undef file * fix: spacingg between count_by_user * feat: new ui for shortened urls * fix: spacing within appshell/paper * feat: new login page * feat: reorganize menu * feat: keyboard spotlight * feat: tabler icons * fix: remove feather import * fix: update 2fa enabled appropriately & delete files (#315) * fix: update 2fa enabled appropriately * fix: a proper delete --------- Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * feat(v3.7.0-rc5): version * feat: add feature request "contact_link" * feat: multiple stuffs * feat: gfycat url #322 * feat: gfycat attribution * feat(3.7.0-rc6): version * fix: type cast * feat: list view for urls, invites, users: #302 * refactor: docker-compose -> docker compose * fix: open folder in new tab * fix: save list-view setting to localStorage * fix: Bug: URLs list view #330 * fix: #332 * fix: #331 * fix: #333 * feat: link to view gallery (icon) * fix: clean up Anchors * refactor: new eslint changes * fix: fine tune devcontainer (#329) Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com> * fix: FileModal scrollbars * fix: dynamically import katex * fix: remove rogue console.log * fix: open folder onRowClick * fix: filter on usePaginatedFiles * fix: icon sizes * fix: paste listener * feat(actions): auto-assign milestone * feat(v3.7.0-rc7): version * fix: #339 * fix: resetting avatars * feat: new icons / oauth icons changed * feat: UPLOADER_ASSUME_MIMETYPES (#337) * fix: any instance of #342 * fix: any instance of #345 * fix: make tables take entire vh * chore: update deps * fix: add bigger sizeLimit * fix: token exposed on view/[id] --------- Co-authored-by: Jayvin Hernandez <gogojayvin923@gmail.com> Co-authored-by: IceToast <54889359+IceToast@users.noreply.github.com> Co-authored-by: IThundxr <harshdhaliwal9767@gmail.com> Co-authored-by: IThundxr <contact@ithundxr.dev> |
||
---|---|---|
.devcontainer | ||
.github | ||
.vscode | ||
.yarn | ||
prisma | ||
public | ||
src | ||
.dockerignore | ||
.env.local.example | ||
.eslintignore | ||
.eslintrc.json | ||
.gitattributes | ||
.gitignore | ||
.npmrc | ||
.nvmrc | ||
.prettierrc.json | ||
.yarnrc.yml | ||
CONTRIBUTING.md | ||
docker-compose.dev.yml | ||
docker-compose.yml | ||
docker-entrypoint.sh | ||
Dockerfile | ||
LICENSE | ||
mimes.json | ||
next-env.d.ts | ||
next.config.js | ||
package.json | ||
README.md | ||
SECURITY.md | ||
tsconfig.json | ||
tsup.config.ts | ||
yarn.lock |
Features
- Configurable
- Fast
- Built with Next.js & React
- Token protected uploading
- Image uploading
- Image compression
- Password Protected Uploads
- URL shortening
- Text uploading
- URL Formats (uuid, dates, random alphanumeric, original name, zws, gfycat -> animals adjectives)
- Discord embeds (OG metadata)
- Gallery viewer, and multiple file format support
- Code highlighting
- Fully customizable Discord webhook notifications
- OAuth2 registration (Discord and GitHub)
- Two-Factor authentication with Google Authenticator, Authy, etc (totp services).
- User invites
- File Chunking (for large files)
- File deletion once it reaches a certain amount of views
- Easy setup instructions on docs (One command install
docker compose up -d
)
View upstream documentation
The website below provides documentation for more up-to-date features with the upstream branch. The normal documentation is for the latest release and is not updated unless a new release is made.
Usage
Install & run with Docker
This section requires Docker and docker compose.
git clone https://github.com/diced/zipline
cd zipline
docker compose up -d
After installing
After installing, please edit the docker-compose.yml
file and find the line that says SECRET=changethis
and replace changethis
with a random string.
Ways you could generate the string could be from a password managers generator, or you could just slam your keyboard and hope for the best.
Building & running from source
This section requires nodejs, yarn or npm.
git clone https://github.com/diced/zipline
cd zipline
# npm install
yarn install
# npm run build
yarn build
# npm start
yarn start
NGINX Proxy
This section requires NGINX.
server {
listen 80 default_server;
client_max_body_size 100M;
server_name <your domain (optional)>;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Website
The default port is 3000
, once you have accessed it you can see a login screen. The default credentials are "administrator" and "password". Once you login please immediately change the details to something more secure. You can do this by clicking on the top right corner where it says "administrator" with a gear icon and clicking Manage Account.
ShareX (Windows)
This section requires ShareX.
After navigating to Zipline, click on the top right corner where it says your username and click Manage Account. Scroll down to see "ShareX Config", select the one you would prefer using. After this you can import the .sxcu into sharex. More information here
Flameshot (Linux)
This section requires Flameshot, jq, and xsel.
Wayland instructions
If using wayland you will need to have wl-clipboard installed, for the wl-copy
command.
If you are not using GNOME/KDE/Qtile/Sway, and are using something like a wlroots-based compositor (ex. Hyprland, River, etc), you will need to set the XDG_CURRENT_DESKTOP
environment variable to sway
, which will just override it for this script. Adding export XDG_CURRENT_DESKTOP=sway
to the start of the script will work.
After this, replace the xsel -ib
with wl-copy
in the script.
You can either use the script below, or generate one directly from Zipline (just like how you can generate a ShareX config). To upload files using flameshot we will use a script. Replace $TOKEN and $HOST with your own values, you probably know how to do this if you use linux.
DATE=$(date '+%h_%Y_%d_%I_%m_%S.png');
flameshot gui -r > ~/Pictures/$DATE;
curl -H "Content-Type: multipart/form-data" -H "authorization: $TOKEN" -F file=@$1 $HOST/api/upload | jq -r 'files[0].url' | xsel -ib
Contributing
Bug reports
Create an issue on GitHub and use the template, please include the following (if one of them is not applicable to the issue then it's not needed):
- The steps to reproduce the bug
- Logs of Zipline
- The version of Zipline
- Your OS & Browser including server OS
- What you were expecting to see
Feature requests
Create a discussion on GitHub, please include the following:
- Brief explanation of the feature in the title (very brief please)
- How it would work (Be detailed!)
Pull Requests (contributions to the codebase)
Create a pull request on GitHub. If your PR does not pass the action checks, then please fix the errors. If your PR was submitted before a release, and I have pushed a new release, please make sure to update your PR to reflect any changes, usually this is handled by GitHub.