{"id":24475549,"url":"https://github.com/not-three/main","last_synced_at":"2025-07-19T09:36:38.452Z","repository":{"id":226995162,"uuid":"769165965","full_name":"not-three/main","owner":"not-three","description":"!3 is a simple, secure and open source paste sharing platform.","archived":false,"fork":false,"pushed_at":"2025-06-21T01:55:00.000Z","size":428,"stargazers_count":8,"open_issues_count":7,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T02:33:42.834Z","etag":null,"topics":["hastebin","monaco-editor","notes","pastebin"],"latest_commit_sha":null,"homepage":"https://not-th.re","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/not-three.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-08T13:33:06.000Z","updated_at":"2025-06-21T01:55:03.000Z","dependencies_parsed_at":"2024-11-06T07:24:56.105Z","dependency_job_id":"1f85c49f-1e84-4204-bc77-e3b428065be6","html_url":"https://github.com/not-three/main","commit_stats":null,"previous_names":["not-three/main"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/not-three/main","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-three%2Fmain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-three%2Fmain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-three%2Fmain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-three%2Fmain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/not-three","download_url":"https://codeload.github.com/not-three/main/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-three%2Fmain/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265910157,"owners_count":23847517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hastebin","monaco-editor","notes","pastebin"],"created_at":"2025-01-21T09:15:14.154Z","updated_at":"2025-07-19T09:36:38.442Z","avatar_url":"https://github.com/not-three.png","language":"Shell","readme":"# not-th.re\n\n[![license GNU AGPLv3](https://img.shields.io/badge/license-GNU%20AGPLv3-blue)](https://github.com/not-three/main/blob/main/LICENSE)\n[![gitHub issues](https://img.shields.io/github/issues/not-three/main)](https://github.com/not-three/main/issues)\n\n[![ui releases](https://img.shields.io/github/v/release/not-three/ui?label=ui%20version)](https://github.com/not-three/ui/releases)\n[![build ui Nightly](https://img.shields.io/github/actions/workflow/status/not-three/ui/nightly.yml?label=build%20ui%20nightly)](https://github.com/not-three/ui/actions/workflows/nightly.yml)\n[![ui commits](https://img.shields.io/github/last-commit/not-three/ui?label=last%20ui%20commit)](https://github.com/not-three/ui/commits/main)\n\n[![api releases](https://img.shields.io/github/v/release/not-three/api?label=api%20version)](https://github.com/not-three/api/releases)\n[![build api Nightly](https://img.shields.io/github/actions/workflow/status/not-three/api/nightly.yml?label=build%20api%20nightly)](https://github.com/not-three/api/actions/workflows/nightly.yml)\n[![api commits](https://img.shields.io/github/last-commit/not-three/api?label=last%20api%20commit)](https://github.com/not-three/api/commits/main)\n\n[![cli releases](https://img.shields.io/github/v/release/not-three/cli?label=cli%20version)](https://github.com/not-three/cli/releases)\n[![cli npm package](https://img.shields.io/npm/v/%40not3%2Fcli)](https://www.npmjs.com/package/@not3/cli)\n[![build cli Nightly](https://img.shields.io/github/actions/workflow/status/not-three/cli/nightly.yml?label=build%20cli%20nightly)](https://github.com/not-three/cli/actions/workflows/nightly.yml)\n[![cli commits](https://img.shields.io/github/last-commit/not-three/cli?label=last%20cli%20commit)](https://github.com/not-three/cli/commits/main)\n\n[![sdk releases](https://img.shields.io/github/v/release/not-three/sdk?label=sdk%20version)](https://github.com/not-three/sdk/releases)\n[![sdk npm package](https://img.shields.io/npm/v/%40not3%2Fsdk)](https://www.npmjs.com/package/@not3/sdk)\n[![build sdk Nightly](https://img.shields.io/github/actions/workflow/status/not-three/sdk/nightly.yml?label=build%20sdk%20nightly)](https://github.com/not-three/sdk/actions/workflows/nightly.yml)\n[![sdk commits](https://img.shields.io/github/last-commit/not-three/sdk?label=last%20sdk%20commit)](https://github.com/not-three/sdk/commits/main)\n\n[![draw releases](https://img.shields.io/github/v/release/not-three/draw?label=draw%20version)](https://github.com/not-three/draw/releases)\n[![build draw Nightly](https://img.shields.io/github/actions/workflow/status/not-three/draw/nightly.yml?label=build%20draw%20nightly)](https://github.com/not-three/draw/actions/workflows/nightly.yml)\n[![draw commits](https://img.shields.io/github/last-commit/not-three/draw?label=last%20draw%20commit)](https://github.com/not-three/draw/commits/main)\n\n!3 (spoken not three, derived from the leet speak word not3) is a simple\npaste sharing platform similar to other solutions like hastebin or pastebin.\n\n!3 is focused on simplicity, security by client side encryption\nand usage of the monaco editor.\n\n## Features\n\n- Simple paste sharing\n- Client side encryption\n- Monaco editor\n- Syntax highlighting\n- Dark mode\n- File transfers\n- Connect your private instance with the public UI\n- **_New_**: **Excalidraw integration**\n- **_Planned_**: **Peer 2 Peer sessions**\n- **_Planned_**: **Note Bundles**\n- **_Planned_**: **HTML Previewer**\n- **_Planned_**: **JavaScript Console**\n- No cookies\n- No tracking\n- No ads\n\n## Cli\n\nWe also provide a cli tool to interact with the API.\n\n```bash\nnpm install -g @not3/cli\n```\n\n```log\n$ not3 --help\nUsage: not3 [options] [command]\n\nOptions:\n  -V, --version                              output the version number\n  -h, --help                                 display help for command\n\nCommands:\n  license                                    Show information about the license of the software\n  decrypt [options] \u003cseed\u003e                   Decrypt something\n  encrypt [options] [input...]               Encrypt something, if no input is provided, will read from stdin\n  download|d [options] \u003cid\u003e \u003cseed\u003e \u003coutput\u003e  Download a file and decrypt it\n  upload|u [options] \u003cinput\u003e                 Upload a file and encrypt it\n  query|q [options] \u003cid\u003e \u003cseed\u003e              Decrypt and show a note from the server\n  save|s [options] [content...]              Encrypt and save a note on the server\n  seed                                       Generate a new encryption seed\n  info [options]                             Show meta information about the api\n  stats [options]                            Show usage statistics of the server\n  help [command]                             display help for command\n```\n\nOr use it with docker:\n\n```bash\ndocker run --rm -it -v \"$(pwd):/data\" ghcr.io/not-three/cli --help\n```\n\n## Deployment\n\nThe simplest way to use !3 is to visit our hosted instance at [https://not-th.re](https://not-th.re).\n\n### Micro\n\nThe micro deployment does not bring its own UI, but you can use the public UI.\n\n```yml\nservices:\n  api:\n    image: ghcr.io/not-three/api:latest\n    restart: unless-stopped\n    environment:\n      CORS_ENABLED: true\n      LIMITS_DISABLED: true\n      INSTANCE_PASSWORD: MySecretPassword\n    ports:\n      - 4000:4000\n    volumes:\n      - db:/data/db\n\nvolumes:\n  db:\n```\n\nAfter you have deployed the API, visit the [public UI](https://not-th.re)\ngo to `Tools` -\u003e `Edit Settings` and update these values:\n\n```json\n{\n  \"customServer\": {\n    \"url\": \"http://\u003cip-of-the-server\u003e:4000/\",\n    \"password\": \"MySecretPassword\"\n  }\n}\n```\n\nDont forget to save the settings, by clicking on `File` -\u003e `Save` (or by pressing `ctrl` + `s`).\n\n\u003e 💡 Note: If you're using your own private instance and share a URL, the encrypted link will\n\u003e include both the encryption key and the address of your private server. When someone opens\n\u003e the link and they haven't set your server as their primary one, they'll be notified and asked\n\u003e to confirm access to data from an external server. If they agree, the data will then be loaded\n\u003e securely from your instance.\n\n### Minimal\n\nThe minimal deployment includes the API and the UIs.\nThe UI has the proxy mode enabled, so you only need a single port.\n\n```yml\nx-restart: \u0026restart\n  restart: unless-stopped\n\nservices:\n  api:\n    image: ghcr.io/not-three/api:latest\n    \u003c\u003c: *restart\n    volumes:\n      - db:/data/db\n\n  draw:\n    image: ghcr.io/not-three/draw:latest\n    \u003c\u003c: *restart\n\n  ui:\n    image: ghcr.io/not-three/ui:latest\n    \u003c\u003c: *restart\n    ports:\n      - 4000:4000\n    depends_on:\n      - api\n      - draw\n    environment:\n      PROXY_URL: http://api:3000\n      DRAW_PROXY_URL: http://draw:80\n\nvolumes:\n  db:\n```\n\n### Simple\n\nAn simple deployment, including a postgres database instead of sqlite.\nRecommended if you want to store more than a few pastes.\n\n```yml\nx-restart: \u0026restart\n  restart: unless-stopped\n\nservices:\n  api:\n    image: ghcr.io/not-three/api:latest\n    \u003c\u003c: *restart\n    depends_on:\n      - db\n    ports:\n      - 3000:3000\n    environment:\n      CORS_ENABLED: true\n      CORS_ORIGIN: http://localhost:4000\n      DATABASE_MODE: pg\n      DATABASE_HOST: db\n      DATABASE_USERNAME: db\n      DATABASE_PASSWORD: db\n      DATABASE_NAME: db\n\n  draw:\n    image: ghcr.io/not-three/draw:latest\n    \u003c\u003c: *restart\n    ports:\n      - 4500:80\n\n  ui:\n    image: ghcr.io/not-three/ui:latest\n    \u003c\u003c: *restart\n    ports:\n      - 4000:4000\n    environment:\n      API_URL: http://localhost:3000\n      DRAW_URL: http://localhost:4500\n      TERMS_OF_SERVICE_URL: https://example.com\n\n  db:\n    image: postgres:14.5\n    \u003c\u003c: *restart\n    environment:\n      POSTGRES_PASSWORD: db\n      POSTGRES_USER: db\n      POSTGRES_DB: db\n    volumes:\n      - db:/var/lib/postgresql/data\n\nvolumes:\n  db:\n```\n\n### Advanced\n\nSee one of the following files for a more detailed example:\n\n- [docker-compose.yml](./docker-compose.yml)\n- [docker-compose.swarm.yml](./docker-compose.swarm.yml)\n\nThese include horizontal scaling, health checks and traefik as a reverse proxy.\n\n### Environment variables\n\nFor a full list, with detailed descriptions of all environment variables, see the [configuration documentation](https://docs.not-th.re).\n\n### Helm\n\nAs of now, we do not have an official helm chart, if you want to contribute one, feel free to open a PR.\n\n## Static site deployment\n\nIn some scenarios, you might want to deploy the static site without a backend,\nfor example [not-th.re](https://not-th.re) is deployed with Cloudflare Pages,\nwhile the API is hosted on [api.not-th.re](https://api.not-th.re).\n\nThe static site can then be configured by editing the `config.json` file.\n\n```json\n{ \"baseURL\": \"https://api.not-th.re/\", \"drawURL\": \"https://draw.not-th.re/\", \"termsURL\": \"https://scolasti.co/go/privacy\" }\n```\n\nYou can download the client bundle from one of the following sources:\n\n### Github Releases\n\nAll stable versions of the client are available as a github release artifact.\n\n[![download ui stable gh releases artifacts](https://img.shields.io/badge/download-UI_stable_gh_releases_artifacts-blue)](https://github.com/not-three/ui/releases)\n\n[![download draw stable gh releases artifacts](https://img.shields.io/badge/download-DRAW_stable_gh_releases_artifacts-blue)](https://github.com/not-three/draw/releases)\n\n### Docker\n\n```bash\ndocker run --rm --entrypoint /bin/sh -v $(pwd):/mnt ghcr.io/not-three/ui:latest -c \"cp -r /app/public/ /mnt/ui/\"\n\ndocker run --rm --entrypoint /bin/sh -v $(pwd):/mnt ghcr.io/not-three/draw:latest -c \"cp -r /usr/local/apache2/htdocs/ /mnt/draw/\"\n```\n\nThis will copy the public folder to your current working directory.\n\n### Github Actions\n\nThe nightly (unstable) versions of the client are also available as a github action artifacts.\n\n[![download ui nightly gh actions artifacts](https://img.shields.io/badge/download-UI_nightly_gh_actions_artifacts-red)](https://nightly.link/not-three/ui/workflows/nightly/main/client-bundle)\n\n[![download draw nightly gh actions artifacts](https://img.shields.io/badge/download-DRAW_nightly_gh_actions_artifacts-red)](https://nightly.link/not-three/draw/workflows/nightly/main/client-bundle)\n\n## License\n\nThis project is licensed under the **GNU Affero General Public License v3.0**.\n\n### About\n\nGNU AGPLv3\n\nPermissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights. When a modified version is used to provide a service over a network, the complete source code of the modified version must be made available.\n\n### What you can do\n\n| Permissions                                                                                                                       | Conditions                                                                                                                                                                                                  | Limitations                                                                                                            |\n|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|\n| \u003cdetails\u003e\u003csummary\u003e🟢 Commercial use\u003c/summary\u003eThe licensed material and derivatives may be used for commercial purposes.\u003c/details\u003e | \u003cdetails\u003e\u003csummary\u003e🔵 Disclose source\u003c/summary\u003eSource code must be made available when the licensed material is distributed.\u003c/details\u003e                                                                       | \u003cdetails\u003e\u003csummary\u003e🔴 Liability\u003c/summary\u003eThis license includes a limitation of liability.\u003c/details\u003e                     |\n| \u003cdetails\u003e\u003csummary\u003e🟢 Distribution\u003c/summary\u003eThe licensed material may be distributed.\u003c/details\u003e                                    | \u003cdetails\u003e\u003csummary\u003e🔵 License and copyright notice\u003c/summary\u003eA copy of the license and copyright notice must be included with the licensed material.\u003c/details\u003e                                                | \u003cdetails\u003e\u003csummary\u003e🔴 Warranty\u003c/summary\u003eThis license explicitly states that it does NOT provide any warranty.\u003c/details\u003e |\n| \u003cdetails\u003e\u003csummary\u003e🟢 Modification\u003c/summary\u003eThe licensed material may be modified.\u003c/details\u003e                                       | \u003cdetails\u003e\u003csummary\u003e🔵 Network use is distribution\u003c/summary\u003eUsers who interact with the licensed material via network are given the right to receive a copy of the source code.\u003c/details\u003e                     |                                                                                                                        |\n| \u003cdetails\u003e\u003csummary\u003e🟢 Patent use\u003c/summary\u003eThis license provides an express grant of patent rights from contributors.\u003c/details\u003e     | \u003cdetails\u003e\u003csummary\u003e🔵 Same license\u003c/summary\u003eModifications must be released under the same license when distributing the licensed material. In some cases a similar or related license may be used.\u003c/details\u003e |                                                                                                                        |\n| \u003cdetails\u003e\u003csummary\u003e🟢 Private use\u003c/summary\u003eThe licensed material may be used and modified in private.\u003c/details\u003e                    | \u003cdetails\u003e\u003csummary\u003e🔵 State changes\u003c/summary\u003eChanges made to the licensed material must be documented.\u003c/details\u003e                                                                                             |                                                                                                                        |\n\n*Information provided by [https://choosealicense.com/licenses/agpl-3.0/](https://choosealicense.com/licenses/agpl-3.0/)*\n\n**This information is provided for general understanding and is not legal advice.**\n\n## Contributing\n\nThe !3 project is open source and welcomes contributions. It is structured across multiple repositories, each serving a specific purpose:\n\n- [main](https://github.com/not-three/main) - Contains deployment documentation, shell scripts, and overall project setup.\n- [ui](https://github.com/not-three/ui) - The web interface for !3, built with Nuxt (Vue) and TypeScript.\n- [api](https://github.com/not-three/api) - The backend API, written in TypeScript using the NestJS framework.\n- [cli](https://github.com/not-three/cli) - Command-line interface for !3, built with TypeScript and the NestJS commander framework.\n- [sdk](https://github.com/not-three/sdk) - A TypeScript SDK usable in both browser and Node.js environments.\n- [draw](https://github.com/not-three/draw) - A wrapper for Excalidraw using React and TypeScript, used for visual/paste sharing.\n\n\u003e Note: The main repository is the central place for reporting bugs, submitting suggestions, and discussing ideas.\n\u003e It is the only repository in the organization with issues enabled.\n\n### Legal Notice for Contributors\n\nThe project is licensed under the GNU Affero General Public License (AGPL). If you contribute to this project:\n\n- Your contributions will be automatically licensed under the AGPL.\n- If you later reuse your contributions in another project or deploy a modified version of the software, you are responsible for complying with the AGPL's terms.\n- In particular, if you make the software available over a network (e.g., by hosting it), you are legally required to provide the corresponding source code to users of your deployment.\n\nBy contributing, you acknowledge and accept these terms. If in doubt, seek legal advice before submitting a contribution.\n","funding_links":[],"categories":["Shell"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-three%2Fmain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnot-three%2Fmain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-three%2Fmain/lists"}