{"id":15027001,"url":"https://github.com/xy2z/pinedocs","last_synced_at":"2025-07-28T19:08:39.581Z","repository":{"id":37413183,"uuid":"76503357","full_name":"xy2z/PineDocs","owner":"xy2z","description":"A fast and lightweight site for viewing files","archived":false,"fork":false,"pushed_at":"2023-03-08T05:00:54.000Z","size":427,"stargazers_count":143,"open_issues_count":23,"forks_count":19,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-09T20:44:03.216Z","etag":null,"topics":["documentation","floss","foss","markdown","php","php8","selfhosted","website","wiki","yaml"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xy2z.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","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},"funding":{"github":["xy2z"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2016-12-14T22:45:19.000Z","updated_at":"2025-04-04T19:52:36.000Z","dependencies_parsed_at":"2025-02-15T20:33:19.116Z","dependency_job_id":"cd3a5842-fdf4-46c4-99c7-285f1598570c","html_url":"https://github.com/xy2z/PineDocs","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/xy2z/PineDocs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xy2z%2FPineDocs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xy2z%2FPineDocs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xy2z%2FPineDocs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xy2z%2FPineDocs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xy2z","download_url":"https://codeload.github.com/xy2z/PineDocs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xy2z%2FPineDocs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267569696,"owners_count":24109125,"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","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["documentation","floss","foss","markdown","php","php8","selfhosted","website","wiki","yaml"],"created_at":"2024-09-24T20:05:35.930Z","updated_at":"2025-07-28T19:08:39.424Z","avatar_url":"https://github.com/xy2z.png","language":"PHP","funding_links":["https://github.com/sponsors/xy2z"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# PineDocs\n\n**A fast and lightweight site for viewing files.**\n\nGreat for documentation, wiki, examples, notes, documents, galleries, storage, etc.\n\n---\n\n[Docker Hub](https://hub.docker.com/r/xy2z/pinedocs/) | [Screenshots](https://imgur.com/a/15Gq67X) | [Setup](#setup) | [Configuration](#configuration) | [Sponsor](https://github.com/sponsors/xy2z)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/xy2z/PineDocs/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/xy2z/pinedocs?style=flat-square\u0026include_prereleases\u0026sort=semver\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/xy2z/pinedocs\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/xy2z/pinedocs?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/xy2z/pinedocs\"\u003e\u003cimg src=\"https://img.shields.io/docker/cloud/build/xy2z/pinedocs?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/xy2z/PineDocs/blob/master/LICENSE.txt\"\u003e\u003cimg src=\"https://img.shields.io/github/license/xy2z/pinedocs?style=flat-square\u0026color=blue\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/xy2z/PineDocs/graphs/contributors\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors/xy2z/pinedocs?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/xy2z/PineDocs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/xy2z/pinedocs/help%20wanted?label=help%20wanted%20issues\u0026style=flat-square\u0026color=f26222\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003c/div\u003e\n\n![Pinedocs Screenshot](https://i.imgur.com/m0EC4U6.png)\n_See more screenshots at https://imgur.com/a/15Gq67X_\n\n\n## Sponsor\n💚 Please consider sponsoring or donating to keep this project active - https://github.com/sponsors/xy2z\n\n\n## Features\n\n- No database.\n- No building.\n- Fast - using ajax and cache.\n- Supports Markdown, plaintext, HTML, code, images, SVG, GIFs, MathJax, PDFs, audio and small videos. Basically anything you can render in a browser.\n- Responsive layouts and different color schemes (see screenshots [here](https://imgur.com/a/15Gq67X))\n- Syntax highlighting for over 169 languages with over 77 themes.\n- Configuration (see below).\n- Quick filtering in files.\n- Use your existing files or existing git repos as content.\n- Files are cached client-side after first view, so it loads instantly.\n- Hidden folders - only accessible via direct links.\n- Remembers scroll position per page.\n\n\n## Read-Only Site\nPineDocs is read-only, meaning you can only view files and not edit them via PineDocs. This is not a wiki replacement with user login, revisions etc. This is basically a simple site that renders everything in your content dir. So you need to edit the files on your server/PC in order to change the content.\n\n\n## Setup\n\n### Docker\n\nDocker is the easiest way to setup PineDocs.\n\n#### Docker-compose.yml\n```yaml\nversion: '3'\n\nservices:\n  web:\n    image: xy2z/pinedocs:1.2.5\n    ports:\n      - 3000:80\n    volumes:\n      - ./data:/data/pinedocs\n```\n\nAfter running `docker-compose up -d` you can change the config in `./data/config/config.yaml`, and add your files (or git clone your repository) in the `./data/files` dir.\n\nChanges will take affect when you reload the page - no need to restart the container.\n\n#### Docker\n\nAltough docker-compose is recommended, you can also use pure Docker:\n\n`docker run -itd -v \"$PWD\"/data:/data/pinedocs -p 3000:80 xy2z/pinedocs`\n\nSee more at https://hub.docker.com/r/xy2z/pinedocs/\n\n### Manual Setup\n\n#### Requirements\n\n- PHP 8.0 (mininum required php version is PHP 7.2.5)\n- Composer for dependencies.\n- A web server (apache2, nginx, etc.)\n\n#### Setup guide\n\n1. [Download the latest release](https://github.com/xy2z/PineDocs/releases) or run `git clone`\n1. Run `composer install` in the root to get dependencies.\n1. Setup the web server to the `PineDocs/public` dir (use `php -S localhost:89 -t public` for testing)\n1. (Optional) Rename the file `config/config-example.yaml` to `config/config.yaml` for changing settings (see below)\n1. (Optional) Rename the file `config/mathjax-example.js` to `config/mathjax.js` for changing settings of Mathjax (see below)\n1. (Optional) Change the file `config/custom.js` when using Docker to customize Javascript\n1. (Optional) Change the file `config/custom.css` when using Docker to customize CSS\n\n\n## Configuration\n\nFeel free to edit the `config/config.yaml` file to fit your needs.\n\nYou can [configure Mathjax](https://docs.mathjax.org/en/latest/options/index.html#configuring-mathjax-1) by editing the `config/mathjax.js` file.\n\n\n#### Settings\n\n- **`title`** (string) The title of the site, used in logo, tabs and bookmarks.\n\n- **`content_dir`** (string) Path to the dir you want to use. Default is the PineDocs/content/ dir.\n\n- **`index`** (string) Relative path to the index file. Default is array of `index.md`, `index.html`, `index.txt`, `index`.\n\n- **`layout`** (string) Available layouts: `default`, `wiki`.\n\n- **`color_scheme`** (string) Available color schemes: `pinedocs`, `simplistic`, `simplistic-dark`, `twilight`.\n\n- **`highlight_theme`** (string) The theme to use for code. See a list at https://highlightjs.org/static/demo/\n\n- **`code_transparent_bg`** (bool) If `true`, all will use the highlight theme. If `false`, the background will be transparent.\n\n- **`open_dirs`** (int|string) The number of levels of dirs that should be opnened on page load. Use `all` to open all dirs.\n\n- **`render_footer`** (bool) Render the menu footer?\n\n- **`exclude_files`** (array) List of files or dirs to exclude. Supports regex if the format is /regex/i.\n\n- **`show_file_extension`** (bool) Show file extensions. Default is true.\n\n- **`menu_link_format`** (string) Values: default, ucfirst, ucwords, uppercase, lowercase.\n\n- **`render_max_file_size`** (float) Max file size (in MB) to render. If file is larger, a download link will be shown. Default is `50`.\n\n- **`font_family`** (string) The font used for menu and content. Default is `Tahoma`.\n\n- **`font_size`** (string) The font size in menu and content. Default is `15px`.\n\n- **`no_extension_markdown`** (bool) Render files with no extension as markdown, eg `README`. Default `true`.\n\n- **`break_code_blocks`** (bool) Break code blocks in multiple lines instead of horizontally scrolling. Default `false`.\n\n- **`hide_folders_in_navigation`** (array) A list of folders to hide from frontend navigation. Case-insensitive. Default is none.\n\n- **`enable_mathjax`** (bool) Enable MathJax. Must be enabled for `mathjax.js` to work. Default is `false`.\n\n\n## License\n\nGNU GPLv3. See LICENSE.txt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxy2z%2Fpinedocs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxy2z%2Fpinedocs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxy2z%2Fpinedocs/lists"}