releases

seancorfield 2026-06-30T15:48:11.084859Z

https://github.com/seancorfield/honeysql https://github.com/seancorfield/honeysql/releases/tag/v2.7.1399 -- Turn Clojure data structures into SQL This should mitigate the performance impacts of fixing the recently discovered CVE (fixed in 2.7.1392). • Improve performance of suspicious character check via PR https://github.com/seancorfield/honeysql/pull/600 from https://github.com/alexander-yakushev and PR https://github.com/seancorfield/honeysql/pull/601 from https://github.com/bsless. Follow-up in #C66EM8D5H

🎉 2
Daniel Slutsky 2026-06-30T21:51:30.701329Z

https://scicloj.github.io/plotje/ - composable plotting - https://clojars.org/org.scicloj/plotje: • Breaking:`pj/lay-value-bar`is removed.`pj/lay-bar`now covers both cases: with x only it counts each category (as before), and with a y column it uses the y value as the bar height (the former`pj/lay-value-bar`). The stat is inferred from whether a y column is present and is overridable with`{:stat :count}`or`{:stat :identity}`. To migrate, replace`(pj/lay-value-bar data :x :y)`with`(pj/lay-bar data :x :y)`. This also lifts the previous "stacked bars reject pre-aggregated counts" limitation --`pj/lay-bar`with`{:position :stack}`and a y column now stacks pre-computed values. - thanks, @timothypratleypj/lay-barvalue bars now accept the categorical axis on either x or y:`(pj/lay-bar :value :category)`with a categorical y draws horizontal bars directly, no`pj/coord :flip`needed (matching how`pj/lay-boxplot`auto-orients). Plain and dodged horizontal bars are supported; stacked/filled horizontal bars still need`(pj/coord :flip)`. • pj/lay-barwith two numeric or temporal axes now draws a bar at each x position -- a numeric-position or time-series bar chart (`(pj/lay-bar :month :revenue)`), which previously errored. Bar width defaults to`0.9`of the smallest gap between adjacent x values; set it with`{:bar-width n}`. Grouped numeric bars currently overlap rather than dodge. • pj/lay-bar's categorical-x error now points to the`{:x-type :categorical}`override and`(pj/coord :flip)`, matching the guidance other categorical-axis marks already give. • pj/valid-membrane?and`pj/explain-membrane`validate a membrane against its Malli schema, mirroring the existing`pj/valid-plan?`/`pj/explain-plan`pair for plans. • fix: render-stage options set on a pose with`pj/options`-- notably`:theme`, but also`:palette`-- now flow through the explicit`pj/draft->membrane`and`pj/draft->plot`steps, not only through the`pj/plot`/`pj/membrane`shortcuts. These steps default their options to the draft's own options (any options passed explicitly override per key), so a theme set before drafting is no longer dropped at the membrane stage. (Closes #20) - thanks, @carsten.behring • fix: a panel's marks are now clipped to the panel. Geometry running past the axis domain -- a`pj/lay-line`reference line drawn beyond a narrowed`pj/scale`domain, say -- is masked at the panel edge instead of painting across neighbouring panels in a`pj/arrange`or facet layout. A narrowed`:domain`acts as a view window (like ggplot2's`coord_cartesian`): the data is kept, only the view is bounded. (Closes #16) - thanks, @carsten.behringpj/optionsaccepts`:x-tick-angle`to rotate x-axis tick labels (in degrees; -45 is a common diagonal), so dense or long categorical labels stay readable instead of overlapping.`:x-tick-label-pad`overrides the vertical space reserved below the panel for the angled labels. The rotation flows through`pj/save`(SVG and PNG) as well as the notebook`pj/plot`path. Long labels can still run past the left plot edge (see Known Limitations). (PR #6) - thanks, @tom791pj/scaleaccepts`:n-ticks`on a categorical axis to thin a crowded axis to about that many evenly-spaced tick labels, instead of labelling every category (`(pj/scale :x {:n-ticks 8})`). An alternative to rotating the labels for dense categorical axes. (PR #25) - thanks, @carsten.behring • fix:`pj/scale:breaks`and`:labels`now work on a categorical axis, not just numeric ones. On a discrete axis`:breaks`selects which categories get a tick (each matched to a category by its displayed label) and`:labels`relabels them; a break naming no category is dropped with a warning (an error under`:strict`). Previously the categorical branch ignored both. When both`:breaks`and`:n-ticks`are given, explicit`:breaks`win and no thinning is applied. (Closes #22) - thanks, @carsten.behring