Sleek, intuitive, and powerful Blockchain Integrated Development, and Analysis Environment.
Economics | Ergonomics | Aesthetics
Convention: In this document, we will use the terms 'platform' and 'blockchain' interchangeably, with the term 'chain' occasionally used as well.
Blockchain Development introduces a new development paradigm that requires a new set of tools and workflows i.e. Explorer, Wallet and Editor (IDE). Context switching between these tools is expensive in terms of time and space which is a major productivity killer. Cohesive is a single application that provides a unified development environment for Blockchain development.
Cohesive is a meta-tool for developing blockchain applications. It offers a UI framework, plugin store, simple editor, and IDE for easy and efficient development on multiple platforms.
Note: This project is in its early stages of development. The project is not yet ready for production use.
The quickest way to get started is to use this template project. It contains all the necessary files and configurations to get you started.
Cohesive uses encapsulated slot APIs, a pattern akin to Compose' Material components' slot APIs for its customization. Slots leave gaps in the UI for the developer to fill as they wish for the specific Platform implementation. The template project contains a sample implementation of the encapsulated slot APIs for the Ethereum Platform.
/**
* This code defines a [MainView] class that extends the [CohesiveView] class and is annotated with the [Cohesive] annotation.
* The [Cohesive] annotation takes three arguments:
*
* - [platform]: a string specifying the platform that the view is designed for. In this case, the platform is "Ethereum".
* - [version]: a string specifying the version of the platform. In this case, the version is "1.0.0".
* - [nets]: an array of [Net] objects, each of which specifies a network and its corresponding URL.
* In this case, there are two networks specified: "mainnet" and "ropsten".
*
* The [MainView] class also has four abstract methods: [Explorer], [Wallet] and others, which can be implemented by any class that extends [MainView].
* These methods are annotated with the [Composable] annotation, which indicates that they are meant to be used with the Compose framework.
*/
@Cohesive(
platform = "Ethereum",
version = "1.0.0",
nets =
[
Net(
k = "mainnet",
v = "https://mainnet.infura.io/v3/your-api-key"
),
Net(
k = "ropsten",
v = "https://ropsten.infura.io/v3/your-api-key"
),
],
)
class MainView : CohesiveView {
@Composable
override fun Explorer() {
//TODO Your Ethereum Explorer implementation goes here
}
@Composable
override fun Wallet() {
//TODO Your Ethereum Wallet implementation goes here
}
}
More information can be got here.
./gradlew :cmpe:desktop:run
./gradlew :cmpe:desktop:package
# outputs are written to cmpe/desktop/build/compose/binaries
./gradlew :cmpe:web:jsBrowserRun
./gradlew :cmpe:web:jsBrowserDistribution
# and then open index.html (build/distributions)
This repository contains a Kotlin Multiplatform project with apps and libraries for multiple platforms:
- Web Application
- Desktop Application
- Android Application
- iOS Application (WIP)
- Multiplatform
- Multi-Blockchain
- Platform Plugin Store (primary, secondary and tertiary)
- Simple Editor
- IDE
- UI Framework(s)
Always building, always improving.
Simple, intuitive, and powerful.
All contributions to Cohesive are welcome. Before opening a PR, please submit an issue detailing the bug or feature. When opening a PR, please ensure that your contribution builds on the KMM toolchain, has been linted with ktfmt <GOOGLE (INTERNAL)>
, and contains tests when applicable. For more information, please see the contribution guidelines.