diff --git a/src/pages/whats-new/2024-06-June.md b/src/pages/whats-new/2024-06-June.md
new file mode 100644
index 0000000..905ce81
--- /dev/null
+++ b/src/pages/whats-new/2024-06-June.md
@@ -0,0 +1,564 @@
+---
+date: June 2024
+summary: Changes to vscode-brightscript-language, brighterscript, roku-debug, bslint, brs
+layout: ../../layouts/WhatsNewPost.astro
+---
+# Overview
+Welcome to the June 2024 edition of "What's New in RokuCommunity." Please consider subscribing to stay up to date with what's happening in RokuCommunity.
+
+## We need your help
+The RokuCommunity projects are maintained by a relatively small group of developers (mostly volunteers), and we have a growing list of unresolved issues. We need your help! There are many different ways you can contribute. Whether it's addressing bugs, improving documentation, introducing new features, or simply helping us manage our expanding list of GitHub issues, your involvement would be greatly appreciated. We are more than happy to guide you in finding the most suitable contribution method that aligns with your interests. To learn more about how you can contribute, feel free to reach out to us on [Slack](https://join.slack.com/t/rokudevelopers/shared_invite/zt-4vw7rg6v-NH46oY7hTktpRIBM_zGvwA), or explore the existing GitHub issues:
+
+- [vscode-brightscript-language](https://github.com/rokucommunity/vscode-brightscript-language/issues)
+- [brighterscript](https://github.com/rokucommunity/brighterscript/issues)
+- [brighterscript-formatter](https://github.com/rokucommunity/brighterscript-formatter/issues)
+- [roku-deploy](https://github.com/rokucommunity/roku-deploy/issues)
+- [roku-debug](https://github.com/rokucommunity/roku-debug/issues)
+- [bslint](https://github.com/rokucommunity/bslint/issues)
+- [ropm](https://github.com/rokucommunity/ropm/issues)
+- [brs](https://github.com/rokucommunity/brs/issues)
+- [roku-report-analyzer](https://github.com/rokucommunity/roku-report-analyzer/issues)
+- [@rokucommunity/promises](https://github.com/rokucommunity/promises/issues)
+- [roku-http](https://github.com/rokucommunity/roku-http)
+
+# Editor
+
+
+## New language server setting `enableThreading`
+
+We are currently working on a rewrite of the language server (which powers all of the in-editor experiences such as completions, validation, etc). You can follow our progress in [#993](https://github.com/rokucommunity/brighterscript/pull/993).
+
+In preparation for that rewrite and to support beta testers, we've added a new setting called `brightscript.languageServer.enableThreading` which determines whether the language server should utilize [WorkerThreads](https://nodejs.org/api/worker_threads.html) to improve performance (yep, the language server is multi-threaded now!).
+
+**NOTE:** This setting has no effect when used against the current language server.
+
+
+## Fix shows key path info bug
+
+
+We fixed a bug in the SceneGraph inspector which was not properly showing the "key path info" button in certain situations. This was a regression, but we've fixed the issue so you should see that button again as expected.
+
+
+
+
+
+
+## Prompt to restart lsp if it has stopped
+
+
+
+Whenever the language server crashes, vscode will restart it. After the 5th crash, they'll leave it permanently crashed. There seems to be no time limit on adding up to the 5, so even after a few days, vscode may still terminate the language server.
+
+We've introduced new logic that tries to keep track of the language server crashes, and prompt the developer anytime the language server is stopped and then not started back up again after a period of time. Obviously we'd prefer if the language server never crashes, but at least now you'll be aware of it and can act accordingly.
+
+For example, 20 seconds after after the final (5th) crash, we now show a "The LSP has crashed, would you like to restart it?" popup.
+
+
+
+
+
+# Debugging
+
+## Prevent corrupted breakpoints due to invalid sourceDirs, add more logging
+
+We fixed a bug in the debugger where breakpoints could become corrupt due to bad `sourceDirs` entries. There's not much to show here, but if you're using `sourceDirs`, hopefully you'll see a more consistent debugging experience when using breakpoints.
+
+
+# BrighterScript
+
+# Community Tools
+
+## brs
+## Fixed conversion functions to Integer: `Int()`, `CInt()` and `Fix()`
+
+When passing a LongInteger to math functions returning Int32, Roku truncates to `0x80000000 - 1`. We've aligned the brs runtime to behave the same way.
+
+
+
+## Added support for multidimensional array access in brackets
+
+
+Roku supports multi-dimensional array indexes for roArray and roList, so we've added support for this in brs.
+
+```brightscript
+' three dimensional array
+a = [[1,2,["a","b","c"]], [4,5,["d","e","f"]], [7,8,["g","h","i"]]]
+print a[1][2][2]'==> f
+print a[1,2][2] '==> f
+print a[1][2,2] '==> f
+print a[1,2,2] '==> f
+print a[1,2,3] '==> invalid
+
+'Assign with multi-index
+a[2, 1] = true
+print a[2, 1] '==> true
+```
+
+## Added support for `formatJson()` undocumented flags 256 and 512
+
+The native `FormatJson` function supports an optional parameter called `flags`, which you can read about in the [Roku docs](https://developer.roku.com/en-ca/docs/references/brightscript/language/global-utility-functions.md#formatjsonjson-as-object-flags--0-as-integer-as-string). Up until about a month ago, flags `&h0100` and `&h0200` were undocumented.
+
+Now that we've gotten clarity around how they operate, we've implemented these flags in the brs project so the behavior aligns with the Roku runtime.
+
+
+# Preview features
+
+## BrighterScript
+
+## Fixes some issues with comments and transpilation
+
+
+Fixes:
+
+- leading comments before `alias`, `typecast`, and `import` statements
+
+- comments on same line as previous statement before `namespace`
+
+
+
+## Component field can be set with strings
+
+
+Addresses #1191
+
+Changes `assignementTypeMismatch` validation so that if LHS is a DottedSetStatement, and the `obj` is a ComponentType (ie. a SG Node), and RHS is a string, then do not show the validation diagnostic.
+
+
+
+## Adds AugmentedAssignmentStatement
+
+
+code like this:
+
+```
+sub foo(t)
+ t += 1
+end sub
+```
+
+used to be an assignment statement, with a binary Expression... eg:
+
+```
+Assignment (t, '=') ->
+ BinaryExpression (t, '+=', 1)
+```
+
+which included "t" twice
+
+This is changed to a single `AugmentedAssignmentStatement`
+
+```
+AugmentedAssignment (t, '+=', 1)
+```
+
+
+Additionally, this PR makes sure the parser only builds Assignments (including typed Assignments) when it is allowed to.
+
+I also added tests for `AugmentedAssignmentStatement` and `IncrementStatement`
+
+
+Addresses #1186
+
+
+
+
+## Fix semantic token crash
+
+
+Exclude semantic tokens that have no range (we wouldn't know where to colorize anyway...)
+
+
+
+
+
+## Fix namespace crash
+
+
+Fix crash when trying to transpile a function on an unknown namespace.
+
+
+
+
+
+## Temporarily disable test-related-projects until they support v1
+
+
+Disable the `test-related-projects` job until those projects support v1. These jobs currently take a long time because they're all failing with thousands of errors due to v1 incompatibility.
+
+
+## Fix crash with optional chaining in signature help
+
+
+
+
+
+
+## Validate single scope
+
+
+With version 1, we will be changing how validation works. The goal is that all files will still be totally validated, except the method will be different.
+Currently, in v0.65, when a file changes, all files in all affected scopes are validated. This validation is rather basic - checking number of function arguments, verifying no duplicate function names, etc.
+
+In version 1, the validation is much more rigorous, as all known types, namespaces, variables, etc. are fully checked for how they are used (as function args, return values, property access, etc.). This is taking MUCH longer to do, especially for files that are included in many scopes, like a utils file with common functions that’s included in every component.
+So we are going to experiment with only checking the first scope a file is in, then also producing validation errors if we expect there might be errors in other scopes.
+
+For example, let’s say `FileA` references function `someFunc` that is not defined in the same file, and `FileA` is included in 2 different components.
+
+If `FileA` changes, it will only be fully validated in the scope of the first component. In that context, if `someFunc` is defined (and its usage is consistent with its definition) there will be no error. However, we also check that someFunc is available (and compatible) in the context of the second scope.
+
+If `someFunc` is not defined in the second component, or it has a different function signature, we will add a diagnostic error to say that the symbol is inconsistent across scopes.
+
+Because we only need to fully check the files in the first scope, things go much quicker. The only downside is that the errors will be a little non-specific, eg. “Function `someFunc` is not compatible in `Component A` and `Component B`”, vs. if we fully validated, we know stuff like the properties of the return type of the function are different, and these are the differences, and it’s ok, or maybe a problem in the the context of the usage, etc.
+
+
+## Document the deprecated `ifMessagePort.setPort()` method.
+
+
+Adds info about the deprecated `ifMessagePort.setPort()` method.
+
+
+
+
+TODO - it would be nice to show strikethrough on the deprecated method somehow in the editor.
+
+Also, based on [this discussion](https://rokudevelopers.slack.com/archives/CF419UU80/p1715179435039329), should this actually be added to the roUrlTransfer object instead of ifUrlTransfer? Those don't currently support having their own methods in our scraper, but it could?
+
+
+
+
+## Visualize deprecated items in editor
+
+
+Shows deprecated items in the editor as deprecated (strikethrough in vscode). This works by sending a `Hint` diagnostic with `DiagnosticTag.Deprecated` in the diagnostic tags.
+
+
+
+
+
+## Removes 'duplicate enum' diagnostic and makes 'duplicate function' mu…
+
+
+- Duplicate Enum Definition diagnostic was Already covered by the `name collision` diagnostic, so it was removed
+- Duplicate Function Implementation diagnostic was made 'multi-scope' using the scope information in the related Information.
+
+
+Fixes: #1208
+
+
+
+
+
+## Refines ScopeValidator Diagnostics to use more specific Diagnostic tags
+
+
+Fixes an issue where more diagnostics would be cleared on file changes than should have been.
+
+Fixes #1209
+
+
+## Fixes Transpile issue with enums in namespaces
+
+
+Fixes #1215
+
+
+
+## Elevate `thenby` to a prod dependency
+
+
+We started using `thenby` as a prod dependency, but it was marked as a devDependency which causes crashes at runtime.
+
+```bash
+Error: Cannot find module 'thenby'
+Require stack:
+- //node_modules/brighterscript/dist/Program.js
+- //node_modules/brighterscript/dist/ProgramBuilder.js
+- //node_modules/brighterscript/dist/index.js
+- //.vscode/extensions/rokucommunity.brightscript-2.48.5/dist/LanguageServerRunner.js
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1084:15)
+ at Module._load (node:internal/modules/cjs/loader:929:27)
+ at c._load (node:electron/js2c/node_init:2:13672)
+ at Module.require (node:internal/modules/cjs/loader:1150:19)
+ at require (node:internal/modules/cjs/helpers:119:18)
+ at Object. (//node_modules/brighterscript/dist/Program.js:43:18)
+ at Module._compile (node:internal/modules/cjs/loader:1271:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1326:10)
+ at Module.load (node:internal/modules/cjs/loader:1126:32)
+ at Module._load (node:internal/modules/cjs/loader:967:12)
+ at c._load (node:electron/js2c/node_init:2:13672)
+ at Module.require (node:internal/modules/cjs/loader:1150:19)
+ at require (node:internal/modules/cjs/helpers:119:18)
+ at Object. (//node_modules/brighterscript/dist/ProgramBuilder.js:7:19)
+ at Module._compile (node:internal/modules/cjs/loader:1271:14)
+ at Module._extensions..js (node:internal/modules/cjs/loader:1326:10) {
+ code: 'MODULE_NOT_FOUND',
+ requireStack: [
+ '//node_modules/brighterscript/dist/Program.js',
+ '//node_modules/brighterscript/dist/ProgramBuilder.js',
+ '//node_modules/brighterscript/dist/index.js',
+ '//.vscode/extensions/rokucommunity.brightscript-2.48.5/dist/LanguageServerRunner.js'
+ ]
+}
+
+Node.js v18.18.2
+[Error - 10:27:43] Connection to server got closed. Server will not be restarted.
+```
+
+
+## Adds messagePort methods to `ifSocketAsync` and `MultiStyleLabel.drawingStyles`
+
+
+Fixes issues:
+#1218
+#1198
+
+
+
+## Flag using devDependency in production code
+
+
+Prevent using devDependencies in prod code.
+
+
+## Fixes issue with setting `roSGNodeTargetSet.targetRects`
+
+
+Fixes #1219
+
+Reason this was a problem is because the scraper did not understand `array of rectangles` as a type.
+
+
+I wish Roku would use actual types here! The interface type should have been `rect2dArray` ... oh well..
+
+
+I also updated the diagnostic message for type incompatibility to be able to add a override for the extended message which is useful if assigning Arrays of different default types, and the inner type is incompatible.
+
+Example:
+```brighterscript
+targetSet = createObject("roSGNode", "TargetSet")
+targets = ["hello", "world"]
+targetSet.targetRects = targets ' targetRects is an array of rectangles, which are AA's with x,y,width,height
+```
+
+
+
+Before
+
+
+```
+"Type 'Array' is not compatible with type 'Array'
+ Type 'Array' is missing the following members: height, width, x, y, ifAssociativeArray, AddReplace, Append, Clear, Count, Delete, DoesExist, Items, Keys, Lookup, LookupCI, ...and 5 more"
+```
+
+
+Now:
+
+```
+"Type 'Array' is not compatible with type 'Array'
+ Type 'string' is missing the following members of type 'roAssociativeArray': height, width, x, y, ifAssociativeArray, AddReplace, Append, Clear, Count, Delete, DoesExist, Items, Keys, Lookup, LookupCI, ...and 5 more"
+```
+
+
+`
+
+
+## Remove block starting range
+
+
+Removes the `startingRange` property on Blocks.
+
+If a block is not empty, the range of a Block is the range of its statements
+
+If the block is empty, the Block looks at its parent to see what the range should be, with specific logic for all the different types of nodes that can contain a block.
+
+
+## Removed expectRangeToBe helper
+
+
+
+
+
+## Removed `isInline` property from `IfStatement`
+
+
+- It was changed to a getter, so that proper diagnostic could still be added if there was a problem.
+- Added tests for inline conditional statements
+- Added support for nested inline conditionals. (People must have a deathwish!)
+
+
+## fix: conform bsconfig.schema.json to strict types
+
+
+## Summary
+
+bsconfig.schema.json is not (strict) type valid against jsonschema draft-07 target
+
+fixes https://github.com/rokucommunity/brighterscript/issues/1204
+
+## Details
+
+- remove the `"deprecationMessage"` attribute from "ignoreErrorCodes"
+- add `"type": "array"` to the "files".
+
+## Validation steps
+
+1. Install `npm install -g ajv-cli`
+2. compile schema with `ajv compile -s bsconfig.schema.json --allow-union-types=true`
+```
+schema bsconfig.schema.json is valid
+```
+
+
+## Allow updating leading trivia
+
+
+- All AstNodes will return an editable array of tokens when calling `.getLeadingTrivia()`
+- No longer concatenates leading trivia of annotations above a statement
+- Refined utils functions that get node documentation to ensure all comments are included, and these concatenate leading trivia of associated annotations
+
+
+Addresses #1206
+
+
+## Made `AstNode.getLeadingTrivia()` a getter
+
+
+- Changed `AstNode.getLeadingTrivia()` to `AstNode.leadingTrivia`
+- Changed `getEndTrivia()` as well
+- Added Tests to verify comments (and changed comments) appear in transpiled output
+
+
+## Fix crash with missing scope
+
+
+Fix crash during transpile when a file was not associated with any scopes
+
+
+## Convert .range to .location
+
+
+Convert all `.range` properties to `.location`. This allows all tokens to know what file they came from. This is a fairly significant breaking change.
+
+TODO
+
+- [x] convert all `.range` to `.location`
+- [x] add unit tests ensuring sourcemaps properly track tokens from multiple files
+- [x] ensure transpiled output is the same for a few large projects
+
+
+## bslint
+### Sorts diagnostics in tests for errors on same line
+
+
+This fixes the tests when tested using Brighterscript v1 once the Brighterscript validator does single scope validation
+
+
+### Updated to Brighterscript v1.0.0-alpha31
+
+
+
+
+
+### Tweaks
+
+
+
+
+
+##### brighterscript@1.0.0-alpha.32
+
+
+
+
+
+### Updated Brighterscript to v1.0.0-alpha.33 and fixed issues
+
+
+- Ran `npm audit fix`
+- Changed all `Token.range` and `AstNode.range` references to `*.location.range`
+- Changed `getLeadingTrivia()`, `getEndTrivia()` to use getters
+
+
+
+# Documentation
+
+
+# Misc
+
+# For Contributors
+
+***
+
+# TODO
+***Move these items to an appropriate section above, then delete this section***
+
+***
+
+# Thank you
+
+Last but certainly not least, a big **_Thank You_** to the following people who contributed this month:
+
+Contributions to [vscode-brightscript-language](https://github.com/RokuCommunity/vscode-brightscript-language):
+
+- [@triwav (Brian Leighty)](https://github.com/triwav)
+ - Fix shows key path info bug ([PR #574](https://github.com/RokuCommunity/vscode-brightscript-language/pull/574))
+- [@TwitchBronBron (Bronley Plumb)](https://github.com/TwitchBronBron)
+ - Fix incorrect brs:disable-line docs ([PR #571](https://github.com/RokuCommunity/vscode-brightscript-language/pull/571))
+ - Small lsp tweaks ([PR #572](https://github.com/RokuCommunity/vscode-brightscript-language/pull/572))
+ - Prompt to restart lsp if it has stopped ([PR #575](https://github.com/RokuCommunity/vscode-brightscript-language/pull/575))
+ - Fix lsp crash tracker ([PR #576](https://github.com/RokuCommunity/vscode-brightscript-language/pull/576))
+
+Contributions to [brighterscript](https://github.com/RokuCommunity/brighterscript):
+
+- [@bartvandenende-wm (Bart van den Ende)](https://github.com/bartvandenende-wm)
+ - fix: conform bsconfig.schema.json to strict types ([PR #1205](https://github.com/RokuCommunity/brighterscript/pull/1205))
+- [@markwpearce (Mark Pearce)](https://github.com/markwpearce)
+ - Fixes some issues with comments and transpilation ([PR #1192](https://github.com/RokuCommunity/brighterscript/pull/1192))
+ - Component field can be set with strings ([PR #1195](https://github.com/RokuCommunity/brighterscript/pull/1195))
+ - Adds AugmentedAssignmentStatement ([PR #1196](https://github.com/RokuCommunity/brighterscript/pull/1196))
+ - Validate single scope ([PR #1123](https://github.com/RokuCommunity/brighterscript/pull/1123))
+ - Removes 'duplicate enum' diagnostic and makes 'duplicate function' mu… ([PR #1212](https://github.com/RokuCommunity/brighterscript/pull/1212))
+ - Refines ScopeValidator Diagnostics to use more specific Diagnostic tags ([PR #1211](https://github.com/RokuCommunity/brighterscript/pull/1211))
+ - Fixes Transpile issue with enums in namespaces ([PR #1216](https://github.com/RokuCommunity/brighterscript/pull/1216))
+ - Adds messagePort methods to `ifSocketAsync` and `MultiStyleLabel.drawingStyles` ([PR #1220](https://github.com/RokuCommunity/brighterscript/pull/1220))
+ - Fixes issue with setting `roSGNodeTargetSet.targetRects` ([PR #1223](https://github.com/RokuCommunity/brighterscript/pull/1223))
+ - Remove block starting range ([PR #1224](https://github.com/RokuCommunity/brighterscript/pull/1224))
+ - Removed expectRangeToBe helper ([PR #1226](https://github.com/RokuCommunity/brighterscript/pull/1226))
+ - Removed `isInline` property from `IfStatement` ([PR #1227](https://github.com/RokuCommunity/brighterscript/pull/1227))
+ - Allow updating leading trivia ([PR #1225](https://github.com/RokuCommunity/brighterscript/pull/1225))
+ - Made `AstNode.getLeadingTrivia()` a getter ([PR #1233](https://github.com/RokuCommunity/brighterscript/pull/1233))
+- [@TwitchBronBron (Bronley Plumb)](https://github.com/TwitchBronBron)
+ - Fix semantic token crash ([PR #1197](https://github.com/RokuCommunity/brighterscript/pull/1197))
+ - Fix namespace crash ([PR #1201](https://github.com/RokuCommunity/brighterscript/pull/1201))
+ - Temporarily disable test-related-projects until they support v1 ([PR #1202](https://github.com/RokuCommunity/brighterscript/pull/1202))
+ - Fix crash with optional chaining in signature help ([PR #1207](https://github.com/RokuCommunity/brighterscript/pull/1207))
+ - Document the deprecated `ifMessagePort.setPort()` method. ([PR #1210](https://github.com/RokuCommunity/brighterscript/pull/1210))
+ - Visualize deprecated items in editor ([PR #1213](https://github.com/RokuCommunity/brighterscript/pull/1213))
+ - Elevate `thenby` to a prod dependency ([PR #1217](https://github.com/RokuCommunity/brighterscript/pull/1217))
+ - Flag using devDependency in production code ([PR #1222](https://github.com/RokuCommunity/brighterscript/pull/1222))
+ - Fix crash with missing scope ([PR #1234](https://github.com/RokuCommunity/brighterscript/pull/1234))
+ - Convert .range to .location ([PR #1231](https://github.com/RokuCommunity/brighterscript/pull/1231))
+
+Contributions to [roku-debug](https://github.com/RokuCommunity/roku-debug):
+
+- [@TwitchBronBron (Bronley Plumb)](https://github.com/TwitchBronBron)
+ - Prevent corrupted breakpoints due to invalid sourceDirs, add more logging ([PR #189](https://github.com/RokuCommunity/roku-debug/pull/189))
+
+Contributions to [bslint](https://github.com/RokuCommunity/bslint):
+
+- [@markwpearce (Mark Pearce)](https://github.com/markwpearce)
+ - Sorts diagnostics in tests for errors on same line ([PR #111](https://github.com/RokuCommunity/bslint/pull/111))
+ - Updated to Brighterscript v1.0.0-alpha31 ([edda8f9](https://github.com/RokuCommunity/bslint/commit/edda8f9))
+ - Updated Brighterscript to v1.0.0-alpha.33 and fixed issues ([PR #112](https://github.com/RokuCommunity/bslint/pull/112))
+- [@TwitchBronBron (Bronley Plumb)](https://github.com/TwitchBronBron)
+ - Tweaks ([aaa8002](https://github.com/RokuCommunity/bslint/commit/aaa8002))
+ - brighterscript@1.0.0-alpha.32 ([2575e2f](https://github.com/RokuCommunity/bslint/commit/2575e2f))
+
+Contributions to [brs](https://github.com/RokuCommunity/brs):
+
+- [@lvcabral (Marcelo Lv Cabral)](https://github.com/lvcabral)
+ - Fixed conversion functions to Integer: `Int()`, `CInt()` and `Fix()` ([PR #74](https://github.com/RokuCommunity/brs/pull/74))
+ - Added support for multidimensional array access in brackets ([PR #78](https://github.com/RokuCommunity/brs/pull/78))
+ - Added support for `formatJson()` undocumented flags 256 and 512 ([PR #79](https://github.com/RokuCommunity/brs/pull/79))
+- [@TwitchBronBron (Bronley Plumb)](https://github.com/TwitchBronBron)
+ - fix node14 ([PR #73](https://github.com/RokuCommunity/brs/pull/73))