Repository navigation
VectorCraft v0.15.0
Note
FreeBSD aarch64 is dropped from this release. We had to cut releases, and we cannot build this target within the 5-hour CI limit for any of the Craft apps, so we are dropping it for now. This is a known blocker, flagged for a future fix in storytold/craft-common-actions#39. FreeBSD x86_64 and every other platform are included.
What's Changed
- docs: add SonarCloud and CodeRabbit badges to README by @dylanmtaylor in #2923
- Skip CodeRabbit reviews on Dependabot PRs by @echelon in #3247
- Gradient meshes: a grid whose point count overflows is malformed by @Matoo125 in #3193
- Gradient meshes: deleting mesh lines leaves a malformed mesh as it is by @Matoo125 in #3194
- Repeat: nested Repeats stop at 250,000 instances in all by @Matoo125 in #3223
- EMF export: pattern tiles stop at 250,000 in all by @Matoo125 in #3224
- G2: Effect › Sketch › Water Paper raster filter by @nrq6993-a11y in #2955
- Fix EPS writer emitting inf for huge finite numbers by @Silvertree2010 in #3240
- Quote CSS font-family names that are not plain identifiers by @Silvertree2010 in #3254
- Encode trailing space as x20 in XML ids to keep round trip by @Silvertree2010 in #3225
- Normalise negative zero in Measure tool angle by @Silvertree2010 in #3230
- Keep fallback library name for blank GPL Name line by @Silvertree2010 in #3323
- Root-argument tests: give the app 30 seconds to exit, not 5 by @lehni in #3286
- Libraries: a User Defined library file whose reading panics is skipped by @dotCooCoo in #3331
- M3.57: preserve fractional CSS gradient stop positions by @MMexicann in #3284
- Leave the pattern tile edge and swatch bounds out of exports by @HEOJUNFO in #3304
- Offset Path's Preview checkbox keeps its last state across opens (#3195) by @rahul05ranjan in #3203
- Legacy .ai export: a radial gradient's color stops are written from ramp point 0 to 100 by @dotCooCoo in #3285
- Warn on export when a font style is drawn in another style (#3229) by @MarekSpodBiedry in #3251
- Save for Web: browser previews go only to a folder the current user owns by @dotCooCoo in #3344
- Links: a link on a drive mapped to another share is not followed by @dotCooCoo in #3321
- Fix lost diacritics with keyboard-hook IMEs (UniKey/OpenKey) by @jordanlemcc-ship-it in #3307
- Fix Show and Hide Guides (#3219) by @MiQ71 in #3269
- Fix #3188: arranging art inside a clipping mask keeps the clipping path at the bottom by @Taha-Mahmoodi in #3206
- Fix #3198: the status bar's fps is the rate the window draws at, not an average of idle bursts by @Taha-Mahmoodi in #3200
- Keep the swatch link when blending two tints of one swatch (#3234) by @MarekSpodBiedry in #3252
- Keep stroke weight in document space on transformed type by @Silvertree2010 in #3270
- Fix #2820: images drawn small redraw from their kept mips while being moved by @Taha-Mahmoodi in #3208
- G1: Area type drag shows width and height in measurement labels by @nrq6993-a11y in #3182
- G1: File Place cursor shows placed size in measurement labels while dragging by @nrq6993-a11y in #3218
- G1: Reshape tool shows Smart Guide offset readouts while reshaping paths by @nrq6993-a11y in #3217
- G1: Anchor Point tool shows move distance in measurement labels while Shift-dragging by @nrq6993-a11y in #3205
- Appearance: Cmd+/ adds a new fill and Cmd+Alt+/ adds a new stroke by @dotCooCoo in #3341
- File: Cmd+Alt+N makes a new document without the New Document dialog by @dotCooCoo in #3324
- Artboards: the panel menu's Convert to Artboards converts the selected objects by @dotCooCoo in #3339
- Select: Bristle Brush Strokes selects objects by their brush's type by @dotCooCoo in #3337
- Brushes: Select All Unused selects the brushes the document does not use by @dotCooCoo in #3334
- View: Show Live Paint Gaps highlights the gaps of the selected Live Paint groups by @dotCooCoo in #3313
- Document Info: a Brushes category lists the document's brushes by @dotCooCoo in #3330
- Brushes: Hue Shift without a key uses the most-used art color by @dotCooCoo in #3333
- SVG import: support feBlend filter primitive and transparent backdrops by @odysseexp in #3316
- Exclude retained trace bitmaps from result bounds and highlights by @FractalEncrypt in #3271
- Persist Polygon and Star counts after exact-size placement by @FractalEncrypt in #3257
- (3179) Envelope Distort by @AJMakesStuff in #3189
- Pencil: Edit selected paths within 0 turns editing off by @dotCooCoo in #3340
- Brush Options: Pattern Scale and Art Width have sliders by @dotCooCoo in #3335
- Variables: the nothing-applied message clears when a later data set applies by @dotCooCoo in #3299
- Tabs: a stop moved past another stays selected by @dotCooCoo in #3265
- G1: a move over a panel waits and resumes on the canvas (#2826) by @ashsajal1 in #3215
- G1: selection tools take a clipping path on its outline by @addibble in #3246
- Distribute: selected ruler guides are spaced with the objects by @danngreen in #3181
- UI: FilePick filters own their text, so a dialog's file types can be made at run time by @lehni in #3177
- Live Paint: a Live Paint Selection click outside the faces selects the edge it highlights by @dotCooCoo in #3305
- Live Paint: Merge keeps the group's lock, visibility, mask and graphic style link by @dotCooCoo in #3327
- Swatches: a swatch made from a color the app shows keeps that color's model in a CMYK document by @dotCooCoo in #3320
- Objects on Path: clipping paths and parts of blends, envelopes and repeats stay in place by @dotCooCoo in #3322
- Tabs: in vertical type the alignments read Top- and Bottom-Justified Tab and the position Y by @dotCooCoo in #3318
- Graphs: column designs show each column's value where their type has % and two digits by @dotCooCoo in #3311
- EPS import: a PostScript error shows what its name means in the interface language by @dotCooCoo in #3293
- Undo groups: a cancel drops only the canceled groups' entries from the journal by @dotCooCoo in #3294
- Undo groups: library styles and field scrubs close only the group they open by @dotCooCoo in #3287
- Type: the Every-line Composer composes paragraphs that mix type sizes in rectangular area type by @dotCooCoo in #3295
- Paragraph: Insert Kashidas justifies Arabic lines with kashidas by @dotCooCoo in #3288
- Type: Optical Margin Alignment hangs punctuation at the ends of type on a path by @dotCooCoo in #3310
- Draw from centre (Alt) now applies to the typed size of a rectangle or ellipse (#3309) by @MarekSpodBiedry in #3348
- Blob Brush: Shift keeps the stroke horizontal or vertical by @dotCooCoo in #3351
- Layers: Cmd+Alt+L opens Layer Options for a new layer by @dotCooCoo in #3355
- Build: the wasm check is warning-free; one file-dialog check instead of two by @Taha-Mahmoodi in #3207
- i18n: each catalog names the blend spine with one term by @dotCooCoo in #2596
- Isolation mode: object.isolate refuses hidden or locked objects and locked guide paths by @dotCooCoo in #2671
- Export: area type that Shrink Text to Fit scales down is written at the size it draws at by @dotCooCoo in #2672
- Tests: the engine-language test runs a Japanese frame again by @dotCooCoo in #2682
- Pick placed images on their frame with Selection by Path Only by @HEOJUNFO in #3306
- Part of #1816: Snap to Grid lands a moved object by its nearest edge and no longer snaps its center by @dotCooCoo in #3336
- Brushes: colorization recolors type in scatter brush art by @dotCooCoo in #3345
- Artboards: Rename gives several selected artboards one name, numbered by @dotCooCoo in #3350
- Pencil and Paintbrush: holding Alt shows the closing loop cursor by @dotCooCoo in #3352
- Canvas: the pointer's document point follows a wheel scroll or view drag in the same frame by @dotCooCoo in #3364
- AI import: a gradient stop naming a process colour leaves its swatch process (#1771) by @AyberkA0 in #1772
- PDF presets: Press Quality converts to Document CMYK, keeping its numbers (#2950, #1242) by @00xJS in #3012
- Artboard tool: Shift-drag draws an artboard inside another or marquee-selects artboards by @dotCooCoo in #2497
- Shape Builder: double-clicking the tool opens Shape Builder Tool Options by @dotCooCoo in #2557
- Part of #2384: imported PDF text keeps its place when the file draws the space beside a wide gap by @dotCooCoo in #2688
- Web: a pan or zoom of a heavy document moves the last frame and renders once the view is still by @dotCooCoo in #3329
- Artboards: each artboard can have a background color on the canvas by @dotCooCoo in #2403
- Use Preview Bounds: objects are measured with their geometry effects by @dotCooCoo in #2595
- PDF/.ai import: a .ai saved without PDF compatibility is placed and pasted from its editing data by @dotCooCoo in #2182
- feat(window): adopt shared craft-window for Linux decorations (depends on craft-libs#217) by @dylanmtaylor in #3366
- Preferences: list the languages alphabetically by their own name by @nikolainyegaard in #3371
- Save As: a typed extension of a format the save doesn't write is replaced by @dotCooCoo in #3372
- Docs: the document.open pages sentence names the file saved without PDF compatibility by @dotCooCoo in #3373
- Tests: the half-form test uses only a fallback face that forms Ka's half form (#2670) by @dotCooCoo in #3376
- Type: a character typed with AltGr while editing text runs no command by @dotCooCoo in #3382
- Tests: the data set export test checks the whole file in a folder emptied first (#2969) by @dotCooCoo in #3389
- Data Recovery: the recovery folders are owner-only on Unix by @oracola91 in #3406
- Docs: localization parity row counts match the catalogs on main by @dotCooCoo in #3414
- ICC: all built-in profiles are checked for aligned sizes and tags by @KnottyDyes in #3418
- Docs: localization parity lists the Dutch, Danish and Indonesian catalogs by @dotCooCoo in #3438
- Library panels: a persistent panel whose file is gone stays listed as missing by @dotCooCoo in #3368
- Brushes: dragging a brush reorders it within its type by @dotCooCoo in #3369
- Effects: expanded, flattened and exported art keeps the random Transform the canvas drew by @dotCooCoo in #3374
- Brushes: renaming or deleting a brush updates every stroke that uses it by @dotCooCoo in #3385
- Dialogs: sliders step their field's number with the arrow keys by @dotCooCoo in #3388
- Brushes: New Brush asks for the type and opens its Brush Options by @dotCooCoo in #3390
- Symbols: F8 opens Symbol Options for a new symbol from the selection by @dotCooCoo in #3397
- Type: Optical Margin Alignment hangs punctuation in right-to-left paragraphs by @dotCooCoo in #3394
- G4: No Break keeps marked characters on one line by @nrq6993-a11y in #3398
- Brush Options: Tips shows each colorization method on a sample by @dotCooCoo in #3402
- Threaded text: type on a path threads, mixed with area type by @lehni in #3408
- Threaded text: releasing a frame from a longer thread no longer duplicates its text by @lehni in #3409
- G4: Fractional Widths rounds a type object's advances to whole points by @nrq6993-a11y in #3411
- EPS/.ai editing data: type keeps stacked art styles as live appearance by @flamesquirrel in #3419
- Print: JIS B4/B5 and Japanese paper sizes (はがき・封筒・四六判) by @midasdf in #3422
- PDF export: PDF and .ai files carry File Info's copyright status, notice and URL by @dotCooCoo in #3427
- Tabs: a stop placed or moved on the ruler lands on a whole point by @dotCooCoo in #3433
- Place: Word's low, medium and high kashida justification sets Insert Kashidas by @dotCooCoo in #3434
- Brushes: New Brush and Bristle Brush Options take a bristle brush name of at most 31 characters by @dotCooCoo in #3312
- Keyboard Shortcuts: each Align and Distribute button of the Align panel can be given a key by @dotCooCoo in #3317
- Artboards: the Artboards panel locks an artboard and the art on it by @dotCooCoo in #2592
- Fix #2995: reorder grouped panel tabs by dragging within the tab strip by @nrq6993-a11y in #3000
- G2: Effect › Artistic › Dry Brush raster filter by @nrq6993-a11y in #3026
- G1: Cmd+Alt temporarily lends Group Selection by @nrq6993-a11y in #3053
- G2: Effect › Pathfinder › Hard Mix live effect by @nrq6993-a11y in #3061
- G2: Texturizer Load Texture in effect dialog by @nrq6993-a11y in #3070
- G5: Pattern brush Key Color eyedropper in Brush Options by @nrq6993-a11y in #3075
- G1: Live Corners relative corner rounding (#1144) by @nrq6993-a11y in #3091
- G4: Scale Text Attributes bakes object scale into type sizes by @nrq6993-a11y in #3101
- G4: Paragraph panel indents and spacing show blank when paragraphs differ by @nrq6993-a11y in #3136
- G12: Honor Preferences › Devices › Enable Touch Workspace by @nrq6993-a11y in #3139
- Commands: an index of 2^32 or more no longer wraps around on 32-bit builds by @dotCooCoo in #3292
- Fix #2178: Pathfinder Unite groups disconnected islands for Ungroup by @nrq6993-a11y in #2970
- G1: Properties: Edit Clipping Path and Edit Contents for one clip group by @addibble in #3430
- Document Info: a Repeat Objects category lists the document's repeats by @dotCooCoo in #3445
- Add lighting presets to 3D effects by @alpha-rock in #3442
- Type: ruby (ふりがな) for live text by @midasdf in #3448
- Commands: a boolean or number given as text is refused by @dotCooCoo in #3428
- PDF import: letter-spaced text keeps its word spaces by @KnottyDyes in #3417
- Text: an embedder of the egui panels may leave the bundled fonts out by @addibble in #3431
- Variables: Load Variable Library… reads a variable library's text variables and data sets by @dotCooCoo in #2853
- G2: Effect › Artistic › Palette Knife raster filter by @nrq6993-a11y in #3038
- G2: Effect › Artistic › Paint Daubs raster filter by @nrq6993-a11y in #3032
- G2: Effect › Artistic › Underpainting raster filter by @nrq6993-a11y in #3035
- G2: Effect › Artistic › Rough Pastels raster filter by @nrq6993-a11y in #3044
- Type on a path: right-to-left text that overflows shows its start by @lehni in #3415
- G2: Effect › Artistic › Colored Pencil raster filter by @nrq6993-a11y in #3028
- i18n: the message scan reads errors made with bad() and error variants, and new ones need rows by @dotCooCoo in #2708
- G4: System Layout spaces every text object in whole points by @nrq6993-a11y in #3412
- G2: Effect › Pathfinder › Soft Mix blends overlapping CMYK fills by @nrq6993-a11y in #3063
- 3343: recognize PageMaker .pmd on open with a clear message by @nrq6993-a11y in #3452
- Canvas: each update copies the rendered frame whole instead of pixel by pixel by @lehni in #3453
- Character panel Tate-chu-yoko marks vertical type as a horizontal block by @nrq6993-a11y in #3399
- G2: Effect › Sketch › Torn Edges raster filter by @nrq6993-a11y in #3010
- G2: Effect › Artistic › Fresco raster filter by @nrq6993-a11y in #3096
- Plug-ins: filters read and set effects and stroke styles (G17) by @KaboomFox in #3174
- G4: Mark Snap to Glyph done in parity docs and test the menu toggle by @nrq6993-a11y in #3456
- Recolor: recolor.apply takes a model option for the new colour's model (#2170) by @vangel76 in #2520
- Live Paint: the Live Paint tools and livePaint.fill skip hidden faces by @dotCooCoo in #3460
- Expand stroke: compact plain stroke spines before outlining by @nrq6993-a11y in #3457
- Shape Builder: Gap Detection and Tool Options (#2523) by @vangel76 in #2526
- Fix Eyedropper styling for highlighted text ranges by @mockydevs in #3466
- UI.7: workspaces keep their layout changes by @gorkematlyn in #3279
- UI.6: dock panels into any dock group by @gorkematlyn in #3280
- UI.8: collapse dock groups to their tabs by @gorkematlyn in #3281
- Character: Character Direction sets the selected characters left to right or right to left by @dotCooCoo in #3436
- Type: the vertical ruby test passes with craft-fonts' Shippori Mincho by @dotCooCoo in #3477
- Blend: Ease In / Ease Out and separate Color Ease in Blend Options (#1124) by @vangel76 in #2539
- Canvas: an edit redraws only the area it changed by @lehni in #3461
- Save As: the suggested extension typed in another case gets the picked type's by @dotCooCoo in #3481
- G11: Align panel moves ruler guides to artboard (#3463) by @nrq6993-a11y in #3483
- PDF export: a 16-bit PNG is written at 8 bits for PDF 1.3 and 1.4 instead of failing the export by @dotCooCoo in #3464
- Tests: the data set export test fails when its folder cannot be emptied (#3389) by @dotCooCoo in #3486
- Export: EPS, legacy .ai, EMF/WMF and DXF give one note for images that can't be decoded by @dotCooCoo in #3482
- Ellipse pie angles in Transform and Properties (#3451) by @nrq6993-a11y in #3468
- security: enforce HTTPS on curl downloads (SonarCloud S6506) by @dylanmtaylor in #3475
- Use chrono instead of hand-rolled UTC conversion by @dylanmtaylor in #3387
- Commands: Transform Each, artboards and more refuse a boolean or number given as text by @dotCooCoo in #3487
- Export As: a held Enter doesn't confirm the options; exporters get their file by @KaboomFox in #3488
- Render: moved type with mitred strokes redraws where its spikes reach by @lehni in #3484
- ui: Effect Gallery dialog (browse raster filters and apply a stack) by @nrq6993-a11y in #2883
- Library panels: Locate Library… refuses a panel whose library is there by @dotCooCoo in #3490
- Tests: the Expand Appearance reply test fails when the reply leaves out the expanded object (#3374) by @dotCooCoo in #3491
- i18n: add Turkish (tr) localization by @Muratv07 in #2581
- G11: Copy fill/stroke by dragging between proxies (#3467) by @nrq6993-a11y in #3492
- Fix #3465: Swatch Libraries Other Library lists .ase on Linux by @nrq6993-a11y in #3493
- Commands: path.create with path data refuses closed given as text, and the grids refuse a count by @dotCooCoo in #3499
- Artboards: Rename opens on a selected artboard after a Ctrl/Cmd double-click or a paste by @dotCooCoo in #3500
- Support dragging editable artwork between document tabs by @mockydevs in #3479
- i18n(ja): Keyboard Shortcuts editor and the Print overprint note by @C0uki in #3501
- Fix #3480: pattern edit preview honors Overlap stacking by @nrq6993-a11y in #3498
- Add shared presets and artwork fitting to Artboard Options by @FractalEncrypt in #3277
- UI: an embedder of the egui panels binds their font families without shipping their faces by @addibble in #3512
- Fix #3455: Home recent reopen focuses existing document by @nrq6993-a11y in #3502
- Fix #3395: color book library tabs use file name by @nrq6993-a11y in #3518
- Fix #3494: translatable package status message by @nrq6993-a11y in #3506
- Library panels: Locate Library… reads a missing library whose panel isn't persistent by @dotCooCoo in #3520
- G4: Mixed paragraph composer menu checks by @nrq6993-a11y in #3523
- PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160) by @odgrim in #3524
- G11: Open Arc tool options on canvas click by @nrq6993-a11y in #3507
- Rename the Preferences "Performance & Storage" category to "Storage" (#3410) by @dennisklappe in #3469
- G11: Color Picker and popover Fill/Stroke proxy drags (#3440) by @nrq6993-a11y in #3533
- Type: show recently used fonts in font pickers (#3515) by @MorningFrog in #3535
- Type on a Path hits filled paths without a stroke (#3505) by @nrq6993-a11y in #3534
- G4: Mixed paragraph Hyphenate checkbox by @nrq6993-a11y in #3537
- G4: Mixed paragraph kinsoku and mojikumi dropdowns by @nrq6993-a11y in #3539
- Render: moved stretched type redraws where its strokes reach by @lehni in #3541
- G4: Mixed Justification dialog fields by @nrq6993-a11y in #3542
- Fix #2103: arrow keys with the Artboard tool move the selected artboards and their art by @Taha-Mahmoodi in #3549
- Fix #3093: panel scroll bars take a column of their own instead of covering controls by @Taha-Mahmoodi in #3550
- Fix #2452: panning or zooming over detailed art no longer hit-tests it every frame by @Taha-Mahmoodi in #3551
- Fix #3443: the Layers list's scroll bar no longer covers the rows' selection marks by @Taha-Mahmoodi in #3554
- Artboards: the active artboard follows the Artboard tool after Paste, Cut and tool.setOption by @dotCooCoo in #3557
- Fix Recolor Artwork Edit overflow with large palettes by @makesomethingshit in #3476
- Package: File › Package collects and writes the package on the background thread by @dotCooCoo in #3560
- README: the app icon above the title by @bflatastic in #3583
- Gradient mesh: each tessellated quad shades between its corner colours, no banding by @bflatastic in #3609
- Export: a typed extension of a format the export doesn't write is replaced by @dotCooCoo in #3608
- Fix EPS counted metadata reads after CRLF line endings by @bflatastic in #3614
- AF.5: Affinity import — strokes, text decoration, text placement, outline effects, CMYK photos by @dwetscher in #3548
- Fix #3545: draw_path and draw_shape with a paint the engine refuses leave the document unchanged by @Taha-Mahmoodi in #3611
- Fix #3370: stepping a number field stops at its bounds: a stroke weight at 0, a miter limit at 1 by @Taha-Mahmoodi in #3612
- Fix #3544: an SVG of one artboard on its own has the artboard's name as its title by @Taha-Mahmoodi in #3613
- i18n(ka): Georgian for 7 strings added since #2045 by @devius in #3616
- Effects: Sketch › Conté Crayon draws the dark areas in a black crayon and the light areas in a white one on textured paper by @Taha-Mahmoodi in #3629
- CLI: run --commands reads the steps from a JSON file or standard input (#3147) by @Taha-Mahmoodi in #3630
- Automation: --automation-read-root and --automation-write-root may each be given more than once (#3546) by @Taha-Mahmoodi in #3631
- Place: Link keeps a placed PDF or .ai linked to its file by @dotCooCoo in #3496
- Gradients: Dither in the Gradient panel draws a gradient fill with fine noise that hides banding by @Taha-Mahmoodi in #3637
- Shortcuts: a command on Cmd+Enter or Cmd+Escape runs without the tool's Enter or Escape by @dotCooCoo in #3638
- Fix Spiral tool click options dialog by @MiQ71 in #3636
- Fix #3623: a word gap between two sizes reads as a space in PDF import by @pat26-dotcom in #3641
- Package: a file the writer refuses is named once in the error by @dotCooCoo in #3647
- G4: Mixed paragraph direction leaves direction buttons unselected by @nrq6993-a11y in #3648
- G4: Mixed Hyphenation dialog fields by @nrq6993-a11y in #3649
- Restore and remember maximized window state by @nrq6993-a11y in #3660
- G8: Regression test for art style filter cap by @nrq6993-a11y in #3662
- Shape Builder: Pick Color From Artwork takes the look where the drag starts, else where it ends by @dotCooCoo in #3664
- Gradients: dithered fills sample only what shows; review follow-ups to #3637 by @Taha-Mahmoodi in #3668
- G12: honor Use Low Resolution Proxy for Linked EPS (#394) by @nrq6993-a11y in #2975
- Artboards: an action or Batch… that reverts or switches documents keeps the active artboard by @dotCooCoo in #3670
- Type: colour emoji fonts with bitmap glyphs draw and export by @lehni in #3561
- Fix #3646: display PDF document title by @MiQ71 in #3667
- Package: reads placed pages and document previews only for the options that use them by @dotCooCoo in #3681
- SVG import: read the text once for the prepass's markers, with the data URLs left out by @addibble in #3677
- Gradients: paint.setStroke refuses a dithered gradient when "swatch" is null by @Taha-Mahmoodi in #3682
- Wrap to_hsb hue of 360 back to 0 for near-red colours by @Silvertree2010 in #3683
- SVG import: images in images share the depth cap, SVGZ images one unpacking cap (#3562, #3563) by @odgrim in #3676
- Gradients: Method › Perceptual mixes a gradient's colours in OKLab; SVG and PDF write it as an image by @Taha-Mahmoodi in #3684
- Shape Builder: in merge mode, a click on a stroke splits the path there by @dotCooCoo in #3665
- Save for Web: initialize from the active artboard by @makesomethingshit in #3634
- Import: type on a closed path keeps its wrapped end bracket by @ham9zah in #3685
- SVG import: leave out a data URL inside url(…) too, and jump over each one by @addibble in #3688
- Map pen barrel buttons before egui-winit drops them by @nrq6993-a11y in #3659
- Accept an explicit leading plus sign in Unit::parse by @Silvertree2010 in #3690
New Contributors
- @lehni made their first contribution in #3286
- @MMexicann made their first contribution in #3284
- @rahul05ranjan made their first contribution in #3203
- @jordanlemcc-ship-it made their first contribution in #3307
- @odysseexp made their first contribution in #3316
- @ashsajal1 made their first contribution in #3215
- @addibble made their first contribution in #3246
- @nikolainyegaard made their first contribution in #3371
- @oracola91 made their first contribution in #3406
- @flamesquirrel made their first contribution in #3419
- @mockydevs made their first contribution in #3466
- @C0uki made their first contribution in #3501
- @dennisklappe made their first contribution in #3469
- @MorningFrog made their first contribution in #3535
- @pat26-dotcom made their first contribution in #3641
Full Changelog: v0.14.0...v0.15.0