SubEtha.psd1

@{
    RootModule = 'SubEtha.psm1'
    ModuleVersion = '0.5.0'
    CompatiblePSEditions = @('Desktop', 'Core')
    GUID = '17623a25-8516-42f6-b752-759fc4d553cd'
    Author = 'Markus Newton'
    CompanyName = 'Variably Constant'
    Copyright = 'Copyright (c) 2026 Markus Newton'
    Description = 'Shared memory between processes, as PowerShell cmdlets and objects. Rings, queues, channels, locks, atomics, counters and shared collections that several processes on one machine read and write at the same time, each backed by a memory-mapped file that outlives the session that made it. A New- cmdlet makes one and an Open- cmdlet attaches to one another process has already made; the object either one returns carries the operations as methods, and Send-SubEthaItem and Receive-SubEthaItem move items through the pipeline. Bytes cross as byte[] pinned in place rather than copied, and a lock or a hold comes back as an object that releases on Release(), Dispose() or collection. Every cmdlet answers to a shorter name with the SE prefix. Bound directly to Rust with PoWerRuSt (pwrs), Rust bindings for writing PowerShell binary modules in the spirit of PyO3: the cmdlets are the library, not a wrapper over a command line. Windows x64 and Linux x64 in one module, on PowerShell 7 and Windows PowerShell 5.1. Source and issues at https://github.com/Variably-Constant/SubEtha; the binding framework at https://github.com/Variably-Constant/PWRS and https://crates.io/crates/PoWerRuSt.'
    PowerShellVersion = '5.1'
    FormatsToProcess = @('SubEtha.Format.ps1xml')
    FunctionsToExport = @()
    CmdletsToExport = @('New-SubEthaAtomic', 'Open-SubEthaAtomic', 'New-SubEthaRegion', 'Open-SubEthaRegion', 'New-SubEthaCell', 'Open-SubEthaCell', 'New-SubEthaVec', 'Open-SubEthaVec', 'New-SubEthaSharedArc', 'Open-SubEthaSharedArc', 'New-SubEthaLazyValue', 'Open-SubEthaLazyValue', 'New-SubEthaBitVec', 'Open-SubEthaBitVec', 'New-SubEthaSpscRing', 'Open-SubEthaSpscRing', 'New-SubEthaBroadcastRing', 'Open-SubEthaBroadcastRing', 'New-SubEthaCapacityRing', 'Open-SubEthaCapacityRing', 'New-SubEthaLocaleRing', 'Open-SubEthaLocaleRing', 'New-SubEthaRing', 'Open-SubEthaRing', 'New-SubEthaReorderWindow', 'New-SubEthaStack', 'Open-SubEthaStack', 'New-SubEthaDeque', 'Open-SubEthaDeque', 'New-SubEthaPubSub', 'Open-SubEthaPubSub', 'New-SubEthaLamportPair', 'New-SubEthaFrameRegion', 'Open-SubEthaFrameRegion', 'New-SubEthaArena', 'Open-SubEthaArena', 'New-SubEthaLinkedList', 'Open-SubEthaLinkedList', 'New-SubEthaSlab', 'Open-SubEthaSlab', 'New-SubEthaBTreeMap', 'Open-SubEthaBTreeMap', 'New-SubEthaHashMap', 'Open-SubEthaHashMap', 'New-SubEthaMpscPool', 'New-SubEthaMpmcGrid', 'New-SubEthaNotifierSet', 'New-SubEthaLeaderElection', 'Open-SubEthaLeaderElection', 'New-SubEthaHolderTable', 'Open-SubEthaHolderTable', 'New-SubEthaHeartbeat', 'Open-SubEthaHeartbeat', 'New-SubEthaEpochBarrier', 'Open-SubEthaEpochBarrier', 'New-SubEthaCondvar', 'Open-SubEthaCondvar', 'Wait-SubEthaCondition', 'New-SubEthaFenceClock', 'Open-SubEthaFenceClock', 'New-SubEthaEpochs', 'Open-SubEthaEpochs', 'New-SubEthaRWLock', 'Open-SubEthaRWLock', 'New-SubEthaSemaphore', 'Open-SubEthaSemaphore', 'New-SubEthaOwnerLease', 'Open-SubEthaOwnerLease', 'New-SubEthaBloomFilter', 'Open-SubEthaBloomFilter', 'Measure-SubEthaBloomSize', 'New-SubEthaBlockedBloomFilter', 'Open-SubEthaBlockedBloomFilter', 'New-SubEthaHyperLogLog', 'Open-SubEthaHyperLogLog', 'New-SubEthaCountMinSketch', 'Open-SubEthaCountMinSketch', 'Measure-SubEthaSketchSize', 'New-SubEthaHistogram', 'Open-SubEthaHistogram', 'New-SubEthaRateLimiter', 'Open-SubEthaRateLimiter', 'New-SubEthaLruCache', 'Open-SubEthaLruCache', 'New-SubEthaReservoir', 'Open-SubEthaReservoir', 'New-SubEthaHandleTable', 'Open-SubEthaHandleTable', 'New-SubEthaTimePointTile', 'Open-SubEthaTimePointTile', 'New-SubEthaVersionChain', 'Open-SubEthaVersionChain', 'New-SubEthaVersionedSlab', 'Open-SubEthaVersionedSlab', 'New-SubEthaVersionedMap', 'Open-SubEthaVersionedMap', 'New-SubEthaLanedMap', 'Open-SubEthaLanedMap', 'New-SubEthaTopologyMap', 'Open-SubEthaTopologyMap', 'New-SubEthaGraph', 'Open-SubEthaGraph', 'New-SubEthaUniversal', 'Open-SubEthaUniversal', 'New-SubEthaTower', 'Open-SubEthaTower', 'New-SubEthaChannel', 'Open-SubEthaChannel', 'New-SubEthaAdaptiveQueue', 'New-SubEthaWorkQueue', 'Open-SubEthaWorkQueue', 'New-SubEthaKvMap', 'New-SubEthaQosPolicy', 'New-SubEthaTinyBloom', 'New-SubEthaFineBloom', 'New-SubEthaClock', 'New-SubEthaCausalClock', 'New-SubEthaSensSender', 'New-SubEthaSensReceiver', 'New-SubEthaLossKind', 'New-SubEthaLossBursts', 'New-SubEthaTiming', 'New-SubEthaRoundTripShape', 'New-SubEthaPeriodicity', 'New-SubEthaCapacity', 'New-SubEthaForecast', 'New-SubEthaPathChanges', 'New-SubEthaTcpBridgeClient', 'New-SubEthaTcpBridgeServer', 'New-SubEthaSelfSignedCert', 'New-SubEthaQuicBridgeClient', 'New-SubEthaQuicBridgeServer', 'Get-SubEthaTransport', 'Send-SubEthaItem', 'Receive-SubEthaItem')
    VariablesToExport = @()
    AliasesToExport = @('New-SEAtomic', 'Open-SEAtomic', 'New-SERegion', 'Open-SERegion', 'New-SECell', 'Open-SECell', 'New-SEVec', 'Open-SEVec', 'New-SESharedArc', 'Open-SESharedArc', 'New-SELazyValue', 'Open-SELazyValue', 'New-SEBitVec', 'Open-SEBitVec', 'New-SESpscRing', 'Open-SESpscRing', 'New-SEBroadcastRing', 'Open-SEBroadcastRing', 'New-SECapacityRing', 'Open-SECapacityRing', 'New-SELocaleRing', 'Open-SELocaleRing', 'New-SERing', 'Open-SERing', 'New-SEReorderWindow', 'New-SEStack', 'Open-SEStack', 'New-SEDeque', 'Open-SEDeque', 'New-SEPubSub', 'Open-SEPubSub', 'New-SELamportPair', 'New-SEFrameRegion', 'Open-SEFrameRegion', 'New-SEArena', 'Open-SEArena', 'New-SELinkedList', 'Open-SELinkedList', 'New-SESlab', 'Open-SESlab', 'New-SEBTreeMap', 'Open-SEBTreeMap', 'New-SEHashMap', 'Open-SEHashMap', 'New-SEMpscPool', 'New-SEMpmcGrid', 'New-SENotifierSet', 'New-SELeaderElection', 'Open-SELeaderElection', 'New-SEHolderTable', 'Open-SEHolderTable', 'New-SEHeartbeat', 'Open-SEHeartbeat', 'New-SEEpochBarrier', 'Open-SEEpochBarrier', 'New-SECondvar', 'Open-SECondvar', 'Wait-SECondition', 'New-SEFenceClock', 'Open-SEFenceClock', 'New-SEEpochs', 'Open-SEEpochs', 'New-SERWLock', 'Open-SERWLock', 'New-SESemaphore', 'Open-SESemaphore', 'New-SEOwnerLease', 'Open-SEOwnerLease', 'New-SEBloomFilter', 'Open-SEBloomFilter', 'Measure-SEBloomSize', 'New-SEBlockedBloomFilter', 'Open-SEBlockedBloomFilter', 'New-SEHyperLogLog', 'Open-SEHyperLogLog', 'New-SECountMinSketch', 'Open-SECountMinSketch', 'Measure-SESketchSize', 'New-SEHistogram', 'Open-SEHistogram', 'New-SERateLimiter', 'Open-SERateLimiter', 'New-SELruCache', 'Open-SELruCache', 'New-SEReservoir', 'Open-SEReservoir', 'New-SEHandleTable', 'Open-SEHandleTable', 'New-SETimePointTile', 'Open-SETimePointTile', 'New-SEVersionChain', 'Open-SEVersionChain', 'New-SEVersionedSlab', 'Open-SEVersionedSlab', 'New-SEVersionedMap', 'Open-SEVersionedMap', 'New-SELanedMap', 'Open-SELanedMap', 'New-SETopologyMap', 'Open-SETopologyMap', 'New-SEGraph', 'Open-SEGraph', 'New-SEUniversal', 'Open-SEUniversal', 'New-SETower', 'Open-SETower', 'New-SEChannel', 'Open-SEChannel', 'New-SEAdaptiveQueue', 'New-SEWorkQueue', 'Open-SEWorkQueue', 'New-SEKvMap', 'New-SEQosPolicy', 'New-SETinyBloom', 'New-SEFineBloom', 'New-SEClock', 'New-SECausalClock', 'New-SESensSender', 'New-SESensReceiver', 'New-SELossKind', 'New-SELossBursts', 'New-SETiming', 'New-SERoundTripShape', 'New-SEPeriodicity', 'New-SECapacity', 'New-SEForecast', 'New-SEPathChanges', 'New-SETcpBridgeClient', 'New-SETcpBridgeServer', 'New-SESelfSignedCert', 'New-SEQuicBridgeClient', 'New-SEQuicBridgeServer', 'Get-SETransport', 'Send-SEItem', 'Receive-SEItem')
    PrivateData = @{ PSData = @{ Tags = @('pwrs', 'powershell', 'ipc', 'shared-memory', 'cross-process', 'cmdlet', 'bindings'); LicenseUri = 'https://github.com/Variably-Constant/SubEtha/blob/main/LICENSE-MIT'; ProjectUri = 'https://github.com/Variably-Constant/SubEtha'; IconUri = 'https://raw.githubusercontent.com/Variably-Constant/SubEtha/main/assets/icon.png'; ReleaseNotes = 'A broadcast producer can wait for its readers. A consumer registers at the head, so anything published before it registered is lost to it and nothing reports that: the push succeeds, and a reader that started late looks exactly like one that is slow. WaitForConsumers closes that window and answers how many readers are present when the wait ends, so a shortfall is a number rather than a hang. Lag now answers $null instead of a number when the id names no live consumer, which covers an id past the table and one that has been given back; a script that only ever passes a registered id sees no change. The module also has a documentation surface it did not have: a reference generated from the module''s own help covering all 135 cmdlets and 118 classes, a page showing what each value actually looks like when a scenario is run against the built module, and a guide covering installing, choosing a structure, runspaces and lifetimes, bridging two hosts and troubleshooting. Every cmdlet, class, enum and method the module exports is reached by the Pester suite, and a gate suite fails the run when one is not: 181 tests pass in PowerShell 7.6.6 and Windows PowerShell 5.1 on Windows x64, and in PowerShell 7.6.5 on Ubuntu on Linux x64. Both native libraries ship in the one module folder.' } }
}