https://github.com/rhee876527/chiyogami
Yet another pastebin
https://github.com/rhee876527/chiyogami
codesnippets golang heroicons javascript pastebin rest-api self-hosted tailwindcss webcrypto
Last synced: 18 days ago
JSON representation
Yet another pastebin
- Host: GitHub
- URL: https://github.com/rhee876527/chiyogami
- Owner: rhee876527
- License: bsd-3-clause
- Created: 2025-01-31T10:13:50.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2026-03-23T19:38:45.000Z (about 1 month ago)
- Last Synced: 2026-03-24T17:49:52.504Z (about 1 month ago)
- Topics: codesnippets, golang, heroicons, javascript, pastebin, rest-api, self-hosted, tailwindcss, webcrypto
- Language: HTML
- Homepage: https://chiyogami.myaddr.dev
- Size: 356 KB
- Stars: 74
- Watchers: 1
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- fucking-awesome-selfhosted - Chiyogami - Pastebin with API, client-side encryption, user accounts, syntax highlighting, markdown rendering, and more. ๐ [Demo](chiyogami.myaddr.dev/)) `BSD-3-Clause` `Docker` (Software / Pastebins)
- awesome-selfhosted - Chiyogami - Pastebin with API, client-side encryption, user accounts, syntax highlighting, markdown rendering, and more. ([Demo](https://chiyogami.myaddr.dev/)) `BSD-3-Clause` `Docker` (Software / Pastebins)
- awesome-selfhosted - Chiyogami - Pastebin with API, client-side encryption, user accounts, syntax highlighting, markdown rendering, and more. ([Demo](https://chiyogami.myaddr.dev/)) `BSD-3-Clause` `Docker` (Software / Pastebins)
- awesome-selfhosted - Chiyogami - Pastebin with API, client-side encryption, user accounts, syntax highlighting, markdown rendering, and more. ([Demo](https://chiyogami.myaddr.dev/)) `BSD-3-Clause` `Docker` (Software / Pastebins)
README
## Chiyogami
#### Chiyogami is a sleek, modern pastebin with encryption, customizable expiry, private pastes, user accounts and an API for developers.
##### Screenshots:



โจ **Features**
- โ Beautiful & Responsive UI โ Built with TailwindCSS & DaisyUI for a clean and modern look.
- ๐ Syntax Highlighting โ Automatic formatting with HighlightJS.
- ๐ Markdown Rendering โ Automatic formatting with Marked.
- โณ Configurable Expiry โ Set custom expiration times with API.
- ๐ Secure & Private โ Client-side encryption with WebCrypto API for encrypted pastes. No password saved in server.
- ๐ก Powerful API โ Create and fetch pastes without leaving the terminal.
- ๐ Public Pastes โ List & search all public pastes.
- ๐ Private Pastes โ Only accessible via a unique, unguessable link for enhanced privacy (use encryption on web UI for ultimate privacy).
- ๐ Local Storage โ Uses SQLite for a lightweight, self-hostable database.
- ๐ค User Accounts โ Create & manage your pastes with authentication.
- ๐ Easy Sharing โ Share paste links or scan a QR code for instant access.
- ๐ก Built-in Rate Limiting โ Protects against spam and abuse with smart request throttling.
- ๐ณ Easy self-host with docker.
## Installation
Docker. Build it or check [docker-compose](https://github.com/rhee876527/chiyogami/blob/main/docker-compose.yml) file for example with pre-built images.
### Quick run
```
docker run -d \
-v "$(pwd)/pastes:/pastes" \
-p 127.0.0.1:8000:8000 \
--restart unless-stopped \
ghcr.io/rhee876527/chiyogami:latest
```
### Environment variables
| Env | Default value | Note |
|----------|-----|--------------|
| SECRET_KEY | None | Session key. Keep secure and unique. Recommended example: openssl rand -base64 32. |
| PASTE_DEFAULT_EXPIRATION | 24h | Valid time units are โnsโ, โusโ (or โยตsโ), โmsโ, โsโ, โmโ, โhโ or `"Never"` |
| MAX_CHAR_CONTENT | 50000 | Maximum characters allowed in content body. Larger limits may offer reduced performance |
| DISABLE_RATE_LIMIT | None | Use `1` to disable rate limit |
| CREATE_PER_MIN | 10 | No of paste creation, register, login, delete account & delete paste requests allowed per minute |
| DATABASE_PATH | None | For local development use. Conflicts with docker volume paths. |
| DELETE_RETENTION | 90 | Number of days to keep soft-deleted pastes. Valid values: `1-99` |
| COMPLEX_PASSWORD | None | Use `1` to activate. Requires complex password on user registration. Valid password: `Minimum 8 characters, including at least 1 lowercase, 1 uppercase, 1 number and 1 symbol.` |
| ADMIN_CONTACT | None | Accepts email values. May be useful for moderation purposes. |
#### Note about exposing /health to public
Since v1.4.3 this `healthcheck` endpoint was created to actively monitor state of application's database. It has potential for abuse WHEN exposed publicly. Caution is hereby given to protect endpoint (http://localhost:8000/health) from external access as necessary.
If using `Traefik` as reverse proxy this can be done in the `docker-compose` file by adding the following middleware:
```
...
services:
chiyogami:
labels:
- "traefik.http.routers.chiyogami.middlewares=localonly-health"
- "traefik.http.middlewares.localonly-health.replacepathregex.regex=^/health$"
- "traefik.http.middlewares.localonly-health.replacepathregex.replacement=/nonexistent-path"
...
```
## Usage
Web UI is simple & straightforward. Or use the `API`.
#### Create paste
***FILE***
```
curl http://localhost:8000/paste -T sample.txt
```
or **JSON**
```
curl -X POST \
http://localhost:8000/paste \
-H 'Content-Type: application/json' \
-d '{"content":"Test paste"}'
```
**response:** `{"title":"OkxI"}`
Note: Pastes are created by default with `Public` `visibility`. They can be accessed from api or website.
Change this to `Private` or `Unlisted` to make the paste undiscoverable. Pastes are also set to expire within 24hrs if expiry is not specified.
You can set a default expiry for new pastes with `PASTE_DEFAULT_EXPIRATION`.
#### Create private paste with 48h expiry
```
curl -X POST \
http://localhost:8000/paste \
-H 'Content-Type: application/json' \
-d '{"content":"Test", "visibility":"Private", "expiration":"48h"}'
```
**response:** `{"title":"euVa"}`
#### Fetch created paste
```
curl -X GET http://localhost:8000/paste/bZTR -H "Accept: application/json"
```
**response:**
``
{"ID":22,"CreatedAt":"2025-02-04T19:48:06.747679947Z","UpdatedAt":"2025-02-04T19:48:06.747679947Z","DeletedAt":null,"Title":"bZTR","Content":"test private","Visibility":"Private","Expiration":"2025-02-05T19:48:06.747635027Z","IsEncrypted":false,"UserID":0,"IsUserPaste":false}
``
#### Create user account
```
curl -X POST \
http://localhost:8000/register \
-H 'Content-Type: application/json' \
-d '{"username":"test", "password":"test"}'
```
**response:** `{"message":"User registered successfully"}`
#### Delete owner paste using session (from cookies)
```
curl -X DELETE http://localhost:8000/paste/EIKq \
-b "session=MTczNzA2NDI5NXxEWDhFQVFMX2dBQUJFQUVRQUFBZl80QUFBUVp6ZEhKcGJtY01DUUFIZFhObGNsOXBaQVIxYVc1MEJnSUFEQT09fLnhi2OxsN6coY5ZmmBeA0tPXUcsKiii6ECOoJ7yrqNC"
```
**response:** `{"message":"Paste deleted successfully"}`
#### Get instance configuration
```
curl http://localhost:8000/info
```
**response:** `{"ADMIN_CONTACT":"admin@example.com","DELETE_RETENTION":90,"MAX_CHAR_CONTENT":50000,"PASTE_DEFAULT_EXPIRATION":"24h"}`
##### COPYRIGHT
This software is free to use in accordance with the [license](https://github.com/rhee876527/chiyogami/blob/main/LICENSE).