ctrl-v
A modern, open-source pastebin with latex and markdown rendering support
Frontend is in React + Next.js and backend is in Go. Deployed via Vercel and Google Cloud Run.
Public API
The ctrl-v API is provided for free for other developers to easily develop on top of it. It can be reached at https://api.ctrl-v.app/
.
GET /health
# get the health of the API
curl https://api.ctrl-v.app/health
# 200 OK
# > "status ok"
POST /api
# create a new paste
curl -L -X POST 'https://api.ctrl-v.app/api' \
-F 'expiry=2021-03-09T01:02:43.082Z' \
-F 'content=print(\"test content\")' \
-F 'title=test paste' \
-F 'language=python'
# or with a password
curl -L -X POST 'https://api.ctrl-v.app/api' \
-F 'expiry=2021-03-09T01:02:43.082Z' \
-F 'content=print(\"test content\")' \
-F 'title=test paste' \
-F 'language=python' \
-F 'password=hunter2'
# 200 OK
# > { "hash": "6Z7NVVv" }
# 400 BAD_REQUEST
# happens when title/body is too long, password couldnt
# be hashed, or expiry is not in RFC3339 format
GET /api/{hash}
# get unprotected hash
curl https://api.ctrl-v.app/api/1t9UybX
# 200 OK
# > {
# > "content": "print(\"test content\")",
# > "expiry": "2021-03-09T01:02:43.082Z",
# > "language": "python",
# > "timestamp": "2021-03-02T01:06:16.209501971Z",
# > "title": "test paste"
# > }
# 401 BAD_REQUEST
# happens when paste is password protected. when this happens, try the authenticated alternative using POST
# 404 NOT_FOUND
# no paste with that ID found
POST /api/{hash}
# get unprotected hash
curl -L -X POST 'https://api.ctrl-v.app/api/1t9UybX' \
-F 'password=hunter2'
# 200 OK
# > {
# > "content": "print(\"test content\")",
# > "expiry": "2021-03-09T01:02:43.082Z",
# > "language": "python",
# > "timestamp": "2021-03-02T01:06:16.209501971Z",
# > "title": "test paste"
# > }
# 401 BAD_REQUEST
# wrong password
# 404 NOT_FOUND
# no paste with that ID found
Developing
when doing local backend development, make sure you change the backend address to be localhost. You can find this on Line 4 of frontend/src/http/shared.js
Common
make dev
β starts React development server on :3000
and backend on :8080
Frontend
make fe-run
β starts React development server on :3000
make fe-build
β builds development release of frontend in frontend/build
Backend
make run
β starts backend on :8080
make lint
β lints all Go files
make docker-build
β builds Docker image of current backend
make docker-run
β runs built Docker image on :8080