In release 0.17 (currently in progress) there has been a large amount of refactoring to prepare the `o.b.base` and `o.b.crypto` packages to become independent modules/JARs in the following release. Those packages will still contain some deprecated methods that depend on other internal packages and external modules. Those deprecated methods will be removed in release 0.18 when `o.b.base` and `o.b.crypto` are moved to their own modules.
````mermaid
flowchart TD
E[examples] --> CORE
IT[integration-test] --> CORE
T[tools] --> CORE
FX[wallettemplate] --> CORE
WT[wallettool] --> CORE
subgraph CORE [bitcoinj-core]
W[o.b.wallet] --> CO[o.b.core]
CO --> W
W --> CR
CO --> CR
CO --> B[o.b.base]
CR[o.b.crypto] --> B
end
CORE --> G[Guava]
CORE --> P[ProtoBuf]
CORE --> BC[Bouncy Castle]
CORE .-> S[slf4j]
CORE .-> A[jcip-annotations]
classDef external fill:#999;
class G,S,A,BC,P external;
````
## bitcoinj 0.18 (current plan)
In this release it will be possible to use the `bitcoinj-base` module as a standalone module with no external dependencies. `bitcoinj-crypto` will be able to be used with a single dependency on the **Bouncy Castle*** library.
````mermaid
flowchart TD
E[examples] --> CORE
IT[integration-test] --> CORE
T[tools] --> CORE
FX[wallettemplate] --> CORE
WT[wallettool] --> CORE
subgraph CORE [bitcoinj-core]
W[o.b.wallet] --> CO[o.b.core]
CO --> W
end
CORE --> CRYPTO
subgraph CRYPTO [bitcoinj-crypto]
CR[o.b.crypto]
end
CRYPTO --> BASE
CRYPTO --> BC[Bouncy Castle]
subgraph BASE [bitcoinj-base]
B[o.b.base]
end
CORE --> G[Guava]
CORE --> P[ProtoBuf]
CORE .-> S[slf4j]
CORE .-> A[jcip-annotations]
classDef external fill:#999;
class G,S,A,BC,P external;
````
## bitcoinj 0.19 (proposed)
In a proposed 0.19 release, we hope to do the following:
1. enhance `bitcoin-crypto` to contain a "provider" API so that core crypto functions that it needs can be provided by either Bouncy Castle _or_`libsecp256k1`. We also hope to completely eliminate dependencies on Guava for all modules.
2. Separate the current ProtoBuf-based wallet implementation into it's own module. This will require creating a `Wallet` interface in core.
3. Eliminate dependencies on Guava for all modules.
Stretch goal:
4. Alternate wallet implementation, perhaps using **SQLite**.