Confluence

Documentation Tool

Confluence

Overview

Confluence is an enterprise wiki platform developed by Atlassian. It integrates complete Jira connectivity, team collaboration features, and project documentation to optimize organization-wide knowledge management.

Details

Confluence was developed by Atlassian in 2004 and has grown as a pioneer in enterprise collaboration wikis. The web-based platform provides integrated document creation, knowledge sharing, and project management. Native integration with Jira enables complete connectivity between project management and documentation workflows. Real-time collaborative editing allows multiple team members to simultaneously edit and comment on documents. The macro system enables dynamic content, external system integration, and custom functionality. Enterprise features include SAML SSO, two-factor authentication, automated user provisioning, and advanced administrative controls. Whiteboard functionality enables real-time brainstorming and diagram creation. As of 2025, it has been adopted by many enterprise companies including Docker, Dropbox, and Roblox, functioning as organizational information infrastructure. The Atlassian Forge platform also enables custom app development and third-party integration.

Advantages and Disadvantages

Advantages

  • Native Jira Integration: Complete connectivity between project management and documentation for unified management
  • Enterprise-Grade Security: Complete SAML SSO, enforced two-factor authentication, and access control
  • Real-time Collaboration: Efficient teamwork through simultaneous editing, commenting, and notifications
  • Rich Macro Functionality: Dynamic embedding of Jira issues, calendars, and external content
  • Scalability: Administrative features and performance for large-scale organizations
  • Atlassian Ecosystem: Integration with other products like Bitbucket and Trello
  • Customizability: App development and API integration through Forge platform

Disadvantages

  • Learning Curve: Time required for initial mastery due to rich functionality
  • License Costs: High license fees when using enterprise features
  • Performance: Decreased operating speed with large amounts of data or complex pages
  • UI Complexity: Complexity of administrative screens and configuration items
  • Vendor Lock-in: Dependency on Atlassian ecosystem
  • Export Limitations: Constraints when migrating to other platforms

Key Links

Usage Examples

Basic Page Structure

# Project Plan

## Project Overview
**Start Date**: July 1, 2025  
**Expected End Date**: December 31, 2025  
**Project Manager**: John Doe

## Integrated Jira Issues Display
{jira}project = "PROJ" AND status = "In Progress"{jira}

## Task List
- [x] Requirements definition completed
- [x] Design document created
- [ ] Implementation started
- [ ] Testing conducted

## Team Information
| Role | Person | Contact |
|------|--------|---------|
| PM | John Doe | [email protected] |
| Lead Developer | Jane Smith | [email protected] |
| QA | Bob Johnson | [email protected] |

## Attachments
- [Design_Document.pdf]
- [Requirements_Specification.docx]

Utilizing Jira Issue Macros

<!-- Issues list for specific project -->
{jira:url=https://company.atlassian.net|project=PROJ}

<!-- Issues assigned to current user -->
{jira}assignee = currentUser() AND status != Done{jira}

<!-- Specific JQL query results -->
{jira}project = "WEB" AND component = "Frontend" AND fixVersion = "2.0"{jira}

<!-- Single issue detail display -->
{jira:PROJ-123}

<!-- Issue creation form -->
{jira:project=PROJ|type=Task|priority=High}create{jira}

Creating Page Templates

<!-- Meeting Minutes Template -->
<h1>Meeting Minutes - {Date}</h1>

<table>
<tr><th>Item</th><th>Content</th></tr>
<tr><td>Date/Time</td><td>{Enter date and time}</td></tr>
<tr><td>Attendees</td><td>{List of attendees}</td></tr>
<tr><td>Location</td><td>{Meeting room or online}</td></tr>
</table>

<h2>Agenda</h2>
<ol>
<li>{Agenda item 1}</li>
<li>{Agenda item 2}</li>
<li>{Agenda item 3}</li>
</ol>

<h2>Discussion Content</h2>
{Record discussion content}

<h2>Decisions Made</h2>
{decisions}
<table>
<tr><th>Decision</th><th>Assignee</th><th>Due Date</th><th>Jira Issue</th></tr>
<tr><td>{Decision 1}</td><td>{Assignee}</td><td>{Due Date}</td><td>{jira:issue-key}</td></tr>
</table>
{decisions}

<h2>Action Items for Next Meeting</h2>
{tasks}
- [ ] {Action 1} - {Assignee} - {Due Date}
- [ ] {Action 2} - {Assignee} - {Due Date}
{tasks}

Atlassian Forge App Development

# manifest.yml - Confluence app configuration
modules:
  confluence:contentAction:
    - key: page-enhancer
      resource: main
      resolver:
        function: resolver
      render: native
      title: Page Enhancement Tool

  confluence:macro:
    - key: custom-chart
      resource: chart-macro
      resolver:
        function: chart-resolver
      render: native
      title: Custom Chart

  function:
    - key: resolver
      handler: index.handler
    - key: chart-resolver
      handler: chart.handler

resources:
  - key: main
    path: src/frontend/index.jsx
  - key: chart-macro
    path: src/chart/index.jsx

permissions:
  scopes:
    - read:confluence-content.summary
    - write:confluence-content
    - read:confluence-space.summary
    - read:jira-work
  external:
    fetch:
      backend:
        - https://api.example.com

app:
  runtime:
    name: nodejs22.x
  id: ari:cloud:ecosystem::app/your-app-id

Utilizing Confluence REST API

// Confluence API usage in Forge apps
import { requestConfluence, route } from '@forge/api';

// Get page content
async function getPageContent(pageId) {
  const response = await requestConfluence(route("/wiki/api/v2/pages/" + pageId + "?body-format=atlas_doc_format"), {
    headers: {
      'Accept': 'application/json'
    }
  });
  
  if (!response.ok) {
    throw new Error(`Page retrieval error: ${response.status}`);
  }
  
  return await response.json();
}

// Create a page
async function createPage(spaceId, title, content) {
  const pageData = {
    spaceId: spaceId,
    status: 'current',
    title: title,
    body: {
      representation: 'atlas_doc_format',
      value: content
    }
  };
  
  const response = await requestConfluence(route("/wiki/api/v2/pages"), {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(pageData)
  });
  
  return await response.json();
}

// Add labels to page
async function addLabelsToPage(pageId, labels) {
  const labelData = labels.map(label => ({
    prefix: 'global',
    name: label
  }));
  
  const response = await requestConfluence(route`/wiki/api/v2/pages/${pageId}/labels`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ results: labelData })
  });
  
  return await response.json();
}

Space Configuration and Access Management

// Space configuration screen using Forge UI
import ForgeUI, { render, SpaceSettings, Text, Select, Option, Button, useState } from '@forge/ui';

const SpaceConfigApp = () => {
  const [accessLevel, setAccessLevel] = useState('team');
  const [notifications, setNotifications] = useState(true);
  
  const handleSaveSettings = async () => {
    // Save space configuration
    await saveSpaceConfiguration({
      accessLevel,
      notifications
    });
  };
  
  return (
    <SpaceSettings>
      <Text>Space Configuration</Text>
      
      <Select 
        label="Access Level"
        value={accessLevel}
        onChange={setAccessLevel}
      >
        <Option label="Team Only" value="team" />
        <Option label="Department Wide" value="department" />
        <Option label="Company Wide" value="company" />
      </Select>
      
      <Button
        text="Save Settings"
        onClick={handleSaveSettings}
      />
    </SpaceSettings>
  );
};

export const run = render(<SpaceConfigApp />);

Automation and Workflows

// Confluence automation rules (Automation)
{
  "name": "Automatic processing when new page is created",
  "trigger": {
    "type": "page.created",
    "spaceKey": "PROJ"
  },
  "conditions": [
    {
      "type": "page.hasLabel",
      "label": "meeting-notes"
    }
  ],
  "actions": [
    {
      "type": "create.jira.issue",
      "project": "PROJ",
      "issueType": "Task",
      "summary": "Meeting Follow-up: {{page.title}}",
      "description": "Follow-up task based on meeting minutes\n\nPage link: {{page.tinyUrl}}"
    },
    {
      "type": "notify.user",
      "users": ["@project-manager"],
      "message": "New meeting minutes created: {{page.title}}"
    }
  ]
}

Whiteboard and Collaboration

<!-- Using whiteboard macro -->
{whiteboard:title=Project Design|template=user-journey}

<!-- Utilizing comment functionality -->
<ac:structured-macro ac:name="info">
  <ac:rich-text-body>
    <p>If you have questions about this section, please contact 
    <ac:link>
      <ri:user ri:account-id="user-123" />
    </ac:link>
    via comments.</p>
  </ac:rich-text-body>
</ac:structured-macro>

<!-- Shared task lists -->
{task-list}
- [ ] UI design review (@designer, 2025-07-15)
- [ ] API endpoint implementation (@backend-dev, 2025-07-20)
- [x] Database design completed (@database-admin, 2025-07-10)
{task-list}