tocry v0.12.0
ToCry
tocry
is a simple, self-hosted Kanban-style TODO application. It's designed to be a straightforward tool for managing tasks across different stages or categories. The name comes from the eternal question every developer faces when looking at their task list: "Are you going ToDo or ToCry?"
Features
- Kanban Board: Organize notes into customizable lanes.
- Drag & Drop: Easily move notes between lanes and reorder lanes themselves
- Rich Text Notes: Write notes in Markdown, with a comfortable WYSIWYG editor
- Inline Editing: Quickly rename lanes by clicking on their titles
- Live Search: Instantly filter all notes by title, content, or tags
- Collapsible Notes: Collapse notes with content to keep your board tidy
- Light & Dark Modes: Switch between themes for your viewing comfort
- Responsive UI: A clean interface that works on different screen sizes
- Image Uploading: Just paste an image and it's uploaded and linked
- Color Schemes: Choose between 20 color schemes
Installation From Source
This project is built with the Crystal programming language.
-
Clone the repository:
git clone https://github.com/ralsina/tocry.git cd tocry
-
Install Crystal dependencies:
shards install
-
Build the application for production:
shards build --release
-
Run the server:
./bin/tocry
-
Open your browser and navigate to
http://localhost:3000
.
Authentication
tocry
supports three authentication modes, determined by environment variables set when the application starts. The modes are prioritized in the following order: Google OAuth, Basic Authentication, and then No Authentication.
-
Google OAuth (if you want multiple users)
-
Description: Users authenticate using their Google account. This mode provides a secure and user-friendly login experience.
-
How to Enable: Set the
GOOGLE_CLIENT_ID
andGOOGLE_CLIENT_SECRET
environment variables.- You'll need to create an OAuth 2.0 Client ID in the Google Cloud Console.
- Ensure your "Authorized redirect URI" is set to
http://localhost:3000/auth/google/callback
(adjust host/port if running on a different address).
-
Example:
export GOOGLE_CLIENT_ID="your_client_id" export GOOGLE_CLIENT_SECRET="your_client_secret" crystal run src/main.cr
-
-
Basic Authentication (If you just want a password)
-
Description: A simple username/password prompt is presented by the browser. All users share the same credentials. This mode is suitable for private deployments where Google OAuth is not desired.
-
How to Enable: Set the
TOCRY_AUTH_USER
andTOCRY_AUTH_PASS
environment variables. This mode will be used if Google OAuth variables are not set. -
Example:
export TOCRY_AUTH_USER="admin" export TOCRY_AUTH_PASS="your_secure_password" crystal run src/main.cr
-
-
No Authentication (Default, if it's just for you and it's not exposed)
-
Description: No login is required. Anyone can access the application. This is the default mode if neither Google OAuth nor Basic Authentication environment variables are set.
-
How to Enable: Do not set any of the authentication-related environment variables (
GOOGLE_CLIENT_ID
,GOOGLE_CLIENT_SECRET
,TOCRY_AUTH_USER
,TOCRY_AUTH_PASS
). -
Example:
crystal run src/main.cr
-
Running with Docker
As an alternative to building from source, you can run tocry
using a Docker container. Remember to set environment variables for authentication as needed, using the -e
flag in the docker run
command.
-
Create a data directory: Create a directory on your host machine to store
tocry
's data. This is essential to ensure your data persists if the container is removed or updated.mkdir -p /path/to/your/data
-
Run the container: Run the container, making sure to replace
/path/to/your/data
with the absolute path to the directory you just created.docker run -d --restart unless-stopped --name tocry -p 3000:3000 \ -v /path/to/your/data:/data ghcr.io/ralsina/tocry:latest
-d
: Runs the container in the background.--restart unless-stopped
: Ensures the container restarts automatically.--name tocry
: Gives the container a memorable name.-p 3000:3000
: Maps port 3000 on your machine to port 3000 in the container.-v /path/to/your/data:/data
: Mounts your local data directory into the container. This is crucial for data persistence.
Note: The image
ghcr.io/ralsina/tocry:latest
is foramd64
architectures. Anarm64
image is also available atghcr.io/ralsina/tocry-arm64:latest
.
- Open your browser and navigate to
http://localhost:3000
.
Using Docker Compose
For an even simpler setup, you can use Docker Compose. Remember to set environment variables for authentication as needed, using the environment
section in the docker-compose.yml
file.
-
Create a
docker-compose.yml
file in your project directory with the following content (or use the one included in this repository):version: '3.8' services: tocry: image: ghcr.io/ralsina/tocry:latest # For arm64 architectures, use the following image instead: # image: ghcr.io/ralsina/tocry-arm64:latest container_name: tocry restart: unless-stopped ports: - "3000:3000" volumes: - ./data:/data
-
Run the application from the same directory as your compose file:
docker compose up -d
This will automatically create a
data
directory in the current folder to store persistent data.
Usage
Once the application is running, you can manage your tasks through the web interface:
- Add a Lane: Click the
+
button in the header to create a new column - Rename a Lane: Click directly on a lane's title, type the new name, and press
Enter
or click away to save - Add a Note: Click the
+
button in a lane's header - Edit a Note: Double-click on a note card to open the full editor
- Move Items: Click and drag lanes or notes to reorder them
- Search: Use the search bar in the header to filter all visible notes
- Switch Theme: Use the 🌙/☀️ button to toggle between light and dark modes
Development
To run the application in development mode:
-
Follow steps 1 and 2 from the Installation section.
-
Run the development server:
crystal run src/tocry.cr
The server will start on http://localhost:3000
.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Contributors
- Roberto Alsina - creator and maintainer
tocry
- 31
- 2
- 1
- 0
- 9
- 17 days ago
- June 20, 2025
MIT License
Fri, 18 Jul 2025 14:38:17 GMT