Skip to content

Releases: tiko-run/tiko

v2026.10.10

Choose a tag to compare

@github-actions github-actions released this 08 Oct 21:53

Changed

  • Sign-in asks for a username and a password. An upgraded instance creates the account admin with the instance password it had, so you sign in as admin and find every board and the tracker connection as before. After that DRAWHL_PASSWORD and data/password are no longer read.
  • API: POST /api/auth/login takes {username, password} and answers invalid_credentials instead of invalid_password; GET /api/auth/status also returns me. Sessions are stored on the server, so signing out ends the session for good.

Added

  • Settings → Profile and Security: change your name, username and password, and sign out everywhere. Changing the password signs out your other devices.

  • Settings open in a window over the board with sections: Profile, Security, Preferences (theme, paste text as) and, for admins, Task source. Open it from the main menu or with ⌘,; the section stays in the link (?settings=security). On a narrow screen it fills the screen and lists the sections first.

  • The main menu shows who is signed in and ends with "Sign out".

  • Settings → People for admins: invite people with a one-time link (7 days, no mail needed), make someone admin or member, disable them, or give them a password reset link (24 hours). Open links are listed and can be revoked.

  • python -m app.reset_password <username> in the api container prints a reset link for a locked-out admin.

  • Board sharing: each board has an owner. "Share" in the top bar adds people as editors or viewers, opens the board to everyone in drawhl, or hands it to a new owner. Viewers get a "View only" board with no toolbar, and the server refuses their saves. A board you cannot open is not in your list. Admins act as owner on every board and find the others under "All boards". Each new person gets their own welcome board.

  • Each person connects their own Jira token in Settings → My tracker, and cards show each person what their own Jira access allows. Task data is fetched and cached per person, so a shared board never shows a task through someone else's token. Without a token a card shows its key and "Connect your Jira token to see this task". An upgraded instance keeps its token as the admin's. Task source (admins) holds the provider, the Jira URL and the refresh interval; moving to another URL asks everyone to enter their token again.

  • DRAWHL_TRACKER and JIRA_BASE_URL set the tracker at deploy time, so drawhl can be handed over with Jira already in place: admins only invite people and everyone adds their own token. Settings → Task source shows them read-only.

  • API: GET /api/boards returns {boards, all}, and every board carries my_role and owner. New routes: /api/boards/{id}/members, /everyone, /transfer, /api/people/directory and /api/me/tracker. PUT /api/settings is for admins; its jira.token becomes the admin's own token, and jira.token_state in GET /api/settings is the caller's. Tasks gain the state no_token.

  • A logo: the emblem is a dot grid where one dot grew into a card. The app has a favicon and a home screen icon, the sign-in screen and the About panel show the emblem, and the user guide shows the logo. Logo files, the app icon and social covers for GitHub and Product Hunt are in brand/.

v2026.10.9

Choose a tag to compare

@github-actions github-actions released this 08 Oct 19:57

Changed

  • Release numbers are now YYYY.M.N, counting releases within the month, so a hotfix can ship on the same day. The next release after 2026.10.8 is 2026.10.9; image tags and update checks work as before.

Added

  • Password sign-in: every instance asks for a password before it shows boards or answers the API. Set it with DRAWHL_PASSWORD, or leave it empty and drawhl generates one on first start, prints it to the API log and saves it to data/password. The Railway template generates it too. A sign-in lasts 30 days; "Sign out" is in Settings. /metrics now needs a sign-in as well.
  • Deploy on Railway: a one-click template in the README and the quick start guide runs the released images with boards on a volume and a generated encryption key.

Fixed

  • A tab left open across an upgrade no longer goes blank when it opens a board: it reloads once to get the new version.

v2026.10.8

Choose a tag to compare

@github-actions github-actions released this 08 Oct 16:38

Fixed

  • The web container no longer loses the API after the API restarts on a new address, as it does on every redeploy on Railway or Render. The API address is now set with API_UPSTREAM (default api:8000), so the web image runs on hosts without compose networking.
  • The keyboard shortcuts list shows the second Redo shortcut as ⌃Y on macOS and Ctrl+Y elsewhere instead of CTRL Y.

v2026.10.7

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:20

Added

  • User guide at smacktur.github.io/drawhl: quick start, adding tasks, search, Gantt, timers, keyboard shortcuts and self-hosting. It is written in docs/guide/ and published on every change to main.
  • Paste onto the board: ⌘V over the board turns copied text into a text element at the pointer, or a sticky note if you pick that under "Paste text as" in Settings. When the clipboard holds only task keys or task links, for example the URLs of several open Jira tabs, each one becomes a card, up to 50 in a grid; keys that cannot be added are listed in a short notice. Elements copied in drawhl paste as before.
  • Long text in a sticky note gets smaller as you type so it always stays inside the note, and grows back when you delete or make the note bigger. A note holds up to 2000 characters: past that, typing and pasting stop and a "no entry" sign flashes over it. Older, longer notes still show in full.
  • A fresh install opens on "Welcome to drawhl", a sample board with demo task cards in frames, sticky notes on what to try, arrows, a Gantt with a milestone and a dependency, and a timer. Everything on it can be moved, edited or deleted, and once deleted it does not come back. Upgrades keep their boards and get no sample. A board that was never saved opens fitted to the screen.
  • Search on the board: press ⌘K or ⌘F (Ctrl+K, Ctrl+F on Windows and Linux) or pick "Search" in the main menu, and type. The palette finds any text on the board: sticky notes, text, frame titles, Jira cards by key, title, status, assignee, type or priority, timer notes, modules, Gantt rows and milestones. Several words narrow the results, matches are highlighted and each row says where it lives. Arrows and Enter, or a click, move the board to the element, select it and flash it. An empty search lists your recent jumps and the board's frames. A query typed in the wrong keyboard layout (Russian or English) still finds what you meant.
  • Search previews and highlights: moving through results with the arrow keys moves the board to each one, in the space under the palette, and Esc puts the board back where it was. While you search, matches are ringed on the board and everything else fades. ⌘Enter or "Select all N" selects every match and fits them in view, ready to collapse, move or delete together.
  • Search filters: type @anna, status:review, type:bug or priority:high to narrow search to Jira tasks, and start with # to find only frames and modules. While you type a filter, the palette suggests the values on the board with task counts; Tab or Enter turns one into a chip. Several values of one field mean any of them, different fields must all match. Backspace in an empty input turns the last chip back into text; values with spaces go in quotes: @"Anna Lee".
  • Commands in search: the palette also offers app commands with their shortcuts (add a sticky note, text, frame, timer, Jira card or Gantt, show timers or the focus timer, switch the theme, keyboard shortcuts, settings, new or renamed board) and other boards by name as "Go to board". Start with > to list only commands and boards, or open the palette right there with ⌘P or ⌘⇧P (Ctrl on Windows and Linux) or "Commands" in the main menu; pressing it again in the palette narrows to commands, then closes.
  • Timers on the board: a small amber cube that counts down next to the thing you are waiting for. Pick the Timer tool (R) and click a card, sticky note, text or module, or right-click one and choose "Add timer"; it attaches beside the element, moves with it and goes away with it. A timer on an empty spot stays on its own. Click the cube to note what you are waiting for and set when it goes off: 15m, 1h 30m, tomorrow 10:00, fri 9:00, 25.10.2026 15:00. When the time comes you get a browser notification and a chime, the cube turns coral, the tab title shows a count, and a note at the top right offers Done, +10 min and +1 hour. Timers that went off while the board was closed are listed when you open it.
  • Timer list: a button left of the sync indicator counts the board's running timers, with a coral badge for those that went off; hover it to see the next one. It opens a panel with every timer of the board, grouped as Gone off, Today, Later, Waiting for status and Done. Click a row to move the board to that timer; the panel stays open until Esc or ×. "Timers" in the main menu opens it too.
  • Timers can wait for the tracker: on a Jira card, pick "When the status changes" and the timer goes off as soon as the board sees the task leave its current status, with the new status in the notification. While such a timer waits, the board keeps checking the tracker even when its tab is in the background, so the notification comes while you are in the tracker. Clock timers can repeat every day, on weekdays or every week; Done moves a repeating timer to its next time.
  • Focus timer: a pomodoro capsule at the top center of the screen. Start 25 minutes of focus with one click; a chime and a browser notification mark the end, then a 5 minute break, and a 15 minute one after every fourth round. The capsule's color shows the state: gray at rest, green warming to raspberry as the focus runs out, blue on pause, lavender on a break; hover its icon for the state and round. The sliders button sets the lengths, rounds, sound, notification and auto start, and skips or resets the cycle. The countdown survives a reload. Hide it from the main menu.
  • Background music under the focus timer: seven built-in lofi tracks (CC0, from OpenGameArt) play in a loop from the capsule's player row. Pick a track, set the volume or add your own audio files in the Music tab of the timer settings; your files stay in this browser (IndexedDB) across reloads until you remove them, and are never uploaded. The Music tab shows how much space they take and whether the browser protects them from automatic cleanup, and names any file it could not keep. Music pauses on breaks and comes back with the next focus, unless you turn that off.
  • Arrows can point at a spot instead of an element: drag an arrow from a handle and release it over empty space. Its free end shows a dot on hover; drag it to point elsewhere. Deleting the arrow removes its free end too.
  • Smart guides: a dragged element snaps to the edges and centers of the others on screen and to an equal gap in a row or column, with dashed alignment lines and gap markers like in Miro. Resizing snaps to the width or height of the others and marks each element of that size. Hold Alt to move or resize freely. The sticky color bar and module controls hide while you drag.
  • About button in the bottom left: what drawhl is, the running version with a link to its release notes, and links to the source on GitHub, documentation and issues.
  • Modules: interactive blocks added from the Modules button in the toolbar (M) or the right-click menu. The first one is Gantt: a timeline over days, weeks, months or quarters, with its own name (double-click the header), a line for today, start and end dates, and "+" buttons that add a calendar quarter on either side. Stretch the block to give each day more room.
  • Gantt rows: drop a Jira card onto a Gantt to plan it as a bar at the drop date, or use "Add" in the module: a task from the tracker by key, link or JQL, or a plain task that lives only on the board. Bars show the task's live status color, and done tasks are struck through. Drag a bar to move it, drag its ends to change the dates, drag a row's label to reorder it, or drag it out onto the board to turn it back into a card (plain rows become sticky notes). Plan dates stay on the board and are never written to Jira. Drag the border of the task column to show more of the titles.
  • Gantt rows form a tree: nest tasks and plain rows under each other up to five levels by dragging a row label right or with the indent buttons, and add a row under any row. A row with children keeps its own dates and always covers its children (a task keeps its key, title and status color): stretch it wider than its children, drag it to move the whole branch, and collapse it. A child that moves past its parent's edge pushes the parent out. A task row opens in the tracker from its own link button, so dragging never opens it by accident. Deleting a parent keeps its children one level up.
  • Gantt milestones and dependencies: add a milestone from the module controls, rename it with a double-click and drag it to its date. Drag the dot past a bar's end onto another row to say that row starts after this one; the line follows both bars and turns amber when the second one starts before the first ends. Click a line to remove it; deleting a row removes its lines. Hover a bar to see its exact dates and length; they follow the bar while you drag it or its ends. A milestone shows its date on hover.
  • Update notice: when a newer drawhl release is out, the About button gets a dot and the panel links to what's new and how to upgrade. The server asks GitHub at most every 6 hours; UPDATE_CHECK=false turns it off.

Changed

  • Panels, menus and dialogs scroll with thin scrollbars in the theme's colors instead of the browser's default bars.
  • drawhl is now licensed under the GNU AGPL v3 (AGPL-3.0-only) instead of MIT. Using and self-hosting it stays free; if you modify drawhl and offer it over a network, you share your changes under the same license. Contributions need the CLA, and the name and logo follow TRADEMARKS.md. Releases up to v2026.10.6 remain available under MIT.
  • The Theme item in the main menu has an icon.
  • The sync indicator shows only a colored dot and the last sync time: green when every tracker syncs, amber when some fail, red when none do. Click it to see each tracker with its last sync and the reason it fails.

Fixed

  • A plain Gantt row's title opens for editing on a double-click again.
  • A selection box no longer picks up ...
Read more

v2026.10.6

Choose a tag to compare

@github-actions github-actions released this 06 Oct 03:57

Added

  • Boards on an infinite canvas: add Jira task cards by key or link, pan, zoom and drag; boards save automatically and reopen as left. Works out of the box with built-in demo tasks.
  • Connect Jira Data Center with a personal access token in Settings; the token is encrypted at rest with DRAWHL_SECRET_KEY and never sent back to the browser.
  • Card statuses refresh on their own while a board is open (every 30 s by default, configurable), with one batched Jira request per board, an "updated N s ago" indicator, "Refresh all" and automatic backoff when Jira struggles. Closed tasks are struck through.
  • Frames, sticky notes, free text and arrows. Drop cards and notes into a frame to group them; moving the frame moves everything inside, and deleting it keeps the contents. Box-select or shift-click to move or delete several items.
  • Right-click menu on the canvas: add a Jira card, frame, sticky note or text at the clicked spot, or delete the selection.
  • Keyboard shortcuts for tools (V, H, F, N, T, C), copy and paste at the cursor, duplicate and select all; press ? for the full list.
  • Add several Jira cards at once: separate keys or links with commas, and they are laid out in a grid. Keys that fail stay in the field with their errors.
  • Draw a frame by dragging; a new frame takes in the elements under it.
  • Click a card to open a mini-card with assignee, priority, last update and an "Open in Jira" link. Collapse cards to a single line with key and status from the mini-card or, for the whole selection, from the right-click menu; the state is saved with the board.
  • Rename or delete the current board from the board menu; deleting asks first.
  • Add cards by JQL: type a query such as project = DEV AND status != Done into the Jira card input, and up to 50 matching tasks are laid out in a grid. Jira's own error is shown for a broken query.
  • JQL suggestions in the Jira card input, from your own Jira: field names (custom fields too), the operators each field allows, values such as statuses and people, then AND, OR or ORDER BY. Tab inserts a suggestion. Before you press Enter, the hint shows how many tasks match or Jira's error.
  • Undo and redo on the board: Cmd/Ctrl+Z takes back a move, resize, delete, edit or new element, Cmd/Ctrl+Shift+Z or Ctrl+Y brings it back. A drag is one step; text fields keep their own undo.
  • make backup saves a timestamped copy of the database to data/backups/; make up runs it before every rebuild.

Changed

  • Cards are added from the "Jira card" tool in a floating toolbar at the bottom; the card input no longer stays on the canvas.
  • Closing a menu or dialog with the mouse no longer leaves a focus ring on the button that opened it.
  • The board panel is replaced by a compact top bar: a main menu with Settings and Theme (Light, Dark, System; kept in the browser) and the board name with a menu to switch or create boards. The canvas library label is gone.
  • The Jira card input grows with the text and keeps line breaks, so a long or pasted multi-line JQL query stays readable; Shift+Enter starts a new line. Suggestions open above the input, so it no longer jumps while you type.