Skip to content

Plume is a code representation benchmarking library with options to extract the AST from Java bytecode and store the result in various graph databases.

License

Notifications You must be signed in to change notification settings

plume-oss/plume

Folders and files

NameName
Last commit message
Last commit date

Latest commit

586b874 · Mar 1, 2022
Jan 6, 2022
Jan 25, 2022
Mar 1, 2022
Feb 7, 2022
Feb 7, 2022
Jan 4, 2022
Mar 1, 2022
Aug 7, 2020
Jan 6, 2022
Mar 1, 2022
Nov 3, 2020
Feb 7, 2022
Jan 6, 2022
Jan 4, 2022

Repository files navigation

Plume is a language front-end to construct an intermediate representation called a code-property graphs from JVM bytecode. Plume is graph database agnostic and can store code-property graphs to multiple graph databases.

License GitHub Actions codecov

Important

Plume is the original implementation of jimple2cpg. The frontend on Joern project is optimized around OverflowDB and is much more lightweight. This is project focuses on experimenting with incremental dataflow analysis and comparing database backend performance.

Versions < 0.6.3 of Plume were Kotlin based but versions from 1.0.0 onwards have been moved to a Scala implementation for better interfacing with the CPG schema library.

Quickstart

One can run Plume from the plume binary which will use OverflowDB as the graph database backend if no config is found. If one would like to configure another backend then the example driver.yaml can be adjusted to include the use of another database by uncommenting and editing the respective fields given by the skeleton. E.g. using Neo4j:

database: Neo4j
params:
  hostname: localhost
  port: 7687
  username: neo4j
  password: neo4j
  txMax: 25

For more documentation and basic guides, check out the project homepage or the ScalaDoc.

Community

  • If you have any questions or want to be involved then check out our discussions page.
  • Joern's Discord. Note, this will give you temporary membership to the server. Once joined you can obtain permanent membership by being assigned role if necessary.
  • Plume is primarily maintained by David Baker Effendi

Adding Plume as a Dependency

Replace X.X.X with the desired version on JitPack.

libraryDependencies ++= Seq(
  com.github.plume-oss % plume % X.X.X
)

Don't forget to include the JCenter and JitPack repository in your build.sbt.

resolvers += "jitpack" at "https://jitpack.io"

Building from Source

Plume releases are available on JitPack. If downloading from JitPack is not an option, or you would like to depend on a modified version of Plume, you can build Plume locally and use it as an unmanaged dependency. JDK version 11 or higher is required.

git clone https://github.com/plume-oss/plume.git
cd plume
sbt stage

This will build target/scala-2.13/plume_2.13-X.X.X.jar which can be imported into your local project.

Logging

Plume uses SLF4J as the logging fascade.

Sponsored by

Amazon Science