Skip to content

Commit

Permalink
oss
Browse files Browse the repository at this point in the history
  • Loading branch information
alixander committed Nov 15, 2022
0 parents commit cd47fc8
Show file tree
Hide file tree
Showing 15 changed files with 638 additions and 0 deletions.
1 change: 1 addition & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TALA is currently closed-source. For more information on licensing, please visit https://terrastruct.com/tala.
120 changes: 120 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# TALA

TALA is a diagram layout engine designed specifically for software architecture diagrams,
though it works well in other domains too. TALA is closed-source (for now). This
repository is primarily for installation instructions. You can also use this repository to
report issues, ask questions, and request features.

To learn more about TALA, please visit
[https://terrastruct.com/tala](https://terrastruct.com/tala).

To compare TALA with other layout engines, please visit
[https://text-to-diagram.com](https://text-to-diagram.com/?a=d2&layout_a=tala&b=d2&layout_b=dagre&example=chess).

## Rendering samples

You can see the `.d2` text for these in [./docs/d2](./docs/d2). Samples are
[generated](./ci/generate_samples.sh) through the CLI.

|<img src="./docs/assets/sample_1.svg" />|<img src="./docs/assets/sample_2.svg" />|<img src="./docs/assets/sample_3.svg" />|
|:-------------------------:|:-------------------------:|:-------------------------:|
|<img src="./docs/assets/sample_4.svg" />|<img src="./docs/assets/sample_5.svg" />|<img src="./docs/assets/sample_6.svg" />|

## Installation

```sh
curl -fsSL https://d2lang.com/install.sh | sh -s -- --tala --dryrun
# If things look good, install for real.
curl -fsSL https://d2lang.com/install.sh | sh -s -- --tala
```

You can also find binaries
[Releases](https://github.com/terarstruct/TALA/releases) page for Linux and MacOS, for
both AMD and ARM. Download the appropriate one for your OS to a directory
in your path. Windows coming soon.

### Post-install

Check that it was installed properly:

```sh
d2 layout tala
```

It should print out information about TALA. If not, please see troubleshooting steps.

### Use TALA

You are now ready to use TALA to layout your diagrams! Specify that D2 should use TALA by
setting the environment variable `D2_LAYOUT`.

```sh
D2_LAYOUT=tala d2 in.d2 out.svg
```

### Add API token (optional)

You may skip this step if you are just evaluating.

If you have an API token, copy and paste it into your environment variables. E.g.

```bash
export TSTRUCT_TOKEN = "tstruct_..."
```

## License keys

TALA is freely installable and locally runnable for evaluation. You'll need an API token
from your Terrastruct account to run it out of evaluation mode. Alternatively, if you
don't want to create an account, you can purchase a personal license key for TALA that
allows you to run TALA forever with access to updates for 12 months
[here](https://buy.stripe.com/bIYeXL3cT2Lr23e5ko). If you'd like to get the benefits of a
paid Terrastruct account at any time after, your license key will allow that.

## Troubleshooting

### TALA not found

```sh
which d2plugin-tala
```

If this does not return a directory, then `d2plugin-tala` is not in your path.

```sh
echo $PATH
```

Please move the downloaded binary to one of those locations.

### License warning prints even with API token

In the same terminal that you're running `d2` on, run

```sh
echo $TSTRUCT_TOKEN
```

If it is not found, then your environment variable has not been set in your shell. Make
sure you add it to the appropriate shell config file and `source` it in the running
terminal.

### Other

Please open an Issue describing what you're running into and we're happy to help. If you'd
like to remain anonymous/private, feel free to email us at [email protected]

## FAQ

### Does TALA use the internet?

The TALA plugin do not collect telemetry or use the internet in any way except to ping to
check the status of a license. This is only done when necessary, e.g. if you purchased a
month subscription, TALA will ping at the start of the next month and renew automatically
if the subscription is ongoing. If you purchased a year, it won't ping for a year. The
only data that's sent in these pings is the API token itself. No diagrams or anything
else leaves your computer.

### Others

Full FAQ at [https://terrastruct.com/tala](https://terrastruct.com/tala).
18 changes: 18 additions & 0 deletions ci/generate_samples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/sh
set -eu
cd -- "$(dirname "$0")/.."

THEME_INDEX=0

# alternate between cool and warm
themes=(0 100 1 102 4 104 5 105 6)

for f in ./docs/d2/*.d2
do
echo "Processing $f"
filename=$(basename -- "$f")
filename="${filename%.*}"
D2_LAYOUT=tala d2 --theme=${themes[$THEME_INDEX]} --debug $f ./docs/assets/${filename}.svg

let THEME_INDEX=${THEME_INDEX}+1
done
66 changes: 66 additions & 0 deletions docs/assets/sample_1.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 31 additions & 0 deletions docs/assets/sample_2.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 31 additions & 0 deletions docs/assets/sample_3.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions docs/assets/sample_4.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions docs/assets/sample_5.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions docs/assets/sample_6.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions docs/d2/sample_1.d2
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
runner: JobRunner {
shape: class

-start: datetime
-end: datetime
-running_server: string
-threads: int
-manager: JobsManager
+pipeline: Pipeline

+setPipeline(Pipeline p): void
+kickoff(threads int): bool
}

jobsUI: JobRunner UI {
kickoff
halt
}

batch: Batch {
manager: BatchManager {
shape: class
-num: int
-timeout: int
-pid

+getStatus(): Enum
+getJobs(): "Job[]"
+setTimeout(seconds int)
}
systemd: Systemd
selenium: Selenium

systemd -> manager: Ensure alive
manager -> selenium: Run job
}

jobsUI -> runner: Kick off
runner -> batch.manager: Queue jobs
44 changes: 44 additions & 0 deletions docs/d2/sample_2.d2
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
logs: {
shape: page
style.multiple: true
}
user: AT&T Customer {shape: person}
network: Network {
tower: Cell Tower {
satellites: {
shape: stored_data
style.multiple: true
}
transmitter

satellites -> transmitter
satellites -> transmitter
satellites -> transmitter
}
processor: Data Processor {
storage: Storage {
shape: cylinder
style.multiple: true
}
}
portal: Online Portal {
UI
}

tower.transmitter -> processor: phone logs
}
server: API Server

user -> network.tower: Make call
network.processor -> server
network.processor -> server
network.processor -> server

server -> logs
server -> logs
server -> logs: persist

server -> network.portal.UI: display
user -> network.portal.UI: access {
style.stroke-dash: 3
}
31 changes: 31 additions & 0 deletions docs/d2/sample_3.d2
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
SSR: Server side render {
templates: User defined templates

tests: Validation tests

engine: Rendering Engine\n API {
ingestion: Ingestion module {
shape: hexagon
}
fetch: Data fetching module {
shape: hexagon
}
schema: Schema version module {
shape: hexagon
}
}
next: NextJS
db: Data

templates -> engine.ingestion
engine.fetch <-> db: Integrate user data
engine.schema <-> db: Get version

engine <-> tests
}

build: Final build {
html: Rendered HTML
}

SSR.engine -> SSR.next -> build.html
48 changes: 48 additions & 0 deletions docs/d2/sample_4.d2
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
payment

AWS {
orchestrator: Orchestrator
airflow: Apache Airflow {
queue1: Queue 1 {
shape: queue
}
queue2: Queue 2 {
shape: queue
}
queue3: Queue 3 {
shape: queue
}
queue4: Queue 4 {
shape: queue
}
}

orchestrator -> airflow.queue1
orchestrator -> airflow.queue2
orchestrator -> airflow.queue3
orchestrator -> airflow.queue4
}

payment -> AWS.orchestrator

backup: Data backup

AWS.airflow.queue3 -> backup
AWS.airflow.queue4 -> backup

data: Data warehouse

AWS.airflow.queue1 -> data
AWS.airflow.queue2 -> data

local: On-prem backups {
queue1: Queue 1 {
shape: queue
}
queue2: Queue 2 {
shape: queue
}
}

backup -> local.queue1
backup -> local.queue2
73 changes: 73 additions & 0 deletions docs/d2/sample_5.d2
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
tenant: Offsite Tenant {
style.shadow: true

accountant: Accountant
security: Security
janitor: Janitor
}

tenant.accountant -> Quickbooks

auditors: Auditors

auditors -> Quickbooks
auditors -> IRS
Quickbooks -> Clients

dataroom: E335 Data Room {
style.shadow: true
style.fill: "#e9edef"
style.stroke-width: 2

whitelist: Whitelisted Server {
shape: rectangle
style.stroke-dash: 10
style.stroke: "#000E3D"

routing: Routing blocker
headers: Add header tokens
}

platform: Microsoft Windows Fleet {
style.stroke-dash: 4
style.stroke: "#000E3D"
build
}
whitelist <-> platform: Maintain connection {style.stroke-width: 4}
}

auditors -> dataroom.platform.build
auditors -> dataroom.whitelist.routing
tenant.accountants -> dataroom

logging: Web based logger

production: Data for prod {
style.shadow: true

network: Network availability {
style.stroke-dash: 10
style.stroke: "#000E3D"

instances: App instances {
style.multiple: true
}

db: App DBs {
shape: cylinder
}

secrets: AWS Secrets

containers: Docker containers

instances -> db
instances -> secrets
containers -> db
containers -> secrets
}
}

dataroom.whitelist.routing -> production.network.instances
dataroom.whitelist.headers -> production.network.instances
production.network.instances -> backups
Loading

0 comments on commit cd47fc8

Please sign in to comment.