- Updated the “copy key” function (in the task detail view & in Power Hover) to copy the key with a hyperlink attached, so it appears as a clickable link when pasted into a rich-text document.
- Added an empty state to the saved search view to make it clear when a saved search doesn’t have any tasks that meet the search criteria.
- Tweaked the label and component searches to match the user’s query exactly rather than using a fuzzy match.
- Fixed an issue where leading and trailing spaces would be trimmed too aggressively from the search input.
- Fixed a bug that was preventing users from selecting the title of a task in the Task Detail view.
- Added headers to the sidebar sections for better visual grouping. You’ll now see “Saved Searches” above any searches you have, “Projects & Repos” above projects, and a new “Getting started” section 🍿.
- In the “Getting started” section of your sidebar, you’ll see a few new suggested searches. Click on an item to see search in action, and try saving it for quick access to your tasks!
- Added activity from tasks you’re following to the Activity Page.
- Fixed a bug where the user’s sidebar project selections were forgotten after going through the Jira Cloud re-auth flow.
- Increased the max width of board columns to provide a little more breathing room on large screens.
- Tweaked the new task view so the “Are you sure you want to discard this task?” confirmation doesn’t appear if the form is pristine.
- Adjusted the layout of the New Task view so long descriptions aren’t covered by the “Save” button in the footer.
- Fixed the finicky “click outside to close” behavior of our menu component.
- Fixed a bug that caused changing assignees from one person to another to fail.
- Fixed a bug that caused tasks to disappear from the sprint board if Balsa Build was left running for more than 30 minutes.
- Added support for
component:bar in the search bar, to allow querying for tasks that have the given component.
- Fixed a bug where the emoji for task created and task completed activity would change unexpectedly.
- The Activity page is here 🎉! You can now see PR review requests, recent comments on tasks you’re assigned, progress on tasks you’ve created, and more, all in one view. It’s a great place to catch up on work. Find the “Activity” link in the top of the sidebar to check it out.
- We’ve added the ability to edit saved searches, after creating them! Hit “Edit search query” on any Saved Search, and you’ll be taken to a new “query composer” where you can preview the results of your updated query.
- We’ve also added a requirement that users have a valid login to use Balsa Build. You will now be prompted to reauthenticate if your session expires (every 90 days). You can read more about authorized sessions on our Privacy page.
- Added support for
label:foo in the search bar, to allow querying for tasks that have the given label.
- Added a “Share Balsa” action in the sidebar & the Help menu, to make sharing Balsa with co-workers and friends easier.
- Fixed a bug that caused us to hide the Jira task “Component” field from showing in the task detail view.
- Fixed a bug that was preventing the creation of new Epics.
- Added better display logic when truncating long project & repo names in the sidebar.
- Update the copy of the activity menu button in the task detail view to properly represent the state of the selected activity types.
- Fixed an accessibility bug that was preventing certain sidebar actions from being keyboard navigable.
- Fixed an issue where remote-searching on GitHub from the search bar would include incorrect repo filters.
- Tweaked the label in the Links panel for describing tasks in an epic, to reduce confusion with subtasks.
- Fixed a layout issue when displaying long search strings in the “Web search” links at the bottom of results in the search box.
Under the Hood
- Adjusted our fetching strategy on startup to improve relevance of synced Jira tasks.
- Added support for the
updated clause when searching with JQL for Jira issues, to narrow our sync focus to tasks that have been updated since our last sync.
- Improved our client-side logging of errors and crashes.
- Added a brief hold to the end of onboarding, to ensure that sufficient tasks and projects are synced before loading the “My Tasks” view.
- Swapped the “Creator” and “Assignee” fields in the side panel for Jira tasks, to better match user expectations.
- Fixed a bug that caused some search queries to break the search box for the rest of the session.
- Added UI to indicate when an error has occured in a particular view.
Under the Hood
- Fixed a bug that was throwing errors when attempting to render a pie chart with a zero denominator.
- Added the ability to associate an Epic when creating a new Task.
- Added an activity feed for GitHub tasks in the task view! You can now see a list of historical task activity alongside any task comments, similarly to Jira tasks.
- Removed the “completion progress” pie chart icon from non-sprint board views.
- Fixed a bug where we weren’t scrambling user content for task activity in demo mode.
- Fixed a bug that was preventing status icons from rendering in certain situations.
- Added matchers to ensure that some new custom task statuses we’ve seen in the wild lately get displayed with proper icons in Balsa Build.
- Added links to the pseudo-breadcrumbs in the title bar when viewing a board in a project.
- Fixed a bug where HTML entities in task descriptions were being escaped in list & board views.
- Added a small icon to the title area of the task detail view to indicate the task’s type (for Jira tasks) or review status (for GitHub PRs).
- Improved error handling across the app, to keep things responsive and usable even when errors occur.
- Added search support for “sprint:current” to allow querying for tasks that are in an active sprint.
- Added search support for “epic:TEST-40” to allow querying for tasks that are within the given epic.
- Added a link to our Search 101 document to the search bar, as well a rotating list of suggested searches to help familiarize you with our search syntax.
- Raised the ceiling of search results returned in the search bar from 10 to 50.
- Changed the “save this search” button in the search bar from a cryptic icon to text, for better visibility.
Under the Hood
- Prioritized Jira board and sprint API fetches in the sync engine to help fix missing sprints and boards.
- Updated the descriptive text that accompanies our “Telemetry & crash logs” UI for opting into and out of analytics, since we’re now collecting a small amount of non-anonymized data. We’ve also added a new Privacy page to our support site that details our privacy practices & commitments: https://support.balsa.com/privacy.
- Fixed a bug where the “Save & Close” button in the task creation flow could be clicked multiple times to create redundant Jira tickets.
- Refined our iconography for unassigned Jira tickets to make it more clear which tasks are unassigned in a list or board view.
- Updated the icon for the “Add Comment” button in the task detail view.
- Fixed a regression that was causing the Enter & Esc keys to not behave as expected when a modal window was focused.
- Fixed a spooky bug where empty “ghost sources” would sometimes appear in the “Projects & repos” settings pane.
- Fixed a bug that caused window chrome not to render on Windows.
- Bumped our version of Electron to include a fix for an issue with Let’s Encrypt DST Root CA X3 certificate expiration. This caused new users (or users with previously invalid settings files from 1.4.0) to become stuck in the sign up flow.
- Added the ability to select any project when creating a new Jira task, and added “New task” buttons to a bunch of existing views.
- Fixed a bug that was causing GitHub onboarding to get stuck on domain input.
- Updated our user-agent to be more friendly for Jira Server setups.
- Added an Activity feed to Jira tasks! 📃 You can now see a list of historical task activity alongside any task comments – or filter to only show comments or activity. GitHub’s task activity will be incoming soon!
- Balsa Build now crawls task descriptions & comments for links and includes them in the Links panel 🔗. This allows us to show links between tasks in Balsa Build across Jira and GitHub, and paves the way for even more tool integrations in the future!
- Added more fine-grained controls when selecting which projects to display in the sidebar in Settings. You can now select or deselect all projects in a source, or filter large lists of projects to find the projects you’re most interested in.
- Improved searching by returning results from partial matches as you type (e.g. the query ‘TEST-1’ will now return task TEST-101, whereas before it would not have returned task TEST-101 until you completed the whole term ‘TEST-101’).
- Fixed a bug that was causing the app to crash when zooming the UI in or out.
- Fixed a bug where selecting or deselecting projects in Settings could corrupt the settings file in some scenarios, forcing the app to reset into a clean state on the next launch.
- Added the ability to drag-and-drop tasks to change status on the My Tasks board view, as well as on Saved Search boards. This works just like dragging tasks on the Project view - if multiple statuses apply, you’ll be able to pick which status you’d like upon dropping the task. We’ve been calling this drag-and-drop everywhere internally!
- Fixed a bug that caused boards to fail to load. This was due to an unexpectedly null value as part of task statuses in certain Jira set ups. Thanks to Drew and Tommy for reporting this doozy!
- Fixed a bug that caused task titles with HTML tags to render incorrectly in boards, lists & task detail views.
- Updated the “responsive syncing” code introduced in
v1.3.0 to include re-syncing for GitHub tasks as well.
- Tidied up display of linked GitHub tasks in the Links panel of the task detail view.
- Fixed a bug that was causing some tasks to be unexpectedly greyed out in list and board views.
Under the Hood
- Fixed a bug that was causing some tasks to be stuck in a partially-synced state, which could result in a crash in the app’s front-end.
- Improved the freshness of Jira task data by triggering immediate re-syncing of tasks that the user access directly in the app. This, in turn, results in the re-syncing of other items (projects, linked tasks, sprints, etc.) related to the user-viewed task, helping us allocate our syncing resources to the items most immediately relevant to the user and ensuring data freshness for those items.
- Improved the clarity of our app icon on Windows.
- Added the ability to search by sprint or board name, like
sprint:"Week of 2021-09-06" or
- Fixed a bug in our search code that only checked the first source when searching by person.
- Fixed another bug in our search code that ignored all matches beyond the first when searching by project.
- Improved our in-app modals to respond as expected when hitting the Enter or Escape keys.
Under the Hood
- Improved the stability of the tools we use to keep data fresh.
- Updated the client to not request data from the server when the app is hidden or minimized.
- Fixed a bug where you would sometimes be sent to My Tasks when clicking on a task.
- Fixed a bug that caused you to be taken to a task’s detail view when changing its status from a list view.
- More Jira ticket details are here 🎉! Previously we’ve only shown a subset of available fields. Now you’ll find a more robust list in the Task detail view info panel. Click on the “Show more fields” button to see fields like ‘Labels’, ‘Components’, and any other custom fields you have like ‘Story Points’.
- A list of all files attached to Jira tickets can now be found in the task detail view. The newest files are listed in the Information panel, and a new Attachments panel has been added to display the full list of attached files.
- Updated the panel on the righthand side of the Task detail view, adding an animated transition between the different panes and adding some logic to persist the state of the panel between views.
- Added Epic relationships to our links support. They’ll now show up in the Links pane like all other Jira relationships! 🔗
- Added a button to the Settings page to manually trigger the re-authentication flow if you’re using Jira Server.
- Fixed a bug that made links in the task details panel non-interactive depending on the panel’s scroll position.
- Improved the styles for a handful of in-app links to improve accessibility and affordance.
- Fixed a bug where the app could display an empty view on the first load after an app update.
- Fixed a bug that was causing emojis in saved search names to be rendered far too small.
Under the Hood
- Tasks can now be dragged between columns in a board view to update their statuses. Re-ordering tasks in a column is not yet supported, but stay tuned.
- We now collect and verify your work email address during onboarding. This enables us to offer company-specific features we’re planning in the future. In total honesty, it’s also an important step for us as a business, since we need to keep track of user accounts in order to someday charge for our service.
- We’ll now remember the last board/sprint/list you viewed on each project, and bring you straight to it on subsequent visits. Also, we’ll launch the app to the last screen that you viewed before quitting.
- Added an option to view saved searches in a board layout.
- Fixed a pair of bugs that were preventing us from properly syncing Kanban boards and sprints from “simple” type Jira boards.
- Fixed a bug in our user-mentions code that was causing certain Jira mentions to not render properly.
- Added a “Troubleshooting” submenu to the Help menu and moved the “Show Log Files” option inside. We also added a new “Reset Settings and Restart” option here, which should make it easier to get unstuck if things go awry. Use with caution!
- Fixed a bug where we were failing to surface sync errors in the UI 🙈.
- Introduced a setting to manually toggle the app’s appearance between dark mode & light mode.
- Upgraded our markdown parser to automatically linkify new task descriptions and comments written in Balsa Build.
- Fixed a bug where file attachments in Jira ticket descriptions and comments would render as plain text; they will now render as links to the file.
- Solved a problem where certain emoji would render as text representations when used as icons for Saved Search views.
- Fixed a bug that caused relative time strings like “1 week ago” to display incorrect values.
- Updated our styles to display
inline code better in task titles & descriptions.
- Updated the pile of faces visible in Task rows to include the task creator & commenters.
- Sprinkled a bunch of helpful tooltips onto buttons & other UI components.
- Added a “Balsa Build Help Center” option to the “Help” menu that links to the help center.
- Added “Join Us on Twitter” and “Send Us an Email” options to the “Help” menu so users can easily contact us.
Under the Hood
- Fixed a bug where non-JSON responses (such as unauthorized Jira Server responses) were not being properly handled as errors, which prevented our re-auth mechanism for Jira Server from being triggered.
- Renovated our virtualization code for scrolling list views to improve performance and fix some intermittent visual bugs.
- Fixed a bug in our “Demo Mode” code that was causing blocks of mixed text & HTML to be rendered badly when demo mode was active.
- Introducing “Saved Searches”! These are live-updating lists of tasks that you can personalize and pin to your sidebar for easy access. They’re a quick way to build your own custom views, and they support all existing search filters. To get started, pop open the search bar, search for something (like
creator:me), and hit the “+” button in the lower right corner.
- The settings view has received a makeover 💅🏾! The entry point remains in its previous home at the bottom of the sidebar, but settings now opens in a separate window where related options are grouped into individual tabs.
- You can now customize which projects show up in your sidebar from the new Settings view 🎉! Gone are the days of writing project names in a textarea, or manually editing
settings.json; enabling projects is now as easy as toggling a switch.
- We totally rewrote our core syncing technology! The new sync engine is smarter and less resource-intensive. In the short run, that means you no longer need to specify which projects to sync. In the long run, it unlocks all sorts of possibilities we’re excited about, including someday showing relationships across all the tools you use. 🛠
- Updated the GitHub setup flow to pre-fill the necessary scopes when generating a Personal Access Token.
- Fixed a link in the GitHub setup flow to help users connecting to both cloud and on-premises GitHub instances properly generate a Personal Access Token.
- Fixed a syncing bug where sprints would still appear as “active” even after they’d been closed.
- Added a new power hover action and task view menu item so you can quickly copy the task key. The task key is either the Jira ticket number (PROJ-588) for Jira tasks, or the pull request number for GitHub tasks (balsa/desktop#824).
- Fixed a bug that caused missing task types in the task detail view.
- Added support for highlighting the task key and name text in the task detail view so you can quickly copy and paste either.
- Fixed a bug that resulted in task update errors not being propagated to the client.
- Fixed a focus-state bug in the task detail view’s overflow menu.
- Limited the app to one active instance.
- Fixed a bug that caused strikethrough formatting to be added incorrectly in some situations.
- Fixed a bug that caused the search bar to stop working during vigorous searching.
Under the Hood
- Improved syncing of user settings behind the scenes to increase app performance.
- Added telemetry for OS name and version, locale, screen size and density, and the size of our Sqlite database, and new events for when the app is focused, blurred, and closed.
- Fixed a bug with GitHub request failure retries. Now we will retry GitHub requests on a wider variety of errors and with smaller page sizes.
- You can now add tasks to sprints! Do this by clicking the current value for “Sprint” in the right column when viewing a task in the task detail view.
- Added a button to clear the text in the search box.
- Fixed a bug that caused searching for numbers not to work.
- During setup, the project picker is now sorted alphabetically by project name.
Under the Hood
- Fixed a bug where we would incorrectly assume Jira Cloud customers with
.jira.com domains were using Jira Server.
- Changed our renderer process logging infrastructure to use labels for all log events.
- Improve our task status matching functionality to display the correct icons for more custom Jira statuses.
- Keep the task comment box open if a draft is present.
- Fixed a bug where the search bar would remain open even after the user had tabbed away.
Under the Hood
- Change the order of Jira syncing to prioritize loading My Tasks first and things like project boards later in the sync cycle.
- Use database journal mode Write Ahead Log to help improve database write performance.
- Improve renderer performance by memoizing several expensive variable calculations.
- Adopted Relay as our ORM on the renderer side, to improve app-wide caching & prefetching performance.
- Added Jira task creation errors to our sync indicator—now when a task has an error during ticket creation we’ll show you the error in the sync indicator. Thanks for bringing this one to our attention, Ben!
- Fixed icon alignment for our add comment button.
Under the Hood
- Added priorities to our Jira source sync. These priority levels now sync at different cadences which will help lighten the network and processing load in our Jira source.
- Temporarily removed schema validation from our Jira source endpoints. The library we were using was causing very slow app performance so while we migrate to a new one we’re disabling this extra safety check.
- Laid the backend foundation for adding and removing tasks to sprints. Stay tuned to see this functionality in the product soon!
Under the Hood
- Added a temporary feature flag to disable fetching linked Jira tickets while we reevaluate our link syncing strategy to avoid generating excessive requests.
- Jira ticket commenting is here! Sending a quick reply or explaining the complexity of a task is just a ⌘ + Return away!
- Added support for Jira ticket relationships. Now in the task details page we will display all Jira tickets the task is connected to. Stay tuned for lots of exciting future developments in this area.
- Fixed a long-standing issue where scrollbars in the app would be rendered as light-mode scrollbars even when the user’s OS-level preferences specified that the app should be displayed in dark-mode. This one’s for you, Jo!
- Fixed a search parsing bug to allow searching for terms that include
or look like a url. This means you can now search the app for Jira ticket ids, like
BUILD-707, or full urls, like
- Refined our GitHub PR statuses so that PRs you open will now start off in the In Progress state. Let’s give you some credit for the work you did to get the PR open!
- Simplified and improved the task filter button to make it more intuitive to use.
- Added Porter stemming to our full text search index which will allow us to match search queries on their common word roots. For example, searches like “stem” or “stemmed” will now match “stemming”.
- Fixed a bug to add back our beloved knurled divider to our task boards.
- Fixed a bug in our handling of simple Jira boards. This may have caused Jira boards to not show up in our app if simple Jira boards were present.
Under the Hood
- Fixed a bug in our Cookie copying code for Jira Server which caused some Jira Server auth setups using specific
SameSite configurations to fail to authenticate.
- Added better error handling and additional error logging in our Jira syncing code. This will help us debug better in the future and propagates more sync errors to our app Sync Indicator.
- You can now use text search to search through your synced tasks! You can use word terms as well as filters like
- Fixed a bug where inactive Jira users would be displayed in the list of potential assignee options even though they cannot be assigned a Jira ticket.
- Removed subtask types from the type options in Jira ticket creation as they are not yet supported. They’ll be reintroduced when we support them in the future!
- Fixed a bug with epic Jira ticket creation. Now the name you provide for the ticket will also be included as the epic name on Jira.
- Added support for syncing current and future sprints that don’t have tickets in them yet.
- Changed the behavior of the next/previous scroll buttons in boards. The buttons are now hidden by default but appear when you mouse close to them.
Under the Hood
- Laid the backend foundation for Jira ticket relationships. Stay tuned to see these in the product soon!
- Added support to enqueue pending task and comment creation on start up. This helps us avoid missing syncing pending changes if the app is quit shortly after making those changes locally.
- Fixed a bug where in certain race conditions we could overwrite pending local task or comment changes.
Authorization headers in sync logs. Thanks Thom for flagging this!
- Updated our handling of Electron windows to open all windows on the monitor you’re currently using. Erica, this one is for you!
Under the Hood
- Added support for creating, editing and deleting Jira comments on the backend - stay tuned for this feature in the UI!
- Prepped our Task View side panel and button components for the forthcoming Jira links feature.
- Added a limit to our tasks search query. This is in preparation for our text search feature.
- Extended our Jira schema to accept undefined project category descriptions. This is not a documented accepted value, but we saw it in the wild!
- Updated our handling of Jira board ranking to default to last updated sort order if board sort order is not provided by Jira.
- Added a prototype of a new sync source approach that would allow us to sync continuously.
- Fixed a bug that was causing some buttons to render with maximally bad contrast (white text on white background).
Under the Hood
- Fixed a bug that caused Jira Server authentication to fail in some situations.
- Added column-style board views for sprints and project boards! You can switch between list and board views using the subview icon in the top right corner.
- You can now update the status of Jira tasks by clicking on the status icon in the list view!
- PRs you created will now show up in My Tasks, since you’re working on them!
- Moved the “review status” indicator for PRs in list views, and added better tooltips to distinguish between PRs reviewed by you and PRs reviewed by others.
- Tweaked the look of our task type icons a bit.
- Fixed a bug where GitHub.com users couldn’t change their API keys due to the GitHub domain field being blank.
- Fixed a bug that caused default values for new tasks to not be retained.
Under the Hood
- Virtualized the task list. This should make loading times much faster as you click around in Balsa, and should improve scroll speed as well.
- Began prefetching the data for My Tasks and project views, which should improve first-load performance for these screens.
- Changed our Jira Server login process to copy all known cookies, which we hope helps us correctly identify when you’ve logged in. (Previously, we would sometimes get stuck on a logged-in Jira screen.)
- Fixed a bug that caused part of each network log to be lost.
- Fixed a bug that prevented Segment from initializing correctly. (Analytics are only sent if you enable “Share telemetry” in settings or during onboarding.)
- Added task creation! You can create a Jira task by navigating to a project and clicking the ‘+’ icon in the top right corner of the app.
- Shipped Balsa Build for Windows! If you have a Windows machine and would like to run Balsa Build on it, now you can.
- Approved but unmerged PRs that you’ve personally approved will no longer appear among your active tasks. They now appear below, along with your completed tasks. Their icons are green to indicate Approved state. (If you’ve approved a PR, but someone else requested changes, it’ll still show as Open.)
- Fixed a bug that allowed people to leave their email or Jira API token blank during setup, which would cause syncing to fail.
- Fixed the GitHub sync setup modal on Windows. Previously it opened the main UI in the new window, instead of the GitHub setup screen.
- Loosened validation for Jira API tokens, so we can accept tokens provided by Jira Server plugins.
- Fixed the colors on the “Email us” button that shows up when there are errors during setup.
mailto: links now open correctly using your system email client. The “Email us” button actually works again!
- Tweaked the layout of the Settings screen a bit.
- Added tooltips to Epic labels.
Under the Hood
- Began syncing Jira agile boards. These aren’t surfaced in the UI yet, but we’re cooking up something… 🤫
- Changed how we handle schema changes in our Sqlite database. Now, when we change our schema, we recreate the database from scratch. This should make setup a tiny bit faster, and database migrations less error prone. You may see a brief empty state when you upgrade the app, as we re-sync your data into the new schema. We aim to do this infrequently!
- Improved error recovery during Jira setup, so we can still attempt to sync in situations where we can’t confirm the Jira deployment type.
- Fixed a silly bug where GitHub’s thumb reactions showed up as opposite in Balsa Build - a thumbs up in GitHub became a thumbs down in Balsa Build!
- Added the ability to lazy load Jira Cloud users who are mentioned in ticket descriptions.
- Fixed a bug where GitHub comments that did not include any emoji reactions would be suffixed with a
- Added support for GitHub’s new API token format.
- Increased the accepted length for Jira API tokens to accommodate a Jira Server plugin that provides API tokens.
Under the Hood
- Only use our custom Balsa Build user agent for POST requests to specific Jira endpoints.
- Separate sync engine and server process logs into separate files.
- Accept undocumented
null priority from Jira.
- Added a previously unknown
deleted field to the schema for Jira’s
- Added comments into the Task detail view for Jira tickets and GitHub PRs, including reactions on GitHub comments.
- Fixed a nasty bug that was preventing Jira Server users from reauthorizing, essentially stopping the app dead in its tracks once their initial auth cookie expired.
- Refactored our GitHub sync engine to reduce overall data load, avoid rate limits, and automatically retry on failures.
- Added proper tooltips to explain all of the various bits & bobs in the Task row component.
- Reworked the app menus in our little-known Windows build to be more idiomatic for the OS.
- Updated the default Balsa Build window size to 1200×800.
- Tweaked our color scheme for dark-mode users so drop-shadows stand out more and the app has a little more depth overall.
- Reworked the layout of the Task row component to work better for narrow window sizes.
- Adjusted our Task “priority gauge” component to be green instead of red for medium-priority tasks, thus making the whole app less super aggro.
- Tweaked our switch component to use a white handle even in dark-mode, for better contrast.
- Fixed a pair of bugs that was causing Task type & status to display incorrectly in the sidebar of the Task detail view.
- Fixed a Windows bug that prevented the app from quitting fully when the last window is closed.
- Fixed a visual bug when displaying a user avatar that failed to load or doesn’t exist.
- Fixed a bug that allowed videos in the body of a task to overflow their content area.
- Added hover & focus styles to better differentiate internal links & controls from links to external sources.
- Added some nifty warming/cooling logic to our tooltip component to cut down on UI stutter as users mouse around the app.
- Updated the app-menu copy when downloading an app update copy: fewer typos & fewer floating decimal points.
- Fixed a visual bug with the accepted/confirmed/selected Task status icon.
Under the Hood
- Fixed a hilarious sync engine bug involving Jira projects with keys that look like boolean operators, such as
- Added a menu item to open developer tools for the internal server process for debugging purposes.
- Added even more logging to help us track down increasingly obscure sync errors with exotic Jira Server configurations.
- Adjusted the logic for parsing our
settings.json file to be more tolerant of unexpected fields on launch, resulting in fewer unexpected errors.
- Fixed a bug in our long-standing, under-nurtured pre-pre-beta Figma integration that was preventing Figma documents attached to Jira tickets from displaying as expected.
- Updated our GitHub settings UI & syncing code to support syncing from GitHub Enterprise in addition to github.com, and to allow more specific per-repository or per-organization sync rules.
- Added a proper onboarding flow to walk users through connecting to their GitHub account.
- Added an item to the app’s “Help” menu to easily open Balsa Build’s logs in the file system.
- Added a bit of UI to the onboarding flow & settings view that prompts user to automatically send us anonymized telemetry & crash logs. These settings are opt-in, and the data collected will help us understand usage patterns & identify edge-case bugs.
- Updated the app icon! It’s a square now, and our pretty logo stands out a bit more.
- Updated our task status icons to more clearly represent a task’s lifecycle. These new icons also include some “spot color” elements to help them better stand out from the background in dark-mode.
- Highlighted pending & in-progress tasks in list views by dimming out completed tasks.
- Added a button to quickly copy a link to the current task from the action menu in the task detail view.
- Fixed a bug that was preventing Jira tasks from appearing in the “My Tasks” view for Jira Server users.
- Enhanced our sync engine to ensure that a task’s associated Epic will always be loaded, even if it falls outside our normal time window for sync.
- Updated our internal logic so a GitHub PR’s author is no longer included as an assignee if they submit a review or comment on their own PR.
- Fixed a bug in the sync indicator that was surfacing GitHub connection errors even though the user had never connected their GitHub account.
- Fixed a dark-mode bug where the filter field in menus was displaying black text on a black background.
- Updated the PR “lines changed” gauge to properly display GitHub PRs where zero lines have changed (they exist!).
- Fixed a bug that was preventing in-app Jira re-authentication flow from loading properly.
- Removed the decorative “edit” button from the task detail view. This button will return once we add support for editing tasks directly in Balsa.
Under the Hood
- Refactored how we handle statuses of GitHub PRs so they show up properly in filter menus.
- Rewired the “My Tasks” view so it can be used even when the app is started in offline mode.
- Added proper versioning to the app’s
settings.json file, so we can safely update the file’s schema without losing user data between versions.
- Fixed some “silent error” cases where the sync indicator wasn’t displaying Jira sync errors properly.
- Updated the sync engine to sync comments from Jira tasks and GitHub PRs. Comments will be added to the task detail view in the near future!
- Fixed a bug with the sync engine that was causing multi-request jobs to be pessimistically canceled upon failure of a single child request.
- Disabled an internal caching layer to ensure that GitHub data is always fetched fresh.
- Added a grip of new log lines to the Jira Server onboarding flow, to help us track down inconsistencies and bugs when we encounter novel auth proxy setups.
- Added support for GitHub! Input an organization and a Personal Access Token in the Settings view to sync your Pull Requests as tasks.
- Added an actions menu to the upper right of the Task View, with an option to open the current task in your browser.
- Added a “super hover” action to list views–hold
ctrl while hovering over a task row to reveal quick “open in browser” and “copy link to clipboard” actions.
- Implemented global back/forward navigation arrows in the app sidebar.
- Removed the version number badge from the app sidebar, to make room for navigation buttons. Your app’s version number can still be found in the OS-level “Balsa” menu.
- Added a loading spinner to the task detail view.
- Added breadcrumbs to the Task View, to quickly jump to a task’s associated Epic.
- Fixed a horizontal overflow bug in the Task View header, and added code to allow GitHub PRs to truncate from the left to preserve the critical information at the end of the string.
- Fixed a bug that allowed images in the body of a task to overflow their content area.
Under the Hood
- Refactored how we store sources, paving the way to allow syncing multiple sources of each type.
- Improved robustness of the sync indicator by adding the ability to query for the current sync state. This eliminates the case where the sync indicator fails to display if it connects after the sync has begun.
- Increased performance of the sync engine by scaling down the Jira source to only sync projects that are selected or have tasks associated with the user.
- Raised HTTP request network timeout to better accommodate slow sources.
- Added a menu for applying simple filters to project list views.
- Added new user flows to help resolve task updates that have failed their project’s validation or transition rules, including an in-app browser view for Jira Server instances.
- Fixed a bug in the sync engine that resulted in the UI sometimes displaying multiple assignees for a single Jira task.
- Improved our initial sync strategy to speed up the onboarding process by reducing the amount of external data fetched before projects are selected.
- Added proper support for grouping queries with parentheses in our internal task search interface.
Under the Hood
- Even more polish for GitHub sources! We’re polishing our little hearts out and excited to release this feature soon.
- Fixed a bug where any log calls in Balsa’s main process would cause the application to crash, preventing users from completing the onboarding flow in certain cases.
- Added a Jira reauth flow that can be launched by clicking on the disconnected status on the sync indicator.
- Added the offline status to the sync indicator.
- Fixed a race condition on application start up where the “My Tasks” view would fail to load if the app had not fetched the user’s Jira ID yet.
- Added a trigger to sync immediately when coming back online and retry requests on network error.
- Refreshed various UI icons and added a nice fallback color for Jira epics.
- Fixed “selected” status matcher to correctly match the “Selected for development” status with its icon.
- Fixed sidebar overflow issue to stop clipping the focus state of the links and allow the list to scroll off the bottom of the sidebar.
Under the Hood
- Continued polish for our Github source support. Added support for multiple assignees, Github flavored markdown, and PR id numbers. Stay tuned to see this in the product soon!
- Added support to fetch and persist Jira task comments. Stay with us to see these pop up in the task detail page in the future!
- Added basic telemetry and crash reporting data collection support to the backend. These both default to off and are not exposed through the preferences page or setup flow yet.
- Disabled Electron’s
nodeIntegration mode in the renderer process, which drastically reduces the application’s security surface against things like XSS attacks.
- Updated our GraphQL schemas to return better lists of task statuses and people for specific projects, allowing our “edit” menus to be more accurate
- Persist the task’s remote URL to the task’s additional fields for both Jira and Github.
- Fix search query support to support
OR queries and searching for unassigned tasks.
- Fetch and store Jira task priorities as a full object, allowing the “priority gauge” in the task row to display more accurately regardless of how many priority levels your organization uses.
- Fixed a problem with an erstwhile dependency that was causing a crash in the server process, thus preventing the app from launching properly.
- Improved performance significantly when viewing the Task detail view.
- Fixed a bug where our version number was missing from our User Agent string.
Under the Hood
- Laid the foundation for our Github source support. Stay tuned!
- Added a sync-status indicator to the bottom of the app navigation sidebar. This element shows when the sync engine is running, and will eventually be used to surface errors encountered when syncing.
- Updated our auto-update system to check
releases.balsa.com instead of a hardcoded AWS bucket.
- Relaxed our Figma API token validation to accept longer API tokens.
Under the Hood
- Shored up & improved a bunch of our internal task-searching logic in preparation for the upcoming addition of list-view filters.
- Added the ability to update task statuses from the task detail view. Note that this feature does not yet support complex transitions–this is coming soon!
- Introduced a new icon for tasks with the “blocked” status.
Under the Hood
- Added a proper user-agent for sync requests made to remote servers.
- Replaced the “All Projects” view with a “My Tasks” view, aggregating Jira tickets assigned to you across all of your team’s projects.
- Fixed a bug that was preventing links in task descriptions from being linkified in certain edge-case situations.
Under the Hood
- Fixed a bug in our internal API setup that was causing us to lose proper logging for network calls between the UI and the sync engine.
- Added the ability to reassign tasks from the task detail view, using a brand new searchable dropdown component.
- Added a step to our sync process to purge outdated tasks from the local database, so tasks that have been deleted remotely don’t stick around locally for more than five days.
- Fixed a bug in the main app sidebar code so overflowing project lists are scrollable.
- Improved our baseline formatting when rendering rich text in task descriptions—we now render bold, italic,
strikethrough, subscript, superscript, and lists correctly (including nested lists!).
- Fixed a bug in our task description rendering code that was mistakenly displaying strikethrough text at the beginning of a new line as a bullet point.
- Updated the label style in the task detail sidebar to put more emphasis on the content and less emphasis on the labels.
Under the Hood
- Refactored our task-editing code to ensure that tasks can be reassigned in both Jira Cloud and Jira Server environments.
- Fixed a bug in the app’s internal API pipeline that would cause an unrecoverable error during initial Jira authentication flow.
- Refactored parts of our build process to accommodate Windows builds. We don’t have a working build to distribute yet, but stay tuned!
- Added Jira project icons to the sidebar to make each project more recognizable at a glance.
- Various improvements to the Jira formatting options that we support within the task description page. Some are only behind the scenes for now like mentions and lists, but others like codeblocks and strikethrough are visible in the UI.
- Added new focus style for unbounded objects. See it in action in inline links.
- Fixed a bug in the project-selection setup step that was causing specific projects to maintain their disabled display state even when the “All Projects” switch was enabled.
- Fixed a bug that was causing an aggravating 1px horizontal scroll issue in the task view sidebar. Waggle no more!
Under the Hood
- Added the ability in our API to search for specific tasks. This is behind the scenes work for now, but it’s going to power a lot of our UI going forward. Stay tuned!
- Added several subscriptions that publish information regarding the sync status varying in granularity from the sync engine is running to specific network requests made.
- Added network timeouts to our HTTP requests so network calls will not hang indefinitely.
- Added an extra cache layer to improve rendering performance on downloaded images such as user avatars and project icons.
- Refactored our internal API resolvers to make it easier to expose new data to our UI going forward.
- Updated our app ID to our final product name, Balsa Build. This will, unfortunately, break auto-updates for all existing installations.
- Removed the command-line flag added in
v0.3.9 to activate “demo mode” and replaced it with an option in the app’s View menu that can be enabled or disabled while the app is running.
- Adding additional project fields to our list of synced data, including project avatars.
- Fixed a bug in the setup flow that was causing herky-jerky transition animations between steps, especially on systems with always-visible scrollbars.
- Added spiffy new icons for the DMG installer file.
- Added a percentage-downloaded indicator to the app menu when a new version is downloading in the background.
- Fixed a bug that was causing the Jira login flow to be unexpectedly resurrected after being completed, for teams with only one Jira project.
- Fixed a memory leak in our user-avatar component.
- Improved the obfuscation code in “demo mode” to prevent runaway memory usage.
Under the Hood
- Refactored the code that handles app-level user settings, to provide a stronger and more consistent model for sharing settings between app processes.
- Updated a bunch of dependency libraries, including a number of upstream security fixes.
- Moved even more English strings that we missed in
v0.3.9 into a centralized file.
- Refactored our app-level menu code, to allow for more dynamic menu content.
- Reordered the task list view to be sorted by last updated date, descending.
- Added a command-line flag to launch the app in “demo mode”, obfuscating all user content to avoid potentially leaking sensitive information during screenshare demos.
- Fixed a bug where the last-updated date for tasks was not syncing properly.
Under the Hood
- Improved syncing logic to coalesce matching sync requests, reducing our overall network burden.
- Centralized all English strings to a single file, to help us keep things consistent app-wide and set ourselves up for easier translations down the line.
- Added a persistent
Accepts header to our Jira client to reduce errors when syncing.
- Loosened the validation on the Jira base URL setup step to allow user input that includes path components or does not include a protocol component.
- Added extra validation to the Jira base URL setup step to attempt to verify the existence of the given base URL, as well as the type & version of the Jira software running at that address.
- Updated our app-wide color palette so that all rendered text and non-decorative visuals meet WCAG’s AA contrast standards in both light and dark modes.
- Added an animated status badge to asynchronously-validated form fields, to indicate working, success, & failures states while the field is being validated.
- Recolored the Epic labels in the Task Row component to align with the colors used in Jira.
- Updated the background “stage” area in the cookie collection setup step to no longer be always white. This element will now reflect the user’s light/dark mode preference like the rest of the UI.
- Added the task status of “open” to our mapping, so tasks with this status will show an appropriate status icon.
- Fixed a visual bug where projects with zero synced issues were not rendering a pie chart icon.
- Fixed a bug where users would be unable to complete their organization’s authorization requirements due to an unexpected browser redirect.
- Fixed a bug where navigating backwards into a previously-completed cookie collection setup step would result in the user being immediately moved forward again.
- Fixed a bug in the Project Switchboard component where individual projects were being rendered with the wrong initial state in some situations.
Under the Hood
- Continued to fill out our internal Jira schemas as we discover inconsistencies between various versions of their cloud & on-premises platforms.
- Removed an outdated log-collection mechanism from the setup flow that had been superseded by more robust logging systems in the meantime.
- Updated our internal schema to properly handle a bunch of fields on the Jira task object that are usually required but can be manually hidden by Jira admins.
- Fixed a bug in our Jira response-parsing code that was causing fatal errors when encountering unexpected fields on projects.
- Upgraded our network stack to narrow the gap between user-driven requests to a Jira server and Balsa-driven requests to that server.
- Added maximally robust logging for network requests (minus sensitive data, of course) to improve our ability to understand & debug problems when attempting to navigate arbitrarily complex internal auth structures like the ones we’ve encountered during testing.
- Untied some knots in our sync-queueing logic, so initial post-auth sync requests should behave more predictably and reliably going forward.
- Added real task creation & updated dates to the UI, replacing the random for-placement-only dates that were being used previously.
- Simplified the project-selection step of the setup flow to reduce confusion. The list of projects is now always visible, and the interaction of individual projects with the “All Projects” switch has been simplified for clarity.
- Added logic to skip the project-selection step of the setup flow entirely if we find the account only has one project.
- Swapped the FPO project avatars in the project-selection interface with empty color swatches, until we can get real project avatars added.
- Fixed a bug where tasks with a status of “To Do” were showing the incorrect status icon.
- Fixed a sneaky bug in the cookie-based Jira auth flow where a listener was sticking around too long, resulting in unnecessary subsequent auth attempts.
- Fixed a flagrant bug in the cookie-based Jira auth flow that was causing the UI to hang indefinitely when faced with an unexpected document type in response to an auth request.
- Updated to a more rigorous strategy for detecting a successfully authorized session with Jira Server instances. We also now support non-standard cookie names & non-standard redirect paths.
- Extended task syncing for Jira issues. We now sync up to 500 tasks from your selected projects, plus up to 500 additional tasks that you have created, been assigned to, or interacted with.
- Filtered the project links in the global sidebar to reflect your selected projects only.
- Updated the project links in the global sidebar to include the project short label. Also, the accompanying pie chart icons now reflect the completion percentage of tasks in each project.
- Added a trigger to always attempt a full sync immediately when you update your Jira settings.
- Added a queue to ensure cached pending changes (resultant from a crash or a transition from offline to online) are properly applied before the next sync.
- Replaced the for-placement-only “Alpha” epic label with real epic labels in Task Rows. They’re all still purple for the moment, but stay tuned.
- Added a fallback to display initials for users without avatars.
- Cleaned up some incipient icon soup in the Task Details sidebar.
SF Mono to our monospace font stack for all the Apple typeface absolutionists out there.
- Fixed a bug in the sync engine’s internal API that was causing us to sync the user’s project list too often.
- Fixed an inconsequential but irritating bug where the “new” and “filter” icons in the top right of the app would shift slightly when navigating between the All Projects View and an individual Project View.
- Added additional high-level logging for our backend processes, to assist in debugging with Alpha users.
- Loosened validation of Jira API responses to reduce frivolous errors when encountering novel server configurations and object fields.
- Added proper file logging for our backend processes, for better diagnosis and debugging.
- Added smart port selection, so the app’s internal server will always run on an unused port.
- Updated the package name so logs & such will appear in the expected places in
- Adjusted the Jira API token collection step of the setup flow (for Jira Cloud instances) to be easier to follow.
- Fixed a field validation that was causing sync to fail with Jira Server.
- Fixed a bug with the setup UI that was causing controls to be unclickable in certain situations.
- Add a “first launch” setup flow to walk new users through the process of providing Balsa with credentials to access Jira on their behalf. This setup flow supports Jira Cloud instances with API token auth and Jira Server (“on-prem”) instances with cookie-based auth.
- As the final step in the setup flow, we now also allow users to enable or disable syncing on a per-project basis.
- Updated the underlying mechanics of user preferences to make them more resilient to external editing and improve app boot performance.
- Added additional triggers to kick off initial sync, which should drastically shorten time-to-first-sync when adding or updating Jira credentials.
- Fixed a bug in the sync engine that was causing sync jobs to fail after the initial boot job in certain scenarios.
- Overhauled the Settings view to use a new unified form field component, with better accessibility, usability, and input-validation rules.
- Added a proper “relative time” value to Task Rows for the task creation date. Note that this is currently displaying randomized FPO dates.
- Added validation for Jira API responses, to reduce unexpected output.
- Added code to prevent text-selection in most areas of the app, to make it feel less like a webpage.
- Added proper hairline borders to buttons & form fields for high-dpi devices.
- Fixed a bug where image files dragged into the app would be displayed & prevent the user from interacting.
- Wired up the status icon, type icon, and priority gauge to show real data in Task Rows and Task View.
- Rearranged information in the task rows to better highlight the “task type” icon.
- Removed the task creator from the face-pile in Task Rows.
- Added hover & active styles to links in the app-nav sidebar.
- Updated the app-wide “focus” state to include a hairline dark blue outline, to improve legibility in low-contrast contexts.
- Updated the app-wide “focus” state to appear only on keyboard-focus, not on click-focus.
- Updated the gear icon for “Settings” to have seven teeth instead of eight.
- Fixed a bug where HTML tags weren’t being stripped from task descriptions in Task Rows.
- Fixed a bug where text in input fields was impossible to read in dark mode.
- Fixed a bug to ensure that the button that expands & collapses the Details Panel in the Task View remains right-aligned even when the panel is expanded.
- Fixed an issue where the server process was not properly starting in production builds
- Fixed an issue where the server window was not properly closing on quit
- Updated the overall look and feel of the app to match our alpha design language
- This includes our app chrome, task lists, task detail view, and settings view
- Migrated datastore to SQLite with a GraphQL interface, and added support for offline use
- Upgraded to Electron 9 (Chrome 83)
- Added support for Jira Server (on-premises Jira)
- Updated app icon to use the new company logo
- Renamed the app from “Project Dash” to “Balsa” 💙