{"id":13674719,"url":"https://github.com/nymanjens/piga","last_synced_at":"2026-01-02T10:14:34.634Z","repository":{"id":148035754,"uuid":"140886792","full_name":"nymanjens/piga","owner":"nymanjens","description":"List editor for power users, backed by a self-hosted server","archived":false,"fork":false,"pushed_at":"2025-04-28T08:45:33.000Z","size":2647,"stargazers_count":76,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-28T10:00:54.532Z","etag":null,"topics":["selfhosted","todolist","website"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nymanjens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["nymanjens"]}},"created_at":"2018-07-13T19:42:50.000Z","updated_at":"2025-04-28T08:45:38.000Z","dependencies_parsed_at":"2024-01-24T12:10:55.787Z","dependency_job_id":"6ae43813-68b0-4c26-affa-65e54fde5fd8","html_url":"https://github.com/nymanjens/piga","commit_stats":null,"previous_names":[],"tags_count":92,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nymanjens%2Fpiga","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nymanjens%2Fpiga/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nymanjens%2Fpiga/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nymanjens%2Fpiga/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nymanjens","download_url":"https://codeload.github.com/nymanjens/piga/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251330383,"owners_count":21572278,"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":["selfhosted","todolist","website"],"created_at":"2024-08-02T11:00:57.945Z","updated_at":"2026-01-02T10:14:34.588Z","avatar_url":"https://github.com/nymanjens.png","language":"Scala","funding_links":["https://github.com/sponsors/nymanjens"],"categories":["Software"],"sub_categories":["Task Management \u0026 To-do Lists"],"readme":"Task Keeper\n===========\n\n[![CI Status](https://github.com/nymanjens/piga/actions/workflows/ci.yml/badge.svg)](https://github.com/nymanjens/piga/actions)\n\nThis project aims to be a list editor for power users.\n\nExample use cases:\n\n* A TODO list\n* A list of meals and ingredients\n* Notes from a meeting\n* A list of things to remember\n\n## Features\n\n* Document editing:\n    * Productivity **shortcuts** for actions such as 'remove task', 'swap task down',\n      'open link', 'convert selection to lower case', ...\n    * Ability to **collapse** all indented tasks beneath selected task\n    * Tasks can have **tags**\n* Many documents:\n    * Easy **switching** between documents\n\n## Screenshot\n\n![screenshot](screenshot.png \"Screenshot\")\n\n## Installation from release\n\n- Install Java 11 (JDK 11) on your server\n- Download \"Binaries (compiled files) with demo configuration\" from the [latest\n  release](https://github.com/nymanjens/piga/releases)\n- Unpack the archive\n- Open `conf/application.conf` in the unpacked folder:\n  - Configure a database. The easiest way is to set up a MariaDB server locally,\n    create an empty database called `piga` and configure it as follows:\n\n```\ndb.default.driver=com.mysql.jdbc.Driver\ndb.default.url=\"jdbc:mysql://localhost/piga?user=mysqluser\u0026password=mysqlpassword\"\ndb.default.slick.profile = \"slick.jdbc.MySQLProfile$\"\n```\n\n  - Choose secret values for `play.http.secret.key` and `app.setup.defaultPassword`\n\n- Open a terminal in the unpacked folder\n- Run following commands to get the app running:\n\n    ```\n    # Create database tables\n    bin/server -DdropAndCreateNewDb\n\n    # Create admin user\n    bin/server -DcreateAdminUser\n\n    # Run application\n    bin/server\n    ```\n\n- Browse to http://\u003cip_address\u003e:9000/app/useradministration (username: \"admin\", password: \"changeme\")\n\n## Installation with Docker\n\nThe following commands will launch a new server alongside a database in Docker containers:\n\n```\n# Get the docker-compose.yml file\nwget https://raw.githubusercontent.com/nymanjens/piga/master/docker-compose.yml\n\n# Choose a unique random string here of sufficient length\nexport APPLICATION_SECRET=\"$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)\"\n\n# Create an empty database with a single admin user\ndocker-compose run web bin/server -DdropAndCreateNewDb\ndocker-compose run web bin/server -DcreateAdminUser\n\n# Bring up the server\ndocker-compose up\n```\n\nWhen done, browse to http://\u003cip_address\u003e:9000/app/useradministration (username: \"admin\", password: \"changeme\")\n\n## Configuration\n- `conf/application.conf`:\u003cbr\u003e\n  Setup and configure a database here.\n- Add users:\u003cbr\u003e\n  A default user is created with the `-DcreateAdminUser` flag (username: admin, password:\n  changeme). This account can create new users.\n\n## Shortcuts\n\n- **Basics**\n    - **Indentation**\n        - `tab`: Increase current indentation\n        - `shift + tab`: Decrease current indentation\n    - **Formatting**\n        - `ctrl + I`: Toggle 'italic'\n        - `ctrl + B`: Toggle 'bold'\n        - ``ctrl + `` `: Toggle 'code font'\n        - `alt + shift + 5`: Toggle 'strikethrough'\n        - `ctrl + \\`: Reset formatting\n    - **Undo/redo**\n        - `ctrl + Z`: undo\n        - `ctrl + Y`: redo\n        - `ctrl + shift + Z`: redo\n- **Special actions**\n    - `ctrl + K`: Create or edit a link\n    - `alt + shift + T`: Create or edit a tag\n    - `ctrl + P`: Open \"Go to file\" dialog\n    - `ctrl + plus`: Expand current task\n    - `ctrl + minus`: Collapse current task\n    - `alt + shift + 4`: Mark as 'done'\n- **Power user shortcuts**\n    - **Copying**\n        - `ctrl + shift + C`: Copy selected task and its children\n        - `ctrl + shift + X`: Cut selected task and its children\n        - `alt + shift + M`: Copy selected task and its children as Markdown\n    - **Tasks**\n        - `alt + up`: Swap current task with the previous task\n        - `alt + down`: Swap current task with the next task\n        - `ctrl + shift + P`: Go to the parent task\n        - `ctrl + D`: Delete current task\n        - `ctrl + shift + B`: Duplicate current task\n    - **Change casing**\n        - `ctrl + alt + U`: Convert selection to uppercase\n        - `ctrl + shift + U`: Convert selection to uppercase\n        - `ctrl + alt + L`: Convert selection to lowercase\n        - `ctrl + shift + L`: Convert selection to lowercase\n        - `alt + shift + L`: Convert selection to CamelCase\n        - `alt + shift + K`: Convert selection to snake_case\n        - `alt + shift + H`: Convert selection to dash-case\n    - **Selection**\n        - `ctrl + enter`: Open selected link\n        - `ctrl + M`: Select current word\n        - `ctrl + shift + M`: Select current quoted sentence\n        - `ctrl + J`: Select current task\n        - `ctrl + G`: Find next occurrence of selected text\n    - **Other**\n        - `ctrl + Q`: Go to the last edit\n        - `ctrl + shift + delete`: Delete the remainder of the line after the cursor\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnymanjens%2Fpiga","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnymanjens%2Fpiga","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnymanjens%2Fpiga/lists"}