- Fix a bug when checking if an element is an HTMLElement.
- Properly include the nice improvements to the file count in tables and lists.
- Fix #1196, #1176: Re-enable HTML values. This was never a featured I advertised since it was just for some internal hackery, but it appears people just discovered it in DataviewJS queries.
- Improved initial time to popular queries that use
file.starred
.
- Fix #1174: Fix indexing with a variable.
- Fix an issue with the experimental calendar view.
- Fix a bug with inline views that was introduced in 0.5.32.
The Dataview API has been noticably revamped - there are now approximately twice as many functions available on the plugin API as there were before, and some additional utilities have been added to both the plugin and inline API. I will be finishing up the associated new "extension" functionality shortly, which will allow:
- For custom Dataview + DataviewJS functions to be added via plugins.
- For custom renderable objects (progress bars, embedded task lists, embedded tables) to be added to any Dataview view via plugins.
- For plugins to provide alternative behavior for some dataview functionality (such as integrating task plugins with the dataview task query).
As part of the API revamp, it is now possible to programmatically execute Dataview and DataviewJS queries - either for using the existing Dataview query language in your own plugin, or for embedding dataview. The Dataview npm library also now exposes many useful internal Dataview types, including the AST structure for all dataview queries.
I am hoping that cleaning up the Dataview API and making it much more extensible will allow for Dataview to integrate much better with existing plugins, and to provide the full power of the in-memory index for plugins. I have been very carefully watching index performance in recent weeks to ensure smooth frontend performance for anyone using the API (with a goal of <10ms for most queries).
Tasks now have an outlinks
list field which includes all links in the task; this can be used for finding tasks with
links in them.
- Added the
typeof(any)
function in Dataview, which obtains the type of any value for comparison:
typeof("text") = "string"
typeof(1) = "number"
typeof([1, 2, 3]) = "array"
- Added the modulo operator (
%
) for doing integer division remainder. I.e.,14 % 2 = 0
and14 % 3 = 2
. - Fixed some minor spacing issues with lists in tables.
Fix another subtle incompatibility between 0.4.26 and 0.5.29 - if you frequently used empty inline fields (like
Key::
with no value), the 0.5+ behavior is now the same as 0.4 behavior and will map such fields to null instead of an
empty string.
This may fix a broad variety of "subtly wrong" queries that you may have seen after the upgrade.
- Fix a bug with some more string concatenations and null handling.
More performance + correctness bugfixes.
- The parser has been made a little more robust to prevent major indexing issues (or at least recover from them quickly).
- Several new strange tag variants are now supported.
- Markdown links are now properly indexed again.
Some DataviewJS performance issues should be resolved now, especially for external plugins using Dataview. This fix
does involve a slight API break w.r.t. what types are wrapped into Dataview Arrays (which provide functions like
.where()
). Generally, only Dataview-provided implicits are wrapped in data arrays now; frontmatter and inline fields
are always now regular JS arrays - use dv.array()
to explicitly make a data array if you want the advanced querying.
More small bugfixes:
- Fix a few small link rendering issues.
- Tag extraction from tasks now handles punctuation properly.
- Upgrade luxon (which is embedded in DataviewJS) to 2.4.0.
- Fix #1147: Fix there being a
#null
tag for files with an emptytag
ortags
frontmatter.
Several bugfixes:
- Nulls are now sorted first rather than last; it's generally good practice to explicitly check for nulls in your queries to avoid strange behavior.
- Dataview now properly parses space-delimited tags (like
tags: abc def ghi
). - Dataview now supports dropping the entire file cache in case of bugs.
- Fix #1140: Force API objects to be arrays if they are iterables.
- Fix #1135: Use 'x' instead of 'X' for checkboxes.
A long-overdue swap from the beta branch to the stable branch. The beta branch should not include any (intended) breaking changes, and has some nice performance improvements that come along with it! Here are the major changes:
- Most views now use React and no longer flicker when updating; this is not the case yet for DataviewJS, which will be getting equivalent treament in the future.
- Dataview now caches metadata, so Dataview loads are very fast after the first time you open your vault. Dataview still needs to visit every file when you update the plugin version, so that should be the only times you experience slower load times.
- A brand new task view backend and query which allows you to filter per-task, rather than per-page! Check the
documentation for details, but this broadly means
WHERE
statements now use task properties instead of page properties. - Some additional metadata is now available for use -
file.starred
,file.lists
, and more metadata infile.tasks
.
There have been some moderate documentation touch-ups to keep things up to date; I'm still working on a walkthrough for common Dataview usecases. This review also includes about ~30-40 bugfixes; some new bugs may arise due to internal changes, so please flag them if you encounter them.
Slight fix to hopefully improve some strange reported cases of bad indexing at startup.
Dataview now uses IndexedDB to cache file metadata, reducing startup time to virtually nothing if you've opened the vault before; if you have a small vault (<1000 notes), you may notice a slight improvement, but large vaults and mobile devices will notice a very significant performance improvement to "first valid paint". Some other performance parameters have been tuned to hopefully make the default experience better.
A few small bugs related to rendering have also been squashed, including an issue with images being scaled wrongly.
- Tasks in task views now support alternative task status characters like '!' and '/'; thanks @ebullient.
- A few documentation nit fixes.
- Added
DataArray#sortInPlace
for a more efficient mutable sort for niche use cases.
- Improved behavior when clicking on tasks in the task view; will now properly scroll to the relevant line in long files!
- Fixed a bug with incorrect counts being displayed in task views.
- Added
tags
as a field available on task items, so you can now do things likeTASK WHERE contains(tags, "#tag")
.
Dataview now tracks initialization and will report when all files have been indexed in the console; you can
programmatically see this via dataview:index-ready
, or by checking api.index.initialized
.
- Add hover highlights to tables to make seeing rows a little easier.
- Tables and task lists now include counts of the number of results in the headers.
- Further improved task selection in the task view.
- Fix task highlighting when not grouping.
- Remove some spurious console logging.
- Slightly improve task highlighting behavior when clicking on a task.
Several smaller bugfixes!
- Fix #997: Use the group by field name in the table name.
- Prevent tons of errors if you incorrectly set the inline query prefix.
Improve error messages for queries somewhat and get rid of some ugly output.
Add detection of tasks inside of block quotes, as well as correctly implement automatic checking and unchecking of these tasks.
Adds the Dataview: Force Refresh Views
Command (accessible via the Ctrl+P command view) to force current views to
refresh immediately.
Another fix for due-date related emoji in tasks. I hate emoji.
Fix some issues with infinite loops of tasks due to bad Obsidian metadata (potentially due to being out of date?).
Fix issues with parsing '🗓️2021-08-29' due-date annotations on tasks, as well as an issue with properly extracting due/completed/completed times for use in queries.
Proper release of 0.5.5 plus one additional small improvement:
- Add
duration * number
andduration / number
operations for manipulation durations numerically.
More small features:
- Fix issues with task sorting not doing anything. Sort away!
- Table headers can now be arbitrary markdown. So you can put things like links in your headers: `TABLE (1 + 2) AS "[[File]]".
- You can now specify the size of an image embed by providing WxH in it's display property:
![[image.png|50x50]]
.
Improved image rendering for some link types, and adds the embed(link)
and embed(link, false)
options to convert
links to/from their embedded equivalents.
Iterative beta which adds a few nice QoL features and fixes some more bugs:
- Internally swapped to a React-based renderer; this should not have a noticable perf or usability impact, but makes it easier for me to implement complex table/list behaviors.
- Naming your fields with
AS "Name"
is now optional; Dataview will infer the name from the expression automatically. For example,TABLE 8 + 4, 3 + 6 FROM ...
is now a valid table expression, and the columns will be named8 + 4
and3 + 6
respectively. - Some issues with array and object rendering were corrected.
- Error messages on empty dataview results were improved and now show up for all views.
Inline images are now rendered correctly in Dataview tables and lists - no more hacky app://local/
schenanigans!
- Fix #971: Objects now work properly inside DataviewQL evaluation.
- Temporarily revert the new task metadata behavior: inline fields in sublists of tasks are added to the page, instead
of the task. This behavior is not good, but is compatible with legacy usages of task metadata, which should uinbreak
some existing queries.
- This behavior will be removed in the future behind a flag.
- Added the 'visual' field to tasks - if set, tasks render 'visual' instead of their regular text.
- Fixed
DataArray#mutate()
.
Re-release of broken release 0.4.23, now hopefully with fixes that make it work on (most) machines. I'll be doing beta releases for a little while until I can confirm the new version is stable; use BRAT (https://github.com/TfTHacker/obsidian42-brat) to easily track Dataview beta versions if you are interested in cutting edge features.
Fix #867: Create a container div per taskList to allow for multiple task views.
Re-release of 0.4.23f since Obsidian does not automatically update between non-semver versions.
Remove some code which attempted to make tag queries case-insensitive; I'll reimplement this more generally later (it
conflicts with existing queries which check tags via contains(file.tags, "#Tag")
and similar).
More task bugfixes / improvements, and a fix that caused task metadata to be duplicated.
More inline field list parsing bug fixes. Hopefully we're back to a nice working order!
Bugfix which adds support for '1)' style lists, as well as a very annoying null issue due to JavaScript being a very sad, very sad language.
Bugfix for bad inlink/outlink computations; links were not being normalized properly so reverse lookups were not working.
The Task Update! This release reworks how dataview handles tasks and list items so that they should be much more intuitive to use and interact with:
- Subtask Support: Queries now search over all list items, instead of only over root elements. This should make task filtering much more usable, especially if you tend to put tasks under other list items or care specifically about subtasks.
- Multiline Support: Dataview now understands multi-line tasks and renders/updates them correctly.
- Immediately Navigate to Task: The new task view, aside from looking a little cleaner than previous views, now immediately navigates to the task in it's original file on click and selects it.
- Grouping Support: For DataviewJS users,
dv.taskList
now supports grouping (as produced bygroupBy
and the newgroupIn
) natively.
For DataviewJS users, the task and list representation has changed: file.tasks
(and the new file.lists
) contain
every single task (including subtasks) in the file, instead of only the root elements. You can return to previous
behavior by filtering out tasks with a non-null parent - i.e., file.tasks.where(task => !task.parent)
. dv.taskList
will intelligently deal with properly nesting and de-duplicating tasks, so just filter to the tasks you want to render and
the API will do the rest.
This release also includes general backend improvements as we prepare for live-editing in Dataview views, as well as several community-contributed API improvements:
DataArray#groupIn
: For grouping already grouped data, you can now usearray.groupIn(v => ...)
, which will group the innermost (original) data in the array instead of the top level groups. This allows for more easily grouping recursively, such asdv.pages().groupBy(page => page.file.folder).groupIn(page => page.title)
producing a grouping of folders, then page titles.substring(string, start[, end])
: The last major missing string function is now available! Take slices of strings.- Improved
dv.el()
and other HTML functions - thanks @vitaly. - null and undefined entries sort at the end instead of the beginning by default; sorry to those whose code sorts wrong because of this, but it is a better default for most people's use cases.
- All links are now properly normalized to their full paths, fixing many link comparison edge cases in DataviewJS.
Documentation additions for the new task functionality will be coming out in the next few days. The next release 0.4.24
is currently targeting expanded FROM
query support, basic table view improvements, and general exporting functionality
for Dataview. See you then!
The @pjeby update! This includes several performance improvements suggested by @pjeby to dramatically improve background Dataview performance as well as reduce some memory pressure. It also includes some minor bug-fixes and preliminary functionality:
- Target ES2018 for better Promise support
- Allow parsing shorthands in
dv.date()
. - Add additional metadata to inline field rendering which can be styled.
- Cleanup events & workers on plugin uninstall, improving the Dataview uninstall/disable/reload experience.
- Add preliminary
CALENDAR
queries - rendering similar to the obsidian-calendar plugin, see the documentation!
Dataview should perform much better on startup and when you have lots of tabs open - thanks again to @pjeby.
Bugfix release which primarily fixes issues that Dataview had with the live preview mode in upcoming Obsidian versions; Dataview live preview should now be functional. Also includes a number of smaller bugfixes.
- Fix #646: Add
date(yesterday)
to create a date 24 hours ago. - Fix #618: Luxon is now available on the dataview API (
dv.luxon
). - Fix #510: Add
dv.duration()
for parsing durations. - Fix #647: All HTML functions in the DataviewJS API now return their rendered objects.
- Fix #652: Fix parsing of invalid dates.
- Fix #629: Fix block link parsing.
- Fix #601: Timezones are now rendered properly and parsed properly in Dataview dates.
- PR #637: Add
meta(link)
which allows you to access various metadata about a link itself. - Various minor null safety fixes.
- Dataview now reports it's exact version and build time in logs.
Some feature work (mostly by other contributors) while I while away at section metadata. May also fix a few bugs!
- Fix #448: You can now use the "Task Completion Tracking" option to automatically add completion metadata to tasks which are checked/unchecked through Dataview. Thanks to @sheeley.
- Add a search bar to documentation. Thanks to @tzhou.
- Add new date expressions for the start of the week (
date(sow)
), and the end of the week (date(eow)
). Thanks @Jeamee and @v_mujunma.
Small minor bugfix / security releases may follow in the near future; otherwise, the next major release will include section and object metadata.
Bugfix release which corrects emoji parsing & localization issues.
- Add
DataArray#into
, which lets you index into objects without flattening. - Renamed 'header' to 'section' in task metadata; 'header' will remain around for a few major releases to let people naturally migrate.
- Fix #487: You no longer need spaces around '*' in expressions.
- Fix #559: Fix unicode issues in variable canonicalization which was causing problems with non-Latin inline field keys.
You can now include multiple units in durations: dur(8 minutes, 4 seconds)
or dur(2yr8mo12d)
. You can separate
durations by commas, or use the abbreviated syntax with/without spaces.
Bugfix release which fixes bad inline field highlighting if '[' and '(' are mixed on the same line in particular orders.
Minor feature release to patch up more implementation holes.
You can now query from a specific file (instead of just folders and tags) by specifying the full file path:
TASK FROM "dataview/Test"
...
This is primarily useful for task queries, but will soon be useful for section and object queries in the near future as well.
The CSS for inline field highlighting has been fixed and some compatibility issues improved, so it should work on all themes now instead of only a few.
DataviewJS now has dv.el()
, which is like existing functions like dv.paragraph
and dv.span
but can create any
HTML element type; for example:
dv.el("b", "Text!");
dv.el("i", 18);
Small performance release which substantially reduces the impact Dataview has on vault loading times (by spreading out
file loading). The Dataview Index is now also eagerly initialized, so plugin consumers of the API can immediately start
using it instead of waiting for the dataview:api-ready
event.
A simple fix for #537 which properly 'awaits' value rendering in dv.view()
. Fixes issues with values rendering out of
order.
Small bugfix release.
- Fixes inline field evaluation when using the new fancy highlighting.
- You can now configure whether task links should show up at the beginning or end of the task (or just disable them) in the "Task Link Location" setting.
- Most setting updates will immediately be applied to existing Dataviews.
Bugfix release which adds fancy rendering to inline-inline fields and includes a few bugfixes.
Inline fields of the form [key:: value]
will now be rendered with fancy new HTML! By default, they are rendered with
both the key and value. You can only render the value using parenthesis instead: (key:: value)
. You can disable
this feature in the configuration.
Full-line inline fields (that Dataview has supported for a long time) will gain similar rendering support soon; in the meanwhile, give the new syntax a try!
Tasks now render with a link to the page/section that they are defined in, making GROUP BY
and custom task
editing easier to do:
- A Task. 🔗
- Another Task. 🔗
- Some Random Subtask. 🔗
You can configure the symbol for the link or disable it alltogether.
I am currently actively looking into improving DataviewJS sandboxing and general security posture. As a first small step in this, I have made DataviewJS opt-in instead of opt-out, and added a separate control for Inline DataviewJS. You may need to re-enable it in your settings if you use it.
More improvements and better JavaScript sandboxing will follow.
Re-release of 0.4.12 that fixes an important indexing issue.
- Fix #505: Use
completion
instead ofcompleted
when setting task completion time. - Fix #509: Add
startswith
/endswith
string functions. - Fix #488: Add
padleft
andpadright
, andstring
. - Fix #506, #512: Fix date comparisons due to a bizarre date zone issue.
Bugfix release following up 0.4.11 which includes a few minor function additions.
- Fix #512: Strange zone issue causing dates to not be equal.
- Fix #506: Same as #512.
- Fix #488: Add
padleft
/padright
functions. - Fix #509: Add
startswith
andendswith
functions. - Fix #505: Correctly read completion dates for tasks from
completion
.
This release also includes improved testing thanks to mocking Obsidian plugin APIs!
Fixes task behavior and adds "truly inline" fields!
Task queries are now much improved from their primitive foundations - you can now filter, sort, and group them! The FROM
block is still page-based, sadly, though you can simply use WHERE
instead if desired. For example, you can now access
task fields like text
, line
, or completed
:
TASK WHERE contains(text, "#tag")
WHERE !completed
GROUP BY file.folder
The full list of all available task metadata can be found
here; tasks include all the information
needed to uniquely identify them, and automatically inherit all of the metadata from their parent file as well (so you
can access file.name
, for example). You can also annotate tasks with inline fields, as described in the section below.
There is some additional UX work to be done - primarily on more easily allowing you to navigate to where the task is
defined, as well as render tasks in views other than the TASK
view. The semantics of how grouping works (to make it
more intuitive/useful than it currently is) will likely also be revisited.
Early support for truly inline fields have been added, where you can add metadata in the middle of a sentence. It looks similar to existing inline field syntax, but with brackets or parenthesis:
I would rate this a [rating:: 6]. It was (thoughts:: acceptable).
Improved rendering for all inline fields is coming in an unpcoming update to improve the visual look of these inline fields.
- Fix #496: Fix task
SORT
functionality to do something. - Fix #492: Tasks now properly annotated with parent file information.
- Fix #498: Fix task checking/unchecking logic (which broke due to a change in the task regex...).
Start of the automatic changelog.